Función NetUserAdd (lmaccess.h)

La función NetUserAdd agrega una cuenta de usuario y asigna una contraseña y un nivel de privilegios.

Sintaxis

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

Parámetros

[in] servername

Puntero a una cadena constante que especifica el nombre DNS o NetBIOS del servidor remoto en el que se va a ejecutar la función. Si este parámetro es NULL, se usa el equipo local.

Esta cadena es Unicode si se definen _WIN32_WINNT o FORCE_UNICODE .

[in] level

Especifica el nivel de información de los datos. Este parámetro puede ser uno de los valores siguientes.

Valor Significado
1
Especifica información sobre la cuenta de usuario. El parámetro buf apunta a una estructura de USER_INFO_1 .

Al especificar este nivel, la llamada inicializa determinados atributos a sus valores predeterminados. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

2
Especifica la información de nivel uno y atributos adicionales sobre la cuenta de usuario. El parámetro buf apunta a una estructura USER_INFO_2 .
3
Especifica la información de nivel dos y atributos adicionales sobre la cuenta de usuario. Este nivel solo es válido en servidores. El parámetro buf apunta a una estructura USER_INFO_3 . Tenga en cuenta que se recomienda usar USER_INFO_4 en su lugar.
4
Especifica la información de nivel dos y atributos adicionales sobre la cuenta de usuario. Este nivel solo es válido en servidores. El parámetro buf apunta a una estructura USER_INFO_4 .

Windows 2000: Este nivel no se admite.

[in] buf

Puntero al búfer que especifica los datos. El formato de estos datos depende del valor del parámetro level . Para obtener más información, consulte Búferes de funciones de administración de redes.

[out] parm_err

Puntero a un valor que recibe el índice del primer miembro de la estructura de información del usuario que provoca ERROR_INVALID_PARAMETER. Si este parámetro es NULL, el índice no se devuelve cuando se produce un error. Para obtener más información, consulte la función NetUserSetInfo .

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto se NERR_Success.

Si se produce un error en la función, el valor devuelto puede ser uno de los siguientes códigos de error.

Código devuelto Descripción
ERROR_ACCESS_DENIED
El usuario no tiene acceso a la información pedida.
NERR_InvalidComputer
El nombre de equipo no es válido.
NERR_NotPrimary
La operación solo se permite en el controlador de dominio principal del dominio.
NERR_GroupExists
El grupo ya existe.
NERR_UserExists
La cuenta de usuario ya existe.
NERR_PasswordTooShort
La contraseña es más corta de lo necesario. (La contraseña podría también ser demasiado larga, demasiado reciente en su historial de cambios, no tener cantidad suficiente de caracteres únicos o no cumplir con algún otro requisito de la directiva de contraseñas).

Comentarios

Si está programando para Active Directory, puede llamar a determinados métodos de interfaz de servicio de Active Directory (ADSI) para lograr la misma funcionalidad que puede lograr llamando a las funciones de usuario de administración de red. Para obtener más información, consulte IADsUser e IADsComputer.

Si llama a esta función en un controlador de dominio que ejecuta Active Directory, se permite o se deniega el acceso en función de la lista de control de acceso (ACL) para el objeto protegible. La ACL predeterminada permite que solo los administradores de dominio y los operadores de cuenta llamen a esta función. En un servidor miembro o estación de trabajo, solo los administradores y los usuarios avanzados pueden llamar a esta función. Para obtener más información, consulte Requisitos de seguridad para las funciones de administración de red. Para obtener más información sobre las ACL, los ACL y los tokens de acceso, consulte Access Control Model.

El descriptor de seguridad del contenedor de usuarios se usa para realizar la comprobación de acceso de esta función. El autor de la llamada debe poder crear objetos secundarios de la clase de usuario.

Los usuarios del servidor deben usar un sistema en el que el servidor crea una cuenta del sistema para el nuevo usuario. La creación de esta cuenta se controla mediante varios parámetros en el archivo LanMan.ini del servidor.

Si el usuario recién agregado ya existe como usuario del sistema, se omite el usri1_home_dir miembro de la estructura USER_INFO_1 .

Al llamar a la función NetUserAdd y especificar el nivel de información 1, la llamada inicializa los miembros adicionales de la USER_INFO_2, USER_INFO_3 y USER_INFO_4 estructuras a sus valores predeterminados. Puede cambiar los valores predeterminados realizando llamadas posteriores a la función NetUserSetInfo . Los valores predeterminados proporcionados se enumeran a continuación. (El prefijo usriX indica que el miembro puede comenzar con varios prefijos, por ejemplo, usri2_ o usri4_).

Miembro Valor predeterminado
usriX_auth_flags Ninguno (0)
usriX_full_name None (cadena nula)
usriX_usr_comment None (cadena nula)
usriX_parms None (cadena nula)
usriX_workstations All (cadena nula)
usriX_acct_expires Nunca (TIMEQ_FOREVER)
usriX_max_storage Ilimitado (USER_MAXSTORAGE_UNLIMITED)
usriX_logon_hours Inicio de sesión permitido en cualquier momento (cada elemento 0xFF; todos los bits establecidos en 1)
usriX_logon_server Cualquier controlador de dominio (\\*)
usriX_country_code 0
usriX_code_page 0
 

Los nombres de cuenta de usuario están limitados a 20 caracteres y los nombres de grupo están limitados a 256 caracteres. Además, los nombres de cuenta no se pueden terminar por un punto y no pueden incluir comas ni ninguno de los siguientes caracteres imprimibles: ", /, , [, ], :, |, <, >, +, =, ;, ?, *. Los nombres tampoco pueden incluir caracteres en el intervalo 1-31, que no son imprimibles.

Ejemplos

En el ejemplo de código siguiente se muestra cómo agregar una cuenta de usuario y asignar un nivel de privilegio mediante una llamada a la función NetUserAdd . El ejemplo de código rellena los miembros de la estructura USER_INFO_1 y llama a NetUserAdd, especificando el nivel de información 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;
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado lmaccess.h (include Lm.h)
Library Netapi32.lib
Archivo DLL Netapi32.dll

Consulte también

NetUserDel

NetUserEnum

NetUserSetInfo

Funciones de administración de red

Introducción a la administración de redes

USER_INFO_1

USER_INFO_2

USER_INFO_4

Funciones de usuario