新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Windows CE下的注冊表簡介

        Windows CE下的注冊表簡介

        作者: 時間:2011-02-25 來源:網絡 收藏

        與桌面Windows一樣,Windows CE也使用注冊表(Registry)來保存應用程序、驅動程序和用戶的設定以及其他一些配置信息。Windows CE注冊表也采用樹形結構來管理配置信息,由于Windows CE注冊表的結構和功能與桌面Windows幾乎一樣,在這里就不詳細介紹了,讀者可以參考其它關于注冊表的資料。
        Windows CE支持四個根鍵,描述如下:


        鍵名 描述
        HKEY_LOCAL_MACHINE 硬件和驅動配置數據
        HKEY_CURRENT_USER 用戶配置數據
        HKEY_CLASSES_ROOT OLE和文件類型匹配配置數據
        HKEY_USERS 適用于所有用戶的數據


        由于系統的特點,一些設備是沒有外存的。因此Windows CE的注冊表提供了兩種實現方式:基于RAM的注冊表(RAM-Based Registry)和基于Hive的注冊表(Hive-Based Registry)。我們可以選擇在Windows CE中使用任何一種注冊表,注冊表類型對于用戶和應用程序來說是透明的。


        ◎ 基于RAM的注冊表
        正如其名,基于RAM的注冊表把整個注冊表作為一個對象存儲堆存放在系統的內存中。這意味著如果對系統進行冷啟動或者系統斷電,對注冊表的所有改動都會丟失。
        如果使用基于RAM的注冊表,對注冊表的讀寫訪問操作會變得非常高效。因此基于RAM的注冊表比較適用于沒有外部存儲,而且有電池保存內存數據(battery-backed RAM)的設備。如果有外存且經常冷啟動的設備采用基于RAM的注冊表,則需要在系統斷電的時候對注冊表進行保存,等系統再次啟動時對保存的注冊表進行還原。


        Windows CE提供了兩種方法用來斷電保存基于RAM的注冊表:


        1. Windows CE提供了兩個系統API用來保存和還原整個注冊表,它們的原形如下:
        BOOL RegCopyFile(
        LPCWSTR lpszFile // 保存注冊表信息的文件的名字
        );
        BOOL RegRestoreFile(
        LPCWSTR lpszFile // 保存注冊表信息的文件的名字
        );
        如果要保存和恢復注冊表,我們只需要在系統斷電的時候調用RegCopyFile函數將整個注冊表保存為外存上的一個文件。當系統重新啟動時,我們再調用RegRestoreFile函數將文件全部讀出RAM中,然后再熱啟動系統,我們保存得注冊表就可以生效了。值得注意的是這次熱啟動是必須的,因為只有在系統啟動的時候才會去檢測RegRestoreFile放在RAM里的注冊表信息。這種方法的優點是完全可以使用應用程序來實現基于RAM的注冊表的保存,而且這種方法相對簡單。但是此方法的缺點是需要兩次啟動。因此效率相對比較低。


        2. 第二種方法需要OEM的參與,OEM可以在BSP的OAL層中實現WriteRegistryToOEM和ReadRegistryFromOEM兩個函數,它們的聲明為:
        DWORD ReadRegistryFromOEM(
        DWORD dwFlags, // 參數, REG_READ_BYTES_START表示讀新的注冊表
        LPBYTE lpData, // 指向注冊表數據的緩沖區,由OS分配
        DWORD cbData // 緩沖區的大小
        );
        BOOL WriteRegistryToOEM(
        DWORD dwFlags, // 參數,REG_WRITE_BYTES_START表示寫新的注冊表
        LPBYTE lpData, // 指向注冊表數據的緩沖區,由OS分配
        DWORD cbData // 緩沖區的大小,0表示到達注冊表尾部
        );
        Windows CE會在系統啟動和關閉的時候調用這兩個函數來保存和恢復注冊表。此種方法雖然可以避免兩次啟動,但是困難的地方是ReadRegistryFromOEM函數的實現比較困難,因為在系統啟動的時候,塊設備驅動和文件系統的驅動都還沒有加載,因此不能使用CreateFile,ReadFile這樣的文件系統API來實現ReadRegistryFromOEM函數,只能使用一些更底層的操作來實現。

        ◎ 基于Hive的注冊表
        自從Windows CE 4.0之后,Windows CE提供了基于Hive的注冊表。基于Hive的注冊表把注冊表數據存放在文件系統的文件上,這種文件被稱作蜂箱Hive。這就意味著不再需要在系統斷電和啟動時進行保存恢復注冊表操作。
        Hive是注冊表中的一組鍵,子鍵和值。Hive是文件系統上表現為單個文件。Windows CE中有三種Hive。
        類型 文件 描述
        Boot hive ROM中的Boot.hv HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT, HKEY_USERS中的所有數據。只在啟動時使用。
        System hive 由OEM決定 (通常是System.hv) HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT, HKEY_USERS中的所有數據。包含設備范圍內不隨著用戶改變而改變的數據。
        User hive User.hv HKEY_CURRENT_USER下的所有數據。 包含用戶特有的設置,每個用戶都有一個單獨的User.hv。
        基于Hive的注冊表適用于對于有永久存儲并且需要經常冷啟動的設備。我們也可以看到,基于Hive的注冊表把系統數據和用戶數據分開存放,這就意味著基于Hive的注冊表還提供多用戶支持。對于每一個用戶,可以提供不同的User.hv,當用戶登錄時加載相應的User.hv,從而達到多用戶目的。

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


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 内丘县| 东乌珠穆沁旗| 万源市| 阳东县| 鄂托克旗| 沾益县| 闸北区| 扎兰屯市| 清水河县| 阿尔山市| 宝山区| 广宗县| 云林县| 贵州省| 福泉市| 滁州市| 陈巴尔虎旗| 新建县| 兴海县| 宜城市| 大连市| 新邵县| 宽甸| 乐业县| 沧州市| 漳州市| 兴仁县| 陵川县| 明溪县| 梁山县| 武定县| 尉犁县| 连山| 喀喇| 体育| 视频| 札达县| 贵州省| 达州市| 邹平县| 峡江县|