注册表操作
注册表的基础知识
Windows 的注册表包含了Windows的系统配置、PC机的硬件配置、Win32应用程序和用户的其他设置信息。
注册表和ini文件不同,它是多层次的树状结构,具有六个分支(根键),每个分支又由许多的键和键值组成,而每个键则代表一个特定的配置项目。
常用注册表Windows API函数如表1所示。
表 1 常用注册表函数
函数 | 描述 |
RegCreateKey | 新建主键 |
enum函数RegCreateKeyEx | 创建或打开主键 |
RegOpenKey | 打开主键,此函数是为了兼容Windows3.1 |
RegOpenKeyEx | 打开主键 |
RegQueryInfoKey | 取主键信息 |
RegQueryValue | 取主键的值,此函数是为了兼容Windows3.1 |
RegQueryValueEx | 取主键的值 |
RegQueryMultipleValues | 取多条键值 |
函数 | 描述 |
RegDeleteKey | 删除主键 |
RegDeleteValue | 删除键值 |
RegEnumKey | 取所有子键,此函数是为了兼容Windows3.1 |
RegEnumKeyEx | 取所有子键 |
RegEnumValue | 取所有键值 |
RegCloseKey | 关闭有RegCreateKeyEx生成的句柄 |
注册表的访问和修改
注册表的打开
在读写注册表前,必须先将目标的子键打开,也就是取得一个操作的句柄,最常用的是使用RegCreateKeyEx函数,它用于创建一个键,其函数原型:
LONG RegCreateKeyEx(
HKEY hKey, //父键的句柄
LPCTSTR lpSubKey, //欲创建的子键的名称
DWORD Reserved, //保留,一般为0
HKEY hKey, //父键的句柄
LPCTSTR lpSubKey, //欲创建的子键的名称
DWORD Reserved, //保留,一般为0
LPTSTR lpClass, //欲创建的子键的类型,一般为0
DWORD dwOptions, //创建子键是的选项
REGSAM samDesired, //打开方式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指定继承性
PHKEY phkResult, //用于返回子键的句柄
LPDWORD lPdwDisposition //打开还是创建子键的信息
);
如果函数调用成功,会返回ERROR_SUCCESS也就是说成功返回0,失败返回非0值。samDesired参数有多个取值,最后这个lpdwDisposition参数用于返回信息,有两个取值:
REG_CREATED_NEW_KEY:指定的键不存在,那么创建。
REG_OPENED_EXISTING_KEY:指定的键存在,那么打开。
REG_OPENED_EXISTING_KEY:指定的键存在,那么打开。
另外还有相近的函数RegOpenKeyEx,它用于打开一个键,其函数原型:
LONG RegOpenKeyEx(
HKEY hKey, //要打开的主键句柄
HKEY hKey, //要打开的主键句柄
LPCTSTR lpSubKey, //要打开的子键
DWORD ulOptions, //保留
REGSAM samDesired, //安全存取参数
PHKEY phkResult, //打开键句柄的地址
);
注册表的修改
1. 读取键值
使用RegQueryValueEx读取子键的值,RegEnumKey获取所有子键:
LONG RegQueryValueEx(
HKEY hKey, //子键句柄
HKEY hKey, //子键句柄
LPCTSTR lpValueName, //键值名称
LPDWORD lpReserved, //为0
LPDWORD lpType, //返回键值的数据类型
LPBYTE lpData, //返回键值的数据
LPDWORD lpcbData //缓冲区的大小
);
函数调用成功后,返回ERROR_SUCCESS。
2. 设置键值
使用RegSetValueEx设置子键值:
LONG RegSetyValueEx(
HKEY hKey, //键值所在子键的句柄
HKEY hKey, //键值所在子键的句柄
LPCTSTR lpValueName, //要设置的键值名称
DWORD Reserved, //为0
DWORD dwType, //设置键值的数据类型
const BYTE* lpData, //设置键值的数据缓冲区
DWORD cbData //设置键值的数据缓冲区大小
);
3. 删除某个键
使用RegDeleteKey删除某个键:
LONG RegDelete(
HKEY hKey, //子键的句柄
HKEY hKey, //子键的句柄
LPCTSTR lpValueName, //删除键值的名称
);
注册表的关闭
使用RegCloseKey关闭某个键,其函数原型如下:
LONG RegCloseKey(HKEY hKey); //只需要传入一个要关闭的句柄就行了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论