RegQueryValueEx正确使用方法
项目中需要读取注册表中的HKEY_CLASSES_ROOT主键下一个子键的值,看了看MSDN的说明,有RegOpenKeyEx和RegQueryValueEx两个函数可以用。也没仔细阅读函数说明,就写了一段简单的代码来测试:
HKEY hKey;
WCHAR szLocation[MAX_PATH] = {'\0'};
DWORD dwSize = sizeof(DWORD);
DWORD dwType = REG_SZ;
LPCTSTR studioPath = TEXT("insta360\\studio");
LONG ret;
ret = RegOpenKeyEx(HKEY_CLASSES_ROOT, studioPath, 0, KEY_READ, &hKey);
wprintf(L"RegOpenKeyEx returns %d\n", ret); if (ERROR_SUCCESS == ret)
{
ret = RegQueryValueEx(hKey, TEXT("install_location"), 0, &dwType, (LPBYTE)&szLocation, &dwSize);
wprintf(L"RegQueryValueEx returns %d, dwSize=%d\n", ret, dwSize);
if (ERROR_SUCCESS == ret)
{
wprintf(L"Location: %s", szLocation);
}
RegCloseKey(hKey);
}
一运行才发现啥也没读出来,而RegQueryValueEx()竟然返回的是234(ERROR_MORE_DATA),顿时一脸懵逼。
网上一搜才知道,关键的关键在于这个函数的最后一个参数。其类型标注为[in][out]。也就是说,这个参数既作为函数的输入,也作为函数的输出。函数在读取注册表时会将实际需要的空间大小存在这个参数中。用户根据这个大小再来分配需要的内存空间。所以程序在正式读取之前,可以调用这个函数试探一下大小:
HKEY hKey;
WCHAR szLocation[MAX_PATH] = {'\0'};
DWORD dwSize = sizeof(DWORD);
DWORD dwType = REG_SZ;
LPCTSTR studioPath = TEXT("insta360\\studio");
LONG ret;
ret = RegOpenKeyEx(HKEY_CLASSES_ROOT, studioPath, 0, KEY_READ, &hKey);
wprintf(L"RegOpenKeyEx returns %d\n", ret); if (ERROR_SUCCESS == ret)
{
ret = RegQueryValueEx(hKey, TEXT("install_location"), 0, &dwType, NULL, &dwSize);
wprintf(L"RegQueryValueEx returns %d, dwSize=%d\n", ret, dwSize); ret = RegQueryValueEx(hKey, TEXT("install_location"), 0, &dwType, (LPBYTE)&szLocation, &dwSize);
wprintf(L"RegQueryValueEx returns %d, dwSize=%d\n", ret, dwSize);
if (ERROR_SUCCESS == ret)
{
wprintf(L"Location: %s\n", szLocation);
}
RegCloseKey(hKey);
}
注意试探的时候,这个函数的倒数第二个参数应该传递NULL。但实际上也可以不试探。而是将最后一个参数的输入值设置大一点,这样就不会返回234错误代码了。
参考链接
https://www.experts-exchange.com/questions/23897919/RegQueryValueEx-causes-Error-234.html
RegQueryValueEx正确使用方法的更多相关文章
- thinkphp3.2 cli模式的正确使用方法
最近要使用thinkphp3.2版本的cli模式,手动执的话没有问题,比如php /www/index.php home/article/get 这样没有问题,但是一般用cli模式都是定时任务比较多, ...
- Linux重启inotify配置max_user_watches无效被恢复默认值8192的正确修改方法
Linux下Rsync+inotify-tools实现数据实时同步中有一个重要的配置就是设置Inotify的max_user_watches值,如果不设置,当遇到大量文件的时候就会出现出错的情况. 一 ...
- MyEclipse10的正确破解方法
无法转载,故给出原文链接,以供需要者. MyEclipse10的正确破解方法
- [转]MySQL忘记密码的正确解决方法
http://database.51cto.com/art/201005/201986.htm 以下的文章主要介绍的是MySQL忘记密码的正确解决方法,在实际操作中如果你忘记MySQL密码是一件很头痛 ...
- webpack快速入门——实战技巧:watch的正确使用方法,webpack自动打包
随着项目大了,后端与前端联调,我们不需要每一次都去打包,这样特别麻烦,我们希望的场景是,每次按保存键,webpack自动为我们打包,这个工具就是watch! 因为watch是webpack自带的插件, ...
- .Net core 下的ConfigurationManager类正确引用方法
大家在项目中经常会用到需要引用配置文件的情况,这也是我偶然间遇到的问题,菜鸟一枚,如有需纠正多谢指点. 正题 在不先引用using的情况下直接写 ConfigurationManager.AppSet ...
- SpringBoot 中 @RequestBody的正确使用方法
SpringBoot 中 @RequestBody的正确使用方法 最近在接收一个要离职同事的工作,接手的项目是用SpringBoot搭建的,其中看到了这样的写法: @RequestMapping(&q ...
- CentOS正确关机方法(转)
CentOS正确关机方法 1关机前准备 1.1观察系统使用状态 · 谁在线:who · 联网状态:netstat -a · 后台执行的程序:ps -au ...
- windows server 2008 R2 的 FTP 防火墙的正确配置方法
存在问题 FTP搭建完成后,仅本机可以访问,其他机器无法访问. 解决方案 这时,将C:\Windows\System32\svchost.exe添加到例外即可正常访问,如下图所示.将20及21端口添加 ...
随机推荐
- HTML基础篇之视频音频
<audio src="song.ogg" controls="controls"></audio> <!-- 兼容的音频格式og ...
- Information Management Policy(信息管理策略)的使用范例
基础知识 很多人都会定期收拾自己的书架或者抽屉,把里面过旧的资料拿走,为新的资料腾出空间来,这样既可以节省空间,而且当冗余资料过多的时候也会降低你查找的速度和效率.那么,在企业的SharePoint中 ...
- Python黑帽编程 3.1 ARP欺骗
Python灰帽编程 3.1 ARP欺骗 ARP欺骗是一种在局域网中常用的攻击手段,目的是让局域网中指定的(或全部)的目标机器的数据包都通过攻击者主机进行转发,是实现中间人攻击的常用手段,从而实现数据 ...
- 剑指Offer面试题:22.二叉搜索树的后序遍历序列
一.题目:二叉搜索树的后序遍历序列 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false.假设输入的数组的任意两个数字都互不相同. 例如在下面 ...
- .NET单元测试的艺术-3.测试代码
开篇:上一篇我们学习单元测试和核心技术:存根.模拟对象和隔离框架,它们是我们进行高质量单元测试的技术基础.本篇会集中在管理和组织单元测试的技术,以及如何确保在真实项目中进行高质量的单元测试. 系列目录 ...
- MySQL 启动原理剖析
200 ? "200px" : this.width)!important;} --> 介绍 本篇文章主要从查看MySQL的启动命令的代码来详细了解MySQL的启动过程,内容 ...
- K-均值聚类算法
K-均值聚类算法 聚类是一种无监督的学习算法,它将相似的数据归纳到同一簇中.K-均值是因为它可以按照k个不同的簇来分类,并且不同的簇中心采用簇中所含的均值计算而成. K-均值算法 算法思想 K-均值是 ...
- 关于GC和析构函数的一个趣题
这个有趣的问题感谢装配脑袋友情提供. 请看如下代码: public class Dummy { public static Dummy Instance; ; ~Dummy() { Instance ...
- Step by Step 安装 BizTalk Server 2009
原创地址:http://www.cnblogs.com/jfzhu/p/4020444.html 转载请注明出处 演示环境为Windows Server 2008 Enterprise, SQL Se ...
- Gitcafe绑定自定义域名
之前将自己练习写作工具替换为Markdown,部署工具改为Hexo,并且将托管地搬家到GitCafe之后,便是被各种的舒爽所围绕.具体折腾的详情参见使用Hexo搭建专属Blog.她们的组合方便快捷,让 ...