首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

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

2012-02-05 
使用线程引起IRQ_NOT_LESS_OR_EQUAL,大家给点提示我使用线程的初始化部分:KeInitializeSpinLock(&pdx- lk

使用线程引起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,你应该检查一下你的代码有没有无效指针

热点排行