Función NetUserSetInfo (lmaccess.h)

La función NetUserSetInfo establece los parámetros de una cuenta de usuario.

Sintaxis

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

[in] username

Puntero a una cadena constante que especifica el nombre de la cuenta de usuario para la que se va a establecer información. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

[in] level

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

Valor Significado
0
Especifica el nombre de la cuenta de usuario. El parámetro buf apunta a una estructura de USER_INFO_0 . Use esta estructura para especificar un nuevo nombre de grupo. Para obtener más información, vea la sección Comentarios que se muestra más adelante.
1
Especifica información detallada sobre la cuenta de usuario. El parámetro buf apunta a una estructura USER_INFO_1 .
2
Especifica la información de nivel uno y atributos adicionales sobre la cuenta de usuario. El parámetro buf apunta a una estructura de 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 los 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 los servidores. El parámetro buf apunta a una estructura USER_INFO_4 .
21
Especifica un LAN Manager 2 cifrado unidireccional. Contraseña compatible con x. El parámetro buf apunta a una estructura USER_INFO_21 .
22
Especifica información detallada sobre la cuenta de usuario. El parámetro buf apunta a una estructura USER_INFO_22 .
1003
Especifica una contraseña de usuario. El parámetro buf apunta a una estructura USER_INFO_1003 .
1005
Especifica un nivel de privilegios de usuario. El parámetro buf apunta a una estructura USER_INFO_1005 .
1006
Especifica la ruta de acceso del directorio principal para el usuario. El parámetro buf apunta a una estructura USER_INFO_1006 .
1007
Especifica un comentario que se va a asociar a la cuenta de usuario. El parámetro buf apunta a una estructura USER_INFO_1007 .
1008
Especifica los atributos de la cuenta de usuario. El parámetro buf apunta a una estructura USER_INFO_1008 .
1009
Especifica la ruta de acceso del archivo de script de inicio de sesión del usuario. El parámetro buf apunta a una estructura USER_INFO_1009 .
1010
Especifica los privilegios de operador del usuario. El parámetro buf apunta a una estructura USER_INFO_1010 .
1011
Especifica el nombre completo del usuario. El parámetro buf apunta a una estructura USER_INFO_1011 .
1012
Especifica un comentario que se va a asociar al usuario. El parámetro buf apunta a una estructura USER_INFO_1012 .
1014
Especifica los nombres de las estaciones de trabajo desde las que el usuario puede iniciar sesión. El parámetro buf apunta a una estructura USER_INFO_1014 .
1017
Especifica cuándo expira la cuenta de usuario. El parámetro buf apunta a una estructura USER_INFO_1017 .
1020
Especifica las horas durante las que el usuario puede iniciar sesión. El parámetro buf apunta a una estructura de USER_INFO_1020 .
1024
Especifica el código de país o región del usuario. El parámetro buf apunta a una estructura USER_INFO_1024 .
1051
Especifica el identificador relativo de un grupo global que representa al usuario inscrito. El parámetro buf apunta a una estructura de USER_INFO_1051 .
1052
Especifica la ruta de acceso al perfil de un usuario de red. El parámetro buf apunta a una estructura USER_INFO_1052 .
1053
Especifica la letra de unidad asignada al directorio principal del usuario. El parámetro buf apunta a una estructura USER_INFO_1053 .

[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 red.

[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 en caso de error. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

Valor devuelto

Si la función se realiza correctamente, el valor devuelto es 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.
ERROR_INVALID_PARAMETER
Uno de los parámetros de función no es válido. Para obtener más información, vea la sección Comentarios que se muestra más adelante.
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_SpeGroupOp
No se permite la operación en grupos especiales especificados, que son grupos de usuarios, grupos de administradores, grupos locales o grupos invitados.
NERR_LastAdmin
No se permite la operación en la última cuenta administrativa.
NERR_BadPassword
El nombre del recurso compartido o la contraseña no son válidos.
NERR_PasswordTooShort
La contraseña es más corta de la necesaria. (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).
NERR_UserNotFound
No se encontró el nombre de usuario.

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 solo permite que 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 Modelo.

El descriptor de seguridad del objeto User se usa para realizar la comprobación de acceso de esta función.

Solo los usuarios o aplicaciones que tienen privilegios administrativos pueden llamar a la función NetUserSetInfo para cambiar la contraseña de un usuario. Cuando un administrador llama a NetUserSetInfo, la única restricción aplicada es que la nueva longitud de contraseña debe ser coherente con los modales del sistema. Un usuario o aplicación que conoce la contraseña actual de un usuario puede llamar a la función NetUserChangePassword para cambiar la contraseña. Para obtener más información sobre las funciones de llamada que requieren privilegios de administrador, consulte Ejecución con privilegios especiales.

Los miembros del grupo local Administradores pueden establecer cualquier elemento modificable de la cuenta de usuario. Todos los usuarios pueden establecer el miembro usri2_country_code de la estructura de USER_INFO_2 (y el miembro usri1024_country_code de la estructura USER_INFO_1024 ) para sus propias cuentas.

Un miembro del grupo local del operador de cuenta no puede establecer los detalles de una cuenta de clase Administradores, conceder un privilegio de administrador de cuenta existente o cambiar el privilegio del operador de ninguna cuenta. Si intenta cambiar el nivel de privilegio o deshabilitar la última cuenta con privilegios de administrador en la base de datos de seguridad, (la base de datos del administrador de cuentas de seguridad (SAM) o, en el caso de los controladores de dominio, la función Active Directory), se produce un error en la función NetUserSetInfo y devuelve NERR_LastAdmin.

Para establecer las siguientes marcas de control de cuentas de usuario, se requieren los siguientes privilegios y derechos de acceso de control .

Marca de control de cuentas Privilegio o derecho necesario
UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION Privilegio SeEnableDelegationPrivilege, que se concede a los administradores de forma predeterminada.
UF_TRUSTED_FOR_DELEGATION SeEnableDelegationPrivilege.
UF_PASSWD_NOTREQD "Actualizar contraseña no necesaria" controla el derecho de acceso en el objeto Domain, que se concede a los usuarios autenticados de forma predeterminada.
UF_DONT_EXPIRE_PASSWD "Contraseña no expirada" controla el acceso en el objeto Domain, que se concede a los usuarios autenticados de forma predeterminada.
UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED "Habilitar contraseña cifrada de forma reversible por usuario" controla el acceso en el objeto Domain, que se concede a los usuarios autenticados de forma predeterminada.
UF_SERVER_TRUST_ACCOUNT "Agregar o quitar réplica en el dominio" controla el acceso al objeto Domain, que se concede a los administradores de forma predeterminada.
 

Para obtener una lista de constantes de privilegios, consulte Constantes de autorización.

La manera correcta de especificar el nuevo nombre de una cuenta es llamar a NetUserSetInfo con USER_INFO_0 y especificar el nuevo valor mediante el miembro usri0_name . Si llama a NetUserSetInfo con otros niveles de información y especifica un valor mediante un miembro usriX_name , se omite el valor.

Tenga en cuenta que las llamadas a NetUserSetInfo solo pueden cambiar el directorio principal para las cuentas de usuario que crea el servidor de red.

Si la función NetUserSetInfo devuelve ERROR_INVALID_PARAMETER, puede usar el parámetro parm_err para indicar el primer miembro de la estructura de información de usuario que no es válida. (Una estructura de información de usuario comienza por USER_INFO_ y su formato se especifica mediante el parámetro level ). En la tabla siguiente se enumeran los valores que se pueden devolver en el parámetro parm_err y el miembro de estructura correspondiente que se encuentra en error. (El prefijo usri*_ indica que el miembro puede comenzar con varios prefijos, por ejemplo, usri10_ o usri1003_).

Valor Miembro
USER_NAME_PARMNUM usri*_name
USER_PASSWORD_PARMNUM usri*_password
USER_PASSWORD_AGE_PARMNUM usri*_password_age
USER_PRIV_PARMNUM usri*_priv
USER_HOME_DIR_PARMNUM usri*_home_dir
USER_COMMENT_PARMNUM usri*_comment
USER_FLAGS_PARMNUM usri*_flags
USER_SCRIPT_PATH_PARMNUM usri*_script_path
USER_AUTH_FLAGS_PARMNUM usri*_auth_flags
USER_FULL_NAME_PARMNUM usri*_full_name
USER_USR_COMMENT_PARMNUM usri*_usr_comment
USER_PARMS_PARMNUM usri*_parms
USER_WORKSTATIONS_PARMNUM usri*_workstations
USER_LAST_LOGON_PARMNUM usri*_last_logon
USER_LAST_LOGOFF_PARMNUM usri*_last_logoff
USER_ACCT_EXPIRES_PARMNUM usri*_acct_expires
USER_MAX_STORAGE_PARMNUM usri*_max_storage
USER_UNITS_PER_WEEK_PARMNUM usri*_units_per_week
USER_LOGON_HOURS_PARMNUM usri*_logon_hours
USER_PAD_PW_COUNT_PARMNUM usri*_bad_pw_count
USER_NUM_LOGONS_PARMNUM usri*_num_logons
USER_LOGON_SERVER_PARMNUM usri*_logon_server
USER_COUNTRY_CODE_PARMNUM usri*_country_code
USER_CODE_PAGE_PARMNUM usri*_code_page
USER_PRIMARY_GROUP_PARMNUM usri*_primary_group_id
USER_PROFILE_PARMNUM usri*_profile
USER_HOME_DIR_DRIVE_PARMNUM usri*_home_dir_drive
 

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.

La función NetUserSetInfo no controla cómo se protegen los parámetros de contraseña cuando se envían a través de la red a un servidor remoto para cambiar una contraseña de usuario. Cualquier cifrado de estos parámetros se controla mediante el mecanismo de llamada a procedimiento remoto (RPC) admitido por el redirector de red que proporciona el transporte de red. El cifrado también se controla mediante los mecanismos de seguridad admitidos por el equipo local y los mecanismos de seguridad admitidos por el servidor de red remoto especificado en el parámetro servername . Para obtener más información sobre la seguridad cuando se usa el redirector de red de Microsoft y el servidor de red remoto ejecuta Microsoft Windows, consulte la documentación del protocolo para MS-RPCE y MS-SAMR.

Ejemplos

En el ejemplo de código siguiente se muestra cómo deshabilitar una cuenta de usuario con una llamada a la función NetUserSetInfo . El ejemplo de código rellena el miembro usri1008_flags de la estructura USER_INFO_1008 , especificando el valor UF_ACCOUNTDISABLE. A continuación, el ejemplo llama a NetUserSetInfo y especifica el nivel de información 0.

#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[])
{
   DWORD dwLevel = 1008;
   USER_INFO_1008 ui;
   NET_API_STATUS nStatus;

   if (argc != 3)
   {
      fwprintf(stderr, L"Usage: %s \\\\ServerName UserName\n", argv[0]);
      exit(1);
   }
   // Fill in the USER_INFO_1008 structure member.
   // UF_SCRIPT: required.
   //
   ui.usri1008_flags = UF_SCRIPT | UF_ACCOUNTDISABLE;
   //
   // Call the NetUserSetInfo function 
   //  to disable the account, specifying level 1008.
   //
   nStatus = NetUserSetInfo(argv[1],
                            argv[2],
                            dwLevel,
                            (LPBYTE)&ui,
                            NULL);
   //
   // Display the result of the call.
   //
   if (nStatus == NERR_Success)
      fwprintf(stderr, L"User account %s has been disabled\n", argv[2]);
   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

NetUserGetInfo

Funciones de administración de red

Introducción a la administración de redes

USER_INFO_0

USER_INFO_1

USER_INFO_1003

USER_INFO_1005

USER_INFO_1006

USER_INFO_1007

USER_INFO_1008

USER_INFO_1009

USER_INFO_1010

USER_INFO_1011

USER_INFO_1012

USER_INFO_1013

USER_INFO_1014

USER_INFO_1017

USER_INFO_1020

USER_INFO_1024

USER_INFO_1051

USER_INFO_1052

USER_INFO_1053

USER_INFO_2

USER_INFO_21

USER_INFO_22

USER_INFO_4

Funciones de usuario