ローカル セキュリティ機関 (LSA) には、ユーザー、グループ、およびローカル グループ名とそれに対応する セキュリティ識別子 (SID) 値の間で変換する機能が用意されています。 アカウント名を見つけるには、LsaLookupNames 関数を呼び出します。 この関数は、SID を RID/ドメイン インデックス ペアとして返します。 SID を 1 つの要素として取得するには、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
<sTranslatedSID // 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 の名前または セキュリティ識別子が存在するシステムの ポリシー オブジェクト 使用して、これらの関数を常に呼び出す必要があります。 これにより、変換中に信頼されたドメインの適切なセットが参照されるようになります。
Windows Access Control には、SID とアカウント名の間で変換を行う関数も用意されています: LookupAccountName があり、LookupAccountSidがあります。 アプリケーションでアカウント名または SID を検索する必要があり、追加の LSA ポリシー機能を使用しない場合は、LSA ポリシー機能の代わりに Windows アクセス制御機能を使用します。 これらの関数の詳細については、「アクセス制御の」を参照してください。