阅读:1387回复:4
强烈需要帮助!!! ( 谢谢 )
//类定义片断
class DlsComCardDevice : public KPnpDevice { // Member Data protected: // Unit number for this device (0-9) ULONG m_Unit; KPnpLowerDevice m_Lower; DlsComCardDevice_DriverManagedQueue m_DriverManagedQueue; // TODO: Create additional driver managed queues. These might be // of the same class (DlsComCardDevice_DriverManagedQueue), // or you might choose to derive another class. // The following members correspond to hardware resources in the // device. MEMBER_DPC (DlsComCardDevice, TimedCallback); KTimedCallback m_Timer; KEvent* m_pEventToSignal; }; NTSTATUS DlsComCardDevice::DeviceControl(KIrp I) // 片断 { case DLSCOMCARD_IOCTL_SETUP_SIGNAL: // app passes event handle in input buffer { t << "Entering DlsComCardDevice::DLSCOMCARD_IOCTL_SETUP_SIGNAL, " << I << EOL; HANDLE hEvent = *(HANDLE*)I.IoctlBuffer(); if ( m_pEventToSignal ) delete m_pEventToSignal; m_pEventToSignal = new(NonPagedPool) KEvent( hEvent ); status = (m_pEventToSignal != NULL)? STATUS_SUCCESS : STATUS_INSUFFICIENT_RESOURCES; } //return I.Complete(status); break; case DLSCOMCARD_IOCTL_START: // app passes event handle in input buffer { if ( m_pEventToSignal ) { LARGE_INTEGER tm ; tm.QuadPart = -2000; m_Timer.SetPeriodic(tm, 20 , LinkTo(TimedCallback),NULL); } status = STATUS_SUCCESS ; } //return I.Complete(status); break; } VOID DlsComCardDevice::TimedCallback(PVOID arg1, PVOID arg2) { if ( m_pEventToSignal ) m_pEventToSignal->Set(); } NTSTATUS DlsComCard::AddDevice(PDEVICE_OBJECT Pdo) //片断 { //... DlsComCardDevice * pDevice = new ( NonPagedPool ) DlsComCardDevice(Pdo, m_Unit); //.. } 运行后出现兰屏“DRIVER_IRQL_NOT_LESS_OR_EQUAL" |
|
|
沙发#
发布于:2007-04-04 13:09
你整了这些片段代码,大家都看的晕,蓝屏都是经常出现的事情,最好把你想问的说清楚,代码写明白。
|
|
|
板凳#
发布于:2007-04-05 08:09
谢谢关注!!
进一步说明如下: 设备没有中断,想用定时器轮巡,KTimedCallback m_Timer; 定时器,TimedCallback回调函数(DPC) KEvent* m_pEventToSignal; 是通知应用层的事件, 1 ----- 构造仪器 DlsComCardDevice * pDevice = new ( NonPagedPool ) DlsComCardDevice(Pdo, m_Unit); 构造仪器时,用非分页内存 2 --- DLSCOMCARD_IOCTL_SETUP_SIGNAL 是应用层设置事件 m_pEventToSignal = new(NonPagedPool) KEvent( hEvent ); 3 ---- DLSCOMCARD_IOCTL_START开始轮巡 4 ----- VOID DlsComCardDevice::TimedCallback(PVOID arg1, PVOID arg2) { if ( m_pEventToSignal ) m_pEventToSignal->Set(); } DPC中,判断m_pEventToSignal ,再通知应用层 把 if ( m_pEventToSignal ) m_pEventToSignal->Set(); 去掉,没有错误,查了相关的贴子,改到这样,还是有错. 请大家帮忙 谢谢!!!! |
|
|
地板#
发布于:2007-04-05 16:29
应该是中断级问题。你试试。
|
|
|
地下室#
发布于:2007-05-10 07:58
能不能说具体一些?
谢谢 |
|
|