デバイスドライバ開発初心者です。
ユーザーモードから、DeviceIoControl()で非同期IOCTRLで、データのRead、Writeを行いたいのですが、 カーネルモード内での処理でどのように、完了通知を行えるのかがわかりません。
初歩的な質問で申し訳ないのですが、一般的な処理方法をご教授頂けますでしょうか?
初めまして、sagaraです。
> ユーザーモードから、DeviceIoControl()で非同期IOCTRLで、データのRead、Writeを行いたいのですが、 > カーネルモード内での処理でどのように、完了通知を行えるのかがわかりません。 > ドライバで完了ルーチンを設定し、アプリケーションへの完了通知は設定された完了ルーチンにて行うのが一般的な方法だと考えられます。
サンプルコードをマイクロソフトのサポートで見つけましたので、ご確認ください。 http://support.microsoft.com/kb/320275/ja (シナリオ3が該当します)
よろしくお願いいたします。
sagaraさん、ありがとうございます。
一般的な方法について、理解しました。
また、現在DeviceIoControl()で来た要求を、Wokerスレッド内で完了させようと しているのですが、うまくいかずブルースクリーンとなってしまいます。
Wokerスレッドないでは、KeWaitForSingleObject()で、waitさせており、 下位ドライバからの完了ルーチン内で、KeSetEvent()にてシグナル状態にしているのですが、 KeSetEvent()コール後に、ブルースクリーンとなってしまいます。 ※下位ドライバへの要求、完了ルーチンは別途処理しております。
原因として、考えられることはありますでしょうか?
>また、現在DeviceIoControl()で来た要求を、Wokerスレッド内で完了させようと >しているのですが、うまくいかずブルースクリーンとなってしまいます。
KeSetEvent()の、KEVENTパラメータのアドレスを間違えておりました。 修正したところ、ブルースクリーンを回避できました。
こんにちは、sagaraです。 返信遅くなりました。 ブルースクリーンの件も含め、解決して良かったです。
初めまして、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です。
返信遅くなりました。
ブルースクリーンの件も含め、解決して良かったです。