잘못된 도메인이있는 계정을 인증 할 때 C ++ LogonUser () API가 느립니다.

Williamtroup

다음 코드를 사용하고 있습니다.

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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Spring 'authorization'헤더는 권한 부여가 아닌 인증을 고려할 때 잘못된 이름입니까?

분류에서Dev

React에서 Harvest API 인증을 시도 할 때 잘못된 요청 (400)

분류에서Dev

pandoc을 라이브러리로 사용할 때 "commitAndReleaseBuffer : 잘못된 인수 (잘못된 문자)"가 발생할 수있는 원인은 무엇입니까?

분류에서Dev

"Here"REST API에서 토큰을 가져 오려고 할 때 잘못된 클라이언트 인증 헤더

분류에서Dev

웹 사이트에서 기본 인증을 사용하고 웹 API에서 토큰 인증을 사용할 수 있습니다. 잘못된 개념인가요?

분류에서Dev

nginx는 ddns 도메인을 통해 액세스 할 때 잘못된 요청 400을 발생시킵니다.

분류에서Dev

ScheduledToastNotification을 사용할 때 "지정된 경로가 잘못되었습니다"오류의 원인

분류에서Dev

Objective C가 tablview에서 스크롤 할 때 잘못된 버튼을 애니메이션합니다.

분류에서Dev

APT가 "잘못된"인증서를 수락하도록 할 수 있습니까?

분류에서Dev

APT가 "잘못된"인증서를 수락하도록 할 수 있습니까?

분류에서Dev

포트가 잘못되었을 때 bash 스크립트의 잘못된 인수

분류에서Dev

Django AWS S3 버킷 이름 "."을 사용할 때 잘못된 인증서

분류에서Dev

Windows 7을 복원하려고 할 때 "무인 응답 파일에 잘못된 제품 키가 있습니다."

분류에서Dev

두 테이블을 조인 할 때 합계가 잘못되었습니다.

분류에서Dev

C ++에 "확장 메서드 지원"을 추가하는 잘못된 포인터 할당 트릭이 향후 문제가 될 수 있습니까?

분류에서Dev

앱을 빌드 할 때 "다른 예외가 발생했습니다. 잘못된 인수"오류

분류에서Dev

새로 설치할 때 부팅 시간이 매우 느립니다. 잘못된 fstab 때문일까요? 다음에 무엇을 해야할지 모르겠다

분류에서Dev

배열 선택을 취소 할 때 foreach ()에 잘못된 인수가 제공되었습니다.

분류에서Dev

Maven 오프라인 빌드가 잘못된 문자로 Google Guava URL을 권장 할 때 실패합니다.

분류에서Dev

반복을 사용할 때 키워드에 전달 된 인수의 수가 잘못되었습니다.

분류에서Dev

새 테이블을 조인 할 때 잘못된 데이터가 표시됨

분류에서Dev

잘못된 로그인을 사용할 때 오류 메시지가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

IIS 및 Windows 인증을 사용할 때 잘못된 사용자 이름이 발생하는 원인은 무엇입니까?

분류에서Dev

인증 사용자 데이터를 표시하려고 할 때 foreach ()에 대해 잘못된 인수가 제공되었습니다.

분류에서Dev

팬더에 인코딩을 지정할 때에도 잘못된 인코딩

분류에서Dev

전화 인증 자격 증명을 만드는 데 사용 된 확인 ID가 잘못된 iOS입니다.

분류에서Dev

배열의 값을 확인할 때 잘못된 데이터를 어떻게 설명 할 수 있습니까?

분류에서Dev

msgmerge : 달러 기호가있는 가격을 인쇄 할 때`잘못된 제어 시퀀스 '

분류에서Dev

이것을 실행하려고 할 때 "잘못된 NEW 또는 OLD 사양"메시지가 나타납니다.

Related 관련 기사

  1. 1

    Spring 'authorization'헤더는 권한 부여가 아닌 인증을 고려할 때 잘못된 이름입니까?

  2. 2

    React에서 Harvest API 인증을 시도 할 때 잘못된 요청 (400)

  3. 3

    pandoc을 라이브러리로 사용할 때 "commitAndReleaseBuffer : 잘못된 인수 (잘못된 문자)"가 발생할 수있는 원인은 무엇입니까?

  4. 4

    "Here"REST API에서 토큰을 가져 오려고 할 때 잘못된 클라이언트 인증 헤더

  5. 5

    웹 사이트에서 기본 인증을 사용하고 웹 API에서 토큰 인증을 사용할 수 있습니다. 잘못된 개념인가요?

  6. 6

    nginx는 ddns 도메인을 통해 액세스 할 때 잘못된 요청 400을 발생시킵니다.

  7. 7

    ScheduledToastNotification을 사용할 때 "지정된 경로가 잘못되었습니다"오류의 원인

  8. 8

    Objective C가 tablview에서 스크롤 할 때 잘못된 버튼을 애니메이션합니다.

  9. 9

    APT가 "잘못된"인증서를 수락하도록 할 수 있습니까?

  10. 10

    APT가 "잘못된"인증서를 수락하도록 할 수 있습니까?

  11. 11

    포트가 잘못되었을 때 bash 스크립트의 잘못된 인수

  12. 12

    Django AWS S3 버킷 이름 "."을 사용할 때 잘못된 인증서

  13. 13

    Windows 7을 복원하려고 할 때 "무인 응답 파일에 잘못된 제품 키가 있습니다."

  14. 14

    두 테이블을 조인 할 때 합계가 잘못되었습니다.

  15. 15

    C ++에 "확장 메서드 지원"을 추가하는 잘못된 포인터 할당 트릭이 향후 문제가 될 수 있습니까?

  16. 16

    앱을 빌드 할 때 "다른 예외가 발생했습니다. 잘못된 인수"오류

  17. 17

    새로 설치할 때 부팅 시간이 매우 느립니다. 잘못된 fstab 때문일까요? 다음에 무엇을 해야할지 모르겠다

  18. 18

    배열 선택을 취소 할 때 foreach ()에 잘못된 인수가 제공되었습니다.

  19. 19

    Maven 오프라인 빌드가 잘못된 문자로 Google Guava URL을 권장 할 때 실패합니다.

  20. 20

    반복을 사용할 때 키워드에 전달 된 인수의 수가 잘못되었습니다.

  21. 21

    새 테이블을 조인 할 때 잘못된 데이터가 표시됨

  22. 22

    잘못된 로그인을 사용할 때 오류 메시지가 작동하지 않는 이유는 무엇입니까?

  23. 23

    IIS 및 Windows 인증을 사용할 때 잘못된 사용자 이름이 발생하는 원인은 무엇입니까?

  24. 24

    인증 사용자 데이터를 표시하려고 할 때 foreach ()에 대해 잘못된 인수가 제공되었습니다.

  25. 25

    팬더에 인코딩을 지정할 때에도 잘못된 인코딩

  26. 26

    전화 인증 자격 증명을 만드는 데 사용 된 확인 ID가 잘못된 iOS입니다.

  27. 27

    배열의 값을 확인할 때 잘못된 데이터를 어떻게 설명 할 수 있습니까?

  28. 28

    msgmerge : 달러 기호가있는 가격을 인쇄 할 때`잘못된 제어 시퀀스 '

  29. 29

    이것을 실행하려고 할 때 "잘못된 NEW 또는 OLD 사양"메시지가 나타납니다.

뜨겁다태그

보관