どなたかご教授ください。

ComPortのドライバを作っていまして、
ドライバの割り込み待ち中に、通信先の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の勉強はごく最近始めたもので、
知識不足な点が多いとは思いますが、宜しくお願いいたします。