当前位置: 代码迷 >> 驱动开发 >> 使用线程引起IRQ_NOT_LESS_OR_EQUAL,大家给点提示,该怎么解决
  详细解决方案

使用线程引起IRQ_NOT_LESS_OR_EQUAL,大家给点提示,该怎么解决

热度:105   发布时间:2016-04-28 11:10:41.0
使用线程引起IRQ_NOT_LESS_OR_EQUAL,大家给点提示
我使用线程的初始化部分:
KeInitializeSpinLock(   &pdx-> lkIrpQueue   );                
InitializeListHead(   &pdx-> IrpQueueListHead   );                  
KeInitializeSemaphore(   &pdx-> semIrpQueue,     0,   MAXLONG);
KeInitializeEvent(   &pdx-> evDeviceOperationComplete,   SynchronizationEvent,   FALSE   );    
status   =   PsCreateSystemThread(   &hThread,   (ACCESS_MASK)0,   NULL,  
                (HANDLE)0,   NULL,   WorkerThreadMain,     pdx   );    
ObReferenceObjectByHandle(     hThread,   THREAD_ALL_ACCESS,  
                NULL,   KernelMode,   (PVOID*)&pdx-pThreadObj,     NULL   );  
ZwClose(   hThread   );  

我加上这段,在进行usb配置的时候调用IoCallDriver就蓝屏,提示IRQ_NOT_LESS_OR_EQUAL,不加则一切正常。
在论坛上看了几个帖子,说驱动程序在DISPATCH_LEVEL_IRQ或之上接触分页内存后就这样。
我在调用IoCallDriver之前KeGetCurrentIrql(),都是passive_level,再就不知道了,大家给指点一下,或者察看什么资料?

------解决方案--------------------
有时候访问无效的地址也会导致 IRQ_NOT_LESS_OR_EQUAL,你应该检查一下你的代码有没有无效指针
  相关解决方案