Функция NtSetSecurityObject (ntifs.h)
Подпрограмма ntSetSecurityObject
Синтаксис
__kernel_entry NTSYSCALLAPI NTSTATUS NtSetSecurityObject(
[in] HANDLE Handle,
[in] SECURITY_INFORMATION SecurityInformation,
[in] PSECURITY_DESCRIPTOR SecurityDescriptor
);
Параметры
[in] Handle
Дескриптор объекта, состояние безопасности которого необходимо задать. Этот дескриптор должен иметь доступ, указанный в столбце "Значение" таблицы, показанной в описании параметра SecurityInformation.
[in] SecurityInformation
SECURITY_INFORMATION значение, указывающее сведения, которые необходимо задать в качестве сочетания одного или нескольких из следующих значений.
Ценность | Значение |
---|---|
OWNER_SECURITY_INFORMATION | Указывает, что идентификатор владельца объекта должен быть задан. Требуется WRITE_OWNER доступ. |
GROUP_SECURITY_INFORMATION | Указывает, что необходимо задать идентификатор основной группы объекта. Требуется WRITE_OWNER доступ. |
SACL_SECURITY_INFORMATION | Указывает, что необходимо задать системный ACL (SACL) объекта. Требуется ACCESS_SYSTEM_SECURITY доступ. |
DACL_SECURITY_INFORMATION | Указывает, что необходимо задать список управления доступом (DACL) объекта. Требуется WRITE_DAC доступ. |
[in] SecurityDescriptor
Указатель на дескриптор безопасности для объекта.
Возвращаемое значение
NtSetSecurityObject возвращает STATUS_SUCCESS или соответствующее состояние ошибки. Возможные коды состояния ошибок включают следующие:
Возвращаемый код | Описание |
---|---|
STATUS_ACCESS_DENIED | Вызывающий объект не получил необходимый доступ. |
STATUS_ACCESS_VIOLATION | SecurityDescriptor был указателем NULL. |
STATUS_INSUFFICIENT_RESOURCES | Дескриптор безопасности объекта не удалось записать. |
STATUS_INVALID_ACL | Дескриптор безопасности объекта содержал недопустимый ACL. |
STATUS_INVALID_HANDLE | Дескриптор не является допустимым дескриптором. |
STATUS_INVALID_SECURITY_DESCR | SecurityDescriptor не указывал на допустимый дескриптор безопасности. |
STATUS_INVALID_SID | Дескриптор безопасности объекта содержал недопустимый идентификатор безопасности. |
STATUS_OBJECT_TYPE_MISMATCH | Дескриптор не является дескриптором ожидаемого типа. |
STATUS_UNKNOWN_REVISION | Уровень редакции дескриптора безопасности объекта был неизвестен или не поддерживается. |
Замечания
Дескриптор безопасности может находиться в абсолютной или относительной форме. В самостоятельной форме все члены структуры находятся в памяти. В абсолютной форме структура содержит только указатели на элементы. Дополнительные сведения см. в абсолютных и Self-Relative дескрипторов безопасности.
Дополнительные сведения о безопасности и управлении доступом см. в модели безопасности Windows для разработчиков драйверов и документации по этим разделам в пакете SDK для Windows.
Минифильтры должны использовать FltSetSecurityObject вместо NtSetSecurityObject.
Вызовы NtSetSecurityObject должны выполняться в IRQL = PASSIVE_LEVEL и с поддержкой специальных API ядра.
Заметка
Если вызов функции NtSetSecurityObject происходит в пользовательском режиме, следует использовать имя "NtSetSecurityObject" вместо "ZwSetSecurityObject".
Для вызовов драйверов в режиме ядра NtXxx и ZwXxx версии подпрограммы Windows Native System Services могут вести себя по-разному в том, как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между NtXxx и ZwXxx версиями подпрограммы см. в разделе Using Nt and Zw Versions of the Native System Services Routines.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows XP |
целевая платформа | Всеобщий |
заголовка | ntifs.h (include Ntifs.h) |
библиотеки |
NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (см. раздел "Примечания") |
правил соответствия DDI |
HwStorPortProhibitedDDIs, PowerIrpDDis |
См. также
использование версий собственных системных служб и Zw