
- •Лабораторна робота №5. Функції роботи з дескрипторами безпеки. Теоретична частина
- •1. Створення локальної групи
- •2. Отримання інформації про локальну групу
- •3. Перерахування локальних груп
- •4. Зміна інформації про локальну групу
- •1002 — Використовується структура типу localgroup_info_1002.
- •5. Додавання членів локальної групи
- •6. Видалення членів локальної групи
- •Практичне завдання:
1002 — Використовується структура типу localgroup_info_1002.
Параметр buf повинен указувати на буфер з інформацією про локальну групу. Інформація повинна зберігатися в структурі, тип якої заданий параметром level.
У змінну, на яку указує параметр parm_err, функція NetLocalGroupSetinfo поміщає індекс першого поля в структурі з інформацією про локальну групу, яке містить неправильні дані і, як наслідок, викликало завершення функції NetLocalGroupSetinfo з помилкою.
У подвійне слово, на яке указує параметр, функція NetLocalGroupSetinfo може записати одне з наступних значень:
localgroup_name_parmnum — неправильне ім’я групи;
localgroup_comment_parmnum — неправильний коментар.
У цьому параметрі може бути встановлене значення null. В цьому випадку індекс поля з неправильними даними не повертається.
Тепер опишемо структуру localgroup_info_0, яка має наступний тип:
typedef struct _LOCALGROUP_INFO_0 {
LPWSTR igrpi0_name; // ім’я групи
}LOCALGROUP_INFO_0, * PLOCALGROUP_INFO_0, * LPLOCALGROUP_INFO_0;
У єдиному полі igrpi0_name зберігається покажчик на рядок з ім’ям локальної групи. Довжина рядка не повинна перевищувати gnlen байт, а сам рядок повинен мати кодування Unicode.
У лістингу 4 приведена програма, яка змінює ім’я локальної групи, використовуючи для цього функцію NetLocalGroupSetlnfo.
Лістинг 4. Зміна імені локальної групи
#include <stdio.h>
#include <windows.h>
#include <lm.h>
#pragma comment( lib, "netapi32.lib" ) // підключаємо мережеву бібліотеку
int main()
{
wchar_t server_name[256]= L"\\\\"; // ім’я сервера
wchar_t old_name[GNLEN]; // старе ім’я локальної групи
wchar_t new_name[GNLEN]; // нове ім’я локальної групи
wchar_t comment[MAXCOMMENTSZ]; // новий коментар
LOCALGROUP_INFO_0 group_info_0; // інформація про ім’я групи
LOCALGROUP_INFO_1 group_info_1; // опис нової групи
NET_API_STATUS ret_status; // код повернення з функції
printf("Input а server name: ");
// формуємо ім’я сервера
wscanf(L"%s", server_name + wcslen(server_name));
printf("Input a local group name: ");
wscanf(L"%s", old_name); // вводимо ім’я групи
printf("Input а new name for the group: ");
wscanf(L"%s", new_name); // вводимо нове ім’я групи
// встановлюємо адресу імені в структуру
group_info_0.lgrpi0_name = new_name;
// змінюємо ім’я групи
ret_status = NetLocalGroupSetInfo(
server_name, // ім’я сервера
old_name, // ім’я групи
0, // нове ім’я групи
(LPBYTE)&group_info_0, // нова інформація про групу
NULL); // індексування інформації немає
// перевіряємо завершення функції
if (ret_status != NERR_Success)
{
printf("Net local group set name failed.\n");
return ret_status;
}
printf("Local group name was changed.\n");
printf("Input group comments: ");
getwchar(); // очищаємо потік
_getws(comment); // читаємо коментарі про користувача
// встановлюємо новий коментар
group_info_1.lgrpi1_comment = comment;
// змінюємо опис групи
ret_status = NetLocalGroupSetInfo(
server_name, // ім’я сервера
new_name, // ім’я групи
1, // отримуємо ім’я групи і коментар
(LPBYTE)&group_info_1, // новий опис групи
NULL); // індексування інформації немає
// перевіряємо завершення функції
if (ret_status != NERR_Success)
{
printf("Net local group set info failed.\n");
return ret_status;
}
printf("Local group comment was changed.\n");
return 0;
}