Share via


Administración de información de directivas

LSA proporciona funciones que los administradores pueden usar para consultar y establecer información de directiva global para el equipo local y el dominio.

Para poder administrar la información de directiva, la aplicación debe obtener un identificador para el objeto Policy local, como se muestra en Apertura de un identificador de objeto de directiva. Las funciones que administran la información de la directiva requieren este identificador.

Para recuperar información sobre la directiva de seguridad local, llame a LsaQueryInformationPolicy. Para establecer la directiva de seguridad local, llame a LsaSetInformationPolicy. La descripción de la POLICY_INFORMATION_CLASS enumeración detalla los tipos de información de directiva que se pueden consultar o establecer.

En el ejemplo siguiente se muestra cómo obtener información de dominio de cuenta de un sistema, dado un identificador al objeto Policy del sistema.

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