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

3. Перерахування локальних груп

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

NET_API_STATUS NetLocaiGroupEnum(

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

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

LPBYTE *bufptr, // буфер для інформації

DWORD prefmaxlen, // довжина буфера

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

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

LPDWORD resumehandle // дескриптор для продовження перерахування

);

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

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

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

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

  • NERR_BufTooSmaii — буфер дуже малий.

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

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

#include <stdio.h>

#include <windows.h>

#include <lm.h>

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

int main()

{

DWORD entries_read; // кількість елементів

DWORD total_entries; // нумерація елементів

LOCALGROUP_INFO_1 *buf_ptr = NULL; // адреса буфера для даних

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

// перераховуємо локальні групи

ret_status = NetLocalGroupEnum(

NULL, // локальний комп’ютер

1, // отримуємо ім’я групи і коментар

(LPBYTE*)&buf_ptr, // покажчик на адресу буфера для даних

MAX_PREFERRED_LENGTH, // довжина буфера на вимогу

&entries_read, // покажчик на кількість елементів

&total_entries, // покажчик на нумерацію елементів

NULL);

// перевіряємо завершення функції

if (ret_status != NERR_Success)

{

printf("Net local group enumeration failed.\n");

NetApiBufferFree(buf_ptr); // звільняємо буфер для даних

return ret_status;

}

printf("Local groups enumeration:\n");

// виводимо на консоль імена локальних груп і коментарі

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

{

wprintf(L"Name: %s\n", buf_ptr[i].lgrpi1_name);

wprintf(L"Comment: %s\n", buf_ptr[i].lgrpi1_comment);

}

NetApiBufferFree(buf_ptr); // звільняємо буфер для даних

return 0;

}

4. Зміна інформації про локальну групу

Для зміни імені локальної групи і коментарів про локальну групу Використовується функція NetLocalGroupSetinfo, Яка Має наступний прототип:

NET_API_STATUS NetLocalGroupSetinfo(

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

LPCWSTR groupname, // ім’я групи

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

LPBYTE buf, // буфер з інформацією

LPDWORD parm_err // індексування помилки

);

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

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

  • error_invalid_parameter — неправильний параметр;

  • error_no_such_alias — не існує вказаної локальної групи;

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

  • NERR_NotPrimary — операція може виконуватися тільки на первинному контроллері домена.

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

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

Параметр groupname повинен указувати на рядок з ім’ям групи, інформація про яку змінюється. Цей рядок повинен мати кодування Unicode.

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

0 — використовується структура типу localgroup_info_0;

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

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