Функция 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 структур, указывающих идентификаторы безопасности только для запрета в ограниченном маркере. Система использует идентификатор безопасности только для запрета, чтобы запретить доступ к защищаемому объекту. Отсутствие идентификатора безопасности только для запрета не разрешает доступ.

Отключение sid включает SE_GROUP_USE_FOR_DENY_ONLY и отключает SE_GROUP_ENABLED и SE_GROUP_ENABLED_BY_DEFAULT. Все остальные атрибуты будут игнорироваться.

Атрибуты только запрета применяются к любому сочетанию идентификаторов безопасности существующего маркера, включая идентификаторы БЕЗОПАСНОСТИ пользователя и идентификаторы безопасности групп, которые имеют атрибут SE_GROUP_MANDATORY. Чтобы получить идентификаторы безопасности, связанные с существующим маркером, вызовите SeQueryInformationToken с флагами TokenUser и TokenGroups. SeFilterToken игнорирует все идентификаторы безопасности в массиве, которые также не найдены в существующем маркере.

SeFilterToken игнорирует элементы Attributes SID_AND_ATTRIBUTES структур.

Этот параметр является необязательным и может иметь значение NULL.

[in, optional] PrivilegesToDelete

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

Чтобы получить привилегии, удерживаемые существующим маркером, вызовите SeQueryInformationToken с флагом TokenPrivileges. SeFilterToken игнорирует все привилегии в массиве, не удерживаемые существующим маркером.

SeFilterToken игнорирует элементы Attributes структур LUID_AND_ATTRIBUTES.

Этот параметр является необязательным и может иметь значение NULL.

[in, optional] RestrictedSids

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

Элементы Attributes структур SID_AND_ATTRIBUTES должны быть равны нулю. Ограничения идентификаторов безопасности всегда включены для проверок доступа.

Этот параметр является необязательным и может иметь значение NULL.

FilteredToken

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

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

Если одно или несколько значений параметра были недопустимыми, SeFilterToken возвращает STATUS_INVALID_PARAMETER. (Это значение возвращается, если целевой маркер не является токеном олицетворения.) В противном случае SeFilterToken возвращает STATUS_SUCCESS.

Комментарии

SeFilterToken может ограничить маркер следующими способами:

  • Примените атрибут deny-only к идентификаторам БЕЗОПАСНОСТИ в маркере, чтобы их нельзя было использовать для доступа к защищенным объектам. Дополнительные сведения об атрибуте "только запрет" см. в разделе Атрибуты SID в маркере доступа документации по Microsoft Windows SDK.

  • Удалите привилегии из маркера.

  • Укажите список ограничивающих идентификаторов безопасности, которые система использует при проверке доступа маркера к защищаемому объекту. Система выполняет две проверки доступа: одну с помощью включенных идентификаторов безопасности маркера, а другую — с помощью списка ограничивающих идентификаторов безопасности. Доступ предоставляется только в том случае, если обе проверки доступа разрешают запрошенные права доступа.

Ограниченный маркер можно использовать вместе с SeCreateClientSecurity и SeImpersonateClientEx для создания процесса с ограниченными правами доступа и привилегиями.

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

Если маркер, возвращаемый в NewToken , больше не нужен, освободите его, вызвав ObDereferenceObject.

Требования

Требование Значение
Минимальная версия клиента Windows XP
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая 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