Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Все совершенно не так. Хендл - ни с какой стороны не... 14.08.09 08:21 Число просмотров: 2830
Автор: amirul <Serge> Статус: The Elderman
|
> Щаз, попробую вспомнить... Короче, любая функция (1), > возвращающая указатель на объект ядра, получающая хендл как Все совершенно не так. Хендл - ни с какой стороны не является указателем. Это в первом приближении - индекс в per-process таблице хендлов (строго говоря там не чистая таблица, а дерево, но чисто семантически это именно просто ассоциативный массив: handle->object pointer). Причем при попытке сделать ObReferenceObjectByHandle на невалидный хендл (для которого отсутствует запись в таблице) просто приведет к тому, что тебе вернут STATUS_INVALID_HANDLE и всего делов.
> Если сильно насядешь, попробую вытащить это из известных > сырцов и выложить здесь. Счас, в силу изложенного в > заголовке, я не помню названий ф-ций, а в сырцах их не > искал - всю цепочку бредовых вызовов вскрыл САйсом в > процессе отладки своего фильтра. :-)
Я тебе и сам могу "всю цепочку бредовых вызовов" расписать. Получение указателя на объект по хэндлу багчекнуться не может. Кроме случаев, когда ты передашь невалидные УКАЗАТЕЛИ (конкретно ObReferenceObjectByHandle принимает указатели на ObjectType - ты должен знать, какой же собственно объект ты пытаешься референснуть, на Object - двойной указатель, через который возвращается собственно указатель на объект, и HandleInformation - в нем по желанию возвращается дополнительная инфа о референснутом объекте). Повторюсь, передачей невалидного хендла завалить винду нельзя. Совсем.
> При таком обилии 3д парти кода в ядре и легкостиего > подключения, следовало бы предусмотреть такую возможность, Ходють слухи, что NT сначала планировали делать микроядром. Микроядро это стабильность и ТОРМОЗА. Сделали гибридное: архитектуру модуляризовали (и выделили таки это самое микроядро - Ke*), но засунули все в общее адресное пространство чтоб не тормозило. Если бы не требование кроссплатформенности, на IA в принципе можно было бы запихнуть все third party в 1-е кольцо, но в большинстве архитектур есть только два режима: юзер и суперюзер.
> хотя бы для фильтров и, уж точно, предусмотреть запоминание > каждой ф-цией ядра, способной породить или получить кривой > указатель, вместо идиотских проверок распечатку адреса > вызвавшего ее кода и списка аргументов (а не вершины стека, > чтобы кодеру не напрягать голову ее расшифровкой с риском > породить дополнительные ошибки). Мдя. Разобрался бы для начала перед тем как нести чепуху. Любой багчек создает крешдамп. В крешдампе не только полный стек упавшего потока, но еще и содержимое регистров на момент падения, содержимое стеков всех других потоков, содержимое всех структур ядра и т.д..
|
|
|