Função NetUserChangePassword (lmaccess.h)

A função NetUserChangePassword altera a senha de um usuário para um servidor de rede ou domínio especificado.

Sintaxe

NET_API_STATUS NET_API_FUNCTION NetUserChangePassword(
  [in] LPCWSTR domainname,
  [in] LPCWSTR username,
  [in] LPCWSTR oldpassword,
  [in] LPCWSTR newpassword
);

Parâmetros

[in] domainname

Um ponteiro para uma cadeia de caracteres constante que especifica o nome DNS ou NetBIOS de um servidor remoto ou domínio no qual a função deve ser executada. Se esse parâmetro for NULL, o domínio de logon do chamador será usado.

[in] username

Um ponteiro para uma cadeia de caracteres constante que especifica um nome de usuário. A função NetUserChangePassword altera a senha do usuário especificado.

Se esse parâmetro for NULL, o nome de logon do chamador será usado. Para obter mais informações, consulte a seção Comentários a seguir.

[in] oldpassword

Um ponteiro para uma cadeia de caracteres constante que especifica a senha antiga do usuário.

[in] newpassword

Um ponteiro para uma cadeia de caracteres constante que especifica a nova senha do usuário.

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 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_INVALID_PASSWORD
O usuário inseriu uma senha inválida.
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_UserNotFound
Não foi possível encontrar o nome de usuário.
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 o mesmo resultado que você pode obter chamando as funções de usuário de gerenciamento de rede. Para obter mais informações, consulte IADsUsUser e IADsComputer.

Se um aplicativo chamar a função NetUserChangePassword 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 apenas 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 de energia podem chamar essa função. Um usuário pode alterar sua própria senha. 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. Além disso, o chamador deve ter o acesso de controle "Alterar senha" diretamente no objeto User. Esse direito é concedido ao Logon Anônimo e a Todos por padrão.

Observe que, para que a função tenha êxito, o parâmetro oldpassword deve corresponder à senha como ela existe atualmente.

Em alguns casos, o processo que chama a função NetUserChangePassword também deve ter o privilégio SE_CHANGE_NOTIFY_NAME habilitado; caso contrário, NetUserChangePassword falhará e GetLastError retornará ERROR_ACCESS_DENIED. Esse privilégio não é necessário para a conta LocalSystem ou para contas que são membros do grupo de administradores. Por padrão, SE_CHANGE_NOTIFY_NAME está habilitada para todos os usuários, mas alguns administradores podem desabilitar o privilégio para todos. Para obter mais informações sobre privilégios de conta, consulte Privilégios e constantes de autorização.

Consulte Forçando um usuário a alterar a senha de logon para um exemplo de código que demonstra como forçar um usuário a alterar a senha de logon no próximo logon usando as funções NetUserGetInfo e NetUserSetInfo .

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 NetUserChangePassword não controla como os parâmetros oldpassword e newpassword são protegidos quando enviados pela rede para um servidor remoto. 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 ou o domínio especificado no parâmetro domainname . Para obter mais detalhes sobre segurança quando o redirecionador de rede da Microsoft for usado e o servidor de rede remota estiver executando o Microsoft Windows, consulte a documentação do protocolo para MS-RPCE, MS-SAMR, MS-SPNG e MS-NLMP.

Exemplos

O exemplo de código a seguir demonstra como alterar a senha de um usuário com uma chamada para a função NetUserChangePassword . Todos os parâmetros para a função são necessários.

#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 dwError = 0;
   NET_API_STATUS nStatus;
   //
   // All parameters are required.
   //
   if (argc != 5)
   {
      fwprintf(stderr, L"Usage: %s \\\\ServerName UserName OldPassword NewPassword\n", argv[0]);
      exit(1);
   }
   //
   // Call the NetUserChangePassword function.
   //
   nStatus = NetUserChangePassword(argv[1], argv[2], argv[3], argv[4]);
   //
   // If the call succeeds, inform the user.
   //
   if (nStatus == NERR_Success)
      fwprintf(stderr, L"User password has been changed successfully\n");
   //
   // 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

NetUserGetInfo

NetUserSetInfo

Funções de gerenciamento de rede

Visão geral do gerenciamento de rede

Funções de usuário