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 |
---|---|
|
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. |
|
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 . |
|
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. |
|
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 |
---|---|
|
O usuário não tem acesso às informações solicitadas. |
|
O nome do computador é inválido. |
|
A operação é permitida somente no controlador de domínio primário do domínio. |
|
O grupo já existe. |
|
A conta de usuário já existe. |
|
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
Funções de gerenciamento de rede