驱动程序与应用程序间中断事件传递问题

大家好,我想通过电脑上的一个PCI9052的板卡每次接收到一个中断,应用程序就执行一次指定的函数。我写了C++的应用程序,也照猫画虎写了一个简单的PCI驱动,功能实现了。可问题就是当我循环发送这个中断的时候,电脑会死机!!有时候函数执行了几百次,多的时候能执行几千次,但最后都死机了。死机时不光程序死了,连鼠标都没用了,只用重启。我把我实现这个功能的程序写在了下面,各位大侠帮忙看看会是哪的问题呢?是不是我的应用程序和驱动程序这种交互方式有问题?

应用程序:
先使用下面语句创建了一个事件
hDecodeEvent = CreateEvent(NULL,FALSE,FALSE,NULL);

把上面的事件传给驱动程序
// 向NCDIVER下传译码线程事件
bResult = DeviceIoControl(hDevice, // device to be queried
NC_TRANSMIT_EVENT, // operation to perform
&hDecodeEvent, sizeof(hDecodeEvent), // input buffer
NULL,0, // output buffer
&junk, // # bytes returned
(LPOVERLAPPED) NULL); // synchronous I/O

在一个线程中死循环等待驱动程序激活这个事件,一旦激活就调用一个函数
DWORD WINAPI DecodeWaitThreadProc(LPVOID lpParam)
{
while (1)
{
WaitForSingleObject(hDecodeEvent,INFINITE); //等待事件激活
InterpdllCallbackFunction(); //激活后调用这个函数
}
return 0;
}
驱动程序:
在驱动程序中这样接收事件
case NC_TRANSMIT_EVENT:
pdx->hUserDecodeEvent = (HANDLE)Irp->AssociatedIrp.SystemBuffer;
status=ObReferenceObjectByHandle(pdx->hUserDecodeEvent,
EVENT_MODIFY_STATE,
ExEventObjectType,
KernelMode,
(PVOID
) &pdx->pDecodeEvent,
NULL);
break;

驱动程序接收到中断后这样设置事件来通知应用程序
if(pdx->pDecodeEvent != NULL)
KeSetEvent(pdx->pDecodeEvent, IO_NO_INCREMENT,FALSE);//通知应用程序,中断的到来

可以添加一些日志log看你的应用程序和驱动死机前都运行到在在哪个函数。

可以添加一些日志log看你的应用程序和驱动死机前都运行到在在哪个函数。这个不一定,不过可以试试。

我也遇到了这个问题,思路一模一样,请问楼主最后解决了吗?怎么解决的?