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

3. Отримання списку зареєстрованих користувачів

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

NET_API_STATUS NetuserEnum(

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

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

DWORD filter, // фільтр на облікові записи

LPBYTE *bufptr, // покажчик на буфер з інформацією

DWORD prefmaxlen, // довжина буфера з інформацією

LPDWORD entriesread, // кількість прочитаних структур

LPDWORD totalentries, // загальна кількість структур

LPDWORD resume_handle // дескриптор для продовження читання

);

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

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

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

  • error_more_data — не всі дані прочитані.

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

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

У лістингу 3 приведена програма, яка перераховує облікові записи користувачів, використовуючи функцію NetUserEnum.

Лістинг 3. Перерахування облікових записів користувачів

#include <stdio.h>

#include <windows.h>

#include <lm.h>

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

int main()

{

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

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

DWORD entries_read; // кількість прочитаних користувачів

DWORD total_entries; // загальна кількість користувачів

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

printf("Input server name: "); // читаємо ім'я сервера

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

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

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

ret_status = NetUserEnum(

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

0, // дізнаємося тільки імена користувачів

FILTER_NORMAL_ACCOUNT, // перераховуємо користувачів, зареєстрованих на комп'ютері

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

MAX_PREFERRED_LENGTH, // перераховуємо всіх користувачів

&entries_read, // кількість прочитаних користувачів

&total_entries, // загальна кількість користувачів

NULL); // індексації немає

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

if (ret_status != NERR_Success)

{

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

printf("Net API Status: %d\n", ret_status);

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

return ret_status;

}

for (DWORD i = 0; i < entries_read; ++i)

wprintf(L"User name: %s\n", ui[i].usri0_name);

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

return 0;

}

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