管理受信任的域信息
LSA Policy 提供了多个函数,可用于创建、枚举和删除受信任的域,以及设置和检索受信任的域信息。
在管理受信任的域信息之前,应用程序必须获取 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;
}