Função NetUserModalsGet (lmaccess.h)

A função NetUserModalsGet recupera informações globais para todos os usuários e grupos globais no banco de dados de segurança, que é o banco de dados SAM (gerenciador de contas de segurança) ou, no caso de controladores de domínio, o Active Directory.

Sintaxe

NET_API_STATUS NET_API_FUNCTION NetUserModalsGet(
  [in, optional] LPCWSTR servername,
  [in]           DWORD   level,
  [out]          LPBYTE  *bufptr
);

Parâmetros

[in, optional] servername

Um ponteiro para uma cadeia de caracteres constante que especifica o nome DNS ou NetBIOS do servidor remoto no qual a função deve ser executada. Se esse parâmetro for NULL, o computador local será usado. Para obter mais informações, consulte a seção Comentários a seguir.

[in] level

O nível de informações dos dados solicitados. Esse parâmetro pode usar um dos valores a seguir.

Valor Significado
0
Retornar parâmetros de senha global. O parâmetro bufptr aponta para uma estrutura USER_MODALS_INFO_0 .
1
Retornar informações do servidor de logon e do controlador de domínio. O parâmetro bufptr aponta para uma estrutura de USER_MODALS_INFO_1 .
2
Retornar o nome de domínio e o identificador. O parâmetro bufptr aponta para uma estrutura de USER_MODALS_INFO_2 . Para obter mais informações, consulte a seção Comentários a seguir.
3
Retornar informações de bloqueio. O parâmetro bufptr aponta para uma estrutura de USER_MODALS_INFO_3 .
 

Um logon de sessão nulo pode chamar NetUserModalsGet anonimamente nos níveis de informações 0 e 3.

[out] bufptr

Um ponteiro para o buffer que recebe os dados. O formato desses dados depende do valor do parâmetro de nível .

O buffer para esses dados é alocado pelo sistema e o aplicativo deve chamar a função NetApiBufferFree para liberar a memória alocada quando os dados retornados não forem mais necessários. Para obter mais informações, consulte Buffers de função de gerenciamento de rede e Comprimentos de buffer de função de gerenciamento de rede.

Valor retornado

Se a função for bem-sucedida, o valor retornado será NERR_Success.

Se a função falhar, o valor retornado poderá ser um dos seguintes códigos de erro.

Código de retorno Descrição
ERROR_ACCESS_DENIED
O usuário não tem acesso às informações solicitadas.
ERROR_BAD_NETPATH
O caminho da rede não foi encontrado. Esse erro será retornado se o parâmetro servername não puder ser encontrado.
ERROR_INVALID_LEVEL
O nível de chamada do sistema não está correto. Esse erro será retornado se o parâmetro de nível não for um dos valores com suporte.
ERROR_INVALID_NAME
O nome do arquivo, o nome do diretório ou a sintaxe do rótulo de volume estão incorretos. Esse erro será retornado se a sintaxe do parâmetro servername estiver incorreta.
ERROR_WRONG_TARGET_NAME
O nome da conta de destino está incorreto. Esse erro é retornado para uma falha de logon em um parâmetro de nome de servidor remoto em execução no Windows Vista.
NERR_InvalidComputer
O nome do computador é inválido.

Comentários

Se você estiver programando para o Active Directory, poderá chamar determinados métodos ADSI (Active Directory Service Interface) para obter a mesma funcionalidade que você pode obter chamando as funções modais do usuário de gerenciamento de rede. Para obter mais informações, consulte IADsDomain.

Se você chamar essa função em um controlador de domínio que está executando o Active Directory, o acesso será permitido ou negado com base na ACL (lista de controle de acesso) do objeto protegível. A ACL padrão permite que todos os usuários autenticados e membros do grupo "Acesso compatível com o Pré-Windows 2000" exibam as informações. Se você chamar essa função em um servidor membro ou estação de trabalho, todos os usuários autenticados poderão exibir as informações. Para obter informações sobre acesso anônimo e restrição de acesso anônimo nessas plataformas, consulte Requisitos de segurança para as funções de gerenciamento de rede. Para obter mais informações sobre ACLs, ACEs e tokens de acesso, consulte Controle de Acesso Model.

O descritor de segurança do objeto Domain é usado para executar a marcar de acesso para essa função.

Para recuperar o SID ( identificador de segurança ) do domínio ao qual o computador pertence, chame a função NetUserModalsGet especificando uma estrutura USER_MODALS_INFO_2 e NULL no parâmetro servername . Se o computador não for membro de um domínio, a função retornará um ponteiro NULL .

Exemplos

O exemplo de código a seguir demonstra como recuperar informações globais para todos os usuários e grupos globais com uma chamada para a função NetUserModalsGet . O exemplo chama NetUserModalsGet, especificando o nível de informações 0 (USER_MODALS_INFO_0). Se a chamada for bem-sucedida, o exemplo imprimirá informações de senha global. Por fim, o exemplo de código libera a memória alocada para o buffer de informações.

#ifndef UNICODE
#define UNICODE
#endif
#pragma comment(lib, "netapi32.lib")

#include <stdio.h>
#include <windows.h> 
#include <lm.h>

int wmain(int argc, wchar_t *argv[])
{
   DWORD dwLevel = 0;
   USER_MODALS_INFO_0 *pBuf = NULL;
   NET_API_STATUS nStatus;
   LPTSTR pszServerName = NULL;

   if (argc > 2)
   {
      fwprintf(stderr, L"Usage: %s [\\\\ServerName]\n", argv[0]);
      exit(1);
   }
   // The server is not the default local computer.
   //
   if (argc == 2)
      pszServerName = (LPTSTR) argv[1];
   //
   // Call the NetUserModalsGet function; specify level 0.
   //
   nStatus = NetUserModalsGet((LPCWSTR) pszServerName,
                              dwLevel,
                              (LPBYTE *)&pBuf);
   //
   // If the call succeeds, print the global information.
   //
   if (nStatus == NERR_Success)
   {
      if (pBuf != NULL)
      {
         printf("\tMinimum password length:  %d\n", pBuf->usrmod0_min_passwd_len);
         printf("\tMaximum password age (d): %d\n", pBuf->usrmod0_max_passwd_age/86400);
         printf("\tMinimum password age (d): %d\n", pBuf->usrmod0_min_passwd_age/86400);
         printf("\tForced log off time (s):  %d\n", pBuf->usrmod0_force_logoff);
         printf("\tPassword history length:  %d\n", pBuf->usrmod0_password_hist_len);
      }
   }
   // Otherwise, print the system error.
   //
   else
      fprintf(stderr, "A system error has occurred: %d\n", nStatus);
   //
   // Free the allocated memory.
   //
   if (pBuf != NULL)
      NetApiBufferFree(pBuf);

   return 0;
}

Requisitos

   
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho lmaccess.h (inclua Lm.h)
Biblioteca Netapi32.lib
DLL Netapi32.dll

Confira também

NetUserModalsSet

Funções de gerenciamento de rede

Visão geral do gerenciamento de rede

USER_MODALS_INFO_0

USER_MODALS_INFO_1

USER_MODALS_INFO_2

USER_MODALS_INFO_3

Funções modais do usuário