Доброго времени суток, товарищи.
Столкнулся с необходимостью узнать какие пользователи\группы имеют доступ к объекту и соответственно, что это за доступ.
Если, я правильно понимаю узнать это можно, зная 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 систем, да и самого языка занялся совсем недавно, так что извиняюсь если что-то неграмотно сформулировал. спасибо
C> но у меня почему-то как раз не заполняются поля PACL Sacl и PACL Dacl (
Дело в том, что SECURITY_DESCRIPTOR — структура переменной длины в силу того, что её поля — это также структуры переменной длины (например, DACL, SID и другие). Для извлечения полей из этой структуры существуют специальные функции — GetSecurityDescriptorDacl(), GetSecurityDescriptorSacl() и т.п. Кроме того, я не очень понимаю, зачем тебе именно ZwQuerySecurityObject() — это достаточно низкоуровневая функция и, вообще говоря, не предназначена для вызова в Win32-приложениях. Думаю, тебе стоит заменить её на GetSecurityInfo() либо GetNamedSecurityInfo().
Рабочий пример я уже постил вот
здесьАвтор: x64
Дата: 01.10.08
. Кстати, именно для тебя. Почему опять тебе же самые вопросы?
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.