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 |
---|---|
|
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. |
|
Especifica informações detalhadas sobre a conta de usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1 . |
|
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 . |
|
Especifica um LAN Manager 2 criptografado unidirecional. Senha compatível com x. O parâmetro buf aponta para uma estrutura de USER_INFO_21 . |
|
Especifica informações detalhadas sobre a conta de usuário. O parâmetro buf aponta para uma estrutura USER_INFO_22 . |
|
Especifica uma senha de usuário. O parâmetro buf aponta para uma estrutura de USER_INFO_1003 . |
|
Especifica um nível de privilégio de usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1005 . |
|
Especifica o caminho do diretório base para o usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1006 . |
|
Especifica um comentário a ser associado à conta de usuário. O parâmetro buf aponta para uma estrutura de USER_INFO_1007 . |
|
Especifica atributos de conta de usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1008 . |
|
Especifica o caminho para o arquivo de script de logon do usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1009 . |
|
Especifica os privilégios de operador do usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1010 . |
|
Especifica o nome completo do usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1011 . |
|
Especifica um comentário a ser associado ao usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1012 . |
|
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 . |
|
Especifica quando a conta de usuário expira. O parâmetro buf aponta para uma estrutura USER_INFO_1017 . |
|
Especifica os horários durante os quais o usuário pode fazer logon. O parâmetro buf aponta para uma estrutura USER_INFO_1020 . |
|
Especifica o código de país/região do usuário. O parâmetro buf aponta para uma estrutura USER_INFO_1024 . |
|
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 . |
|
Especifica o caminho para o perfil de um usuário de rede. O parâmetro buf aponta para uma estrutura USER_INFO_1052 . |
|
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 |
---|---|
|
O usuário não tem acesso às informações solicitadas. |
|
Um dos parâmetros de função é inválido. Para obter mais informações, consulte a seção Comentários a seguir. |
|
O nome do computador é inválido. |
|
A operação é permitida somente no controlador de domínio primário do domínio. |
|
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. |
|
A operação não é permitida na última conta administrativa. |
|
O nome ou a senha do compartilhamento é inválido. |
|
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.) |
|
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
Funções de gerenciamento de rede