共用方式為


管理信任的網域資訊

LSA 原則提供數個函式,可讓您用來建立、列舉和刪除信任的網域,以及設定和擷取信任的網域資訊。

您必須先取得 原則 物件的控制碼,才能管理受信任的網域資訊,如 開啟原則物件控制碼中所述。

您可以呼叫 LsaEnumerateTrustedDomainsEx來列舉信任的網域。

若要擷取信任網域的相關資訊,請呼叫 LsaQueryTrustedDomainInfoLsaQueryTrustedDomainInfoByName。 這兩個函式都會傳回相同的資訊;不過, LsaQueryTrustedDomainInfo 會依 SID 識別信任的網域, 而 LsaQueryTrustedDomainInfoByName 會依名稱識別信任的網域。

若要設定信任網域的資訊,請呼叫 LsaSetTrustedDomainInformationLsaSetTrustedDomainInfoByName。 如同查詢函式, 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;
}