新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > HIVE注冊(cè)表恢復(fù)出廠設(shè)置

        HIVE注冊(cè)表恢復(fù)出廠設(shè)置

        作者: 時(shí)間:2011-02-24 來(lái)源:網(wǎng)絡(luò) 收藏

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

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


        如何恢復(fù)注冊(cè)表?幫助里面搜索一下IOCTL_HAL_GET_HIVE_CLEAN_FLAG關(guān)鍵字。Filesys.exe啟動(dòng)時(shí)候會(huì)使用這個(gè)命令詢(xún)問(wèn)oem是否刪除重建注冊(cè)表,返回TRUE就是執(zhí)行刪除了。


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



        下面是實(shí)現(xiàn)。


        eboot增加了下面命令


        C) Clean SYS Hive register: TRUE
        c) Clean USER Hive register: TRUE


        用來(lái)設(shè)置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;


        }



        這個(gè)宏IMAGE_SHARE_ARGS_UA_START就是指向0xa0020800.eboot也往同一個(gè)地址設(shè)置即可.



        Ioctl_tab.h


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


        增加新的ioctl:


        // 清除hive注冊(cè)表


        {IOCTL_HAL_GET_HIVE_CLEAN_FLAG, 0, OALIoCtlBGetHiveCleanFlag },


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


        評(píng)論


        相關(guān)推薦

        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        主站蜘蛛池模板: 彩票| 宝坻区| 远安县| 商河县| 富阳市| 铁岭市| 漾濞| 武胜县| 岚皋县| 搜索| 丽水市| 平果县| 钦州市| 栾城县| 天全县| 夏河县| 宾川县| 江安县| 钟山县| 博爱县| 大庆市| 体育| 马公市| 呼图壁县| 军事| 玉龙| 陆川县| 安图县| 隆林| 浦北县| 北宁市| 玉树县| 防城港市| 正镶白旗| 略阳县| 外汇| 尚志市| 嘉祥县| 内江市| 永靖县| 新源县|