我創建了一個應該像RunAs命令一樣工作的.dll文件。唯一的區別是,它應該從註冊表中讀取。我的問題是,我需要從註冊表中取回3個值,但我不能。它讀取第一個,比第二個(密碼)失敗,錯誤代碼爲2,表示「系統找不到指定的文件」。如果我只查詢域和用戶名,那麼它是好的,如果我只查詢密碼然後它仍然成功,但如果我想查詢所有三個,那麼它失敗。有人可以告訴我,我做錯了什麼?如何正確讀取c中多個值的註冊表?
繼承人我的代碼:
HKEY hKey = 0;
DWORD dwType = REG_SZ;
DWORD dwBufSize = sizeof(buf);
TCHAR szMsg [MAX_PATH + 32];
HANDLE handle;
LPVOID lpMsgBuf;
if(RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Kampi Corporation\\RunAs!"), 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
{
if(RegQueryValueEx(hKey, TEXT("Username"), 0, &dwType, (LPBYTE)buf, &dwBufSize) == ERROR_SUCCESS)
{
memset(szMsg, 0, sizeof(szMsg));
wsprintf (szMsg, _T("%s"), buf);
mbstowcs(wuser, szMsg, 255);
RegCloseKey(hKey);
}
else
{
MessageBox (pCmdInfo->hwnd, "Can not query for Username key value!", _T("RunAs!"), MB_ICONERROR);
RegCloseKey(hKey);
return -1;
}
}
else
{
CSimpleShlExt::showerror(GetLastError(), pCmdInfo->hwnd, "RegOpenKeyEx failed for Username with error code :: ");
return -1;
}
if(RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Kampi Corporation\\RunAs!"), 0, KEY_QUERY_VALUE ,&hKey) == ERROR_SUCCESS)
{
if(RegQueryValueEx(hKey, TEXT("Password"), 0, &dwType, (LPBYTE)buf, &dwBufSize) == ERROR_SUCCESS)
{
memset(szMsg, 0, sizeof(szMsg));
wsprintf (szMsg, _T("%s"), buf);
mbstowcs(wpass, szMsg, 255);
RegCloseKey(hKey);
}
else
{
char test[200];
sprintf(test,"Can not query for Password key value! EC: %d",GetLastError());
MessageBox (pCmdInfo->hwnd, test, _T("RunAs!"), MB_ICONERROR);
RegCloseKey(hKey);
return -1;
}
}
else
{
CSimpleShlExt::showerror(GetLastError(), pCmdInfo->hwnd, "RegOpenKeyEx failed for Password with error code :: ");
return -1;
}
if(RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Kampi Corporation\\RunAs!"), 0, KEY_QUERY_VALUE ,&hKey) == ERROR_SUCCESS)
{
if(RegQueryValueEx(hKey, TEXT("Domain"), 0, &dwType, (LPBYTE)buf, &dwBufSize) == ERROR_SUCCESS)
{
memset(szMsg, 0, sizeof(szMsg));
wsprintf (szMsg, _T("%s"), buf);
mbstowcs(wdomain, szMsg, 255);
RegCloseKey(hKey);
}
else
{
sprintf(test,"Can not query for Password key value! EC: %d",GetLastError());
MessageBox (pCmdInfo->hwnd, test, _T("RunAs!"), MB_ICONERROR);
RegCloseKey(hKey);
return -1;
}
}
else
{
CSimpleShlExt::showerror(GetLastError(), pCmdInfo->hwnd, "RegOpenKeyEx failed for Domain with error code :: ");
return -1;
}
嗨!非常感謝你。這是我的問題。我需要在每個查詢之前初始化dwBufSize。非常感謝你 – kampi 2010-03-22 04:07:06