Win32 API 常用函数之三——注册表操作(上)
2007-11-07 23:00
501 查看
【注册表操作】
RegOpenKeyEx
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LONG RegOpenKeyEx(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
HKEY hKey,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPCTSTR lpSubKey,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DWORD ulOptions,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
REGSAM samDesired,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
PHKEY phkResult
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
);
打开一个指定的注册表项,值得注意的是注册表的键值是不区分大小写的。
第一个参数是主键,可以是预定义的键值,如HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS 这几个。
第二个参数是子键,指向一个字符串。当这个字符串为空或这指针为NULL时,他会打开hKey的值。
第三个参数保留。
第四个参数是一种权限,如常用的查询权限KEY_QUERY_VALUE,用于创建子键的KEY_CREATE_SUB_KEY,用于写的权限KEY_SET_VALUE等。
第五个参数是一个句柄,就像CreateEvent一样,返回了一个打开的注册表键,用完了就用它来关闭。
返回值表示成功或失败,成功则ERROR_SUCCESS,其他则表示出了些问题,在Winerror.h中定义。
RegCloseKey
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LONG RegCloseKey(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
HKEY hKey
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
用于关闭已经打开(RegOpenKeyEx)的或者创建出来(RegCreateKeyEx)的注册表键值的句柄。
这个操作类似closeHandle。
RegCreateKeyEx
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LONG RegCreateKeyEx(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
HKEY hKey,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPCTSTR lpSubKey,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DWORD Reserved,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPTSTR lpClass,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DWORD dwOptions,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
REGSAM samDesired,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
PHKEY phkResult,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPDWORD lpdwDisposition
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
);
创建一个注册表键值,如果该值已存在,则类似Open的行为。
第一个参数与RegOpenKeyEx相似。
第二个参数是要创建的子键的字符串。该值不可以为NULL,也不可以含有反斜线/,而且是不区分大小写的。
第三个参数保留。传入0即可。
第四个参数通常设置为NULL。
第五个参数默认设置为REG_OPTION_NON_VOLATILE,另外两个值REG_OPTION_BACKUP_RESTORE和REG_OPTION_VOLATILE有特殊的含义,详细信息见MSDN。
第六个参数与RegOpenKeyEx的相应参数含义一样。通常创建一个子键的行为需要Create权限,因为这个函数需要创建子键,但是他并不能设置这个子键的值,需要别的函数帮助。
第七个参数是安全级别,传入NULL为默认级别。
第八个参数是hanle。用于之后的操作。
第九个参数是一个传出参数,它标示了调用该函数是新建了一个子键REG_CREATED_NEW_KEY还是打开了一个原有子键REG_OPENED_EXISTING_KEY。
返回值同样是ERROR_SUCCESS表示成功,其他则表示有问题。
RegSetValueEx
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LONG RegSetValueEx(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
HKEY hKey,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPCTSTR lpValueName,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DWORD Reserved,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DWORD dwType,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
const BYTE* lpData,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DWORD cbData
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
);
创建了子键,需要给它赋以特定的值,该函数就是为子键赋值的。
第一个参数是目标键的handle。
第二个参数是值名称。NULL、空字符串都会导致一个匿名属性。
第三个参数保留。
第四个参数表示值的类型,常用的有二进制REG_BINARY、DWORD类型REG_DWORD、字符串REG_EXPAND_SZ等。
第五个参数是值内容。
第六个参数是值内容的大小,sizeof即可,不过当是字符串的时候,记得加1,来表示结尾符。
RegQueryValueEx
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LONG RegQueryValueEx(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
HKEY hKey,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPCTSTR lpValueName,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPDWORD lpReserved,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPDWORD lpType,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPBYTE lpData,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPDWORD lpcbData
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
);
我们要读一个已经打开的键的值的时候,就需要这个函数。
第一个参数是目标键的handle。
第二个参数是值名称。
第三个参数保留。
第四个参数是值类型,同RegSetValueEx的类型含义相同。但是他是传出的,这时就有一个小技巧,当我们不知道一个键的值类型时,我们可以用这个参数第一次读出值的类型,后两个参数传入NULL和大小,这时读出了值的类型和值的大小,这样在第二次想确切的读出值的内容的时候,就可以分配恰好可用的空间。
第五个参数是传出参数,用于读出的数据。
第六个参数是传出参数的大小。
to be continued~
RegOpenKeyEx
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LONG RegOpenKeyEx(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
HKEY hKey,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPCTSTR lpSubKey,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DWORD ulOptions,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
REGSAM samDesired,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
PHKEY phkResult
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
);
打开一个指定的注册表项,值得注意的是注册表的键值是不区分大小写的。
第一个参数是主键,可以是预定义的键值,如HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS 这几个。
第二个参数是子键,指向一个字符串。当这个字符串为空或这指针为NULL时,他会打开hKey的值。
第三个参数保留。
第四个参数是一种权限,如常用的查询权限KEY_QUERY_VALUE,用于创建子键的KEY_CREATE_SUB_KEY,用于写的权限KEY_SET_VALUE等。
第五个参数是一个句柄,就像CreateEvent一样,返回了一个打开的注册表键,用完了就用它来关闭。
返回值表示成功或失败,成功则ERROR_SUCCESS,其他则表示出了些问题,在Winerror.h中定义。
RegCloseKey
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LONG RegCloseKey(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
HKEY hKey
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
用于关闭已经打开(RegOpenKeyEx)的或者创建出来(RegCreateKeyEx)的注册表键值的句柄。
这个操作类似closeHandle。
RegCreateKeyEx
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LONG RegCreateKeyEx(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
HKEY hKey,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPCTSTR lpSubKey,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DWORD Reserved,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPTSTR lpClass,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DWORD dwOptions,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
REGSAM samDesired,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
PHKEY phkResult,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPDWORD lpdwDisposition
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
);
创建一个注册表键值,如果该值已存在,则类似Open的行为。
第一个参数与RegOpenKeyEx相似。
第二个参数是要创建的子键的字符串。该值不可以为NULL,也不可以含有反斜线/,而且是不区分大小写的。
第三个参数保留。传入0即可。
第四个参数通常设置为NULL。
第五个参数默认设置为REG_OPTION_NON_VOLATILE,另外两个值REG_OPTION_BACKUP_RESTORE和REG_OPTION_VOLATILE有特殊的含义,详细信息见MSDN。
第六个参数与RegOpenKeyEx的相应参数含义一样。通常创建一个子键的行为需要Create权限,因为这个函数需要创建子键,但是他并不能设置这个子键的值,需要别的函数帮助。
第七个参数是安全级别,传入NULL为默认级别。
第八个参数是hanle。用于之后的操作。
第九个参数是一个传出参数,它标示了调用该函数是新建了一个子键REG_CREATED_NEW_KEY还是打开了一个原有子键REG_OPENED_EXISTING_KEY。
返回值同样是ERROR_SUCCESS表示成功,其他则表示有问题。
RegSetValueEx
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LONG RegSetValueEx(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
HKEY hKey,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPCTSTR lpValueName,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DWORD Reserved,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DWORD dwType,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
const BYTE* lpData,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DWORD cbData
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
);
创建了子键,需要给它赋以特定的值,该函数就是为子键赋值的。
第一个参数是目标键的handle。
第二个参数是值名称。NULL、空字符串都会导致一个匿名属性。
第三个参数保留。
第四个参数表示值的类型,常用的有二进制REG_BINARY、DWORD类型REG_DWORD、字符串REG_EXPAND_SZ等。
第五个参数是值内容。
第六个参数是值内容的大小,sizeof即可,不过当是字符串的时候,记得加1,来表示结尾符。
RegQueryValueEx
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LONG RegQueryValueEx(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
HKEY hKey,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPCTSTR lpValueName,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPDWORD lpReserved,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPDWORD lpType,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPBYTE lpData,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LPDWORD lpcbData
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
);
我们要读一个已经打开的键的值的时候,就需要这个函数。
第一个参数是目标键的handle。
第二个参数是值名称。
第三个参数保留。
第四个参数是值类型,同RegSetValueEx的类型含义相同。但是他是传出的,这时就有一个小技巧,当我们不知道一个键的值类型时,我们可以用这个参数第一次读出值的类型,后两个参数传入NULL和大小,这时读出了值的类型和值的大小,这样在第二次想确切的读出值的内容的时候,就可以分配恰好可用的空间。
第五个参数是传出参数,用于读出的数据。
第六个参数是传出参数的大小。
to be continued~
相关文章推荐
- 有关注册表的常用操作函数
- MFC操作注册表常用函数
- Win32 API 常用函数之二
- c++添加开机启动项,win32 api操作注册表,读写注册表
- 注册表操作常用API使用
- Win32 API 常用函数之一
- WIN32 API 文件设备IO操作函数解析
- C语言中常用文件操作函数
- Javascript操作DOM常用API总结
- 数学建模--微积分及符号函数常用操作
- php 常用文件操作函数
- 常用函数-------文件、磁盘操作函数
- JS常用数字、字符串操作函数总结
- PHP开发中常用的字符串操作函数
- mysql常用字符串操作函数大全,以及实例
- zookeeper入门(3)API常用函数功能与参数详解
- Delphi7文件操作常用函数二
- java中关于时间日期操作的常用函数
- VC中的注册表操作(VC_Win32)
- PHP时间常用操作函数