Freigeben über


Verwalten von Richtlinieninformationen

Der LSA bietet Funktionen, mit denen Administratoren globale Richtlinieninformationen für den lokalen Computer und die Domäne abfragen und festlegen können.

Bevor Sie Richtlinieninformationen verwalten können, muss Ihre Anwendung ein Handle für das lokale Policy-Objekt abrufen, wie unter Öffnen eines Richtlinienobjekthandles veranschaulicht. Dieses Handle ist für die Funktionen erforderlich, die Richtlinieninformationen verwalten.

Um Informationen zur lokalen Sicherheitsrichtlinie abzurufen, rufen Sie LsaQueryInformationPolicy auf. Um eine lokale Sicherheitsrichtlinie festzulegen, rufen Sie LsaSetInformationPolicy auf. Die Beschreibung der POLICY_INFORMATION_CLASS Enumeration enthält die Typen von Richtlinieninformationen, die abgefragt oder festgelegt werden können.

Im folgenden Beispiel wird veranschaulicht, wie Sie die Kontodomäneninformationen eines Systems abrufen, indem Sie ein Handle für das Policy-Objekt des Systems erhalten.

#include <windows.h>

BOOL GetAccountDomainInfo(LSA_HANDLE PolicyHandle)
{
  NTSTATUS ntsResult = STATUS_SUCCESS;
  PPOLICY_ACCOUNT_DOMAIN_INFO pPADInfo = NULL;
  PWCHAR name = NULL;
  UINT nameSize;
  
  ntsResult = LsaQueryInformationPolicy(
    PolicyHandle,                   // Open handle to a Policy object.
    PolicyAccountDomainInformation, // The information to get.
    (PVOID *)&pPADInfo              // Storage for the information.
  );

  if (ntsResult == STATUS_SUCCESS)
  {  
    // There is no guarantee that the LSA_UNICODE_STRING buffer
    // is null-terminated, so copy the name to a buffer that is.
    nameSize =  pPADInfo->DomainName.Length + 1 * sizeof(WCHAR);
    name = (WCHAR *) LocalAlloc(LPTR, nameSize);
    if (!name)
    {
        wprintf(L"Failed LocalAlloc\n");
        exit(1);
    }
    wcsncpy_s(name, nameSize, pPADInfo->DomainName.Buffer,
        pPADInfo->DomainName.Length);
    wprintf(L"The account domain name is %ws\n", name);
    LocalFree(name);
    if (STATUS_SUCCESS != LsaFreeMemory(pPADInfo))
        wprintf(L"LsaFreeMemory error\n");
  }
  else
  {
    // Show the corresponding win32 error code.
    wprintf(
        L"Error obtaining account domain information - (win32) %lu\n",
        LsaNtStatusToWinError(ntsResult));
  }

  return !ntsResult;
}