NetUserChangePassword, fonction (lmaccess.h)

La fonction NetUserChangePassword modifie le mot de passe d’un utilisateur pour un serveur réseau ou un domaine spécifié.

Syntaxe

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

Paramètres

[in] domainname

Pointeur vers une chaîne constante qui spécifie le nom DNS ou NetBIOS d’un serveur distant ou d’un domaine sur lequel la fonction doit s’exécuter. Si ce paramètre a la valeur NULL, le domaine d’ouverture de session de l’appelant est utilisé.

[in] username

Pointeur vers une chaîne constante qui spécifie un nom d’utilisateur. La fonction NetUserChangePassword modifie le mot de passe de l’utilisateur spécifié.

Si ce paramètre a la valeur NULL, le nom d’ouverture de session de l’appelant est utilisé. Pour plus d'informations, consultez la section Notes qui suit.

[in] oldpassword

Pointeur vers une chaîne constante qui spécifie l’ancien mot de passe de l’utilisateur.

[in] newpassword

Pointeur vers une chaîne constante qui spécifie le nouveau mot de passe de l’utilisateur.

Valeur retournée

Si la fonction réussit, la valeur de retour est NERR_Success.

Si la fonction échoue, la valeur de retour peut être l’un des codes d’erreur suivants.

Code de retour Description
ERROR_ACCESS_DENIED
L’utilisateur n’a pas accès aux informations demandées.
ERROR_INVALID_PASSWORD
L’utilisateur a entré un mot de passe non valide.
NERR_InvalidComputer
Le nom d'ordinateur est non valide.
NERR_NotPrimary
L’opération est autorisée uniquement sur le contrôleur de domaine principal du domaine.
NERR_UserNotFound
Le nom d’utilisateur est introuvable.
NERR_PasswordTooShort
Le mot de passe est plus court que nécessaire. (Le mot de passe peut également être trop long, être trop récent dans son historique des modifications, ne pas avoir suffisamment de caractères uniques ou ne pas répondre à une autre exigence de stratégie de mot de passe.)

Remarques

Si vous programmez pour Active Directory, vous pouvez peut-être appeler certaines méthodes ADSI (Active Directory Service Interface) pour obtenir le même résultat que celui que vous pouvez obtenir en appelant les fonctions utilisateur de gestion réseau. Pour plus d’informations, consultez IADsUser et IADsComputer.

Si une application appelle la fonction NetUserChangePassword sur un contrôleur de domaine qui exécute Active Directory, l’accès est autorisé ou refusé en fonction de la liste de contrôle d’accès (ACL) pour l’objet sécurisable. La liste de contrôle d’accès par défaut autorise uniquement les administrateurs de domaine et les opérateurs de compte à appeler cette fonction. Sur un serveur ou une station de travail membre, seuls les administrateurs et les utilisateurs avec pouvoir peuvent appeler cette fonction. Un utilisateur peut modifier son propre mot de passe. Pour plus d’informations, consultez Exigences de sécurité pour les fonctions de gestion réseau. Pour plus d’informations sur les ACL, les ACL et les jetons d’accès, consultez modèle Access Control.

Le descripteur de sécurité de l’objet User est utilisé pour effectuer la case activée d’accès pour cette fonction. En outre, l’appelant doit disposer du droit d’accès de contrôle « Modifier le mot de passe » sur l’objet User. Ce droit est accordé par défaut à l’ouverture de session anonyme et à tout le monde.

Notez que pour que la fonction réussisse, le paramètre oldpassword doit correspondre au mot de passe tel qu’il existe actuellement.

Dans certains cas, le privilège SE_CHANGE_NOTIFY_NAME doit également être activé pour le processus qui appelle la fonction NetUserChangePassword ; Sinon, NetUserChangePassword échoue et GetLastError retourne ERROR_ACCESS_DENIED. Ce privilège n’est pas requis pour le compte LocalSystem ou pour les comptes membres du groupe Administrateurs. Par défaut, SE_CHANGE_NOTIFY_NAME est activé pour tous les utilisateurs, mais certains administrateurs peuvent désactiver le privilège pour tout le monde. Pour plus d’informations sur les privilèges de compte, consultez Privilèges et constantes d’autorisation.

Consultez Forcer un utilisateur à modifier le mot de passe d’ouverture de session pour obtenir un exemple de code qui montre comment forcer un utilisateur à modifier le mot de passe de connexion à l’ouverture de session suivante à l’aide des fonctions NetUserGetInfo et NetUserSetInfo .

Les noms de compte d’utilisateur sont limités à 20 caractères et les noms de groupe à 256 caractères. En outre, les noms de comptes ne peuvent pas être arrêtés par un point et ils ne peuvent pas inclure de virgules ou d’un des caractères imprimables suivants : « , /, , , [, ], :, |, <, , >+, =, ?, *. Les noms ne peuvent pas non plus inclure de caractères dans la plage 1 à 31, qui ne sont pas imprimables.

La fonction NetUserChangePassword ne contrôle pas la façon dont les paramètres oldpassword et newpassword sont sécurisés lorsqu’ils sont envoyés sur le réseau à un serveur distant. Tout chiffrement de ces paramètres est géré par le mécanisme d’appel de procédure distante (RPC) pris en charge par le redirecteur réseau qui fournit le transport réseau. Le chiffrement est également contrôlé par les mécanismes de sécurité pris en charge par l’ordinateur local et les mécanismes de sécurité pris en charge par le serveur réseau distant ou le domaine spécifié dans le paramètre domainname . Pour plus d’informations sur la sécurité lorsque le redirecteur réseau Microsoft est utilisé et que le serveur réseau distant exécute Microsoft Windows, consultez la documentation du protocole pour MS-RPCE, MS-SAMR, MS-SPNG et MS-NLMP.

Exemples

L’exemple de code suivant montre comment modifier le mot de passe d’un utilisateur avec un appel à la fonction NetUserChangePassword . Tous les paramètres de la fonction sont obligatoires.

#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;
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête lmaccess.h (include Lm.h)
Bibliothèque Netapi32.lib
DLL Netapi32.dll

Voir aussi

NetUserGetInfo

NetUserSetInfo

Fonctions de gestion réseau

Vue d’ensemble de la gestion du réseau

Fonctions utilisateur