Compartir a través de


Función NetUserChangePassword (lmaccess.h)

La función NetUserChangePassword cambia la contraseña de un usuario para un dominio o servidor de red especificado.

Sintaxis

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

Parámetros

[in] domainname

Puntero a una cadena constante que especifica el nombre DNS o NetBIOS de un servidor remoto o dominio en el que se va a ejecutar la función. Si este parámetro es NULL, se usa el dominio de inicio de sesión del autor de la llamada.

[in] username

Puntero a una cadena constante que especifica un nombre de usuario. La función NetUserChangePassword cambia la contraseña del usuario especificado.

Si este parámetro es NULL, se usa el nombre de inicio de sesión del llamador. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

[in] oldpassword

Puntero a una cadena constante que especifica la contraseña antigua del usuario.

[in] newpassword

Puntero a una cadena constante que especifica la nueva contraseña del usuario.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto se NERR_Success.

Si se produce un error en la función, el valor devuelto puede ser uno de los siguientes códigos de error.

Código devuelto Descripción
ERROR_ACCESS_DENIED
El usuario no tiene acceso a la información pedida.
ERROR_INVALID_PASSWORD
El usuario ha escrito una contraseña no válida.
NERR_InvalidComputer
El nombre de equipo no es válido.
NERR_NotPrimary
La operación solo se permite en el controlador de dominio principal del dominio.
NERR_UserNotFound
No se encontró el nombre de usuario.
NERR_PasswordTooShort
La contraseña es más corta de lo necesario. (La contraseña podría también ser demasiado larga, demasiado reciente en su historial de cambios, no tener cantidad suficiente de caracteres únicos o no cumplir con algún otro requisito de la directiva de contraseñas).

Comentarios

Si está programando para Active Directory, puede llamar a determinados métodos de la interfaz de servicio de Active Directory (ADSI) para lograr el mismo resultado que puede lograr llamando a las funciones de usuario de administración de red. Para obtener más información, consulte IADsUser e IADsComputer.

Si una aplicación llama a la función NetUserChangePassword en un controlador de dominio que ejecuta Active Directory, se permite o se deniega el acceso en función de la lista de control de acceso (ACL) para el objeto protegible. La ACL predeterminada permite que solo los administradores de dominio y los operadores de cuenta llamen a esta función. En un servidor miembro o estación de trabajo, solo los administradores y los usuarios avanzados pueden llamar a esta función. Un usuario puede cambiar su propia contraseña. Para obtener más información, consulte Requisitos de seguridad para las funciones de administración de red. Para obtener más información sobre las ACL, los ACL y los tokens de acceso, consulte Access Control Model.

El descriptor de seguridad del objeto User se usa para realizar la comprobación de acceso de esta función. Además, el autor de la llamada debe tener el derecho de acceso de control "Cambiar contraseña" en el objeto User. Este derecho se concede al inicio de sesión anónimo y a todos de forma predeterminada.

Tenga en cuenta que para que la función se realice correctamente, el parámetro oldpassword debe coincidir con la contraseña tal como existe actualmente.

En algunos casos, el proceso que llama a la función NetUserChangePassword también debe tener habilitado el privilegio SE_CHANGE_NOTIFY_NAME; De lo contrario, Se produce un error en NetUserChangePassword y GetLastError devuelve ERROR_ACCESS_DENIED. Este privilegio no es necesario para la cuenta LocalSystem ni para las cuentas que son miembros del grupo de administradores. De forma predeterminada, SE_CHANGE_NOTIFY_NAME está habilitado para todos los usuarios, pero algunos administradores pueden deshabilitar el privilegio para todos. Para obtener más información sobre los privilegios de cuenta, vea Privilegios y constantes de autorización.

Consulte Forzar a un usuario a cambiar la contraseña de inicio de sesión para ver un ejemplo de código que muestra cómo forzar a un usuario a cambiar la contraseña de inicio de sesión en el siguiente inicio de sesión mediante las funciones NetUserGetInfo y NetUserSetInfo .

Los nombres de cuenta de usuario están limitados a 20 caracteres y los nombres de grupo están limitados a 256 caracteres. Además, los nombres de cuenta no se pueden terminar por un punto y no pueden incluir comas ni ninguno de los siguientes caracteres imprimibles: ", /, , [, ], :, |, <, >, +, =, ;, ?, *. Los nombres tampoco pueden incluir caracteres en el intervalo 1-31, que no son imprimibles.

La función NetUserChangePassword no controla cómo se protegen los parámetros oldpassword y newpassword cuando se envían a través de la red a un servidor remoto. Cualquier cifrado de estos parámetros se controla mediante el mecanismo de llamada a procedimiento remoto (RPC) admitido por el redirector de red que proporciona el transporte de red. El cifrado también se controla mediante los mecanismos de seguridad admitidos por el equipo local y los mecanismos de seguridad admitidos por el servidor de red remoto o el dominio especificados en el parámetro domainname . Para obtener más información sobre la seguridad cuando se usa el redirector de red de Microsoft y el servidor de red remoto ejecuta Microsoft Windows, consulte la documentación del protocolo para MS-RPCE, MS-SAMR, MS-SPNG y MS-NLMP.

Ejemplos

En el ejemplo de código siguiente se muestra cómo cambiar la contraseña de un usuario con una llamada a la función NetUserChangePassword . Se requieren todos los parámetros de la función.

#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 Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado lmaccess.h (include Lm.h)
Library Netapi32.lib
Archivo DLL Netapi32.dll

Consulte también

NetUserGetInfo

NetUserSetInfo

Funciones de administración de red

Introducción a la administración de redes

Funciones de usuario