ObOpenObjectByName and Win7

Тема в разделе "WASM.NT.KERNEL", создана пользователем retmas, 25 янв 2010.

  1. retmas

    retmas New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2005
    Сообщения:
    100
    Господа!

    NTKERNELAPI
    NTSTATUS
    NTAPI
    ObOpenObjectByName(
    __in POBJECT_ATTRIBUTES ObjectAttributes,
    __in_opt POBJECT_TYPE ObjectType,
    __in KPROCESSOR_MODE AccessMode,
    __inout_opt PACCESS_STATE AccessState,
    __in_opt ACCESS_MASK DesiredAccess,
    __inout_opt PVOID ParseContext,
    __out PHANDLE Handle
    );

    При вызове ObOpenObjectByName всегда использовал NULL в качестве ObjectType, этим эта ф-ия и ценна! НО! в Win7 (возможно и в WinVista) с такими параметрами ф-ия возвращает STATUS_INVALID_PARAMETER. Как я понимаю именно из-за NULL в качестве ObjectType.

    Вопрос: связано ли это с безопасностью, теперь никак нельзя использовать данную ф-ию без валидного ObjectType?
     
  2. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Почему ты не знаешь тип объекта, имя которого передаёшь в ObOpenObjectByName()? Откуда у тебя это имя?

    Да, проверка жёстко зашита в ядре.
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    retmas
    А в чем проблема передать валидный ObjectType?
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Хотят референс на обьект сделоть не зная его типа бгг [​IMG]
     
  5. reader323

    reader323 New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2009
    Сообщения:
    134
    ObGetObjectType
     
  6. retmas

    retmas New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2005
    Сообщения:
    100
    Спасибо, господа. Но, к сожалению, ничего нового... Этот вопрос был скорее риторическим. Дело в том, что изначально Object Manager так и проектировался, а именно, отсутствие наследования и абстрактных классов, а значит и полиморфизма. Поэтому задача получения объекта без четкого определения его типа некорректна. Но до сих пор существовала такая возможность. Благо теперь закрыли. Практические реализации, конечно же, остались. Алгоритмы давно известны и проработаны. Интересовала исключительно идеологическая сторона вопроса.

    Кстати, x64, прежде чем обсуждать данную тему, я бы советовал Вам изучить все-таки Object Manager, и все существующие особенности и изменения. Просто, изучив Ваши заметки ("Типы объектов ядра") в блоге, очень расстроился.
    Сомнительна полезность некоторых высказываний, например:

    "Для этого вам следует вызвать ZwOpenFile и указать полное имя типа в атрибутах, например, \ObjectTypes\Thread или \ObjectTypes\Callback, передав затем полученный хендл в функцию ObReferenceObjectByHandle"

    Кстати, идея с kernel mode блогом на русском очень хороша. Заглядывайте туда)
     
  7. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Эта функция получает на вход адрес объекта, у автора его нет, у него есть только имя.
     
  8. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Если бы ты сразу сообщил о том, что ты гуру, мы не утруждали бы себя ответами.

    Этот совет был излишним.

    Честно говоря, не хотел никого расстраивать.

    Конкретно, в чём сомнительность? Замечаниям по-существу всегда рад.

    Спасибо.
     
  9. 0x6b65

    0x6b65 Забанен

    Публикаций:
    0
    Регистрация:
    8 окт 2009
    Сообщения:
    92
    Если есть имя не только объекта, но и его типа, то схема следующая:
    Получаем объект типа объектов (nt!ObpTypeObjectType), например, вызовом ObGetObjectType(ExEventObjectType). Дальше можно открыть тип объекта по имени той же функцией ObOpenObjectByName(). Имея на руках указатель на тип - открываем без лишних заморочек любой объект этого типа по имени.
    Детали: http://eretik.omegahg.com/art/00.html

    Видимо это связано с расширением "ядерного" API менеджера объектов функцией ObGetObjectType()
     
  10. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    У него там прототип новой функции некорректный, там на выходе POBJECT_TYPE будет, а не NTSTATUS. Алсо, чутка обновил свой пост, исправив попутно пару опечаток. Набигайте.
     
  11. 0x6b65

    0x6b65 Забанен

    Публикаций:
    0
    Регистрация:
    8 окт 2009
    Сообщения:
    92
    thnx, исправлено :)