Функция SeFilterToken (ntifs.h)
Подпрограмма SeFilterToken создает новый маркер доступа, который является ограниченной версией существующего маркера доступа.
Синтаксис
NTSTATUS SeFilterToken(
[in] PACCESS_TOKEN ExistingToken,
[in] ULONG Flags,
[in, optional] PTOKEN_GROUPS SidsToDisable,
[in, optional] PTOKEN_PRIVILEGES PrivilegesToDelete,
[in, optional] PTOKEN_GROUPS RestrictedSids,
PACCESS_TOKEN *FilteredToken
);
Параметры
[in] ExistingToken
Указатель на первичный или олицетворение маркера. Маркер также может быть ограниченным маркером. Этот маркер уже должен быть открыт для TOKEN_DUPLICATE доступа. Этот указатель можно получить из существующего дескриптора маркера, вызвав ObReferenceObjectByHandle, указав TOKEN_DUPLICATE в качестве типа DesiredAccess.
[in] Flags
Задает дополнительные параметры привилегий. Этот параметр может быть нулевым или сочетанием следующих значений.
Ценность | Значение |
---|---|
DISABLE_MAX_PRIVILEGE | Отключает все привилегии в новом маркере, кроме SE_CHANGE_NOTIFY_PRIVILEGE. Если это значение указано, параметр PrivilegesToDelete игнорируется. |
SANDBOX_INERT | Сохраняет флаг TOKEN_SANDBOX_INERT в маркере. |
[in, optional] SidsToDisable
Указатель на структуру TOKEN_GROUPS, содержащую массив SID_AND_ATTRIBUTES структур, которые указывают идентификаторы, доступные только для запрета, в ограниченном токене. Система использует идентификатор безопасности только для запрета для запрета доступа к защищаемому объекту. Отсутствие идентификатора безопасности только для запрета не разрешает доступ.
Отключение безопасности включает SE_GROUP_USE_FOR_DENY_ONLY и отключает SE_GROUP_ENABLED и SE_GROUP_ENABLED_BY_DEFAULT. Все остальные атрибуты игнорируются.
Атрибуты, доступные только для запрета, применяются к любому сочетанию идентификаторов siD существующего маркера, включая идентификаторы идентификаторов безопасности пользователя и групп с атрибутом SE_GROUP_MANDATORY. Чтобы получить идентификаторы SID, связанные с существующим маркером, вызовите SeQueryInformationToken с флагами TokenUser и TokenGroups. SeFilterToken игнорирует все идентификаторы SID в массиве, которые также не найдены в существующем токене.
SeFilterToken игнорирует атрибуты членов структур SID_AND_ATTRIBUTES.
Этот параметр является необязательным и может иметь значение NULL.
[in, optional] PrivilegesToDelete
Указатель на структуру TOKEN_PRIVILEGES, содержащую массив LUID_AND_ATTRIBUTES структур, указывающих привилегии для удаления в ограниченном токене.
Чтобы получить привилегии, удерживаемые существующим маркером, вызовите SeQueryInformationToken с флагом TokenPrivileges. SeFilterToken игнорирует какие-либо привилегии в массиве, который не содержит существующий токен.
SeFilterToken игнорирует атрибуты членов структур LUID_AND_ATTRIBUTES.
Этот параметр является необязательным и может иметь значение NULL.
[in, optional] RestrictedSids
Указатель на структуру TOKEN_GROUPS, содержащую массив структур SID_AND_ATTRIBUTES, указывающий список ограничений идентификаторов безопасности для нового маркера. Если существующий маркер является маркером ограниченного доступа, список ограничений ИДЕНТИФИКАТОРов для нового маркера является пересечением этого массива и списком ограничений ИДЕНТИФИКАТОРов для существующего маркера.
Атрибуты членов структур SID_AND_ATTRIBUTES должны быть нулевыми. Ограничение идентификаторов SID всегда включено для проверок доступа.
Этот параметр является необязательным и может иметь значение NULL.
FilteredToken
Указатель на выделенную вызывающим переменную, которая получает адрес нового ограниченного токена. Новый маркер — это тот же тип, основной или олицетворение, что и существующий маркер.
Возвращаемое значение
Если одно или несколько значений параметров было недопустимым, SeFilterToken возвращает STATUS_INVALID_PARAMETER. (Это значение возвращается, если целевой маркер не является токеном олицетворения.) В противном случае SeFilterToken возвращает STATUS_SUCCESS.
Замечания
SeFilterToken может ограничить маркер следующими способами:
Примените атрибут только для запрета к идентификаторам безопасности в маркере, чтобы они не использовались для доступа к защищенным объектам. Дополнительные сведения об атрибуте только запрета см. в документации по пакету SDK для Microsoft Windows в атрибутах БЕЗОПАСНОСТИ в маркере доступа.
Удалите привилегии из маркера.
Укажите список ограничений ИДЕНТИФИКАТОРов, которые система использует при проверке доступа маркера к защищаемому объекту. Система выполняет две проверки доступа: один с включенными идентификаторами SID маркера, а другой — с помощью списка ограничений идентификаторов БЕЗОПАСНОСТИ. Доступ предоставляется только в том случае, если оба проверки доступа разрешают запрошенные права доступа.
Маркер ограниченного доступа можно использовать вместе с SeCreateClientSecurity и SeImpersonateClientEx для создания процесса с ограниченным доступом прав и привилегий.
Дополнительные сведения о безопасности и управлении доступом см. в модели безопасности Windows для разработчиков драйверов и документации по этим разделам в пакете SDK для Windows.
Если маркер, возвращенный в NewToken, больше не нужен, освободите его, вызвав ObDereferenceObject.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows XP |
целевая платформа | Всеобщий |
заголовка | ntifs.h (include Ntifs.h) |
библиотеки | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | < DISPATCH_LEVEL |