Verwalten von Informationen zu vertrauenswürdigen Domänen

LSA Policy bietet mehrere Funktionen, mit denen Sie vertrauenswürdige Domänen erstellen, aufzählen und löschen sowie vertrauenswürdige Domäneninformationen festlegen und abrufen können.

Bevor Sie vertrauenswürdige Domäneninformationen verwalten können, muss Ihre Anwendung ein Handle für ein Richtlinienobjekt erhalten, wie unter Öffnen eines Richtlinienobjekthandlers erläutert.

Sie können die vertrauenswürdigen Domänen aufzählen, indem Sie LsaEnumerateTrustedDomainsEx aufrufen.

Rufen Sie zum Abrufen von Informationen zu einer vertrauenswürdigen Domäne entweder LsaQueryTrustedDomainInfo oder LsaQueryTrustedDomainInfoByName auf. Beide Funktionen geben die gleichen Informationen zurück. LsaQueryTrustedDomainInfo identifiziert die vertrauenswürdige Domäne jedoch nach SID, und LsaQueryTrustedDomainInfoByName identifiziert die vertrauenswürdige Domäne nach Namen.

Rufen Sie zum Festlegen von Informationen für eine vertrauenswürdige Domäne entweder LsaSetTrustedDomainInformation oder LsaSetTrustedDomainInfoByName auf. Wie bei den Abfragefunktionen identifiziert LsaSetTrustedDomainInformation die vertrauenswürdige Domäne nach SID, während LsaSetTrustedDomainInfoByName die vertrauenswürdige Domäne nach Namen identifiziert.

Ihre Anwendung kann eine Vertrauensstellung für eine vertrauenswürdige Domäne widerrufen, indem sie LsaDeleteTrustedDomain aufruft.

Im folgenden Beispiel werden die vertrauenswürdigen Domänen für das lokale System aufzählt.

#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;
}