- •Лабораторна робота №2. Функції управління групами в ос Windows. Теоретична частина
- •1. Створення локальної групи
- •2. Отримання інформації про локальну групу
- •3. Перерахування локальних груп
- •4. Зміна інформації про локальну групу
- •1002 — Використовується структура типу localgroup_info_1002.
- •5. Додавання членів локальної групи
- •6. Видалення членів локальної групи
- •Практичне завдання:
2. Отримання інформації про локальну групу
Для отримання інформації про локальну групу використовується функція NetLocalGroupGetinfo, яка має наступний прототип:
NET_API_STATUS NetLocalGroupGetinfo(
LPCWSTR servername, // ім’я сервера
LPCWSTR groupname, // ім’я групи
DWORD level, // рівень інформації
LPBYTE *bufptr // буфер для інформації
);
Відзначимо, що успішно цю функцію можуть виконати тільки користувачі, які є адміністраторами або операторами облікових записів.
У разі успішного завершення функція NetLocalGroupGetinfo повертає значення NERR_success, а у разі невдачі можливі наступні коди завершення:
error_access_denied — користувачеві відмовлено в доступі;
NERR_invalidComputer — неправильне ім’я комп’ютера;
error_no_such_alias — група з таким ім’ям не існує.
Параметри функції NetLocalGroupGetinfo мають наступне призначення.
Параметр servername повинен указувати на рядок з ім’ям сервера, на якому виконуватиметься функція. Цей рядок повинен мати кодування Unicode і починатися з символів \\. Якщо функція повинна виконуватися на локальному комп’ютері, то цей параметр повинен мати значення null.
Параметр groupname повинен указувати на рядок з ім’ям локальної групи, про яку отримують інформацію. Цей рядок повинен мати кодування Unicode.
Параметр level указує тип структури, яка містить інформацію про локальну групу. Цей параметр може приймати тільки одне значення — 1, яке вказує на те, що використовується структура типу localgroup_info_1;
Параметр bufptr повинен містити адресу покажчика, в який система запише адресу буфера з інформацією про локальні групи. Пам’ять під буфер розподіляється системою. Тому після прочитання інформації з буфера В лістингу 2 приведена програма, яка отримує інформацію про локальну Групу, використовуючи для цього функцію NetLocalGroupGetinfo.
Лістинг 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 group_name[GNLEN]; // ім’я локальної групи
LOCALGROUP_INFO_1 *buf_ptr = NULL; // адрес буфера для даних
NET_API_STATUS ret_status; // код повернення з функції
printf("Input server name: ");
// формуємо ім’я сервера
wscanf(L"%s", server_name + wcslen(server_name));
printf("Input a name for the local group: ");
wscanf(L"%s", group_name); // вводимо ім’я групи
// отримуємо інформацію про локальну групу
ret_status = NetLocalGroupGetInfo(
server_name, // ім’я сервера
group_name, // ім’я групи
1, // отримуємо ім’я групи і коментар
(LPBYTE*)&buf_ptr); // вказівник на адресу буфера для даних
// перевіряємо завершення функції
if (ret_status != NERR_Success)
{
printf("Net local group get info failed.\n");
NetApiBufferFree(buf_ptr); // звільняємо буфер для даних
return ret_status;
}
// виводимо на консоль ім’я локальної групи і коментар
wprintf(L"Local group name: %s\n", buf_ptr->lgrpi1_name);
wprintf(L"Comment: %s\n", buf_ptr->lgrpi1_comment);
NetApiBufferFree(buf_ptr); // звільняємо буфер для даних
return 0;
}
