RunAs 명령처럼 작동해야하는 .dll을 만들었습니다. 유일한 차이점은 레지스트리에서 읽어야한다는 것입니다. 내 문제는, 내가 레지스트리에서 3 값을 리드해야하지만, 내가 할 수 없다는 것입니다. "시스템이 지정된 파일을 찾을 수 없습니다"라는 오류 코드 2가있는 두 번째 암호 (암호)에서 실패하는 것보다 먼저 읽습니다. 만약 내가 도메인과 사용자 이름에 대한 쿼리를 누른 다음 괜찮아요, 나는 단지 암호를 다음 쿼리를 여전히 성공,하지만 만약 내가 모든 세 쿼리를 실패하려면 그럼. 누군가 내가 잘못하고있는 것을 말해 줄 수 있습니까? Heres는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