lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1580回复:12

用DS开发Win2k驱动开发,请教中断问题!

楼主#
更多 发布于:2004-03-26 17:05
我用DriverStudio开发一个pci卡的驱动,卡上有两块Memory可以接收应用程序发送的数据,当数据写满时产生中断
请问我的驱动程序怎么处理中断?
我想采用事件通知的方式通知应用程序,
构造了一个KEvent* m_pEventToSignal;在ISR中发送事件通知
m_pEventToSignal->Set();
结果驱动装上后就出现蓝屏死机现象!错误类别是在较高的运行级别访问了分页内存!去掉了就正常工作!
但是没有这句程序我怎么通知应用程序发生了中断呀?
 :(

高手帮帮我呀!给分!
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
沙发#
发布于:2004-03-26 17:52
我用DriverStudio开发一个pci卡的驱动,卡上有两块Memory可以接收应用程序发送的数据,当数据写满时产生中断
请问我的驱动程序怎么处理中断?
我想采用事件通知的方式通知应用程序,
构造了一个KEvent* m_pEventToSignal;在ISR中发送事件通知
m_pEventToSignal->Set();
结果驱动装上后就出现蓝屏死机现象!错误类别是在较高的运行级别访问了分页内存!去掉了就正常工作!
但是没有这句程序我怎么通知应用程序发生了中断呀?
 :(

高手帮帮我呀!给分!


ISR中断级别太高, 不能set Event, 你可以在DPC里面set.
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-27 10:06
还是不行呀!那我在ISR中作些什么工作呀?
请高手明示呀!可否说的详细一点呢?
或者留下QQ联系:20551453
谢谢!
CYoung
驱动中牛
驱动中牛
  • 注册日期2003-06-10
  • 最后登录2005-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-03-27 10:07
在ISR里面清除中断,重新开中断。ISR的执行时间要尽量短
答得好的话,请兄弟们加点分,那是对我的肯定
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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;
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-03-27 16:55
 :(
各位高手大哥大姐帮忙呀!
我已经在DPC中调用的m_pEventToSignal->Set();还是死机呀!
怎么办呀?
到底中断应该怎样处理呀?
flying
驱动小牛
驱动小牛
  • 注册日期2002-08-01
  • 最后登录2016-06-19
  • 粉丝0
  • 关注0
  • 积分197分
  • 威望70点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
  • 社区居民
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]
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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()删掉就可以启动,好奇怪呀!
帮忙呀!
问题解决了一定给分!
exdata
驱动牛犊
驱动牛犊
  • 注册日期2002-11-11
  • 最后登录2007-07-16
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
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;
}
}
lala
驱动中牛
驱动中牛
  • 注册日期2001-04-26
  • 最后登录2006-10-18
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-04-05 10:54
是不是应该
return I.Complete(status);
结束IRP啊??
我不懂,武安河的书上是这样的,友情帮顶
:D拉拉拉,拉拉拉,偶素待业的小青年...
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-04-08 08:58
是不是需要中断自旋锁呀?怎么用呀?
谢谢斑竹帮顶!
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-04-08 09:03
另外,总是没有中断是怎么回事?
5920是中断控制器,它的控制字什么时候怎么控制?
大家帮帮我,谁懂硬件呀?
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-04-08 21:40
在大家的帮助下,我用了中断自旋锁以后就可以通知应用程序了,不过现在又有问题了, 驱动装上后2000的系统启动时出现蓝屏!
故障检验码0x7F,UNEXPECTED_KERNEL_MODE_TRAP
我查了一些资料:错误类型是“内核不能捕获的陷阱,由Intel CPU产生,这是什么原因呀?
怎么没有人帮忙呀?
游客

返回顶部