Поделиться через


Изменение элементов сведений о пользователе

Функции управления сетью предоставляют различные уровни информации, помогающие изменять сведения о пользователях. Для успешного выполнения некоторых уровней требуются права администратора. Дополнительные сведения о вызове функций, которым требуются права администратора, см. в разделе Запуск с особыми привилегиями.

В примере кода в этом разделе показано, как изменить несколько элементов сведений о пользователе путем вызова функции NetUserSetInfo . В коде используются различные информационные структуры управления сетью.

При изменении сведений о пользователе лучше всего использовать определенный уровень для этой части информации. Это предотвращает случайный сброс несвязанных сведений при использовании значений более низкого уровня.

Настройка некоторых наиболее часто используемых уровней показана в следующих примерах кода:

Во всех фрагментах кода предполагается, что пользователь определил директиву компиляции UNICODE и включил соответствующие файлы заголовков пакета SDK следующим образом:

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

Установка пароля пользователя уровня 1003

В следующем фрагменте кода показано, как задать для пароля пользователя известное значение с помощью вызова функции NetUserSetInfo . Дополнительные сведения см. в разделе USER_INFO_1003 .

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

Настройка привилегий пользователя уровня 1005

В следующем фрагменте кода показано, как указать уровень привилегий, назначенных пользователю, с помощью вызова функции NetUserSetInfo . Дополнительные сведения см . в разделе USER_INFO_1005 . Дополнительные сведения о привилегиях учетной записи см. в разделе Привилегии и константы авторизации.

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);

Настройка домашнего каталога пользователя уровня 1006

В следующем фрагменте кода показано, как указать путь к домашнему каталогу пользователя с помощью вызова функции NetUserSetInfo . Каталог может быть жестко заданным или допустимым путем в Юникоде. Дополнительные сведения см. в разделе USER_INFO_1006 .

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

Задание поля комментария пользователя уровня 1007

В следующем фрагменте кода показано, как связать комментарий с пользователем путем вызова функции NetUserSetInfo . Дополнительные сведения см. в разделе USER_INFO_1007 .

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

Установка флагов пользователей, уровень 1008

В следующем фрагменте кода показано, как задать пользовательские флаги с помощью вызова функции NetUserSetInfo . Раздел USER_INFO_1008 содержит список допустимых значений для флагов и описание каждого флага.

Обратите внимание, что флаг UF_SCRIPT должен быть установлен для сетей Windows NT, Windows 2000, Windows XP и LAN Manager. Попытка установить другие флаги без настройки UF_SCRIPT в этих сетях приведет к сбою функции 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);

Задание пути к пользовательскому скрипту, уровень 1009

В следующем фрагменте кода показано, как задать путь к файлу скрипта входа определенного пользователя с помощью вызова функции NetUserSetInfo . Файл скрипта может быть . ФАЙЛ CMD, файл .EXE или файл .BAT. Строка также может иметь значение NULL. Дополнительные сведения см . в разделе USER_INFO_1009 .

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

Установка флагов центра пользователя, уровень 1010

В следующем фрагменте кода показано, как задать флаги привилегий оператора для пользователя с помощью вызова функции NetUserSetInfo . Раздел USER_INFO_1010 содержит список допустимых значений для флагов и описание каждого флага.

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

Задание полного имени пользователя, уровень 1011

В следующем фрагменте кода показано, как задать полное имя пользователя с помощью вызова функции NetUserSetInfo . Дополнительные сведения см . в разделе USER_INFO_1011 .

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