Вариант 2. Модификация драйвера для работы с прерываниями
И хотя второй вариант драйвера не улучшает соотношения "перенос/прерывание", в нем рассматриваются несколько приемов, которые часто встречаются в драйверах Windows, исходные тексты которых доступны для анализа.
Прежде всего, это — использование системных очередей IRP пакетов для обеспечения сериализации при доступе к обслуживаемому устройству. Во-вторых, в приведенном ниже примере демонстрируется способ синхронизации работы драйвера и вызывающего его приложения по совместно используемому событию. В-третьих, используется более традиционная схема использования DPC процедур для завершения работы по поводу прерывания, которая связывает только одну DPC процедуру с объектом устройства и использует вызовы IoInitializeDpcRequest и IoRequestDpc. Наконец, практически показано, как можно использовать для хранения временной информации незадействованные поля IRP пакетов, здесь — Parameters.DeviceIoControl.Type3InputBuffer в составе текущей (на момент обработки) ячейки стека IRP пакета.
Помимо упомянутых отличий, в драйвере используется механизм IOCTL запросов от приложения для операций чтения и записи в устройство, тогда как обработчиков запросов от Win32 вызовов WriteFile и ReadFile
в данной реализации драйвера нет вовсе.
Условия компиляции и сборки драйвера и тестирующего приложения не изменились.