【WDM】Windows Driver Model相談室【デバドラ】
レス数が900を超えています。1000を超えると表示できなくなるよ。
0901デフォルトの名無しさん
2010/08/07(土) 04:07:36ComPortのドライバを作っていまして、
ドライバの割り込み待ち中に、通信先のWin32アプリがフリーズする点で躓いています。
Win32アプリ(フリーのシリアル通信ソフト)からIOCTL_SERIAL_WAIT_ON_MASKという
I/O Controlコードをドライバが受け取ったとき、
ドライバはシリアル受信等の割り込みがあるまで、そこで待ち続ける必要があるようなのですが、
待っている間、Win32のアプリの方がフリーズしてしまいます。
割り込み待ちの処理には KeWaitForSingleObject を
NotificationEvent, Executive, KernelMode、タイムアウトなしで使用しています。
一般に出回っているComPortのドライバに
自作のWin32アプリからIOCTL_SERIAL_WAIT_ON_MASKを送信してみたところ、
その送信時点でWin32アプリの処理が止まり、 (DeviceIoControl関数から抜けなくなり)
ドライバがシリアルデータを受信したときにアプリは処理を開始していました。
これから、ComPortのドライバはIOCTL_SERIAL_WAIT_ON_MASKを受信した段階で
シリアルデータの受信割り込みがあるまで待ち続けることが分かるのですが、
僕の待ち方(KeWaitForSingleObject)が悪いためか、
自作のドライバではフリーのシリアル通信ソフトはフリーズしてしまうようです。
どなたか、正しい割り込み待ちの仕方をご教授いただけないでしょうか?
WDMの勉強はごく最近始めたもので、
知識不足な点が多いとは思いますが、宜しくお願いいたします。
レス数が900を超えています。1000を超えると表示できなくなるよ。