yann_nanhai
驱动牛犊
驱动牛犊
  • 注册日期2008-05-28
  • 最后登录2008-10-29
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望22点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:2186回复:10

求教:调用KeWaitForSingleObject存在的问题?

楼主#
更多 发布于:2008-05-28 12:34
大家好:

我在一个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);
}
yann_nanhai
驱动牛犊
驱动牛犊
  • 注册日期2008-05-28
  • 最后登录2008-10-29
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望22点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-05-28 12:38
我也跟踪了irql级别
都在 PASSIVE_LEVEL 级别调用的
yann_nanhai
驱动牛犊
驱动牛犊
  • 注册日期2008-05-28
  • 最后登录2008-10-29
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望22点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-05-28 17:35
 
yann_nanhai
驱动牛犊
驱动牛犊
  • 注册日期2008-05-28
  • 最后登录2008-10-29
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望22点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-05-28 17:36
   
没大牛知道哪里错了吗?
 
liao_jh
驱动牛犊
驱动牛犊
  • 注册日期2007-09-26
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-06-03 16:12
我也遇到这个问题了,还是没有找到原因 :(
iice
驱动牛犊
驱动牛犊
  • 注册日期2001-09-19
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分96分
  • 威望31点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2008-06-04 14:53
用windbg跟一下。
看看各个变量是不是null。
感情象鲜花 她总不开放 欲望象野草 疯狂的生长
flyingkisser
驱动牛犊
驱动牛犊
  • 注册日期2005-04-09
  • 最后登录2011-01-05
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望48点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-06-11 19:03
换ZwWaitForSingleObject试试呢?
cross_sky
驱动小牛
驱动小牛
  • 注册日期2004-06-17
  • 最后登录2012-09-07
  • 粉丝0
  • 关注0
  • 积分858分
  • 威望727点
  • 贡献值0点
  • 好评度77点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-06-12 18:09
请教楼主一下,你是怎么跟踪IRQ级别的?
sky
yann_nanhai
驱动牛犊
驱动牛犊
  • 注册日期2008-05-28
  • 最后登录2008-10-29
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望22点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2008-06-18 08:58
用kdprint 打印信息获取的irql
yann_nanhai
驱动牛犊
驱动牛犊
  • 注册日期2008-05-28
  • 最后登录2008-10-29
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望22点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2008-06-18 09:00
谢谢 飞吻虾(flyingkisser ) 的建议
yellowzzp
驱动小牛
驱动小牛
  • 注册日期2007-07-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1015分
  • 威望131点
  • 贡献值0点
  • 好评度117点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2008-06-20 11:47
获得程序级别
可以用函数
KeGetCurrentIrql()
游客

返回顶部