信頼されたドメイン情報の管理
LSA ポリシーには、信頼されたドメインの作成、列挙、削除、および信頼されたドメイン情報の設定と取得に使用できるいくつかの機能が用意されています。
信頼されたドメイン情報を管理するには、「ポリシー オブジェクト ハンドルを開く 」 で説明されているように、アプリケーションで Policy オブジェクトへのハンドルを取得する必要があります。
LsaEnumerateTrustedDomainsEx を呼び出すことで、信頼されたドメインを列挙できます。
信頼されたドメインに関する情報を取得するには、 LsaQueryTrustedDomainInfo または LsaQueryTrustedDomainInfoByName を呼び出します。 どちらの関数も同じ情報を返します。ただし、 LsaQueryTrustedDomainInfo は SID によって信頼されたドメインを識別し、 LsaQueryTrustedDomainInfoByName は 信頼されたドメインを名前で識別します。
信頼されたドメインの情報を設定するには、 LsaSetTrustedDomainInformation または LsaSetTrustedDomainInfoByName を呼び出します。 クエリ関数と同様に、 LsaSetTrustedDomainInformation は SID によって信頼されたドメインを識別し、 LsaSetTrustedDomainInfoByName は信頼されたドメインを名前で識別します。
アプリケーションは 、LsaDeleteTrustedDomain を呼び出すことによって、信頼されたドメインの信頼関係を取り消すことができます。
次の例では、ローカル システムの信頼されたドメインを列挙します。
#include <windows.h>
void EnumerateTrusts(LSA_HANDLE PolicyHandle)
{
LSA_ENUMERATION_HANDLE hEnum=0;
PLSA_TRUST_INFORMATION TrustInfo = NULL;
ULONG ulReturned = 0;
NTSTATUS Status = 0;
ULONG i;
WCHAR StringBuffer[256];
// Enumerate the trusted domains until there are no more to return.
do
{
Status = LsaEnumerateTrustedDomains(
PolicyHandle, // an open policy handle
&hEnum, // enumeration tracker
(PVOID*)&TrustInfo, // buffer to receive data
32000, // recommended buffer size
&ulReturned // number of items returned in TrustInfo
);
// Check the return status for errors.
if((Status != STATUS_SUCCESS) &&
(Status != STATUS_MORE_ENTRIES) &&
(Status != STATUS_NO_MORE_ENTRIES))
{
// Handle the error.
wprintf(L"Error occurred enumerating domains %lu\n",
LsaNtStatusToWinError(Status));
return;
}
wprintf(L"Status %lu\n", LsaNtStatusToWinError(Status));
// Process the trusted domain information.
for (i=0;i<ulReturned; i++)
{
// LSA_Unicode strings might not be null-terminated.
if(TrustInfo[i].Name.Length < 256)
{
wcsncpy_s(StringBuffer,
256,
TrustInfo[i].Name.Buffer,
TrustInfo[i].Name.Length
);
// Guarantee that StringBuffer is null-terminated.
StringBuffer[TrustInfo[i].Name.Length] = NULL;
}
else
{
fprintf(stderr, "Name too long for string buffer.\n");
exit(1);
}
wprintf(L"Enum Trusted Domain - %ws ", StringBuffer);
}
// Free the buffer.
if (TrustInfo != NULL)
{
LsaFreeMemory(TrustInfo);
TrustInfo = NULL;
}
} while (Status != STATUS_NO_MORE_ENTRIES);
return;
}