阅读:1214回复:0
强烈需要帮助!!! ( 谢谢 )
//类定义片断
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" |
|
|