hejy
驱动牛犊
驱动牛犊
  • 注册日期2001-10-29
  • 最后登录2010-09-27
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望10点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:1215回复:0

强烈需要帮助!!! ( 谢谢 )

楼主#
更多 发布于:2007-04-03 10:33
  //类定义片断

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"
DQXXX
游客

返回顶部