RegSetValueEx出错的问题
我使用如下语句准备修改系统的注册用户信息
long ret1 = ::RegSetValueEx(hKey, "RegisteredOwner", NULL, type_1, owner_Set, cbData1);
但是返回的ret1的值总不是ERROR_SUCCESS, 我跟踪了下,ret1的值总是5.
请问这是什么问题?
运行系统是Windows XP,编译环境VC6.
看到有人说是杀毒软件防护的问题,我把杀毒软件的防护已经给关了.
用GetLastError()函数,得到值是0,操作成功完成.
还有就是FormatMessage函数在这里怎样得到这个RegSetValueEx操作的失败描述?
希望不吝赐教,谢谢!
[解决办法]
对于这种函数的使用方法,我以前也总是问别人,但是前些时间我老师跟我说了一句话:
“请仔细查看MSDN”,我当前就想,我都看了半天了。
谁想老师看出了我的想法,然后去看了半分钟的MSDN上的介绍,然后说......
我当前就佩服了。
因为我看的不仔细。
[解决办法]
用 【Error Lookup】 工具可以查出,5 表示访问被拒绝。
[解决办法]
VOID Abort(IN const wchar_t *cwpszMsg, IN DWORD dwError)
{
DWORD dwRet = ERROR_SUCCESS;
LPVOID lpMsgBuf = NULL;
wstring wstrError = L"";
wchar_t wszTemp[20];
wmemset(wszTemp, 0, 20);
dwRet = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,
dwError, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
(LPWSTR)&lpMsgBuf, 0, NULL);
if (lpMsgBuf != NULL)
{
wstrError = cwpszMsg;
if (dwError != 0)
{
swprintf(wszTemp, L"%d", dwError);
wstrError = wstrError + L"ErrorMessage(ErrID=" + wszTemp + L"): "+ (wchar_t*)lpMsgBuf;
}
MessageBoxW(NULL, wstrError.data(), L"Error", MB_OK | MB_ICONSTOP);
PostQuitMessage(1);
LocalFree(lpMsgBuf);
}
}
我写的可以得到LastError的函数,你可以根据你的要求修改下用
[解决办法]
打开或创建key即得到hKey的时候,需要有KEY_SET_VALUE权限,不知你设了没有?
[解决办法]
有些问题其实自己可以解决的~