阅读:1580回复:12
用DS开发Win2k驱动开发,请教中断问题!
我用DriverStudio开发一个pci卡的驱动,卡上有两块Memory可以接收应用程序发送的数据,当数据写满时产生中断
请问我的驱动程序怎么处理中断? 我想采用事件通知的方式通知应用程序, 构造了一个KEvent* m_pEventToSignal;在ISR中发送事件通知 m_pEventToSignal->Set(); 结果驱动装上后就出现蓝屏死机现象!错误类别是在较高的运行级别访问了分页内存!去掉了就正常工作! 但是没有这句程序我怎么通知应用程序发生了中断呀? :( 高手帮帮我呀!给分! |
|
沙发#
发布于:2004-03-26 17:52
我用DriverStudio开发一个pci卡的驱动,卡上有两块Memory可以接收应用程序发送的数据,当数据写满时产生中断 ISR中断级别太高, 不能set Event, 你可以在DPC里面set. |
|
|
板凳#
发布于:2004-03-27 10:06
还是不行呀!那我在ISR中作些什么工作呀?
请高手明示呀!可否说的详细一点呢? 或者留下QQ联系:20551453 谢谢! |
|
地板#
发布于:2004-03-27 10:07
在ISR里面清除中断,重新开中断。ISR的执行时间要尽量短
|
|
|
地下室#
发布于:2004-03-27 10:14
楼上的在吗?我也在线呀!
是这样吗?在ISR中 if(TestAddOnInt( OPR_INTCSR) ) { m_MemoryRange2.outd(0,0); m_DpcFor_Irq.Request(NULL, NULL); return TRUE; } else return FALSE; |
|
5楼#
发布于:2004-03-27 16:55
:(
各位高手大哥大姐帮忙呀! 我已经在DPC中调用的m_pEventToSignal->Set();还是死机呀! 怎么办呀? 到底中断应该怎样处理呀? |
|
6楼#
发布于:2004-04-01 15:18
你需要要在应用程序中创建一个事件变量,然后能过一个DeviceIOCtrl调用将该事件传到你的驱动程序中,然后再在DPC中使用_pEventToSignal->Set();
给你个例子: NTSTATUS testDriver::SET_NOTIFICATION_EVENT_Handler(KIrp I) { NTSTATUS status = STATUS_SUCCESS; HANDLE hEvent = *(HANDLE*)I.IoctlBuffer(); m_pEvent = new (NonPagedPool) KEvent(hEvent, OBJECT_TYPE_ALL_ACCESS); return status; } 你可以试试看 [编辑 - 4/1/04 by flying] |
|
7楼#
发布于:2004-04-02 14:41
谢谢楼上的朋友!我就是在DPC中m_pEvent->Set();
IOCTL_SET_NOTIFICATION__EVENT_Handler(KIrp I) { HANDLE hEvent; NTSTATUS status; hEvent=*(HANDLE*)I.IoctlBuffer(); m_pEvent=new(NonPagedPool)KEvent(hEvent); status=(m_pEvent!=NULL)?STATUS_SUCCESS:STATUS_INSUFFICIENT_RESOURCES; I.Information()=0; return status; } 但是装上驱动之后W2000就启动不了了,只有把DPC中的m_pEvent->Set()删掉就可以启动,好奇怪呀! 帮忙呀! 问题解决了一定给分! |
|
8楼#
发布于:2004-04-02 16:31
看看这样初始化Event吧,能不用指针的就不用了:
BOOL XXXXX::LinkAppRxEvent(HANDLE hEvent) { m_AppRxEvent.Invalidate(); m_AppRxEvent.Initialize(hEvent,OBJECT_TYPE_ALL_ACCESS); if(!m_AppRxEvent.IsValid()) { t << "LinkAppRxEvent: m_AppRxEvent NOT valid." << EOL; return FALSE; } else { return TRUE; } } |
|
9楼#
发布于:2004-04-05 10:54
是不是应该
return I.Complete(status); 结束IRP啊?? 我不懂,武安河的书上是这样的,友情帮顶 |
|
|
10楼#
发布于:2004-04-08 08:58
是不是需要中断自旋锁呀?怎么用呀?
谢谢斑竹帮顶! |
|
11楼#
发布于:2004-04-08 09:03
另外,总是没有中断是怎么回事?
5920是中断控制器,它的控制字什么时候怎么控制? 大家帮帮我,谁懂硬件呀? |
|
12楼#
发布于:2004-04-08 21:40
在大家的帮助下,我用了中断自旋锁以后就可以通知应用程序了,不过现在又有问题了, 驱动装上后2000的系统启动时出现蓝屏!
故障检验码0x7F,UNEXPECTED_KERNEL_MODE_TRAP 我查了一些资料:错误类型是“内核不能捕获的陷阱,由Intel CPU产生,这是什么原因呀? 怎么没有人帮忙呀? |
|