注册表是Windows内部的一个巨大的树状分层数据库。它记录用户安装在机器上的软件和每个程序的相互关联关系;它包含了计算机的硬件配置信息和各种即插即用的设备的信息。注册表中存放着各种参数,直接控制着Windows的启动、硬件驱动程序的装载以及一些windows程序的运行,在整个系统中起着核心作用。
注册表中包含了几个根键: HKEY_LOCAL_MACHINE,HKEY_CLASSES_ROOT,
HKEY_CURRENT_USER,HKEY_USERS,HKEY_CURRENT_CONFIG.
我们需要访问的子键都是在上述的几个根键下面。
介绍一下几个常用的注册表访问函数。
LONG RegOpenKeyEx( HKEY hKey, // handle to open key LPCTSTR lpSubKey, // subkey name DWORD ulOptions, // reserved REGSAM samDesired, // security access mask PHKEY phkResult // handle to open key );该函数的作用是打开需要访问的注册表子键,hKey为上述的几个根键的一个,lpSubKey为需要访问的子键的字符串描述,比如说:
SYSTEM//CurrentControlSet//Control//Print//Printers。ulOptions一般设置为空。samDesired为访问的安全掩码,如果为只读则设置为
KEY_READ,具体有哪些访问安全掩码可以参考msdn.phkResult为输出参数,为打开的子键的句柄。
LONG RegQueryInfoKey( HKEY hKey, // handle to key LPTSTR lpClass, // class buffer LPDWORD lpcClass, // size of class buffer LPDWORD lpReserved, // reserved LPDWORD lpcSubKeys, // number of subkeys LPDWORD lpcMaxSubKeyLen, // longest subkey name LPDWORD lpcMaxClassLen, // longest class string LPDWORD lpcValues, // number of value entries LPDWORD lpcMaxValueNameLen, // longest value name LPDWORD lpcMaxValueLen, // longest value data LPDWORD lpcbSecurityDescriptor, // descriptor length PFILETIME lpftLastWriteTime // last write time );该函数为查询指定的子键的信息,比如说有多少个子键,子键的字符串名字的最大长度等等。
LONG RegEnumKeyEx( HKEY hKey, // handle to key to enumerate DWORD dwIndex, // subkey index LPTSTR lpName, // subkey name LPDWORD lpcName, // size of subkey buffer LPDWORD lpReserved, // reserved LPTSTR lpClass, // class string buffer LPDWORD lpcClass, // size of class string buffer PFILETIME lpftLastWriteTime // last write time );该函数遍历指定键的子键,每次获取一个子键的信息。
LONG RegQueryValueEx( HKEY hKey, // handle to key LPCTSTR lpValueName, // value name LPDWORD lpReserved, // reserved LPDWORD lpType, // type buffer LPBYTE lpData, // data buffer LPDWORD lpcbData // size of data buffer );获取指定的键的指定值项的值。
下面给出一个具体的例子:
运行结果如下图所示: