-1
내 C++ 응용 프로그램에서 다른 사용자로 가장해야합니다. 나는 이것에 다음 코드를 사용하고있다.Visual C++의 가장
try {
IntPtr tokenHandle = IntPtr(0);
bool returnValue = LogonUser(username, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &tokenHandle);
if (false == returnValue) {
int ret = Marshal::GetLastWin32Error();
throw gcnew System::ComponentModel::Win32Exception(ret);
}
WindowsIdentity^ newId = gcnew WindowsIdentity(tokenHandle);
WindowsImpersonationContext^ impersonatedUser = newId->Impersonate();
//TODO access file with impersonated user rights
impersonatedUser->Undo(); // Stop impersonating the user.
if (tokenHandle != IntPtr::Zero) CloseHandle(tokenHandle); // Free the tokens.
}
catch(Exception^ ex){
}
로그온 사용자 함수는 C++ 콘솔 응용 프로그램에 대해 true를 반환하지만 Visual C++ 응용 프로그램에 대해서는 false를 반환합니다. 두 프로젝트 모두 공용 언어 런타임 지원을 사용하고 있습니다. 두 프로젝트 모두 포함 및 참조가 동일합니다.
어떻게 작동하지 않습니까? 콘솔 응용 프로그램 로그온 작업의 경우 – Mark
이 true를 반환하지만 Visual C++ 응용 프로그램의 경우 false를 반환합니다. –
두 사용자를 동일한 사용자로 실행 했습니까? MSDN에서 : "함수가 실패하면 0을 반환하고 확장 된 오류 정보를 얻으려면 GetLastError를 호출하십시오." GetLastError가 반환하는 것은 무엇입니까? – willll