Функция SeAccessCheck (wdm.h)
SeAccessCheck определяет, можно ли предоставить запрошенные права доступа объекту, защищенному дескриптором безопасности и владельцем объекта.
Синтаксис
BOOLEAN SeAccessCheck(
[in] PSECURITY_DESCRIPTOR SecurityDescriptor,
[in] PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext,
[in] BOOLEAN SubjectContextLocked,
[in] ACCESS_MASK DesiredAccess,
[in] ACCESS_MASK PreviouslyGrantedAccess,
[out] PPRIVILEGE_SET *Privileges,
[in] PGENERIC_MAPPING GenericMapping,
[in] KPROCESSOR_MODE AccessMode,
[out] PACCESS_MASK GrantedAccess,
[out] PNTSTATUS AccessStatus
);
Параметры
[in] SecurityDescriptor
Указатель на структуру SECURITY_DESCRIPTOR , описывающую дескриптор безопасности, защищающий объект, к которому осуществляется доступ.
[in] SubjectSecurityContext
Указатель на непрозрачную структуру SECURITY_SUBJECT_CONTEXT , указывающую захваченный контекст безопасности субъекта.
[in] SubjectContextLocked
Логическое значение, указывающее, заблокирован ли контекст субъекта пользователя, чтобы его не нужно было снова блокировать.
[in] DesiredAccess
Указывает ACCESS_MASK битовую маску для прав доступа, которые вызывающий объект пытается получить. Если вызывающий объект задает бит MAXIMUM_ALLOWED, подпрограмма выполняет все проверки DACL. Однако SeAccessCheck не выполняет никаких проверок привилегий, если вызывающий объект специально не запрашивает их, задавая ACCESS_SYSTEM_SECURITY или WRITE_OWNER биты.
[in] PreviouslyGrantedAccess
Указывает ACCESS_MASK битовую маску уже предоставленных прав доступа, например прав доступа, предоставленных в результате владения привилегией.
[out] Privileges
Указатель на переменную, предоставленную вызывающей стороны, для установки адреса структуры PRIVILEGE_SET , которая будет использоваться в процессе проверки доступа, или этот параметр может иметь значение NULL. Возвращаемый буфер, если таковой есть, должен быть освобожден вызывающим объектом с помощью SeFreePrivileges.
[in] GenericMapping
Указатель на структуру GENERIC_MAPPING , связанную с данным типом объекта. Это значение указывает конкретные права доступа, подразумеваемые каждым правом доступа GENERIC_XXXX .
[in] AccessMode
Указывает режим доступа, используемый в проверка, UserMode или KernelMode.
[out] GrantedAccess
Указатель на возвращенную маску доступа, указывающую предоставленный доступ. Если вызывающий объект указывает MAXIMUM_ALLOWED, а daCL в SecurityDescriptor имеет значение NULL, то подпрограмма возвращает GENERIC_ALL плюс любой дополнительный доступ, который вызывающий объект явно запрашивает.
[out] AccessStatus
Указатель на значение состояния, указывающее, почему было отказано в доступе.
Возвращаемое значение
Если доступ разрешен, Функция SeAccessCheck возвращает значение TRUE.
Комментарии
SeAccessCheck может выполнять тесты привилегий для SeTakeOwnershipPrivilege и SeSecurityPrivilege в зависимости от запрашиваемого доступа. В будущих выпусках операционной системы может выполняться дополнительное тестирование привилегий.
Эта подпрограмма также может проверка, является ли вызывающий объект владельцем объекта, чтобы предоставить WRITE_DAC или READ_CONTROL доступ.
Если эта подпрограмма возвращает значение FALSE, вызывающий объект должен использовать возвращаемое значение AccessStatus в качестве возвращаемого значения. То есть вызывающий объект должен избегать жесткого кодирования возвращаемого значения STATUS_ACCESS_DENIED или любого другого конкретного значения STATUS_XXX .
Дополнительные сведения о безопасности и управлении доступом см. в статье Модель безопасности Windows для разработчиков драйверов и документацию по этим темам в Microsoft Windows SDK.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 |
Целевая платформа | Универсальное |
Верхняя часть | wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Правила соответствия DDI | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |