Fonction NetUserSetInfo (lmaccess.h)

La fonction NetUserSetInfo définit les paramètres d’un compte d’utilisateur.

Syntaxe

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

Paramètres

[in] servername

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

[in] username

Pointeur vers une chaîne constante qui spécifie le nom du compte d’utilisateur pour lequel définir des informations. Pour plus d'informations, consultez la section Notes qui suit.

[in] level

Niveau d’informations des données. Ce paramètre peut prendre les valeurs suivantes.

Valeur Signification
0
Spécifie le nom du compte d’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_0 . Utilisez cette structure pour spécifier un nouveau nom de groupe. Pour plus d'informations, consultez la section Notes qui suit.
1
Spécifie des informations détaillées sur le compte d’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1 .
2
Spécifie les informations de niveau 1 et les attributs supplémentaires concernant le compte d’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_2 .
3
Spécifie des informations de niveau 2 et des attributs supplémentaires sur le compte d’utilisateur. Ce niveau est valide uniquement sur les serveurs. Le paramètre buf pointe vers une structure USER_INFO_3 . Notez qu’il est recommandé d’utiliser USER_INFO_4 à la place.
4
Spécifie des informations de niveau 2 et des attributs supplémentaires sur le compte d’utilisateur. Ce niveau est valide uniquement sur les serveurs. Le paramètre buf pointe vers une structure USER_INFO_4 .
21
Spécifie un gestionnaire de réseau réseau chiffré unidirectionnel 2. Mot de passe compatible x. Le paramètre buf pointe vers une structure USER_INFO_21 .
22
Spécifie des informations détaillées sur le compte d’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_22 .
1003
Spécifie un mot de passe utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1003 .
1005
Spécifie un niveau de privilège utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1005 .
1006
Spécifie le chemin du répertoire de base de l’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1006 .
1007
Spécifie un commentaire à associer au compte d’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1007 .
1008
Spécifie les attributs de compte d’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1008 .
1009
Spécifie le chemin d’accès du fichier de script d’ouverture de session de l’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1009 .
1010
Spécifie les privilèges d’opérateur de l’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1010 .
1011
Spécifie le nom complet de l’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1011 .
1012
Spécifie un commentaire à associer à l’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1012 .
1014
Spécifie les noms des stations de travail à partir desquelles l’utilisateur peut se connecter. Le paramètre buf pointe vers une structure USER_INFO_1014 .
1017
Spécifie le moment où le compte d’utilisateur expire. Le paramètre buf pointe vers une structure USER_INFO_1017 .
1020
Spécifie les heures pendant lesquelles l’utilisateur peut se connecter. Le paramètre buf pointe vers une structure USER_INFO_1020 .
1024
Spécifie le code de pays/région de l’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1024 .
1051
Spécifie l’identificateur relatif d’un groupe global qui représente l’utilisateur inscrit. Le paramètre buf pointe vers une structure USER_INFO_1051 .
1052
Spécifie le chemin d’accès au profil d’un utilisateur réseau. Le paramètre buf pointe vers une structure USER_INFO_1052 .
1053
Spécifie la lettre de lecteur affectée au répertoire de base de l’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1053 .

[in] buf

Pointeur vers la mémoire tampon qui spécifie les données. Le format de ces données dépend de la valeur du paramètre de niveau . Pour plus d’informations, consultez Mémoires tampons de fonction de gestion réseau.

[out] parm_err

Pointeur vers une valeur qui reçoit l’index du premier membre de la structure d’informations utilisateur qui provoque ERROR_INVALID_PARAMETER. Si ce paramètre a la valeur NULL, l’index n’est pas retourné en cas d’erreur. Pour plus d'informations, consultez la section Notes qui suit.

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_PARAMETER
L’un des paramètres de fonction n’est pas valide. Pour plus d'informations, consultez la section Notes qui suit.
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_SpeGroupOp
L’opération n’est pas autorisée sur les groupes spéciaux spécifiés, qui sont des groupes d’utilisateurs, des groupes d’administration, des groupes locaux ou des groupes invités.
NERR_LastAdmin
L’opération n’est pas autorisée sur le dernier compte d’administration.
NERR_BadPassword
Le nom ou le mot de passe du partage n’est pas valide.
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.)
NERR_UserNotFound
Le nom d’utilisateur est introuvable.

Remarques

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

Si vous appelez cette fonction 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. 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.

Seuls les utilisateurs ou les applications disposant de privilèges administratifs peuvent appeler la fonction NetUserSetInfo pour modifier le mot de passe d’un utilisateur. Lorsqu’un administrateur appelle NetUserSetInfo, la seule restriction appliquée est que la nouvelle longueur de mot de passe doit être cohérente avec les modals système. Un utilisateur ou une application qui connaît le mot de passe actuel d’un utilisateur peut appeler la fonction NetUserChangePassword pour modifier le mot de passe. Pour plus d’informations sur l’appel de fonctions qui nécessitent des privilèges d’administrateur, consultez Exécution avec des privilèges spéciaux.

Les membres du groupe local Administrateurs peuvent définir tous les éléments de compte d’utilisateur modifiables. Tous les utilisateurs peuvent définir le membre usri2_country_code de la structure USER_INFO_2 (et le membre usri1024_country_code de la structure USER_INFO_1024 ) pour leurs propres comptes.

Un membre du groupe local de l’opérateur de compte ne peut pas définir les détails d’un compte de classe Administrateurs, accorder un privilège administrateur de compte existant ou modifier le privilège d’opérateur d’un compte. Si vous tentez de modifier le niveau de privilège ou de désactiver le dernier compte disposant du privilège Administrateur dans la base de données de sécurité(la base de données SAM ou, dans le cas des contrôleurs de domaine, Active Directory), la fonction NetUserSetInfo échoue et retourne NERR_LastAdmin.

Pour définir les indicateurs de contrôle de compte d’utilisateur suivants, les privilèges et droits d’accès de contrôle suivants sont requis.

Indicateur de contrôle de compte Privilège ou droit requis
UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION Privilège SeEnableDelegationPrivilege, qui est accordé aux administrateurs par défaut.
UF_TRUSTED_FOR_DELEGATION SeEnableDelegationPrivilege.
UF_PASSWD_NOTREQD Le contrôle « Mettre à jour le mot de passe n’est pas obligatoire » sur l’objet Domain, qui est accordé aux utilisateurs authentifiés par défaut.
UF_DONT_EXPIRE_PASSWD « Mot de passe non expiré » contrôle le droit d’accès sur l’objet Domain, qui est accordé aux utilisateurs authentifiés par défaut.
UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED « Activer le mot de passe chiffré réversible par utilisateur » contrôle le droit d’accès sur l’objet Domain, qui est accordé aux utilisateurs authentifiés par défaut.
UF_SERVER_TRUST_ACCOUNT « Ajouter/supprimer réplica dans le domaine » contrôle le droit d’accès sur l’objet Domain, qui est accordé aux administrateurs par défaut.
 

Pour obtenir la liste des constantes de privilège, consultez Constantes d’autorisation.

La bonne façon de spécifier le nouveau nom d’un compte consiste à appeler NetUserSetInfo avec USER_INFO_0 et à spécifier la nouvelle valeur à l’aide du membre usri0_name . Si vous appelez NetUserSetInfo avec d’autres niveaux d’informations et que vous spécifiez une valeur à l’aide d’un membre usriX_name , la valeur est ignorée.

Notez que les appels à NetUserSetInfo peuvent modifier le répertoire de base uniquement pour les comptes d’utilisateur créés par le serveur réseau.

Si la fonction NetUserSetInfo retourne ERROR_INVALID_PARAMETER, vous pouvez utiliser le paramètre parm_err pour indiquer le premier membre de la structure d’informations utilisateur non valide. (Une structure d’informations utilisateur commence par USER_INFO_ et son format est spécifié par le paramètre level .) Le tableau suivant répertorie les valeurs qui peuvent être retournées dans le paramètre parm_err et le membre de structure correspondant qui est en erreur. (Le préfixe usri*_ indique que le membre peut commencer par plusieurs préfixes, par exemple usri10_ ou usri1003_.)

Valeur Membre
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
 

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 NetUserSetInfo ne contrôle pas la façon dont les paramètres de mot de passe sont sécurisés lorsqu’ils sont envoyés sur le réseau à un serveur distant pour modifier un mot de passe utilisateur. 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 spécifié dans le paramètre servername . 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 et MS-SAMR.

Exemples

L’exemple de code suivant montre comment désactiver un compte d’utilisateur avec un appel à la fonction NetUserSetInfo . L’exemple de code remplit le membre usri1008_flags de la structure USER_INFO_1008 , en spécifiant la valeur UF_ACCOUNTDISABLE. Ensuite, l’exemple appelle NetUserSetInfo, en spécifiant le niveau d’informations 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;
}

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

Fonctions de gestion réseau

Vue d’ensemble de la gestion du réseau

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

Fonctions utilisateur