Windows CE 6.0有4个基本的注册表键值, HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS。其它的都是这4个注册表的子键。
我们以一个内建的串口驱动为例,它在注册表文件Platform.reg中的描述如下: 其中Prefix 和 Dll项是必不可少的,Prefix代表设备文件名前缀, 与Index合用表示该设备的名称,该注册表子键的设备名称就是"COM1:",该名称可以用于CreateFile调用。Dll则是动态链接库名称。 Index为设备序号。Flags为1表示系统启动时不加载,需要应用程序自己加载,为0表示该驱动在系统启动时加载。
  1. [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial]  
  2.               "Prefix"="COM"  
  3.               "Dll"="$(_TGTPLAT_PFX)_serial.dll"  
  4.  
  5.               "Flags"=dword:0  
  6.               "Index"=dword:1 
在%WinCE Dir%Public%Common%OAK%INC%目录下,文件cregedit.h中,定义了一个类CRegistryEdit来封装了注册表的操作。许多的硬件驱动,比如串口类,也继承了CRegistryEdit类。
还有一种方法是利用windows CE提供的API进行注册表项的操作。
方法一: 利用系统提供的注册表类CRegistryEdit
类的定义在文件regedit.h中。   
在构建函数中,会取得当前注册表子键的HANDLE句柄。有3个构造函数,第一个是用全路径,调用hKey = OpenDeviceKey(TEXT("HKEY_LOCAL_MACHINE\\Drivers\\BuiltIn\\Serial"))构造, 第二个是如果已知其父注册表子键,调用RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("Drivers\\BuiltIn\\Serial"), 0,0,&hKey). 第三种方法是用RegCreateKeyEx().
析构函数中,调用RegCloseKey(hKey)关闭掉对注册表子键的引用。
读取注册表项可以使用GetRegValue方法,写入注册表项使用RegSetValueEx方法。其方法的实现也是通过windows CE API,具体可以参照下一个Section。
RegGetList和RegSetList方法提供了对类型为REG_MULTI_SZ和DWORD的VALUE的读写操作。
其它类方法GetWindowInfo, GetIsrInfo,GetPciInfo获取注册表更多的信息。
方法二: 利用windows CE API
为了获取一个注册表键值,先要调用RegOpenKeyEx。以上面内建串口驱动为例,RegOpenKey( HKEY_LOCAL_MACHINE, TEXT("Drivers\\BuiltIn\\Serial"), 0, 0, &hKey ), 其中hKey就是我们获取的该注册表子键的HANDLE句柄。接下来对注册表子键的操作就是通过hKey来实现.
有了hKey, 就可以对注册表子键的各个内容进行读写操作。如果要读去子键的Prefix, 调用函数RegQueryValueEx(hKey, TEXT("Prefix"), NULL, &lpType, &lPDAta, &lpcbData), lpType, lpData为Prefix返回类型和值,该例中,lpType = REG_SZ, lpData = TEXT("COM"). lpcbData当调用时,修饰限制lpData的size in bytes,返回时,为lpData返回值的SIZE。
对应于读操作,写操作是一个相反的过程,RegSetValueEx(hKey, TEXT("Prefix"), NULL, REG_SZ, PBYTE(TEXT("TST")), wcslen(TEXT("TST"))*2). 其中要写入的项为Prefix项,类型为REG_SZ, 值为TEXT("TST"), 最后一个参数为写入值得SIZE in bytes. 注意第二个参数,如果注册表中存在该项,则改写它的值。如果没有,则新建一个注册表项。
某些情况下,我们需要删除一个注册表项,只需调用RegDeleteKey(hKey, TEXT("Index"))就可以删除Index注册表项。
要关闭一个注册表子键,只需要调用RegCloseKey(hKey)就可以完成。
关于注册表有很多更加深入的使用,如RegEnumValue. 更多有关注册表项,可以查看MSDN手册。