다음 코드를 사용하고 있습니다.
HANDLE token;
if (!LogonUser("LocalUser", "InvalidDomain", "Password", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &token))
{
unsigned long error = GetLastError();
}
컴퓨터가 도메인에 있고 유효하지 않은 도메인을 입력하면 로그인 인증에 시간이 많이 걸릴 수 있습니다. 이것은 5 초에서 2/3 분까지 가능합니다.
이를 개선 할 방법이 있습니까?
이것은 오래된 문제이며 몇 년 전에 같은 문제가 발생했습니다. 해결 방법으로 WaitForSingleObject를 사용할 수 있습니다. 기본 아이디어는 LogonUser를 실행할 스레드를 시작하고 작업이 완료 될 때 작업자 스레드가 설정할 핸들에 대해 주 스레드가 n 밀리 초를 기다리도록하는 것입니다.
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
HANDLE athEvent;
DWORD WINAPI ThreadAuth(LPVOID);
DWORD AUTHTIMEOUT = 5000;
int main(void)
{
HANDLE hThread;
DWORD dwEvent, dwThreadID;
athEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadAuth, NULL,
0, &dwThreadID);
// Wait for the thread to signal
dwEvent = WaitForSingleObject(athEvent, AUTHTIMEOUT); //5 seconds timeout
switch (dwEvent)
{
// athEvent was signaled
case WAIT_OBJECT_0:
printf("Authenticated");
break;
case WAIT_TIMEOUT:
printf("Authenticate timeout\n");
TerminateThread(hThread, 0);
break;
default:
printf("Wait error: %d\n", GetLastError());
ExitProcess(0);
}
CloseHandle(athEvent);
CloseHandle(hThread);
return 0;
}
DWORD WINAPI ThreadAuth(LPVOID lpParam)
{
UNREFERENCED_PARAMETER(lpParam);
//## Insert your logon method here
//LogonUser("LocalUser", "InvalidDomain", "Password", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &token)
Sleep(5000); //if >= AUTHTIMEOUT then the waitforsingleobject will expire
//##
//Signal the event so WaitForSingleObject is released
SetEvent(athEvent);
return 0;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다