<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > HIVE注冊表恢復出廠設置

          HIVE注冊表恢復出廠設置

          作者: 時間:2011-02-24 來源:網(wǎng)絡 收藏

          Hive組件具有保存注冊表功能。 就是使用了hive, 注冊表修改后可以保存。

          有時候也碰上想恢復注冊表的情形。 我在調試一個沒有l(wèi)cd的設備, 我使用pocket controller工具遠程抓屏, 如果想每次都能使用這個工具,就會需要恢復注冊表出廠設置。(注冊表不是引起這個的原因,但卻是個解決辦法, 原因具體就不說了)。


          如何恢復注冊表?幫助里面搜索一下IOCTL_HAL_GET_HIVE_CLEAN_FLAG關鍵字。Filesys.exe啟動時候會使用這個命令詢問oem是否刪除重建注冊表,返回TRUE就是執(zhí)行刪除了。


          Eboot可 以傳遞參數(shù)給nk,其實也不會多復雜, 雙方明確參數(shù)所在區(qū)域和參數(shù)包含意義就可以傳遞了。比如我的系統(tǒng)里面,0xA0020800就是參數(shù)區(qū)域。 我在 eboot里面菜單里面增加一個bool參數(shù)bHiveClean的設置命令, 然后將這個參數(shù)告訴內核。 Oal在OEMInit()里面也訪問這個區(qū) 域, 獲得參數(shù), 根據(jù)參數(shù)設置標志位,通知filesys.exe執(zhí)行刪除動作.



          下面是實現(xiàn)。


          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 hivern")));


          else


          RETAILMSG(1, (TEXT("OEM: Not cleaning system hivern")));



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


          }


          else if (*pdwFlags == HIVECLEANFLAG_USERS) {


          if(pBspArgs->bUserHiveClean)


          RETAILMSG(1, (TEXT("OEM: cleaning user hivern")));


          else


          RETAILMSG(1, (TEXT("OEM: Not cleaning user hivern")));


          *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 },


          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();