LsaLookupSids2 函式 (ntsecapi.h)

LsaLookupSids2 函式會查閱對應到安全性標識碼陣列的名稱, (SID) ,並支援因特網提供者身分識別。 如果 LsaLookupSids2 找不到對應至 SID 的名稱,此函式會以字元形式傳回 SID。 您應該使用此函式,而不是 LsaLookupSids 函 式。

語法

NTSTATUS LsaLookupSids2(
  [in]  LSA_HANDLE                  PolicyHandle,
  [in]  ULONG                       LookupOptions,
  [in]  ULONG                       Count,
  [in]  PSID                        *Sids,
  [out] PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,
  [out] PLSA_TRANSLATED_NAME        *Names
);

參數

[in] PolicyHandle

Policy 物件的句柄。 此句柄必須具有POLICY_LOOKUP_NAMES訪問許可權。 如需詳細資訊,請參閱 開啟原則物件句柄

[in] LookupOptions

修改查閱行為的旗標。

意義
LSA_LOOKUP_DISALLOW_CONNECTED_ACCOUNT_INTERNET_SID
不允許來自已連線帳戶之識別提供者的因特網 SID。 已連線的帳戶是本機 SAM 資料庫中有對應陰影帳戶的帳戶,這些帳戶已連線到在線識別提供者。 例如,MicrosoftAccount 是已連線的帳戶。
LSA_LOOKUP_PREFER_INTERNET_NAMES
傳回因特網名稱。 否則會傳回 nt4 樣式名稱, (domain\username) 。 例外狀況是指定 Microsoft 帳戶因特網 SID,在此情況下會傳回因特網名稱,除非指定 LSA_LOOKUP_DISALLOW_NON_WINDOWS_INTERNET_SID
LSA_LOOKUP_RETURN_LOCAL_NAMES
即使因特網提供者身分識別,一律會傳回本機 SAM 帳戶名稱。

[in] Count

指定 Sids 陣列中的 SID 數目。 這也是 Names 陣列中傳回的項目數。 此值必須小於或等於 20480。

[in] Sids

要查閱之 SID 指標陣列的指標。 SID 可以是已知的 SID、使用者、群組或本地組帳戶 SID 或網域 SID。

[out] ReferencedDomains

接收 指向LSA_REFERENCED_DOMAIN_LIST 結構的指標。 這個結構的 Domains 成員是數位,其中包含找到 SID 的每個定義域專案。 每個網域的專案都包含網域的 SID 和一般名稱。 針對 Windows 網域,一般名稱是 NetBIOS 名稱。 對於非 Windows 網域的連結,一般名稱是該網域的識別名稱,或為 NULL

當您不再需要資訊時,請將傳回的指標傳遞至 LsaFreeMemory。 即使函式失敗並出現錯誤碼STATUS_NONE_MAPPEDSTATUS_SOME_NOT_MAPPED,也必須釋放此記憶體

[out] Names

接收 LSA_TRANSLATED_NAME 結構的陣列指標。 Names 陣列中的每個專案都包含 Sids 陣列中對應項目的名稱資訊。 針對帳戶 SID,每個結構的 Name 成員都包含帳戶的隔離名稱。 對於網域 SID,Name 成員無效。

Names 陣列中每個專案的 DomainIndex 成員是 ReferencedDomains 參數所傳回 Domains 陣列中專案的索引。 索引會識別找到 SID 所在網域的 Domains 陣列。

當您不再需要資訊時,請將傳回的指標傳遞至 LsaFreeMemory。 即使函式失敗並出現錯誤碼STATUS_NONE_MAPPEDSTATUS_SOME_NOT_MAPPED,也必須釋放此記憶體

傳回值

如果函式成功,則傳回值是下列其中一個 NTSTATUS 值。

傳回碼 Description
STATUS_SOME_NOT_MAPPED
某些 SID 無法轉譯。 這是參考層級傳回值。
STATUS_SUCCESS
找到並成功翻譯所有 SID。
 

如果函式失敗,傳回值為 NTSTATUS 程式碼,可以是下列其中一個值或其中一個 LSA原則函數傳回值

傳回碼 Description
STATUS_NONE_MAPPED
未翻譯任何 SID。 這是錯誤層級傳回值。
STATUS_TOO_MANY_SIDS
Sids 陣列參數太大。
 

您可以使用 LsaNtStatusToWinError 函 式,將 NTSTATUS 程式代碼轉換成 Windows 錯誤碼。

備註

旗標LSA_LOOKUP_PREFER_INTERNET_NAMES應該用於因特網帳戶,例如 MicrosoftAccount 和 Azure Active Directory 帳戶。 當指定此旗標時,SID-Name 查閱會以 MicrosoftAccount\foo@outlook.com 或 AzureAD\foo@contoso.com 格式傳回帳戶的 UPN。 針對 Microsoft 帳戶,如果指定此旗標,本機 SAM SID 和因特網 SID 都會傳回 UPN。 如果未指定LSA_LOOKUP_PREFER_INTERNET_NAMES,則會針對 AAD 帳戶傳回 AzureAD\foo 格式的 NT4 樣式名稱。 NT4 樣式名稱是計算機特有的名稱,應該仔細評估其使用方式,並盡可能避免。 如果未指定LSA_LOOKUP_PREFER_INTERNET_NAMES MicrosoftAccounts,則帳戶的本機 SID 會轉譯為本機 SAM 名稱,而因特網 SID 會轉譯為 UPN 名稱。

針對帳戶 SID,Name 成員中傳回的字串是帳戶的隔離名稱 (,例如user_name) 。 如果您需要帳戶的複合名稱 (例如 Acctg\user_name) ,請從 ReferencedDomains 緩衝區取得功能變數名稱,並附加反斜杠和隔離的名稱。

如果 LsaLookupSids2 函式無法轉譯 SID,此函式會使用下列演算法:

  1. 如果已知 SID 的網域, ReferencedDomains 緩衝區會包含網域的專案, 而且 Names 參數中傳回的字串是帳戶相對標識符的 Unicode 表示法, (RID) 。
  2. 如果不知道 SID 的網域, Names 參數中傳回的字串是整個 SID 的 Unicode 表示法, 而且 ReferencedDomains 緩衝區中沒有此 SID 的網域記錄。
除了查閱本機帳戶、本機網域帳戶和明確信任的網域帳戶之外, LsaLookupSids2 還可以查閱 Windows 樹系中任何網域中任何帳戶的 SID,包括只出現在樹系中帳戶 SIDhistory 字段中的 SIDSIDhistory 字段會儲存已從另一個網域移動之帳戶的先前 SID。 若要執行這些搜尋,函式會查詢樹系的全域編錄。

規格需求

需求
最低支援的用戶端 Windows 8 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2012 [僅限傳統型應用程式]
目標平台 Windows
標頭 ntsecapi.h
程式庫 Advapi32.lib
Dll Advapi32.dll

另請參閱

LSA_REFERENCED_DOMAIN_LIST

LSA_TRANSLATED_NAME

LsaOpenPolicy