Cambiar elementos de la información del usuario
Las funciones de administración de red proporcionan una variedad de niveles de información para ayudar a cambiar la información del usuario. Algunos niveles requieren privilegios administrativos para ejecutarse correctamente. Para obtener más información sobre las funciones de llamada que requieren privilegios de administrador, consulte Ejecución con privilegios especiales.
En el código de ejemplo de este tema se muestra cómo cambiar varios elementos de la información del usuario mediante una llamada a la función NetUserSetInfo . El código usa varias estructuras de información de administración de red.
Al cambiar la información del usuario, es mejor usar el nivel específico para ese fragmento de información. Esto evita el restablecimiento accidental de información no relacionada al usar los valores de nivel inferior.
El establecimiento de algunos de los niveles más usados se muestra en los ejemplos de código siguientes:
- Establecer la contraseña de usuario, nivel 1003
- Establecimiento del privilegio de usuario, nivel 1005
- Establecimiento del directorio principal del usuario, nivel 1006
- Establecer el campo Comentario de usuario, nivel 1007
- Establecer las marcas de usuario, nivel 1008
- Establecer la ruta de acceso del script de usuario, nivel 1009
- Establecer las marcas de autoridad de usuario, nivel 1010
- Establecer el nombre completo del usuario, nivel 1011
Todos los fragmentos de código asumen que el usuario ha definido la directiva de compilación UNICODE e incluye los archivos de encabezado del SDK adecuados, como se indica a continuación:
#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
#define INCL_NET
#include <lm.h>
#include <stdio.h>
#pragma comment(lib, "netapi32.lib")
#define SERVER L"test_server_name"
#define USERNAME L"test_user_name"
DWORD netRet = 0;
Establecer la contraseña de usuario, nivel 1003
En el fragmento de código siguiente se muestra cómo establecer la contraseña de un usuario en un valor conocido con una llamada a la función NetUserSetInfo . El tema USER_INFO_1003 contiene información adicional.
#define PASSWORD L"new_password"
USER_INFO_1003 usriSetPassword;
//
// Set the usri1003_password member to point to a valid Unicode string.
//
// SERVER and USERNAME can be hard-coded strings or pointers to Unicode strings.
//
usriSetPassword.usri1003_password = PASSWORD;
netRet = NetUserSetInfo( SERVER, USERNAME, 1003, (LPBYTE)&usriSetPassword, NULL );
if( netRet == NERR_Success )
printf("Success with level 1003!\n");
else
printf( "ERROR: %d returned from NetUserSetInfo level 1003\n", netRet);
Establecimiento del privilegio de usuario, nivel 1005
El siguiente fragmento de código muestra cómo especificar el nivel de privilegio asignado a un usuario con una llamada a la función NetUserSetInfo . El tema USER_INFO_1005 contiene información adicional. Para obtener más información sobre los privilegios de cuenta, vea Privilegios y constantes de autorización.
USER_INFO_1005 usriPriv;
//
// Set the usri1005_priv member to the appropriate value.
//
// SERVER and USERNAME can be hard-coded strings or pointers to Unicode strings.
//
usriPriv.usri1005_priv = USER_PRIV_USER;
netRet = NetUserSetInfo( SERVER, USERNAME, 1005, (LPBYTE)&usriPriv, NULL );
if( netRet == NERR_Success )
printf("Success with level 1005!\n");
else
printf( "ERROR: %d returned from NetUserSetInfo level 1005\n", netRet);
Establecimiento del directorio principal del usuario, nivel 1006
El siguiente fragmento de código muestra cómo especificar la ruta de acceso del directorio principal de un usuario con una llamada a la función NetUserSetInfo . El directorio puede ser una ruta de acceso codificada de forma rígida o una ruta de acceso Unicode válida. El tema USER_INFO_1006 contiene información adicional.
#define HOMEDIR L"C:\\USER\USER_PATH"
USER_INFO_1006 usriHomeDir;
//
// Set the usri1006_home_dir member to point to a valid Unicode string.
//
// SERVER and USERNAME can be hard-coded strings or pointers to Unicode strings.
//
usriHomeDir.usri1006_home_dir = HOMEDIR;
netRet = NetUserSetInfo( SERVER, USERNAME, 1006, (LPBYTE)&usriHomeDir, NULL );
if( netRet == NERR_Success )
printf("Success with level 1006!\n");
else
printf( "ERROR: %d returned from NetUserSetInfo level 1006\n", netRet);
Establecer el campo Comentario de usuario, nivel 1007
En el siguiente fragmento de código se muestra cómo asociar un comentario a un usuario mediante una llamada a la función NetUserSetInfo . El tema USER_INFO_1007 contiene información adicional.
#define COMMENT L"This is my Comment Text for the user"
USER_INFO_1007 usriComment;
//
// Set the usri1007_comment member to point to a valid Unicode string.
//
// SERVER and USERNAME can be hard-coded strings or pointers to Unicode strings.
//
usriComment.usri1007_comment = COMMENT;
netRet = NetUserSetInfo( SERVER, USERNAME, 1007, (LPBYTE)&usriComment, NULL );
if( netRet == NERR_Success )
printf("Success with level 1007!\n");
else
printf( "ERROR: %d returned from NetUserSetInfo level 1007\n", netRet);
Establecer las marcas de usuario, nivel 1008
El siguiente fragmento de código muestra cómo establecer marcas de usuario con una llamada a la función NetUserSetInfo . El tema USER_INFO_1008 contiene una lista de valores válidos para las marcas y una descripción de cada marca.
Tenga en cuenta que la marca de UF_SCRIPT debe establecerse para redes windows NT, Windows 2000, Windows XP y LAN Manager. Si intenta establecer otras marcas sin establecer UF_SCRIPT en estas redes, se producirá un error en la función NetUserSetInfo .
#define USR_FLAGS UF_SCRIPT | UF_NORMAL_ACCOUNT
USER_INFO_1008 usriFlags;
//
// Set the usri1008_flags member to the appropriate constant value.
//
// SERVER and USERNAME can be hard-coded strings or pointers to Unicode strings.
//
usriFlags.usri1008_flags = USR_FLAGS;
netRet = NetUserSetInfo( SERVER, USERNAME, 1008, (LPBYTE)&usriFlags, NULL );
if( netRet == NERR_Success )
printf("Success with level 1008!\n");
else
printf( "ERROR: %d returned from NetUserSetInfo level 1008\n", netRet);
Establecer la ruta de acceso del script de usuario, nivel 1009
El siguiente fragmento de código muestra cómo establecer la ruta de acceso para el archivo de script de inicio de sesión de un usuario determinado con una llamada a la función NetUserSetInfo . El archivo de script puede ser . Archivo CMD, un archivo .EXE o un archivo .BAT. La cadena también puede ser null. El tema USER_INFO_1009 contiene información adicional.
#define SCRIPT_PATH L"C:\\BIN\\MYSCRIPT.BAT"
USER_INFO_1009 usriScrPath;
//
// Set the usri1009_script_path member to a valid Unicode string.
//
// SERVER and USERNAME can be hard-coded strings or pointers to Unicode strings.
//
usriScrPath.usri1009_script_path = SCRIPT_PATH;
netRet = NetUserSetInfo( SERVER, USERNAME, 1009, (LPBYTE)&usriScrPath, NULL );
if( netRet == NERR_Success )
printf("Success with level 1009!\n");
else
printf( "ERROR: %d returned from NetUserSetInfo level 1009\n", netRet);
Establecer las marcas de autoridad de usuario, nivel 1010
En el fragmento de código siguiente se muestra cómo establecer las marcas de privilegios del operador para un usuario con una llamada a la función NetUserSetInfo . El tema USER_INFO_1010 contiene una lista de valores válidos para las marcas y una descripción de cada marca.
#define AUTHORITY_FLAGS AF_OP_ACCOUNTS
USER_INFO_1010 usriAuthFlags;
//
// Set the usri1010_auth_flags member to the appropriate constant value.
//
// SERVER and USERNAME can be hard-coded strings or pointers to Unicode strings.
//
usriAuthFlags.usri1010_auth_flags = AUTHORITY_FLAGS;
netRet = NetUserSetInfo( SERVER, USERNAME, 1010, (LPBYTE)&usriAuthFlags, NULL);
if( netRet == NERR_Success )
printf("Success with level 1010!\n");
else
printf( "ERROR: %d returned from NetUserSetInfo level 1010\n", netRet);
Establecer el nombre completo del usuario, nivel 1011
El siguiente fragmento de código muestra cómo establecer el nombre completo de un usuario con una llamada a la función NetUserSetInfo . El tema USER_INFO_1011 contiene información adicional.
#define USER_FULL_NAME L"Joe B. User"
USER_INFO_1011 usriFullName;
//
// Set the usri1011_full_name member to a valid Unicode string.
//
// SERVER and USERNAME can be hard-coded strings or pointers to Unicode strings.
//
usriFullName.usri1011_full_name = USER_FULL_NAME;
netRet = NetUserSetInfo( SERVER, USERNAME, 1011, (LPBYTE)&usriFullName, NULL);
if( netRet == NERR_Success )
printf("Success with level 1011!\n");
else
printf( "ERROR: %d returned from NetUserSetInfo\n", netRet);