首页
社区
课程
招聘
[求助]关于用PsCreateSystemThread 创建的内核线程的一点疑问
发表于: 2018-5-1 14:00 5416

[求助]关于用PsCreateSystemThread 创建的内核线程的一点疑问

2018-5-1 14:00
5416
直奔主题
INT ThreadPro( NULL)
{
   DbgPrintf("test\n");
   return 0;
}
上面是线程函数 
然后我用

PsCreateSystemThread

 创建这个线程

问题来了 这个线程 在跑完return 0 后 就自己结束了吗?
我看有的帖子说 内核线程创建以后 是不会自己结束的 
需要调用 
PsTerminateSystemThread(STATUS_SUCCESS);函数

如果是要调用PsTerminateSystemThread(STATUS_SUCCESS);
那么

INT ThreadPro( NULL)

{

   DbgPrintf("test\n");

PsTerminateSystemThread(STATUS_SUCCESS);

   return 0;

}

这样 对不对~


如果 用 PsTerminateSystemThread(STATUS_SUCCESS); 结束自身后 

那么驱动在卸载的时候 要不要考虑等待线程事件

KeWaitForSingleObject(pThreadObj, Executive, KernelMode, FALSE, NULL);

ObDereferenceObject(pThreadObj);



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
2
1.你ref了必须Deref
2.Wait是好习惯
2018-5-1 14:19
0
雪    币: 12
活跃值: (142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
cvcvxk 1.你ref了必须Deref 2.Wait是好习惯
哇    V大居然回了我的帖子···好吧  我知道要解引用
额  我的疑问其实是 
系统线程是return  后  就自动结束了呢?
还是要在return前  调用下  PsTerminateSystemThread  才会结束
2018-5-1 14:42
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
4
青城往事 哇 V大居然回了我的帖子···好吧 我知道要解引用 额 我的疑问其实是 系统线程是return 后 就自动结束了呢? 还是要在return前 调用下 PsTerminateSystemThr ...
return有些问题,就是你Wait会等到天地老。
2018-5-1 17:06
0
雪    币: 12
活跃值: (142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
cvcvxk return有些问题,就是你Wait会等到天地老。
那如果一个需要一个线程的返回值  只能用out指针这样的办法来处理咯
so  按V大的说法  在线程结尾处  添加  PsTerminateSystemThread  就OK了?
2018-5-1 20:02
0
雪    币: 7
活跃值: (333)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6

  status  =  PsCreateSystemThread(&threadHandle,
                                                                (ACCESS_MASK)0,
                                                                NULL,
                                                                (HANDLE)  0,
                                                                NULL,
                                                                ThreadProc,
                                                                NULL  );

        if  (  !NT_SUCCESS(  status  ))
        {
                //to  do
        }

        //
        //  Convert  the  Thread  object  handle  into  a  pointer  to  the  Thread  object
        //  itself.  Then  close  the  handle.
        //

        ObReferenceObjectByHandle(threadHandle,
                                                            THREAD_ALL_ACCESS,
                                                            NULL,
                                                            KernelMode,
                                                            &ThreadObject,
                                                            NULL  );

        ZwClose(threadHandle);





 KeWaitForSingleObject(ThreadObject, Executive, KernelMode, FALSE, NULL);
 ObDereferenceObject(ThreadObject);

最后于 2018-5-2 09:28 被叁毛编辑 ,原因:
2018-5-2 09:19
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
7
标准流程:PsCreateSystemThread+ZwWaitForSingleObject+ZwClose
2018-5-2 11:16
0
雪    币: 5734
活跃值: (1737)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8

PsTerminateSystemThread(STATUS_SUCCESS);    之后就没了应该  后面的return  不会执行  还有return  0  不能结束线程  线程对象还在
2018-5-7 00:55
0
雪    币: 307
活跃值: (60)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
调用的时候要在怎么调用啊?是调用线程函数还是调用创建线程的函数?
2018-5-10 10:39
0
雪    币: 12
活跃值: (701)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
学习打卡
2022-7-7 17:37
0
游客
登录 | 注册 方可回帖
返回
//