Função NetUserAdd (lmaccess.h)

A função NetUserAdd adiciona uma conta de usuário e atribui uma senha e um nível de privilégio.

Sintaxe

NET_API_STATUS NET_API_FUNCTION NetUserAdd(
  [in]  LPCWSTR servername,
  [in]  DWORD   level,
  [in]  LPBYTE  buf,
  [out] LPDWORD parm_err
);

Parâmetros

[in] servername

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.

Essa cadeia de caracteres será Unicode se _WIN32_WINNT ou FORCE_UNICODE estiverem definidos.

[in] level

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

Valor Significado
1
Especifica informações sobre a conta de usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1 .

Quando você especifica esse nível, a chamada inicializa determinados atributos para seus valores padrão. Para obter mais informações, consulte a seção Comentários a seguir.

2
Especifica informações de nível um e atributos adicionais sobre a conta de usuário. O parâmetro buf aponta para uma estrutura USER_INFO_2 .
3
Especifica informações de nível dois e atributos adicionais sobre a conta de usuário. Esse nível é válido somente em servidores. O parâmetro buf aponta para uma estrutura USER_INFO_3 . Observe que é recomendável que você use USER_INFO_4 em vez disso.
4
Especifica informações de nível dois e atributos adicionais sobre a conta de usuário. Esse nível é válido somente em servidores. O parâmetro buf aponta para uma estrutura USER_INFO_4 .

Windows 2000: Não há suporte para esse nível.

[in] buf

Ponteiro para o buffer que especifica os dados. O formato desses dados depende do valor do parâmetro level . Para obter mais informações, consulte Buffers de função de gerenciamento de rede.

[out] parm_err

Ponteiro para um valor que recebe o índice do primeiro membro da estrutura de informações do usuário que causa ERROR_INVALID_PARAMETER. Se esse parâmetro for NULL, o índice não será retornado com erro. Para obter mais informações, consulte a função NetUserSetInfo .

Retornar valor

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 códigos de erro a seguir.

Código de retorno Descrição
ERROR_ACCESS_DENIED
O usuário não tem acesso às informações solicitadas.
NERR_InvalidComputer
O nome do computador é inválido.
NERR_NotPrimary
A operação é permitida somente no controlador de domínio primário do domínio.
NERR_GroupExists
O grupo já existe.
NERR_UserExists
A conta de usuário já existe.
NERR_PasswordTooShort
A senha é menor do que o necessário. (A senha também pode ser longa demais, ser muito recente no histórico de mudança, não ter caracteres exclusivos suficientes ou não atender outro requisito de política de senha.)

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 de usuário de gerenciamento de rede. Para obter mais informações, consulte IADsUser e IADsComputer.

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 somente administradores de domínio e operadores de conta chamem essa função. Em um servidor membro ou estação de trabalho, somente administradores e usuários avançados podem chamar essa função. Para obter mais informações, 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 contêiner de usuário é usado para executar a marcar de acesso para essa função. O chamador deve ser capaz de criar objetos filho da classe de usuário.

Os usuários do servidor devem usar um sistema no qual o servidor cria uma conta do sistema para o novo usuário. A criação dessa conta é controlada por vários parâmetros no arquivo LanMan.ini do servidor.

Se o usuário recém-adicionado já existir como um usuário do sistema, o membro usri1_home_dir da estrutura USER_INFO_1 será ignorado.

Quando você chama a função NetUserAdd e especifica o nível de informações 1, a chamada inicializa os membros adicionais nas estruturas USER_INFO_2, USER_INFO_3 e USER_INFO_4 para seus valores padrão. Você pode alterar os valores padrão fazendo chamadas subsequentes para a função NetUserSetInfo . Os valores padrão fornecidos são listados a seguir. (O prefixo usriX indica que o membro pode começar com vários prefixos, por exemplo, usri2_ ou usri4_.)

Membro Valor padrão
usriX_auth_flags Nenhum (0)
usriX_full_name None (cadeia de caracteres nula)
usriX_usr_comment None (cadeia de caracteres nula)
usriX_parms None (cadeia de caracteres nula)
usriX_workstations All (cadeia de caracteres nula)
usriX_acct_expires Nunca (TIMEQ_FOREVER)
usriX_max_storage Ilimitado (USER_MAXSTORAGE_UNLIMITED)
usriX_logon_hours Logon permitido a qualquer momento (cada elemento 0xFF; todos os bits definidos como 1)
usriX_logon_server Qualquer controlador de domínio (\\*)
usriX_country_code 0
usriX_code_page 0
 

Os nomes de conta de usuário são limitados a 20 caracteres e os nomes de grupo são limitados a 256 caracteres. Além disso, os nomes de conta não podem ser encerrados por um período e não podem incluir vírgulas ou qualquer um dos seguintes caracteres imprimíveis: ", /, , [, ], :, |, <, >, +, =, ;, ?, *. Os nomes também não podem incluir caracteres no intervalo de 1 a 31, que são não imprimíveis.

Exemplos

O exemplo de código a seguir demonstra como adicionar uma conta de usuário e atribuir um nível de privilégio usando uma chamada para a função NetUserAdd . O exemplo de código preenche os membros da estrutura USER_INFO_1 e chama NetUserAdd, especificando o nível de informações 1.

#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[])
{
   USER_INFO_1 ui;
   DWORD dwLevel = 1;
   DWORD dwError = 0;
   NET_API_STATUS nStatus;

   if (argc != 3)
   {
      fwprintf(stderr, L"Usage: %s \\\\ServerName UserName\n", argv[0]);
      exit(1);
   }
   //
   // Set up the USER_INFO_1 structure.
   //  USER_PRIV_USER: name identifies a user, 
   //    rather than an administrator or a guest.
   //  UF_SCRIPT: required 
   //
   ui.usri1_name = argv[2];
   ui.usri1_password = argv[2];
   ui.usri1_priv = USER_PRIV_USER;
   ui.usri1_home_dir = NULL;
   ui.usri1_comment = NULL;
   ui.usri1_flags = UF_SCRIPT;
   ui.usri1_script_path = NULL;
   //
   // Call the NetUserAdd function, specifying level 1.
   //
   nStatus = NetUserAdd(argv[1],
                        dwLevel,
                        (LPBYTE)&ui,
                        &dwError);
   //
   // If the call succeeds, inform the user.
   //
   if (nStatus == NERR_Success)
      fwprintf(stderr, L"User %s has been successfully added on %s\n",
               argv[2], argv[1]);
   //
   // Otherwise, print the system error.
   //
   else
      fprintf(stderr, "A system error has occurred: %d\n", nStatus);

   return 0;
}

Requisitos

Requisito Valor
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

NetUserDel

NetUserEnum

NetUserSetInfo

Funções de gerenciamento de rede

Visão geral do gerenciamento de rede

USER_INFO_1

USER_INFO_2

USER_INFO_4

Funções de usuário