注册表操作的几个要注意的地方

1.RegEnumKeyEx函数,下面是它声明:
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
);
要注意的地方是lpcName这个参数,看一下MSDN的说明

lpcName
[in/out] Pointer to a variable that specifies the size, in TCHARs, of the buffer specified by the lpName parameter. This size should include the terminating null character. When the function returns, the variable pointed to by lpcName contains the number of characters stored in the buffer. The count returned does not include the terminating null character.
 
这个参数比较有意思,它先要求使用者提供缓冲区的长度,NULL字符也要计算进去。然后函数返回时,lpcName就表示键名的实际长度,但是不包括NULL字符。
要是传入的长度比实际的长度要小会怎么样?
那样就取不到键名,函数返回值就会是ERROR_MORE_DATA。同时lpcName不会改变,你原来传进去是多少还是多少,函数不会把实际需要的长度告诉你。

但是MSDN对于返回值这里是怎么描述的?


Windows NT/2000/XP:

If a key has been successfully retrieved and there are more keys to be retrieved, the function returns ERROR_MORE_DATA.


我原来的理解是如果还有键值可以遍历就会返回ERROR_MORE_DATA。虽然我的理解不太准确(根本就不对嘛),但是我从原文怎么也看不出“如果缓冲区长度不够,就返回ERROR_MORE_DATA”的意思。


 2.RegQueryValueEx函数
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
);
这个函数可以获取指定键的键值。但是hKey必须先使用 RegCreateKeyEx 或者 RegOpenKeyEx 函数在KEY_QUERY_VALUE权限下打开。在这里使用预定义键毫无用处,比如这样
RegQueryValueEx(HKEY_CLASSES_ROOT,…..);
执行不会成功,只会返回一个ERROR_FILE_NOT_FOUND的错误值。
 

3.返回值

基本上所有的RegXXX函数的返回值都是System Error Code,成功时返回0,表示ERROR_SUCCESS,失败时返回各种错误代码。这表示在函数执行失败的时候,可以不用GetLastError函数查找错误代码。事实上在这里执行GetLastError毫无用处,它始终都会返回0。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值