zhazha818617
驱动牛犊
驱动牛犊
  • 注册日期2002-12-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1166回复:4

一个关于线程退出的问题

楼主#
更多 发布于:2003-05-26 17:05
我在一个Irp请求的函数中用PsCreateSystemThread创建了一个TestThread线程, 并用ObReferenceObjectByHandle得到线程指针TestThread线程如下
void VOID TestThread(IN PVOID pContext)
{
  PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION) pContext;

  KeSetPriorityThread(KeGetCurrentThread,(),LOW_REALTIME_PRIORITY);
  while(TRUE)
  {
    KeWaitForSingleObject(&pDevExt->WaitEvent, Executive,   KernelMode, FALSE, NULL);
    if(pDevExt->bJust)
      PsTerminateSystemThread(STATUS_SUCCESS);
    //以下执行我想要得操作
   }
}

我又在另一个irp中想中止这个线程
然后就用
  pDevExt->bJust = TRUE;
  KeSetEvent(&pDevExt->WaitEvent, 0, FALSE);
  KeWaitForSingleObject(&pDevExt->pThreadObj,
                          Executive,
                          KernelMode,
                          FALSE,
                          NULL);
    ObDereferenceObject(&pDevExt->pThreadObj);
   在上面的KeWaitForSingelObject中,总是会等不到线程中断,
  所以驱动会在这里被挂起了,
请问各位大虾,是否能指点小弟一下,应该怎样解决我上面的问题,
分数不会少,多谢大家了
qinxg
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望27点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-26 17:24
PsCreateSystemThread()的第一个参数就是线程的handle呀.
zhazha818617
驱动牛犊
驱动牛犊
  • 注册日期2002-12-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-26 17:31
我创建的线程没问题,只是我无法停止它
zhazha818617
驱动牛犊
驱动牛犊
  • 注册日期2002-12-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-26 17:32
我创建的线程没问题,只是我无法停止它,我PsCreateSystemThread函数我并没有写错
zhazha818617
驱动牛犊
驱动牛犊
  • 注册日期2002-12-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-27 08:15
怎么没人回答我,大家帮帮忙,告诉我你们写一个系统线程时,是怎样做的,多谢了
游客

返回顶部