Функция NtQuerySecurityObject (ntifs.h)

Подпрограмма NtQuerySecurityObject извлекает копию дескриптора безопасности объекта.

Синтаксис

__kernel_entry NTSYSCALLAPI NTSTATUS NtQuerySecurityObject(
  [in]  HANDLE               Handle,
  [in]  SECURITY_INFORMATION SecurityInformation,
  [out] PSECURITY_DESCRIPTOR SecurityDescriptor,
  [in]  ULONG                Length,
  [out] PULONG               LengthNeeded
);

Параметры

[in] Handle

Дескриптор объекта, дескриптор безопасности которого должен запрашиваться. Этот дескриптор должен иметь доступ, указанный в столбце Значение таблицы, показанной в описании параметра SecurityInformation .

[in] SecurityInformation

Значение SECURITY_INFORMATION , указывающее запрашиваемую информацию в виде сочетания одного или нескольких следующих элементов.

Значение Значение
OWNER_SECURITY_INFORMATION Запрашивается идентификатор владельца объекта. Требуется доступ READ_CONTROL.
GROUP_SECURITY_INFORMATION Запрашивается идентификатор основной группы объекта. Требуется доступ READ_CONTROL.
SACL_SECURITY_INFORMATION Выполняется запрос системного ACL (SACL) объекта. Требуется доступ ACCESS_SYSTEM_SECURITY.
DACL_SECURITY_INFORMATION Запрашивается список управления доступом (DACL) объекта. Требуется доступ READ_CONTROL.

[out] SecurityDescriptor

Выделенный вызывающим объектом буфер, который NtQuerySecurityObject заполняет копией указанного дескриптора безопасности. Структура SECURITY_DESCRIPTOR возвращается в самостоятельном формате.

[in] Length

Размер буфера, на который указывает SecurityDescriptor, в байтах.

[out] LengthNeeded

Указатель на переменную, выделенную вызывающим объектом, которая получает количество байтов, необходимое для хранения скопированного дескриптора безопасности.

Возвращаемое значение

NtQuerySecurityObject возвращает STATUS_SUCCESS или соответствующее состояние ошибки. Возможные коды состояния ошибок:

Код возврата Описание
STATUS_ACCESS_DENIED У дескриптора не было необходимого доступа.
STATUS_BUFFER_TOO_SMALL Буфер слишком мал для дескриптора безопасности. Ни одна из сведений о безопасности не была скопирована в буфер.
STATUS_INVALID_HANDLE Дескриптор не является допустимым дескриптором.
STATUS_OBJECT_TYPE_MISMATCH Дескриптор не является дескриптором ожидаемого типа.

Комментарии

Минифильтры должны вызывать FltQuerySecurityObject.

Дескриптор безопасности может иметь абсолютную или самостоятельную форму. В относительной форме все члены структуры расположены в памяти непрерывно. В абсолютной форме структура содержит только указатели на члены. Дополнительные сведения см. в разделе Абсолютные и Self-Relative дескрипторы безопасности.

Файловая система NTFS накладывает ограничение в 64 КБ на размер дескриптора безопасности, записываемого на диск для файла. (Файловая система FAT не поддерживает дескрипторы безопасности для файлов.) Таким образом, буфер SecurityDescriptor размером 64 КБ гарантированно будет достаточно большим, чтобы вместить возвращаемую SECURITY_DESCRIPTOR структуру.

Дополнительные сведения о безопасности и управлении доступом см. в статье Модель безопасности Windows для разработчиков драйверов и в документации по этим темам в windows SDK.

Примечание

Если вызов функции NtQuerySecurityObject происходит в пользовательском режиме, следует использовать имя NtQuerySecurityObject вместо ZwQuerySecurityObject.

Для вызовов из драйверов режима ядра версии NtXxx и ZwXxx подпрограммы собственных системных служб Windows могут вести себя по-разному, так как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между версиями процедуры NtXxx и ZwXxx см. в разделе Использование версий Nt и Zw для процедур собственных системных служб.

Требования

Требование Значение
Минимальная версия клиента Windows XP
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Правила соответствия DDI HwStorPortProhibitedDIs, PowerIrpDDis

См. также раздел

FltQuerySecurityObject

SECURITY_DESCRIPTOR

SECURITY_INFORMATION

NtSetSecurityObject