2014-01-30 2 views
6

C++의 LogonUser() API 함수에 문제가 있습니다. 이 컴퓨터를 테스트하고있는 것은 도메인이 아닙니다. 테스트 대상 계정은 컴퓨터에 있지만 올바르지 않은 도메인을 제공하면 로그인을 인증합니다.LogonUser()가 컴퓨터가 도메인에 있지 않을 때 유효하지 않은 도메인에 대해 사용자를 인증하지 않습니다.

이것은 나에게 맞는 것 같지 않습니다.

HANDLE token; 

if (!LogonUser("LocalUser", "InvalidDomain", "Password", 
       LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &token)) 
{ 
    unsigned long error = GetLastError(); 
} 

이것은 올바른 동작입니까?

답변

6

:

나는이 페이지에 내 대답을 기반으로. 이것은 당신이보고있는 것을 설명합니다.

이것을 확인할 수 있습니다. 실제 도메인 사용자를 사용하여 인증을 시도하십시오 (같은 이름의 로컬 계정이 없는지 확인하십시오). 로그온에 실패해야합니다.

예외가 있습니다. 새로 작성하지 않고 기존 로그온을 수정하는 LOGON32_LOGON_NEW_CREDENTIALS 플래그를 사용하면 원격 리소스에 액세스하려고 시도 할 때까지 인증되지 않기 때문에 도메인 로그온은 항상 성공합니다.

+0

나는 그렇게 생각하지 않는다. 'loginadmin = LogonUser (L "jhadmin", L "leohp", L "jhadmin", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, & hToken); 사용자 (jhadmin)는 실제 도메인 사용자이지만 도메인 이름 (leohp)은 유효하지 않습니다. 유효한 도메인은 leohpc입니다. 그러나 funtion 로그온 성공! – LEo

+0

@LEo 질문은 작업 그룹 구성원 인 컴퓨터에 관한 것입니다. 아마 당신은 도메인 회원에 대해 이야기하고 있습니까? – arx

+0

예. 그러나 LogonUser는 사용자 이름 (도메인 사용자)과 암호가 맞으면 유효하지 않은 도메인 이름을 확인할 수 없습니다. 왜?이게 올바른 행동인가요? – LEo

1

이 사이트에 따르면 "." (또는 "", 그러나 이것은 문서화되어 있지 않습니다)를 로컬 데이터베이스 만 사용하는 도메인으로 사용하십시오. ""의 문서화되지 않은 동작으로 로그인 정보가 잘못되었습니다. 도메인에서 사용자를 식별하지 못하면 해당 사용자를 로컬에서 식별하려고 시도합니다. 제가 도메인 매개 변수가 무시되도록 작업 그룹의 구성원은 도메인 로그온을 지원하지 않는 것으로 생각 http://msdn.microsoft.com/en-us/library/windows/desktop/aa378184(v=vs.85).aspx

관련 문제