User mode app делает ReadFile()/DeviceIOControl() в режиме overlapped (т.е. non blocking) а драйвер кладёт IRP в очередь и делает completion на много позже.
s0larian можешь объяснить зачем нужен CreateEvent..... как происходит реагирование проги на событие от драйвера..... она ж должна как то ждать ответа от драйвера..... Почему примеры из WDK(KMDF) компилируются, а вот драйвера незагружаются(некоторые(Toaster) устанавливаются но незагружаются)....... Error Code 39 или ещё что то в этом роде....... Это всё происходит под Windows Server 2008? аналогично думаю будет и под Vista_x64.....
Flenger, при чём тут CreateEvent()? Не надо парится с этим. Делай overlapped ReadFile() который драйвер обработает когда захочет. После этого read операция завершится и ты обработаешь результат в user mode проге. Вот и вся синхронизация. То есть, не надо придумывать синхронизацию - всё уже есть. Почитай про overlapped I/O в MSDN, codeproject, google.