Поделиться через


Функция 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

См. также

LUID_AND_ATTRIBUTES

ObDereferenceObject

ObReferenceObjectByHandle

sid

SID_AND_ATTRIBUTES

SeCreateClientSecurity

SeImpersonateClientEx

SeQueryInformationToken

SeTokenIsRestricted

TOKEN_GROUPS

TOKEN_PRIVILEGES