Получить dacl и sacl объекта
От: chipik  
Дата: 09.10.08 21:12
Оценка:
Доброго времени суток, товарищи.
Столкнулся с необходимостью узнать какие пользователи\группы имеют доступ к объекту и соответственно, что это за доступ.
Если, я правильно понимаю узнать это можно, зная dacl и sacl объекта.
Как же их получить? Вроде как функция ZwQuerySecurityObject должна заполнять структурку_SECURITY_DESCRIPTOR,

typedef struct _SECURITY_DESCRIPTOR {
   BYTE  Revision;
   BYTE  Sbz1;
   SECURITY_DESCRIPTOR_CONTROL Control;
   PISID Owner;
   PSID Group;
   PACL Sacl;
   PACL Dacl;

   } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;



но у меня почему-то как раз не заполняются поля PACL Sacl и PACL Dacl (
мало прав? а как тогда получить эти самые права?
Изучением win систем, да и самого языка занялся совсем недавно, так что извиняюсь если что-то неграмотно сформулировал. спасибо
Re: Получить dacl и sacl объекта
От: x64 Россия  
Дата: 09.10.08 21:23
Оценка: +2
C> но у меня почему-то как раз не заполняются поля PACL Sacl и PACL Dacl (

Дело в том, что SECURITY_DESCRIPTOR — структура переменной длины в силу того, что её поля — это также структуры переменной длины (например, DACL, SID и другие). Для извлечения полей из этой структуры существуют специальные функции — GetSecurityDescriptorDacl(), GetSecurityDescriptorSacl() и т.п. Кроме того, я не очень понимаю, зачем тебе именно ZwQuerySecurityObject() — это достаточно низкоуровневая функция и, вообще говоря, не предназначена для вызова в Win32-приложениях. Думаю, тебе стоит заменить её на GetSecurityInfo() либо GetNamedSecurityInfo().

Рабочий пример я уже постил вот здесь
Автор: x64
Дата: 01.10.08
. Кстати, именно для тебя. Почему опять тебе же самые вопросы?
Re[2]: Получить dacl и sacl объекта
От: chipik  
Дата: 10.10.08 20:12
Оценка:
Здравствуйте, x64, Вы писали:

C>> но у меня почему-то как раз не заполняются поля PACL Sacl и PACL Dacl (


x64>Для извлечения полей из этой структуры существуют специальные функции — GetSecurityDescriptorDacl(), GetSecurityDescriptorSacl()


Спасибо.
Удалось узнать, пользователей и группы которым разрешен доступ, а как расшифровавать битовую маску доступа для них?
Re[3]: Получить dacl и sacl объекта
От: x64 Россия  
Дата: 10.10.08 20:57
Оценка:
C>Удалось узнать, пользователей и группы которым разрешен доступ, а как расшифровавать битовую маску доступа для них?

Вопросы, право, какие-то детские. У тебя есть на руках две вещи:

1. Битовая маска (как правило, ACCESS_MASK или просто DWORD, что в, общем-то, одно и то же).
2. Тип объекта (файл, папка, ключ реестра, пайп, событие, мутекс, процесс, поток и т.п.).

Флаги доступа бывают общие и специфичные для каждого типа. К общим можно отнести READ_CONTROL, SYNCHRONIZE, DELETE и парочку других. Специфичные для файла, это FILE_WRITE_DATA, FILE_READ_ATTRIBUTES и т.д., для секции это будет FILE_MAP_EXECUTE, FILE_MAP_READ и т.д. Идея, думаю, понятна.

Для любителей формальной информации из первых рук: Access Rights and Access Masks.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.