出厂设置的恢复—HIVE注册表

时间:2011-09-04

  hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。另外一个是Windows注册表文件。Hive组件具有保存注册表功能,使用了hive, 注册表修改后可以保存。

  相信大家对Windows系统的注册表(regiSTry)一定都不陌生了,我们可以用系统提供的注册表编辑器(regedit)来访问和修改注册表中的数据。在操作注册表的时候,想必大家也碰上想恢复注册表的情形。

    例如,我在调试一个没有lcd的设备, 我使用pocket controller工具远程抓屏, 如果想每次都能使用这个工具,就会需要恢复注册表出厂设置。(注册表不是引起这个的原因,但却是个解决办法, 原因具体就不说了)。

  那么如何恢复注册表?

    在帮助里面搜索一下IOCTL_HAL_GET_HIVE_CLEAN_FLAG关键字。Filesys.exe启动时候会使用这个命令询问oem是否删除重建注册表,返回TRUE就是执行删除了。

   Eboot

  Eboot可 以传递参数给nk,其实也不会多复杂, 双方明确参数所在区域和参数包含意义就可以传递了。比如我的系统里面,0xA0020800就是参数区域。我在 eboot里面菜单里面增加一个bool参数bHiveClean的设置命令, 然后将这个参数告诉内核。 Oal在OEMInit()里面也访问这个区 域, 获得参数, 根据参数设置标志位,通知filesys.exe执行删除动作。

  下面是实现eboot增加了下面命令

  C) Clean SYS Hive register: TRUE

  c) Clean USER Hive register: TRUE

  用来设置bSysHiveClean和bUserHiveClean变量。

  oal部分:

  Ioctl.c

  --------

  //

  //   Function:   OALIoCtlBGetHiveCleanFlag

  //

  //   This function is Get the Clean Hive Clean Flage

  //

  BOOL OALIoCtlBGetHiveCleanFlag(

  UINT32 code, VOID *lpInBuf , UINT32 nInBufSize, VOID *lpOutBuf,        UINT32 nOutBufSize , UINT32 *pOutSize)

  {

  DWORD *pdwFlags;

  BOOL *pfClean;

  BSP_ARGS * pBspArgs = (BSP_ARGS *)IMAGE_SHARE_ARGS_UA_START;

  BOOL Flage = 0;

  if (!lpInBuf || (nInBufSize != sizeof(DWORD)) || !lpOutBuf || (nOutBufSize != sizeof(BOOL))) {

  NKSetLastError(ERROR_INVALID_PARAMETER);

  return FALSE;

  }

  pdwFlags = (DWORD *)lpInBuf;

  pfClean = (BOOL*)lpOutBuf;

  if (*pdwFlags == HIVECLEANFLAG_SYSTEM) {

  if(pBspArgs->bSysHiveClean)

  RETAILMSG(1, (TEXT("OEM: cleaning system hive\r\n")));

  else

  RETAILMSG(1, (TEXT("OEM: Not cleaning system hive\r\n")));

  *pfClean = (pBspArgs->bSysHiveClean==TRUE);

  }

  else if (*pdwFlags == HIVECLEANFLAG_USERS) {

  if(pBspArgs->bUserHiveClean)

  RETAILMSG(1, (TEXT("OEM: cleaning user hive\r\n")));

  else

  RETAILMSG(1, (TEXT("OEM: Not cleaning user hive\r\n")));

  *pfClean = (pBspArgs->bUserHiveClean==TRUE);

  }

  return TRUE;

  }

  这个宏IMAGE_SHARE_ARGS_UA_START就是指向0xa0020800.eboot也往同一个地址设置即可。

  Ioctl_tab.h

  ----------------

  增加新的ioctl:

  // 清除hive注册表

  {IOCTL_HAL_GET_HIVE_CLEAN_FLAG,   0, OALIoCtlBGetHiveCleanFlag     },


  
上一篇:Windows CE内核启动分解解析
下一篇:特种嵌入式平板电脑在肉类加工的技术应用

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料