Вопрос об объекте ядра Windows - PullRequest
3 голосов
/ 11 ноября 2010

Мне удалось решить многие мои вопросы, большое спасибо вам, ребята.И я хотел бы спросить еще один.:)

Я читаю о , там говорится:

Когда мы хотим получить доступ к существующему объекту ядра (а не к созданию нового), мыдолжны указать операции, которые мы намереваемся выполнить над объектом.Если нам разрешен доступ с такими операциями, возвращается дескриптор объекта ядра.

... если возвращенный дескриптор используется для вызова API, для которого требуется право, отличное от запрошенного вами,происходит отказ в отклонении.

AFAIK, дескриптор - это просто целое число, это просто индекс в таблице дескрипторов процесса, больше ничего не может предоставить значение дескриптора.Если у нас уже есть дескриптор объекта ядра, как система может обнаружить, что мы используем его для других операций, чем мы запрашивали?

У объекта ядра может быть несколько дескрипторов, и владельцы этих дескрипторовмогут иметь разные типы доступа.Где система хранит информацию о различных типах доступа?Я думаю, что это должно быть в таблице дескрипторов процесса.

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

Любое понимание будет высоко оценено.

Обновление 1

Спасибо, ребята.

Я ссылался на 5-е издание , там говорилось в гл. 6. Проверки доступа:

Модель безопасности Windows требует, чтобы во время открытия объекта терад был заранее определен, чтотипы действий, которые он хочет совершить на объекте.Менеджер объектов вызывает SRM для выполнения проверок доступа на основе требуемого доступа потока, и, если доступ предоставлен, дескриптору процесса назначается поток, с помощью которого поток (или другие потоки в процессе) могут выполнять дальнейшие операции надобъект.Как объяснено в главе 3, менеджер объектов записывает права доступа, предоставленные для дескриптора, в таблицу дескрипторов процесса.

Так что, похоже, мое предположение верно.

Спасибо.

1 Ответ

2 голосов
/ 11 ноября 2010

Каждый активный объект ядра будет иметь ряд прав, сохраненных против него.Это просто еще одна таблица, управляемая диспетчером ссылок безопасности (SRM).Когда администратор объекта утверждает безопасность, тогда дескриптор объекта ищется для сбора ссылки на объект (ObReferenceObjectByHandle) и результирующий объект, который можно использовать для поиска прав (ObCheckObjectAccess).Будут косвенные указания, связанные с токенами безопасности, но по сути это теория.Таким образом, два дескриптора могут действительно указывать на один и тот же ссылочный объект.

Существует хорошее описание того, что происходит во время вызова ObCheckObjectAccess в Windows Internals (моя версия 5).

Перефразируя это здесь:

ObCheckObjectAccess берет объект, учетные данные вызывающего потока и запрошенный доступ и вызывает SRM (SeAccessCheck), чтобы он мог определить,право утверждается или отказывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...