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