이름과 SID 간 번역

LSA( 로컬 보안 기관 )는 사용자, 그룹 및 로컬 그룹 이름과 해당 SID( 보안 식별자 ) 값 간에 변환하는 함수를 제공합니다. 계정 이름을 찾으려면 LsaLookupNames 함수를 호출합니다 . 이 함수는 SID를 RID/도메인 인덱스 쌍으로 반환합니다. SID를 단일 요소로 얻으려면 LsaLookupNames2 함수를 호출합니다. SID를 찾으려면 LsaLookupSids를 호출합니다.

이러한 함수는 로컬 시스템에서 신뢰하는 모든 도메인에서 이름과 SID 정보를 변환할 수 있습니다.

계정 이름과 SID 간에 변환하려면 먼저 애플리케이션이 정책 개체 핸들 열기에 설명된 대로 로컬 정책 개체에 대한 핸들을 가져와야 합니다.

다음 예제에서는 계정 이름이 지정된 계정의 SID를 조회합니다.

void GetSIDInformation (LPWSTR AccountName,LSA_HANDLE PolicyHandle)
{
  LSA_UNICODE_STRING lucName;
  PLSA_TRANSLATED_SID ltsTranslatedSID;
  PLSA_REFERENCED_DOMAIN_LIST lrdlDomainList;
  LSA_TRUST_INFORMATION myDomain;
  NTSTATUS ntsResult;
  PWCHAR DomainString = NULL;

  // Initialize an LSA_UNICODE_STRING with the name.
  if (!InitLsaString(&lucName, AccountName))
  {
         wprintf(L"Failed InitLsaString\n");
         return;
  }

  ntsResult = LsaLookupNames(
     PolicyHandle,     // handle to a Policy object
     1,                // number of names to look up
     &lucName,         // pointer to an array of names
     &lrdlDomainList,  // receives domain information
     &ltsTranslatedSID // receives relative SIDs
  );
  if (STATUS_SUCCESS != ntsResult) 
  {
    wprintf(L"Failed LsaLookupNames - %lu \n",
      LsaNtStatusToWinError(ntsResult));
    return;
  }

  // Get the domain the account resides in.
  myDomain = lrdlDomainList->Domains[ltsTranslatedSID->DomainIndex];
  DomainString = (PWCHAR) LocalAlloc(LPTR, myDomain.Name.Length + 1);
  wcsncpy_s(DomainString,
     myDomain.Name.Length + 1, 
     myDomain.Name.Buffer, 
     myDomain.Name.Length);

  // Display the relative Id. 
  wprintf(L"Relative Id is %lu in domain %ws.\n",
    ltsTranslatedSID->RelativeId,
    DomainString);

  LocalFree(DomainString);
  LsaFreeMemory(ltsTranslatedSID);
  LsaFreeMemory(lrdlDomainList);
}

앞의 예제에서 InitLsaString 함수는 유니코드 문자열을 LSA_UNICODE_STRING 구조체로 변환합니다. 이 함수의 코드는 LSA 유니코드 문자열 사용에 표시됩니다.

참고

이러한 변환 함수는 주로 권한 편집기에서 ACL( 액세스 제어 목록 ) 정보를 표시하는 데 사용할 수 있도록 제공됩니다. 권한 편집기는 이름 또는 보안 식별자 SID가 있는 시스템의 정책 개체를 사용하여 항상 이러한 함수를 호출해야 합니다. 이렇게 하면 변환 중에 적절한 신뢰할 수 있는 도메인 집합이 참조됩니다.

 

Windows Access Control SID와 계정 이름 간에 변환을 수행하는 함수인 LookupAccountNameLookupAccountSid도 제공합니다. 애플리케이션이 계정 이름 또는 SID를 조회해야 하고 추가 LSA 정책 기능을 사용하지 않는 경우 LSA 정책 함수 대신 Windows Access Control 함수를 사용합니다. 이러한 함수에 대한 자세한 내용은 Access Control 참조하세요.