OVERLAPPED и DeviceIoControl

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

  1. Hunter

    Hunter New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    47
    В статье Four-F'а "Драйверы режима ядра: Часть 14: Базовая техника. Синхронизация: Использование объекта" (http://www.wasm.ru/article.php?article=drvw2k14) упоминается возможность асинхронного вызова DeviceIoControl с помощью механизма OVERLAPPED, но, к сожалению, не рассматривается подробно. Написано только, что: "Получив такой запрос, драйвер откладывает его завершение до тех пор, пока не произойдет ожидаемое событие и возвращает STATUS_PENDING. На стороне режима пользователя вызов DeviceIoControl возвращает ошибку ERROR_IO_PENDING и поток должен ждать на объекте "событие". Когда происходит ожидаемое событие, драйвер завершает IRP и сигнализирует об этом пользовательскому потоку, освобождая объект "событие". При этом драйвер должен быть готов к тому, что ему придется обрабатывать несколько таких IRP. Т.е. он должен организовать очередь запросов ввода-вывода ожидающих завершения."

    Где можно посмотреть пример кода такого драйвера, или хотя бы подробное описание, как его правильно построить? Буду благодарен за любую информацию :).
     
  2. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    DDK\src\general\cancel

    Для очереди используется Cancel-Safe IRP Queue, но это не принципиально, хотя и удобно. Можно и любую другую. См в DDK "Driver-Managed IRP Queues".
     
  3. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Либу для сборки забыл