NetUserAdd-Funktion (lmaccess.h)

Die NetUserAdd-Funktion fügt ein Benutzerkonto hinzu und weist ein Kennwort und eine Berechtigungsstufe zu.

Syntax

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

Parameter

[in] servername

Zeiger auf eine konstante Zeichenfolge, die den DNS- oder NetBIOS-Namen des Remoteservers angibt, auf dem die Funktion ausgeführt werden soll. Wenn dieser Parameter NULL ist, wird der lokale Computer verwendet.

Diese Zeichenfolge ist Unicode, wenn _WIN32_WINNT oder FORCE_UNICODE definiert sind.

[in] level

Gibt die Informationsebene der Daten an. Dieser Parameter kann einen der folgenden Werte annehmen.

Wert Bedeutung
1
Gibt Informationen zum Benutzerkonto an. Der buf-Parameter verweist auf eine USER_INFO_1-Struktur .

Wenn Sie diese Ebene angeben, initialisiert der Aufruf bestimmte Attribute mit ihren Standardwerten. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

2
Gibt Informationen der ersten Ebene und zusätzliche Attribute zum Benutzerkonto an. Der buf-Parameter verweist auf eine USER_INFO_2-Struktur .
3
Gibt Informationen der zweiten Ebene und zusätzliche Attribute zum Benutzerkonto an. Diese Ebene ist nur auf Servern gültig. Der buf-Parameter verweist auf eine USER_INFO_3-Struktur . Beachten Sie, dass Es empfohlen wird, stattdessen USER_INFO_4 zu verwenden.
4
Gibt Informationen der zweiten Ebene und zusätzliche Attribute zum Benutzerkonto an. Diese Ebene ist nur auf Servern gültig. Der buf-Parameter verweist auf eine USER_INFO_4-Struktur .

Windows 2000: Diese Ebene wird nicht unterstützt.

[in] buf

Zeiger auf den Puffer, der die Daten angibt. Das Format dieser Daten hängt vom Wert des level-Parameters ab. Weitere Informationen finden Sie unter Netzwerkverwaltungsfunktionspuffer.

[out] parm_err

Zeiger auf einen Wert, der den Index des ersten Members der Benutzerinformationsstruktur empfängt, der ERROR_INVALID_PARAMETER verursacht. Wenn dieser Parameter NULL ist, wird der Index nicht bei einem Fehler zurückgegeben. Weitere Informationen finden Sie in der NetUserSetInfo-Funktion .

Rückgabewert

Wenn die Funktion erfolgreich ist, wird der Rückgabewert NERR_Success.

Wenn die Funktion fehlschlägt, kann der Rückgabewert einer der folgenden Fehlercodes sein.

Rückgabecode Beschreibung
ERROR_ACCESS_DENIED
Der Benutzer besitzt keinen Zugriff auf die angeforderten Informationen.
NERR_InvalidComputer
Der Computername ist ungültig.
NERR_NotPrimary
Der Vorgang ist nur auf dem primären Domänencontroller der Domäne zulässig.
NERR_GroupExists
Die Gruppe ist bereits vorhanden.
NERR_UserExists
Das Benutzerkonto ist bereits vorhanden.
NERR_PasswordTooShort
Das Kennwort ist kürzer als erforderlich. (Das Kennwort kann möglicherweise auch zu lang, nicht über ausreichend Sonderzeichen verfügen, dessen Änderung noch nicht wirksam sein oder es stimmt nicht mit anderen Kennwortrichtlinien überein.)

Hinweise

Wenn Sie für Active Directory programmieren, können Sie möglicherweise bestimmte ADSI-Methoden (Active Directory Service Interface) aufrufen, um die gleiche Funktionalität zu erreichen, die Sie durch Aufrufen der Benutzerfunktionen der Netzwerkverwaltung erreichen können. Weitere Informationen finden Sie unter IADsUser und IADsComputer.

Wenn Sie diese Funktion auf einem Domänencontroller aufrufen, auf dem Active Directory ausgeführt wird, wird der Zugriff basierend auf der Zugriffssteuerungsliste (Access Control List, ACL) für das sicherungsfähige Objekt zugelassen oder verweigert. Die Standard-ACL erlaubt nur Domänenadministratoren und Kontooperatoren, diese Funktion aufzurufen. Auf einem Mitgliedsserver oder einer Arbeitsstation können nur Administratoren und Power Users diese Funktion aufrufen. Weitere Informationen finden Sie unter Sicherheitsanforderungen für die Netzwerkverwaltungsfunktionen. Weitere Informationen zu ACLs, ACEs und Zugriffstoken finden Sie unter Access Control Modell.

Der Sicherheitsdeskriptor des Benutzercontainers wird verwendet, um die Zugriffsüberprüfung für diese Funktion durchzuführen. Der Aufrufer muss in der Lage sein, untergeordnete Objekte der Benutzerklasse zu erstellen.

Serverbenutzer müssen ein System verwenden, in dem der Server ein Systemkonto für den neuen Benutzer erstellt. Die Erstellung dieses Kontos wird durch mehrere Parameter in der LanMan.ini-Datei des Servers gesteuert.

Wenn der neu hinzugefügte Benutzer bereits als Systembenutzer vorhanden ist, wird der usri1_home_dir Member der USER_INFO_1-Struktur ignoriert.

Wenn Sie die NetUserAdd-Funktion aufrufen und die Informationsebene 1 angeben, initialisiert der Aufruf die zusätzlichen Member in den USER_INFO_2-, USER_INFO_3- und USER_INFO_4-Strukturen mit ihren Standardwerten. Sie können die Standardwerte ändern, indem Sie nachfolgende Aufrufe der NetUserSetInfo-Funktion ausführen. Die angegebenen Standardwerte werden im Folgenden aufgeführt. (Das Präfix usriX gibt an, dass der Member mit mehreren Präfixen beginnen kann, z. B. usri2_ oder usri4_.)

Mitglied Standardwert
usriX_auth_flags Keine (0)
usriX_full_name Keine (NULL-Zeichenfolge)
usriX_usr_comment Keine (NULL-Zeichenfolge)
usriX_parms Keine (NULL-Zeichenfolge)
usriX_workstations All (NULL-Zeichenfolge)
usriX_acct_expires Nie (TIMEQ_FOREVER)
usriX_max_storage Unbegrenzt (USER_MAXSTORAGE_UNLIMITED)
usriX_logon_hours Anmeldung jederzeit zulässig (jedes Element 0xFF; alle Bits auf 1 festgelegt)
usriX_logon_server Beliebiger Domänencontroller (\\*)
usriX_country_code 0
usriX_code_page 0
 

Benutzerkontennamen sind auf 20 Zeichen und Gruppennamen auf 256 Zeichen beschränkt. Darüber hinaus können Kontonamen nicht durch einen Punkt beendet werden, und sie dürfen keine Kommas oder eines der folgenden druckbaren Zeichen enthalten: ", /, , [, ], ], :, |, <, , >+, =, ;, ?, *. Namen können auch keine Zeichen im Bereich 1 bis 31 enthalten, die nicht druckbar sind.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie Sie mithilfe eines Aufrufs der NetUserAdd-Funktion ein Benutzerkonto hinzufügen und eine Berechtigungsstufe zuweisen. Das Codebeispiel füllt die Member der USER_INFO_1-Struktur aus und ruft NetUserAdd auf, wobei die Informationsebene 1 angegeben wird.

#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;
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile lmaccess.h (lm.h einschließen)
Bibliothek Netapi32.lib
DLL Netapi32.dll

Weitere Informationen

NetUserDel

NetUserEnum

NetUserSetInfo

Netzwerkverwaltungsfunktionen

Übersicht über die Netzwerkverwaltung

USER_INFO_1

USER_INFO_2

USER_INFO_4

Benutzerfunktionen