Função NetUserSetInfo (lmaccess.h)

A função NetUserSetInfo define os parâmetros de uma conta de usuário.

Sintaxe

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

Parâmetros

[in] 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.

[in] username

Um ponteiro para uma cadeia de caracteres constante que especifica o nome da conta de usuário para a qual definir informações. Para obter mais informações, consulte a seção Comentários a seguir.

[in] level

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

Valor Significado
0
Especifica o nome da conta de usuário. O parâmetro buf aponta para uma estrutura de USER_INFO_0 . Use essa estrutura para especificar um novo nome de grupo. Para obter mais informações, consulte a seção Comentários a seguir.
1
Especifica informações detalhadas sobre a conta de usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1 .
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 .
21
Especifica um LAN Manager 2 criptografado unidirecional. Senha compatível com x. O parâmetro buf aponta para uma estrutura de USER_INFO_21 .
22
Especifica informações detalhadas sobre a conta de usuário. O parâmetro buf aponta para uma estrutura USER_INFO_22 .
1003
Especifica uma senha de usuário. O parâmetro buf aponta para uma estrutura de USER_INFO_1003 .
1005
Especifica um nível de privilégio de usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1005 .
1.006
Especifica o caminho do diretório base para o usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1006 .
1.007
Especifica um comentário a ser associado à conta de usuário. O parâmetro buf aponta para uma estrutura de USER_INFO_1007 .
1.008
Especifica atributos de conta de usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1008 .
1.009
Especifica o caminho para o arquivo de script de logon do usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1009 .
1.010
Especifica os privilégios de operador do usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1010 .
1.011
Especifica o nome completo do usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1011 .
1012
Especifica um comentário a ser associado ao usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1012 .
1014
Especifica os nomes das estações de trabalho das quais o usuário pode fazer logon. O parâmetro buf aponta para uma estrutura de USER_INFO_1014 .
1017
Especifica quando a conta de usuário expira. O parâmetro buf aponta para uma estrutura USER_INFO_1017 .
1020
Especifica os horários durante os quais o usuário pode fazer logon. O parâmetro buf aponta para uma estrutura USER_INFO_1020 .
1024
Especifica o código de país/região do usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1024 .
1051
Especifica o identificador relativo de um grupo global que representa o usuário registrado. O parâmetro buf aponta para uma estrutura USER_INFO_1051 .
1052
Especifica o caminho para o perfil de um usuário de rede. O parâmetro buf aponta para uma estrutura USER_INFO_1052 .
1053
Especifica a letra da unidade atribuída ao diretório base do usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1053 .

[in] buf

Um 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

Um 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 seção Comentários a seguir.

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.
ERROR_INVALID_PARAMETER
Um dos parâmetros de função é inválido. Para obter mais informações, consulte a seção Comentários a seguir.
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_SpeGroupOp
A operação não é permitida em grupos especiais especificados, que são grupos de usuários, grupos de administradores, grupos locais ou grupos de convidados.
NERR_LastAdmin
A operação não é permitida na última conta administrativa.
NERR_BadPassword
O nome ou a senha do compartilhamento é inválido.
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.)
NERR_UserNotFound
Não foi possível encontrar o nome de usuário.

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 objeto User é usado para executar a marcar de acesso para essa função.

Somente usuários ou aplicativos com privilégios administrativos podem chamar a função NetUserSetInfo para alterar a senha de um usuário. Quando um administrador chama NetUserSetInfo, a única restrição aplicada é que o novo comprimento da senha deve ser consistente com modais do sistema. Um usuário ou aplicativo que sabe a senha atual de um usuário pode chamar a função NetUserChangePassword para alterar a senha. Para obter mais informações sobre como chamar funções que exigem privilégios de administrador, consulte Executando com privilégios especiais.

Os membros do grupo local Administradores podem definir qualquer elemento de conta de usuário modificável. Todos os usuários podem definir o membro usri2_country_code da estrutura USER_INFO_2 (e o membro usri1024_country_code da estrutura USER_INFO_1024 ) para suas próprias contas.

Um membro do grupo local do Operador de Conta não pode definir detalhes para uma conta de classe administradores, conceder um privilégio de administrador de conta existente ou alterar o privilégio de operador de qualquer conta. Se você tentar alterar o nível de privilégio ou desabilitar a última conta com privilégio de Administrador no banco de dados de segurança , (o banco de dados SAM (gerenciador de contas de segurança) ou, no caso de controladores de domínio, o Active Directory), a função NetUserSetInfo falhará e retornará NERR_LastAdmin.

Para definir os seguintes sinalizadores de controle de conta de usuário, os seguintes privilégios e direitos de acesso de controle são necessários .

Sinalizador de controle de conta Privilégio ou direito necessário
UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION Privilégio SeEnableDelegationPrivilege, que é concedido aos Administradores por padrão.
UF_TRUSTED_FOR_DELEGATION SeEnableDelegationPrivilege.
UF_PASSWD_NOTREQD O controle "Atualizar senha não é necessária" diretamente no objeto Domain, que é concedido a usuários autenticados por padrão.
UF_DONT_EXPIRE_PASSWD O controle "Unexpire password" controla o acesso diretamente no objeto Domain, que é concedido a usuários autenticados por padrão.
UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED O acesso de controle "Habilitar senha criptografada por usuário reversivelmente" diretamente no objeto Domain, que é concedido a usuários autenticados por padrão.
UF_SERVER_TRUST_ACCOUNT O controle "Adicionar/remover réplica no domínio" controla o acesso diretamente no objeto Domain, que é concedido aos Administradores por padrão.
 

Para obter uma lista de constantes de privilégio, consulte Constantes de autorização.

A maneira correta de especificar o novo nome de uma conta é chamar NetUserSetInfo com USER_INFO_0 e especificar o novo valor usando o membro usri0_name . Se você chamar NetUserSetInfo com outros níveis de informações e especificar um valor usando um membro usriX_name , o valor será ignorado.

Observe que as chamadas para NetUserSetInfo podem alterar o diretório base somente para contas de usuário criadas pelo servidor de rede.

Se a função NetUserSetInfo retornar ERROR_INVALID_PARAMETER, você poderá usar o parâmetro parm_err para indicar o primeiro membro da estrutura de informações do usuário inválido. (Uma estrutura de informações do usuário começa com USER_INFO_ e seu formato é especificado pelo parâmetro level .) A tabela a seguir lista os valores que podem ser retornados no parâmetro parm_err e o membro da estrutura correspondente que está com erro. (O prefixo usri*_ indica que o membro pode começar com vários prefixos, por exemplo, usri10_ ou usri1003_.)

Valor Membro
USER_NAME_PARMNUM usri*_name
USER_PASSWORD_PARMNUM usri*_password
USER_PASSWORD_AGE_PARMNUM usri*_password_age
USER_PRIV_PARMNUM usri*_priv
USER_HOME_DIR_PARMNUM usri*_home_dir
USER_COMMENT_PARMNUM usri*_comment
USER_FLAGS_PARMNUM usri*_flags
USER_SCRIPT_PATH_PARMNUM usri*_script_path
USER_AUTH_FLAGS_PARMNUM usri*_auth_flags
USER_FULL_NAME_PARMNUM usri*_full_name
USER_USR_COMMENT_PARMNUM usri*_usr_comment
USER_PARMS_PARMNUM usri*_parms
USER_WORKSTATIONS_PARMNUM usri*_workstations
USER_LAST_LOGON_PARMNUM usri*_last_logon
USER_LAST_LOGOFF_PARMNUM usri*_last_logoff
USER_ACCT_EXPIRES_PARMNUM usri*_acct_expires
USER_MAX_STORAGE_PARMNUM usri*_max_storage
USER_UNITS_PER_WEEK_PARMNUM usri*_units_per_week
USER_LOGON_HOURS_PARMNUM usri*_logon_hours
USER_PAD_PW_COUNT_PARMNUM usri*_bad_pw_count
USER_NUM_LOGONS_PARMNUM usri*_num_logons
USER_LOGON_SERVER_PARMNUM usri*_logon_server
USER_COUNTRY_CODE_PARMNUM usri*_country_code
USER_CODE_PAGE_PARMNUM usri*_code_page
USER_PRIMARY_GROUP_PARMNUM usri*_primary_group_id
USER_PROFILE_PARMNUM usri*_profile
USER_HOME_DIR_DRIVE_PARMNUM usri*_home_dir_drive
 

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.

A função NetUserSetInfo não controla como os parâmetros de senha são protegidos quando enviados pela rede para um servidor remoto para alterar uma senha de usuário. Qualquer criptografia desses parâmetros é tratada pelo mecanismo RPC (Chamada de Procedimento Remoto) compatível com o redirecionador de rede que fornece o transporte de rede. A criptografia também é controlada pelos mecanismos de segurança compatíveis com o computador local e os mecanismos de segurança compatíveis com o servidor de rede remota especificados no parâmetro servername . Para obter mais detalhes sobre segurança quando o redirecionador de rede da Microsoft for usado e o servidor de rede remoto estiver executando o Microsoft Windows, consulte a documentação do protocolo para MS-RPCE e MS-SAMR.

Exemplos

O exemplo de código a seguir demonstra como desabilitar uma conta de usuário com uma chamada para a função NetUserSetInfo . O exemplo de código preenche o membro usri1008_flags da estrutura USER_INFO_1008 , especificando o valor UF_ACCOUNTDISABLE. Em seguida, o exemplo chama NetUserSetInfo, especificando o nível de informações 0.

#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 = 1008;
   USER_INFO_1008 ui;
   NET_API_STATUS nStatus;

   if (argc != 3)
   {
      fwprintf(stderr, L"Usage: %s \\\\ServerName UserName\n", argv[0]);
      exit(1);
   }
   // Fill in the USER_INFO_1008 structure member.
   // UF_SCRIPT: required.
   //
   ui.usri1008_flags = UF_SCRIPT | UF_ACCOUNTDISABLE;
   //
   // Call the NetUserSetInfo function 
   //  to disable the account, specifying level 1008.
   //
   nStatus = NetUserSetInfo(argv[1],
                            argv[2],
                            dwLevel,
                            (LPBYTE)&ui,
                            NULL);
   //
   // Display the result of the call.
   //
   if (nStatus == NERR_Success)
      fwprintf(stderr, L"User account %s has been disabled\n", argv[2]);
   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

NetUserGetInfo

Funções de gerenciamento de rede

Visão geral do gerenciamento de rede

USER_INFO_0

USER_INFO_1

USER_INFO_1003

USER_INFO_1005

USER_INFO_1006

USER_INFO_1007

USER_INFO_1008

USER_INFO_1009

USER_INFO_1010

USER_INFO_1011

USER_INFO_1012

USER_INFO_1013

USER_INFO_1014

USER_INFO_1017

USER_INFO_1020

USER_INFO_1024

USER_INFO_1051

USER_INFO_1052

USER_INFO_1053

USER_INFO_2

USER_INFO_21

USER_INFO_22

USER_INFO_4

Funções de usuário