NetUserAdd, fonction (lmaccess.h)

La fonction NetUserAdd ajoute un compte d’utilisateur et affecte un mot de passe et un niveau de privilège.

Syntaxe

NET_API_STATUS NET_API_FUNCTION NetUserAdd(
  [in]  LPCWSTR servername,
  [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é.

Cette chaîne est Unicode si _WIN32_WINNT ou FORCE_UNICODE sont définis.

[in] level

Spécifie le niveau d’informations des données. Ce paramètre peut prendre les valeurs suivantes.

Valeur Signification
1
Spécifie des informations sur le compte d’utilisateur. Le paramètre buf pointe vers une structure USER_INFO_1 .

Lorsque vous spécifiez ce niveau, l’appel initialise certains attributs à leurs valeurs par défaut. Pour plus d'informations, consultez la section Notes qui suit.

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 .

Windows 2000 : Ce niveau n’est pas pris en charge.

[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 fonction NetUserSetInfo .

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.
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_GroupExists
Le groupe existe déjà.
NERR_UserExists
Le compte d’utilisateur existe déjà.
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 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) de 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 membre ou une station de travail, 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 listes de contrôle d’accès, les ACL et les jetons d’accès, consultez Access Control Modèle.

Le descripteur de sécurité du conteneur utilisateur est utilisé pour effectuer l’case activée d’accès pour cette fonction. L’appelant doit être en mesure de créer des objets enfants de la classe utilisateur.

Les utilisateurs de serveur doivent utiliser un système dans lequel le serveur crée un compte système pour le nouvel utilisateur. La création de ce compte est contrôlée par plusieurs paramètres dans le fichier LanMan.ini du serveur.

Si l’utilisateur nouvellement ajouté existe déjà en tant qu’utilisateur système, le usri1_home_dir membre de la structure USER_INFO_1 est ignoré.

Lorsque vous appelez la fonction NetUserAdd et spécifiez le niveau d’informations 1, l’appel initialise les membres supplémentaires dans les structures USER_INFO_2, USER_INFO_3 et USER_INFO_4 à leurs valeurs par défaut. Vous pouvez modifier les valeurs par défaut en effectuant des appels suivants à la fonction NetUserSetInfo . Les valeurs par défaut fournies sont répertoriées ci-dessous. (Le préfixe usriX indique que le membre peut commencer par plusieurs préfixes, par exemple, usri2_ ou usri4_.)

Membre Valeur par défaut
usriX_auth_flags Aucun (0)
usriX_full_name None (chaîne null)
usriX_usr_comment None (chaîne null)
usriX_parms None (chaîne null)
usriX_workstations All (chaîne null)
usriX_acct_expires Jamais (TIMEQ_FOREVER)
usriX_max_storage Illimité (USER_MAXSTORAGE_UNLIMITED)
usriX_logon_hours Ouverture de session autorisée à tout moment (chaque élément 0xFF ; tous les bits ont la valeur 1)
usriX_logon_server Tout contrôleur de domaine (\\*)
usriX_country_code 0
usriX_code_page 0
 

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

Exemples

L’exemple de code suivant montre comment ajouter un compte d’utilisateur et attribuer un niveau de privilège à l’aide d’un appel à la fonction NetUserAdd . L’exemple de code remplit les membres de la structure USER_INFO_1 et appelle NetUserAdd, en spécifiant le niveau d’informations 1.

#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[])
{
   USER_INFO_1 ui;
   DWORD dwLevel = 1;
   DWORD dwError = 0;
   NET_API_STATUS nStatus;

   if (argc != 3)
   {
      fwprintf(stderr, L"Usage: %s \\\\ServerName UserName\n", argv[0]);
      exit(1);
   }
   //
   // Set up the USER_INFO_1 structure.
   //  USER_PRIV_USER: name identifies a user, 
   //    rather than an administrator or a guest.
   //  UF_SCRIPT: required 
   //
   ui.usri1_name = argv[2];
   ui.usri1_password = argv[2];
   ui.usri1_priv = USER_PRIV_USER;
   ui.usri1_home_dir = NULL;
   ui.usri1_comment = NULL;
   ui.usri1_flags = UF_SCRIPT;
   ui.usri1_script_path = NULL;
   //
   // Call the NetUserAdd function, specifying level 1.
   //
   nStatus = NetUserAdd(argv[1],
                        dwLevel,
                        (LPBYTE)&ui,
                        &dwError);
   //
   // If the call succeeds, inform the user.
   //
   if (nStatus == NERR_Success)
      fwprintf(stderr, L"User %s has been successfully added on %s\n",
               argv[2], argv[1]);
   //
   // 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

NetUserDel

NetUserEnum

NetUserSetInfo

Fonctions de gestion réseau

Vue d’ensemble de la gestion du réseau

USER_INFO_1

USER_INFO_2

USER_INFO_4

Fonctions utilisateur