Win32 API 常用函数之三——注册表操作(上)

来源:互联网 发布:阿里云试用 编辑:程序博客网 时间:2024/04/30 09:48

【注册表操作】

RegOpenKeyEx

LONG RegOpenKeyEx(
  HKEY hKey,
  LPCTSTR lpSubKey,
  DWORD ulOptions,
  REGSAM samDesired,
  PHKEY phkResult
);

打开一个指定的注册表项,值得注意的是注册表的键值是不区分大小写的。
第一个参数是主键,可以是预定义的键值,如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

LONG RegCloseKey(
  HKEY hKey
);

用于关闭已经打开(RegOpenKeyEx)的或者创建出来(RegCreateKeyEx)的注册表键值的句柄。
这个操作类似closeHandle。

RegCreateKeyEx

LONG RegCreateKeyEx(
  HKEY hKey,
  LPCTSTR lpSubKey,
  DWORD Reserved,
  LPTSTR lpClass,
  DWORD dwOptions,
  REGSAM samDesired,
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  PHKEY phkResult,
  LPDWORD lpdwDisposition
);

创建一个注册表键值,如果该值已存在,则类似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

LONG RegSetValueEx(
  HKEY hKey,
  LPCTSTR lpValueName,
  DWORD Reserved,
  DWORD dwType,
  
const BYTE* lpData,
  DWORD cbData
);

创建了子键,需要给它赋以特定的值,该函数就是为子键赋值的。
第一个参数是目标键的handle。
第二个参数是值名称。NULL、空字符串都会导致一个匿名属性。
第三个参数保留。
第四个参数表示值的类型,常用的有二进制REG_BINARY、DWORD类型REG_DWORD、字符串REG_EXPAND_SZ等。
第五个参数是值内容。
第六个参数是值内容的大小,sizeof即可,不过当是字符串的时候,记得加1,来表示结尾符。

RegQueryValueEx

LONG RegQueryValueEx(
  HKEY hKey,
  LPCTSTR lpValueName,
  LPDWORD lpReserved,
  LPDWORD lpType,
  LPBYTE lpData,
  LPDWORD lpcbData
);

我们要读一个已经打开的键的值的时候,就需要这个函数。
第一个参数是目标键的handle。
第二个参数是值名称。
第三个参数保留。
第四个参数是值类型,同RegSetValueEx的类型含义相同。但是他是传出的,这时就有一个小技巧,当我们不知道一个键的值类型时,我们可以用这个参数第一次读出值的类型,后两个参数传入NULL和大小,这时读出了值的类型和值的大小,这样在第二次想确切的读出值的内容的时候,就可以分配恰好可用的空间。
第五个参数是传出参数,用于读出的数据。
第六个参数是传出参数的大小。

to be continued~

 

原创粉丝点击