使用线程引起IRQ_NOT_LESS_OR_EQUAL,大家给点提示

nebulabhm   2007-5-30 10:32 楼主
我使用线程的初始化部分:
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,再就不知道了,大家给指点一下,或者察看什么资料?

回复评论 (3)

有时候访问无效的地址也会导致 IRQ_NOT_LESS_OR_EQUAL,你应该检查一下你的代码有没有无效指针
点赞  2007-5-30 13:46
肯定有很多人遇到这个问题,提示下呗!先谢谢了
点赞  2007-6-1 19:28
不死心,再小顶一下
点赞  2007-6-5 11:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复