HANDLE в ядре

Тема в разделе "WASM.WIN32", создана пользователем Koshak, 19 окт 2006.

  1. Koshak

    Koshak New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2006
    Сообщения:
    31
    Адрес:
    Russia
    Здравствуйте все.
    Вопрос весьма детский, но я упёрся намертво.

    В драйвере создаётся файл лога (создаётся он в функции DriverEntry, т.е. в контексте процесса System), затем в обработчике IRP_MJ_READ фильтра повешенного на драйвер файловой системы должна производиться запись в лог. Так вот, запясь я произвести не могу, т.к. у меня всегда STATUS_INVALID_HANDLE. Пытался делать вот что:

    1. Описал функцию ZwDuplicateObject (в DDK она почему-то не описана оказалась), в DriverEntry сохраняю хэндл открытого файла и UniqueProcessId процесса System в структуре расширения своего устройства (может это и есть ошибка - хэндл-то не PID, но как получить хэндл процесса в ядре я не знаю :dntknw:, в структуре EPROCESS ничего подобного не нашёл), затем в обработчике IRP_MJ_READ извлекаю из структуры расширения хэндл файла и PID процесса System, делаю вызов ZwDuplicateObject, получаю вместо вожделенного хэндла 00 00 00 00.

    2. В DriverEntry получаю указатель на объект файла лога (ObReferenceObjectByHandle(....)), сохраняю его в структуре расширения, а в обработчике IRP_MJ_READ извлекаю из структуры расширения этот указатель, вызываю ObFindHandleForObject(....), получаю что-то не очень похожее на хэндл, а именно: 0х000002с8, что и даёт мне STATUS_INVALID_HANDLE в ZwWriteFile(....).

    Предполагаю, что надо было идти вообще другим путём (в строители, а не в программисты).

    Заранее всем спасибо.
     
  2. fr0b-p

    fr0b-p New Member

    Публикаций:
    0
    Регистрация:
    1 окт 2006
    Сообщения:
    118
    при открытии файла поставь флаг OBJ_KERNEL_HANDLE для OBJECT_ATTRIBUTES.Attributes
     
  3. Koshak

    Koshak New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2006
    Сообщения:
    31
    Адрес:
    Russia
    fr0b-p, спасибо, ЗАРАБОТАЛО!!!!!!!!