Мне удалось решить многие мои вопросы, большое спасибо вам, ребята.И я хотел бы спросить еще один.:)
Я читаю о , там говорится:
Когда мы хотим получить доступ к существующему объекту ядра (а не к созданию нового), мыдолжны указать операции, которые мы намереваемся выполнить над объектом.Если нам разрешен доступ с такими операциями, возвращается дескриптор объекта ядра.
... если возвращенный дескриптор используется для вызова API, для которого требуется право, отличное от запрошенного вами,происходит отказ в отклонении.
AFAIK, дескриптор - это просто целое число, это просто индекс в таблице дескрипторов процесса, больше ничего не может предоставить значение дескриптора.Если у нас уже есть дескриптор объекта ядра, как система может обнаружить, что мы используем его для других операций, чем мы запрашивали?
У объекта ядра может быть несколько дескрипторов, и владельцы этих дескрипторовмогут иметь разные типы доступа.Где система хранит информацию о различных типах доступа?Я думаю, что это должно быть в таблице дескрипторов процесса.
Предположим, я пытаюсь открыть один объект ядра с 2 различными типами доступа, должны быть возвращены 2 дескриптора одного и того же объекта ядра, и, таким образом, будет2 записи в таблице дескрипторов процесса, указывающие на один и тот же объект ядра.
Любое понимание будет высоко оценено.
Обновление 1
Спасибо, ребята.
Я ссылался на 5-е издание , там говорилось в гл. 6. Проверки доступа:
Модель безопасности Windows требует, чтобы во время открытия объекта терад был заранее определен, чтотипы действий, которые он хочет совершить на объекте.Менеджер объектов вызывает SRM для выполнения проверок доступа на основе требуемого доступа потока, и, если доступ предоставлен, дескриптору процесса назначается поток, с помощью которого поток (или другие потоки в процессе) могут выполнять дальнейшие операции надобъект.Как объяснено в главе 3, менеджер объектов записывает права доступа, предоставленные для дескриптора, в таблицу дескрипторов процесса.
Так что, похоже, мое предположение верно.
Спасибо.