阅读:2184回复:10
求教:调用KeWaitForSingleObject存在的问题?
大家好:
我在一个ndis驱动的初始化函数里建了一个线程,在MiniportHalt里要kill 这个线程,在 KillThread()这个函数调用KeWaitForSingleObject时就蓝屏,请教大家知道问题在哪里吗? 谢谢! 以下是这个线程的主函数和MiniportHalt调用的kill 线程的函数: 新建线程主函数: void CcmThrdMain(IN PVOID pContext ) { MiniportAdapter *VA = (MiniportAdapter *) pContext; boolint ChnSwtScd; KeSetPriorityThread( KeGetCurrentThread(), LOW_REALTIME_PRIORITY ); while(TRUE){ KeInitializeEvent(&VA->CcmChnSwtEvt, SynchronizationEvent, FALSE); (void) KeWaitForSingleObject(&VA->CcmChnSwtEvt, Executive, KernelMode, FALSE, NULL); // or we can set a finit time out if(VA->CcmChnSwtThrdShouldStop){ PsTerminateSystemThread(STATUS_SUCCESS); return; } //////do something else }// end while } MiniportHalt调用的kill 线程的函数: KillThread(IN MiniportAdapter *VA) { // set the flag VA->CcmChnSwtThrdShouldStop = TRUE; KeSetEvent(&VA->CcmChnSwtEvt, 0, TRUE);//nnnn WaitForXxx after this call TRUE // Wait for the thread to terminate KeWaitForSingleObject( ///////////// 程序在这里蓝屏 、 代码是0A , &VA->CcmThreadP, Executive, KernelMode, FALSE, NULL ); ObDereferenceObject( &VA->CcmThreadP); } |
|
沙发#
发布于:2008-05-28 12:38
我也跟踪了irql级别
都在 PASSIVE_LEVEL 级别调用的 |
|
板凳#
发布于:2008-05-28 17:35
|
|
地板#
发布于:2008-05-28 17:36
没大牛知道哪里错了吗? |
|
地下室#
发布于:2008-06-03 16:12
我也遇到这个问题了,还是没有找到原因 :(
|
|
5楼#
发布于:2008-06-04 14:53
用windbg跟一下。
看看各个变量是不是null。 |
|
|
6楼#
发布于:2008-06-11 19:03
换ZwWaitForSingleObject试试呢?
|
|
7楼#
发布于:2008-06-12 18:09
请教楼主一下,你是怎么跟踪IRQ级别的?
|
|
|
8楼#
发布于:2008-06-18 08:58
用kdprint 打印信息获取的irql
|
|
9楼#
发布于:2008-06-18 09:00
谢谢 飞吻虾(flyingkisser ) 的建议
|
|
10楼#
发布于:2008-06-20 11:47
获得程序级别
可以用函数 KeGetCurrentIrql() |
|