Condividi tramite


Funzione NetUserAdd (lmaccess.h)

La funzione NetUserAdd aggiunge un account utente e assegna un livello di password e privilegi.

Sintassi

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

Parametri

[in] servername

Puntatore a una stringa costante che specifica il nome DNS o NetBIOS del server remoto in cui deve essere eseguita la funzione. Se questo parametro è NULL, viene utilizzato il computer locale.

Questa stringa è Unicode se sono definite _WIN32_WINNT o FORCE_UNICODE .

[in] level

Specifica il livello di informazioni dei dati. Questo parametro può avere uno dei valori seguenti.

Valore Significato
1
Specifica informazioni sull'account utente. Il parametro buf punta a una struttura USER_INFO_1 .

Quando si specifica questo livello, la chiamata inizializza determinati attributi ai valori predefiniti. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.

2
Specifica le informazioni di livello uno e gli attributi aggiuntivi relativi all'account utente. Il parametro buf punta a una struttura USER_INFO_2 .
3
Specifica due informazioni di livello e attributi aggiuntivi sull'account utente. Questo livello è valido solo nei server. Il parametro buf punta a una struttura USER_INFO_3 . Si noti che è consigliabile usare invece USER_INFO_4 .
4
Specifica due informazioni di livello e attributi aggiuntivi sull'account utente. Questo livello è valido solo nei server. Il parametro buf punta a una struttura USER_INFO_4 .

Windows 2000: Questo livello non è supportato.

[in] buf

Puntatore al buffer che specifica i dati. Il formato di questi dati dipende dal valore del parametro level . Per altre informazioni, vedere Buffer delle funzioni di gestione di rete.

[out] parm_err

Puntatore a un valore che riceve l'indice del primo membro della struttura delle informazioni utente che causa ERROR_INVALID_PARAMETER. Se questo parametro è NULL, l'indice non viene restituito in caso di errore. Per altre informazioni, vedere la funzione NetUserSetInfo .

Valore restituito

Se la funzione ha esito positivo, il valore restituito viene NERR_Success.

Se la funzione ha esito negativo, il valore restituito può essere uno dei codici di errore seguenti.

Codice restituito Descrizione
ERROR_ACCESS_DENIED
L'utente non ha accesso alle informazioni richieste.
NERR_InvalidComputer
Il nome del computer non è valido.
NERR_NotPrimary
L'operazione è consentita solo nel controller di dominio primario del dominio.
NERR_GroupExists
Il gruppo esiste già.
NERR_UserExists
L'account utente esiste già.
NERR_PasswordTooShort
La password è più breve di quella richiesta. (La password potrebbe anche essere troppo lunga, troppo recente nella cronologia di modifiche, non avere abbastanza caratteri univoci o non soddisfare un altro requisito dei criteri password.)

Commenti

Se si esegue la programmazione per Active Directory, è possibile chiamare determinati metodi ADSI (Active Directory Service Interface) per ottenere la stessa funzionalità che è possibile ottenere chiamando le funzioni utente di gestione di rete. Per altre informazioni, vedere IADsUser e IADsComputer.

Se si chiama questa funzione in un controller di dominio che esegue Active Directory, l'accesso viene consentito o negato in base all'elenco di controllo di accesso (ACL) per l'oggetto a protezione diretta. L'elenco di controllo di accesso predefinito consente solo agli amministratori di dominio e agli operatori account di chiamare questa funzione. In un server membro o in una workstation, solo gli amministratori e Power Users possono chiamare questa funzione. Per altre informazioni, vedere Requisiti di sicurezza per le funzioni di gestione di rete. Per altre informazioni su ACL, ACL e token di accesso, vedere Controllo di accesso Model.

Il descrittore di sicurezza del contenitore utente viene usato per eseguire il controllo di accesso per questa funzione. Il chiamante deve essere in grado di creare oggetti figlio della classe utente.

Gli utenti del server devono usare un sistema in cui il server crea un account di sistema per il nuovo utente. La creazione di questo account è controllata da diversi parametri nel file di LanMan.ini del server.

Se l'utente appena aggiunto esiste già come utente di sistema, il membro usri1_home_dir della struttura USER_INFO_1 viene ignorato.

Quando si chiama la funzione NetUserAdd e si specifica il livello di informazioni 1, la chiamata inizializza i membri aggiuntivi nel USER_INFO_2, USER_INFO_3 e USER_INFO_4 strutture ai valori predefiniti. È possibile modificare i valori predefiniti effettuando chiamate successive alla funzione NetUserSetInfo . Di seguito sono elencati i valori predefiniti specificati. Il prefisso usriX indica che il membro può iniziare con più prefissi, ad esempio usri2_ o usri4_.

Membro Valore predefinito
usriX_auth_flags Nessuno (0)
usriX_full_name Nessuno (stringa Null)
usriX_usr_comment Nessuno (stringa Null)
usriX_parms Nessuno (stringa Null)
usriX_workstations All (stringa Null)
usriX_acct_expires Mai (TIMEQ_FOREVER)
usriX_max_storage Illimitato (USER_MAXSTORAGE_UNLIMITED)
usriX_logon_hours Accesso consentito in qualsiasi momento (ogni elemento 0xFF; tutti i bit sono impostati su 1)
usriX_logon_server Qualsiasi controller di dominio (\\*)
usriX_country_code 0
usriX_code_page 0
 

I nomi degli account utente sono limitati a 20 caratteri e i nomi dei gruppi sono limitati a 256 caratteri. Inoltre, i nomi di account non possono essere terminati da un punto e non possono includere virgole o uno dei caratteri stampabili seguenti: ", /, , [, ], :, |, <, , >+, =, ;, ?, *. I nomi non possono includere anche caratteri nell'intervallo 1-31, che non sono stampabili.

Esempio

Nell'esempio di codice seguente viene illustrato come aggiungere un account utente e assegnare un livello di privilegio usando una chiamata alla funzione NetUserAdd . L'esempio di codice compila i membri della struttura USER_INFO_1 e chiama NetUserAdd, specificando il livello di informazioni 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;
}

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione lmaccess.h (include Lm.h)
Libreria Netapi32.lib
DLL Netapi32.dll

Vedi anche

NetUserDel

NetUserEnum

NetUserSetInfo

Funzioni di gestione della rete

Panoramica sulla gestione della rete

USER_INFO_1

USER_INFO_2

USER_INFO_4

Funzioni utente