Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_drsp_01.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
91 Кб
Скачать
☆

2. Отримання інформації про користувача

Для отримання інформації про користувача з його облікового запису використовується функція NetuserGetinfo, яка має наступний прототип:

NET_API_STATUS NetUserGetlnfо(

LPCWSTR servername, // ім’я сервера

LPCWSTR username, // ім’я користувача

DWORD level, // рівень інформації

LPBYTE *bufptr // вказівник на інформацію

);

У разі успішного завершення функція NetuserGetinfo повертає значення NERR_success, а у разі невдачі можливі наступні коди завершення:

  • error_access_denied — користувачеві відмовлено в доступі;

  • NERR_invaiidcomputer — неправильне ім'я комп'ютера;

  • NERR_userNotFound — користувач не знайдений.

Параметри функції NetuserGetinfo мають наступне призначення.

Параметр servername повинен вказувати на рядок з ім'ям сервера, на якому виконуватиметься функція. Цей рядок повинен мати кодування Unicode і починатися з символів \\. Якщо функція повинна виконуватися на локальному комп'ютері, то цей параметр повинен мати значення null.

Параметр username повинен вказувати на рядок з ім'ям користувача, інформацію про яке повертає функція. Цей рядок повинен мати кодування Unicode.

Параметр level указує тип структури, в яку буде записана інформація про користувача. Цей параметр може приймати одне з наступних значень:

1 — використовується структура типу user_info_i;

2 — використовується структура типу user_info_2;

3 — використовується структура типу user_info_3;

4 — використовується структура типу user_info_4;

10 — використовується структура типу user_info_io;

11 — використовується структура типу user_info_h;

20 — використовується структура типу user_info_2o;

23 — використовується структура типу user_info_23.

Параметр bufptr повинен містити адресу покажчика на масив байтів. У цей покажчик функція запише адресу буфера з інформацією про користувача.

Пам'ять під буфер виділяє система. Тому після прочитання інформації про користувача з буфера ця пам'ять повинна бути звільнена за допомогою виклику функції NetApiBufferFree, яка розглянута далі.

Для звільнення пам'яті, яка резервується функціями з бібліотеки netapi32.1ib, використовується функція NetApiBufferFree, яка має наступний прототип:

NET_API_STATUS NetApiBuf ferFree (

LPVOID buffer // вказівник на буфер

);

У разі успішного завершення функція NetApiBufferFree повертає значення NERR_success, а у разі невдачі код помилки. Єдиний параметр цієї функції повинен указувати на буфер, пам'ять для якого була заздалегідь розподілена одній з мережевих функцій.

У лістингу 2 приведена програма, яка отримує інформацію про користувача за допомогою функції NetUserGetlnfо.

Лістинг 2. Отримання інформації про користувача

#include <stdio.h>

#include <windows.h>

#include <lm.h>

#pragma comment( lib, "netapi32.lib" ) // підключаємо мережеву бібліотеку

int main()

{

wchar_t server_name[256] = L"\\\\"; // ім’я сервера

wchar_t user_name[UNLEN]; // ім’я користувача

USER_INFO_1 *ui; // інформація про користувача

NET_API_STATUS ret_status; // код повернення з функції

printf("Input server name: "); // вводимо ім’я сервера

// формуємо ім’я сервера

wscanf(L"%s", server_name + wcslen(server_name));

printf("Input user name: ");

wscanf(L"%s", user_name); // читаємо ім’я користувача

// отримуємо інформації о користувача

ret_status = NetUserGetInfo(

server_name, // ім’я сервера

user_name, // ім’я користувача

1, // рівень інформації 1

(LPBYTE*)&ui); // адреса інформації про користувача

// перевіряємо на успішне завершення

if (ret_status != NERR_Success)

{

printf("Net user get info failed.\n");

return ret_status;

}

wprintf(L"User name: %s\n", ui->usri1_name);

wprintf(L"User commemnt: %s\n", ui->usri1_comment);

NetApiBufferFree(ui); // вивільняємо буфер

return 0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]