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 |
---|---|
|
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. |
|
Spécifie des informations détaillées sur le compte d’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1 . |
|
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 . |
|
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. |
|
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 . |
|
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 . |
|
Spécifie des informations détaillées sur le compte d’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_22 . |
|
Spécifie un mot de passe utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1003 . |
|
Spécifie un niveau de privilège utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1005 . |
|
Spécifie le chemin du répertoire de base de l’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1006 . |
|
Spécifie un commentaire à associer au compte d’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1007 . |
|
Spécifie les attributs de compte d’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1008 . |
|
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 . |
|
Spécifie les privilèges d’opérateur de l’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1010 . |
|
Spécifie le nom complet de l’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1011 . |
|
Spécifie un commentaire à associer à l’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1012 . |
|
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 . |
|
Spécifie le moment où le compte d’utilisateur expire. Le paramètre buf pointe vers une structure USER_INFO_1017 . |
|
Spécifie les heures pendant lesquelles l’utilisateur peut se connecter. Le paramètre buf pointe vers une structure USER_INFO_1020 . |
|
Spécifie le code de pays/région de l’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1024 . |
|
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 . |
|
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 . |
|
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 |
---|---|
|
L’utilisateur n’a pas accès aux informations demandées. |
|
L’un des paramètres de fonction n’est pas valide. Pour plus d'informations, consultez la section Notes qui suit. |
|
Le nom d'ordinateur est non valide. |
|
L’opération est autorisée uniquement sur le contrôleur de domaine principal du domaine. |
|
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. |
|
L’opération n’est pas autorisée sur le dernier compte d’administration. |
|
Le nom ou le mot de passe du partage n’est pas valide. |
|
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.) |
|
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 |