在名稱和 SID 之間翻譯

本機安全性授權單位 (LSA) 提供函式,以在使用者、群組和本機群組名稱之間轉譯,以及其對應的安全識別碼 (SID) 值。 若要尋找帳戶名稱,請呼叫 LsaLookupNames 函 式。 此函式會以 RID/網域索引組的形式傳回 SID。 若要取得 SID 作為單一元素,請呼叫 LsaLookupNames2 函式。 若要找出 SID,請呼叫 LsaLookupSids

這些函式可以從本機系統信任的任何網域轉譯名稱和 SID 資訊。

在帳戶名稱和 SID 之間翻譯之前,您的應用程式必須取得本機 Policy 物件的控制碼,如 開啟原則物件控制碼所示。

下列範例會根據帳戶名稱來查閱帳戶的 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 會將 Unicode 字串轉換成 LSA_UNICODE_STRING 結構。 此函式的程式碼會顯示在使用 LSA Unicode 字串中。

注意

這些轉譯函式主要是由許可權編輯器用來顯示 存取控制清單 (ACL) 資訊。 許可權編輯器應該一律使用名稱或安全性識別碼SID 所在系統的Policy物件來呼叫這些函式。 這可確保在翻譯期間參考一組適當的受信任網域。

 

Windows 存取控制也提供可在 SID 與帳戶名稱之間執行轉譯的函式:LookupAccountNameLookupAccountSid。 如果您的應用程式需要查閱帳戶名稱或 SID,而且不使用其他 LSA 原則功能,請使用 Windows 存取控制 函式,而不是 LSA 原則函式。 如需這些函式的詳細資訊,請參閱存取控制