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 |
---|---|
|
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. |
|
Specifica le informazioni di livello uno e gli attributi aggiuntivi relativi all'account utente. Il parametro buf punta a una struttura USER_INFO_2 . |
|
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 . |
|
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 |
---|---|
|
L'utente non ha accesso alle informazioni richieste. |
|
Il nome del computer non è valido. |
|
L'operazione è consentita solo nel controller di dominio primario del dominio. |
|
Il gruppo esiste già. |
|
L'account utente esiste già. |
|
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
Funzioni di gestione della rete