IOCTRL 非同期処理

デバイスドライバ開発初心者です。

ユーザーモードから、DeviceIoControl()で非同期IOCTRLで、データのRead、Writeを行いたいのですが、
カーネルモード内での処理でどのように、完了通知を行えるのかがわかりません。

初歩的な質問で申し訳ないのですが、一般的な処理方法をご教授頂けますでしょうか?

初めまして、sagaraで

初めまして、sagaraです。

> ユーザーモードから、DeviceIoControl()で非同期IOCTRLで、データのRead、Writeを行いたいのですが、
> カーネルモード内での処理でどのように、完了通知を行えるのかがわかりません。
>
ドライバで完了ルーチンを設定し、アプリケーションへの完了通知は設定された完了ルーチンにて行うのが一般的な方法だと考えられます。

サンプルコードをマイクロソフトのサポートで見つけましたので、ご確認ください。
http://support.microsoft.com/kb/320275/ja
(シナリオ3が該当します)

よろしくお願いいたします。

sagaraさん、ありがと

sagaraさん、ありがとうございます。

一般的な方法について、理解しました。

また、現在DeviceIoControl()で来た要求を、Wokerスレッド内で完了させようと
しているのですが、うまくいかずブルースクリーンとなってしまいます。

Wokerスレッドないでは、KeWaitForSingleObject()で、waitさせており、
下位ドライバからの完了ルーチン内で、KeSetEvent()にてシグナル状態にしているのですが、
KeSetEvent()コール後に、ブルースクリーンとなってしまいます。
※下位ドライバへの要求、完了ルーチンは別途処理しております。

原因として、考えられることはありますでしょうか?

>また、現在DeviceIoContr

>また、現在DeviceIoControl()で来た要求を、Wokerスレッド内で完了させようと
>しているのですが、うまくいかずブルースクリーンとなってしまいます。

KeSetEvent()の、KEVENTパラメータのアドレスを間違えておりました。
修正したところ、ブルースクリーンを回避できました。

こんにちは、sagaraで

こんにちは、sagaraです。
返信遅くなりました。
ブルースクリーンの件も含め、解決して良かったです。