关于Win32系统API函数RegQueryValueEX()返回ERROR_ACCESS_DENIED的解决方法

最近在用Win32系统API函数RegQueryValueEX()获取注册表信息时遇到返回值始终ERROR_ACCESS_DENIED的问题,

百度了半天大概有两种解决方案。但是都没有解决问题,后来只能一点点看API说明,最终找到原因。

先归纳下网上解决方案:

0.设置工程属性-》链接器-》清单文件中 UAC执行级别为requireAdministrator,

1.直接以管理员方式启动VS

以上两种方式主要是从外部解决权限问题。通过自己分析解决问题后才发现在调用RegQueryValueEX之前通常会先调用RegOpenKeyEX打开注册表键,而我打开键的操作成功了,只是在获取键值提示获取不了,最后发现问题所在,

2.通过RegOpenKeyEX打开键时第4个参数用以标识打开方式,如果跟我一样手残把方式设置成KEY_SET_VALUE(写入注册表项用的),返回的句柄去获取键值就会报错。改成KEY_READ就OK了。服了me.

你可能感兴趣的:(学习笔记)