2014-03-13 2 views
2

Windows 7 64 비트에서 주어진 사용자에 대해 SID를 가져 오는 작은 응용 프로그램이 있습니다. 응용 프로그램은 64 비트로 컴파일됩니다.LookupAccountName이 Windows 7에서 1332로 실패 함 64 비트

PSID   Sid; 
    DWORD  cbReferencedDomainName, cbSid; 
    LPTSTR  ReferencedDomainName; 
    SID_NAME_USE eUse; 
    DWORD dwRc = 0; 

    printf("Lookup %s\n",lpszAccountName); 
    cbReferencedDomainName = cbSid = 0; 
    if (LookupAccountName(NULL, lpszAccountName, 0, &cbSid, 
         0, &cbReferencedDomainName, &eUse)) { 
    printf("LookupAccountName passed\n"); 

    return 0; 
    } 

    dwRc = GetLastError(); 
    printf("LookupAccountName RC (%d)\n",dwRc); 

나는 UID의 @ 호스트 이름 형식으로 사용자 이름을 전달하고있다. GetLastError가 1332 - "계정 이름과 보안 ID 간의 매핑이 수행되지 않았습니다."와 함께 컴퓨터에있는 모든 사용자가 API를 실패합니다. 도와주세요.

+0

잘못된 형식입니다. 이메일 주소가 아닙니다. 대신'domain \ username'을 사용하십시오. –

+0

감사합니다. 컴퓨터가 도메인에 없습니다. machinename \ user 시도했지만 또한 실패합니다. – Shashi

+0

'. \ username'을 사용하면 컴퓨터 이름을 잘못 쓰는 것을 피할 수 있습니다. C 프로그램에서 두 개의 백 슬래시를 사용하는 것을 잊지 마십시오. –

답변

1

동료와 나 자신이이 문제를 다시 조사했습니다. 우리는이 문제가 Visual Studio 프로젝트 설정에 사용 된 문자 집합으로 인한 것임을 발견했습니다. 기본적으로 Visual Studio에서는 문자 집합을 Use Unicode Character Set으로 설정합니다. 그러나 우리의 응용 프로그램은 명령 행에서 입력을 읽어야하기 때문에 우리의 응용 프로그램은 ASCII 문자 세트를 사용해야합니다. 따라서 명령 행에서 읽은 입력은 ASCII 였지만 입력을 LookupAccountName API의 와이드 문자 버전, 즉 LookupAccountNameW으로 전달했습니다. 이로 인해 API가 1332 오류 코드를 반환합니다.

그래서 우리는 Character Set을 "Not Set"로 변경하고 응용 프로그램을 다시 컴파일했습니다. 이렇게하면 올바른 양식의 API 인 LookupAccountNamA이 사용됩니다. 이 문제가 해결되었습니다. Character Set를 ""설정하면 문제도 해결됩니다. 이 도움이 될 것입니다

enter image description here

희망.

관련 문제