Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Azamatt
0 / 0 / 0
Регистрация: 27.05.2013
Сообщений: 10
#1

Получить список пользователей из <разрешения для общего доступа> - C++

25.04.2016, 22:16. Просмотров 370. Ответов 5
Метки нет (Все метки)

Пока собственно не очень понимаю как задать вопрос, сталкиваюсь впервые
Имеется папка с общим доступом, для нее в "разрешения для общего доступа" можно предоставлять пользователям права(Полный доступ/Запись/Чтение). Можно ли получить список всех пользователей которые там находятся и что им разрешено?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2016, 22:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Получить список пользователей из <разрешения для общего доступа> (C++):

Получить список пользователей расшареной папки - C++
Здравствуйте форумчане. Создал программу получающую список расшаренных папок(&quot;Общий доступ...&quot;) на компьютере. Код нашел с этого сайта...

Составить программу для нахождения наибольшего и наименьшего общего делителя и наименьшего общего кратного двух натуральных чисел - C++
Составить программу для нахождения наибольшего и наименьшего общего делителя и наименьшего общего кратного двух натуральных чисел по...

Студентов поступивших в нечетном году занести в список, отличный от общего - C++
Дан двусвязный список. Узел списка- информация о студенте: фамилия, год рождения, год поступления, оценки по предметам. Студентов...

Разрешения для общего ресурса - Delphi WinAPI
Народ подскажите как вызвать &quot;Разрешения для общего ресурса&quot; уже весь инет перерыл ничего не могу найти. Вот как на этой...

Получить список пользователей, относящихся к группе с наибольшим числом пользователей - Linux
Дали задание: &quot;Получить список пользователей относящихся к группе с наибольшим числом пользователей&quot; программа для Линукса, никогда не...

Дополнительные разрешения для пользователей (WinServer 2008 R2 Standart) - Windows Server
Доброго времени суток форумчане. Подскажите пожалуйста как можно пользователям домена, разрешить на их локальном компьютере установку...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
25.04.2016, 22:27 #2
Можно. Через функции Windows.
0
Azamatt
0 / 0 / 0
Регистрация: 27.05.2013
Сообщений: 10
26.04.2016, 07:45  [ТС] #3
Пожалуйста напишите с помощью каких, от чего отталкиваться?
0
jupman
210 / 113 / 17
Регистрация: 10.11.2015
Сообщений: 280
26.04.2016, 15:09 #4
Цитата Сообщение от Azamatt Посмотреть сообщение
от чего отталкиваться?
Если коротко, то устроено примерно так. Охраняемый объект в Windows (файл, папка, процесс и т.д.) имеет так называемый дескриптор безопасности. В этом дескрипторе безопасности содержится определенная информация включая так называемый DACL (список контроля доступа). Каждый элемент этого списка (ACE) содержит информацию: идентификатор безопасности (SID) субъекта, маску доступа (GENERIC_READ и т.д.), флаг определяющий тип (allowed/denied) элемента и т.д. Каждый процесс имеет токен (выдается пользователю при входе в систему). При обращении к охраняемому объекту система сверяет информацию заданную в маркере (SID пользователя и групп) с информацией в дескрипторе безопасности (в элементах ACE). Ну и на основании сверки выносит вердикт (разрешать доступ или нет). В общем вам нужно список DACL получить. Хорошее описание данной темы есть в книге "Системное программирование в Windows" (А. Побегайло) в соответствующей главе. Книга есть в сети.
0
Azamatt
0 / 0 / 0
Регистрация: 27.05.2013
Сообщений: 10
26.04.2016, 20:50  [ТС] #5
Получается в маске которая находится DACL-е, и хранится все права которые даны пользователю, разрешенному выполнять действия с объектом?
Если так то у Побегайло описаны права находящиеся в маске, которые может иметь пользователь. Не понимаю только как узнать по маске какие права, если они в битовой форме. В книге описаны какой диапазон битов какие группы прав хранит.
В Побегайло описаны как праметры выводить только все в разброс.

нашел код в просторах интернета, выводит некоторые данные DACL, в том числе маску, маска выводится набором цифр, загуглил цифры, некоторые нашел, они характеризовали группу безопасности(пользователи, администратор и т.д.). Не увидел в выведенном списке пользователей, которые видны в "разрешения для общего доступа".
То нашел? можно этот код как пример использовать или он есть мое решение, но из-за не знания как его использовать не получается вывести необходимое?
функции используемые в примере посмотрел в книге Побегайло.
Кликните здесь для просмотра всего текста

#include <iostream>
#include <iomanip>

#include <windows.h>
#include <aclapi.h>

using namespace std;

void finish( int error )
{
if (error) exit( EXIT_FAILURE );
else exit( EXIT_SUCCESS );
}

int main( int argc, char* argv[] )
{
/* File/Directory name is passed as a first parameter */
if (argc < 2) {
cout << "object names is not specified" << endl;
finish( 1 );
}

PSECURITY_DESCRIPTOR pSD;
PACL pDACL;
ACL_SIZE_INFORMATION aclSize;
DWORD result;

// Get DACL for the specified named object.
result = GetNamedSecurityInfo( argv[1], SE_FILE_OBJECT,
DACL_SECURITY_INFORMATION,
NULL, NULL, &pDACL, NULL, &pSD );
if(ERROR_SUCCESS != result) {
cout << "GetNamedSecurityInfo failed (" << result << ")" << endl;
finish( 1 );
}

// Permissions are not specified (you have FAT ;-))
if (NULL == pDACL) {
cout << argv[1] << " has no DACL" << endl;
finish( 0 );
}

// Here we have valid DACL with a list of ACEs (with SIDs).
// Let's get number of ACEs.
if(!GetAclInformation( pDACL, &aclSize, sizeof(aclSize), AclSizeInformation )) {
cout << "GetAclInformation failed (" << GetLastError() << ")" << endl;
finish( 1 );
}

// Walk through ACEs and display information about each entry
for ( DWORD ace_idx = 0; ace_idx < aclSize.AceCount; ace_idx++) {
ACCESS_ALLOWED_ACE* pACE;

if (GetAce( pDACL, ace_idx, (PVOID*)&pACE )) {
char user[256] = "";
char domain[256] = "";
DWORD user_len = sizeof(user);
DWORD domain_len = sizeof(domain);
SID_NAME_USE sid_name_use;
PSID pSID =(PSID)(&(pACE->SidStart));

// Take SID from ACE and get accoount name
cout << setw(3) << ace_idx << ") ";
if (LookupAccountSid( NULL, pSID, user, &user_len,
domain, &domain_len, &sid_name_use)){
cout << domain << "" << user;
}
else {
cout << "unknown";
}

// Display ACE type
switch (pACE->Header.AceType) {
case ACCESS_ALLOWED_ACE_TYPE:
cout << " allowed";
break;
case ACCESS_DENIED_ACE_TYPE:
cout << " denied";
break;
default:
cout << " audit"; // in fact, never happens in this example
}

// Display access MASK
cout << " mask " << pACE->Mask << endl;
}
else {
cout << "GetAce failed at index " << ace_idx << endl;
}

}
finish( 0 );
}
0
jupman
210 / 113 / 17
Регистрация: 10.11.2015
Сообщений: 280
27.04.2016, 16:43 #6
Цитата Сообщение от Azamatt Посмотреть сообщение
Получается в маске которая находится DACL-е, и хранится все права которые даны пользователю, разрешенному выполнять действия с объектом?
DACL это список из ACE. В каждом элементе ACE маска доступа для конкретного субъекта (пользователь или группа).
Цитата Сообщение от Azamatt Посмотреть сообщение
Если так то у Побегайло описаны права находящиеся в маске, которые может иметь пользователь. Не понимаю только как узнать по маске какие права, если они в битовой форме. В книге описаны какой диапазон битов какие группы прав хранит.
В Побегайло описаны как праметры выводить только все в разброс.
У Побегайло они описаны в разделе 36.7 Списки управления доступом.

Добавлено через 18 минут
Цитата Сообщение от Azamatt Посмотреть сообщение
То нашел?
Да. Ну вот и читайте у Побегайло (36.7) про маску доступа и разбирайте маску.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2016, 16:43
Привет! Вот еще темы с ответами:

Получить список пользователей из AD - CMD/BAT
active directory групп имеется около 50 нужно получить список групп и пользователей в них в CMD net group manager net group...

Получить список заблокированных пользователей - C#
Всем привет. Допустим, у меня на компьютере 3 учетные записи. Я вошел под именем &quot;Рен&quot;, затем заблокировал и вошел под именем &quot;Админ&quot;. Мне...

Получить список активных пользователей. - C# ASP.NET
Всем привет. Может и проскакивала такая тема, но не нашёл её. Интересует ответ на вопрос: Как узнать, какие пользователи, в частности...

Как получить список всех пользователей ПК? - Delphi
Как получить список всех пользователей на конкретной машине? Мож функция какая есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.04.2016, 16:43
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru