2 sinat 26818447 sinat_26818447 于 2015.07.14 08:43 提问

RegOpenKeyEx调用失败返回5 ,管理员运行不管用 win7VS2013 请问怎么回事?

代码
LONG lRegRet;
HLOCAL hLocal;
HKEY hKeyUser;
PTSTR pszEnvironmentName = NULL;
PTSTR pszEnvironmentValue = NULL;

pszEnvironmentName = (PTSTR)malloc(MAX_PATH * sizeof(TCHAR));
GetDlgItemText(hDlg, IDD_EDIT_NAME, pszEnvironmentName, MAX_PATH);

pszEnvironmentValue = (PTSTR)malloc(1024 * sizeof(TCHAR) * 3);
GetDlgItemText(hDlg, IDD_EDIT_VALUE, pszEnvironmentValue,
1024 * sizeof(TCHAR) * 3);

//修改用户环境变量
lRegRet = RegOpenKeyEx(HKEY_CURRENT_USER, USER_ENVREG, KEY_ALL_ACCESS, 0, &hKeyUser);
if (lRegRet != ERROR_SUCCESS)
{
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS, NULL, lRegRet,
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), (PTSTR)&hLocal, 0, NULL);

MessageBox(hDlg, (PCTSTR)LocalLock(hLocal), TEXT("错误"), MB_OK);
break;
}
RegSetValueEx(hKeyUser, pszEnvironmentName, 0, REG_SZ,
(const unsigned char *)pszEnvironmentValue,
wcslen(pszEnvironmentValue) + sizeof(TCHAR));
RegCloseKey(hKeyUser);
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)TEXT("Environment"));

//释放分配的内存
free(pszEnvironmentValue);
free(pszEnvironmentName);

4个回答

save4me
save4me   Ds   Rxr 2015.07.15 00:33
已采纳

找到原因了,RegOpenKeyEx函数的参数你写倒了,第三位是ulOption保留,通常必须设置为0,第四位是samDesired用来设置对键访问的权限,你刚好写反了。

lRegRet = RegOpenKeyEx(HKEY_CURRENT_USER, USER_ENVREG, 0, KEY_ALL_ACCESS, &hKeyUser);
save4me
save4me 不客气,很高兴问题解决了。
2 年多之前 回复
sinat_26818447
sinat_26818447 成功了 非常感谢
2 年多之前 回复
save4me
save4me   Ds   Rxr 2015.07.14 09:36

使用下面的试一下

RegOpenKeyEx(HKEY_CURRENT_USER, USER_ENVREG, KEY_ALL_ACCESS|KEY_WOW64_32KEY, 0, &hKeyUser);
sinat_26818447
sinat_26818447 是TEXT(“Environment\\) 在头文件里
2 年多之前 回复
save4me
save4me 你的USER_ENVREG定义在哪里,是什么?
2 年多之前 回复
sinat_26818447
sinat_26818447 还是不行 还是拒绝访问
2 年多之前 回复
oyljerry
oyljerry   Ds   Rxr 2015.07.14 10:07

USER_ENVREG 指定的注册表路径你打开看看,检查一下它的permission选项,是不是设置了不允许访问等

sinat_26818447
sinat_26818447 没设置 还是拒绝访问
2 年多之前 回复
save4me
save4me   Ds   Rxr 2015.07.14 14:27

先直接使用下面的试一下,就是Environment后面去掉两个反斜杠

RegOpenKeyEx(HKEY_CURRENT_USER, "Environment", KEY_ALL_ACCESS, 0, &hKeyUser);
sinat_26818447
sinat_26818447 试过setvalue 也是拒绝访问
2 年多之前 回复
save4me
save4me 另外看看http://blog.sina.com.cn/s/blog_4009ef2d01015o43.html
2 年多之前 回复
save4me
save4me 把权限请求降低一点试试: RegOpenKeyEx(HKEY_CURRENT_USER, USER_ENVREG, KEY_SET_VALUE, 0, &hKeyUser);
2 年多之前 回复
sinat_26818447
sinat_26818447 也不行 还是拒绝访问
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片