首页
社区
课程
招聘
[求助]如何通过内核线程handle获得threadID
发表于: 2010-3-18 14:56 7025

[求助]如何通过内核线程handle获得threadID

2010-3-18 14:56
7025
我通过PsCreateSystemThread拿到threadHandle,但是如何通过threadHandle获得threadId呢?
在内核线程函数里我可以使用PsGetCurrentThreadId获得threadId.但是如何在创建内核线程的进程里通过threadHandle获得所创建的threadId?

伪代码片段:
void test()
{
   DRE_status          status = DRE_OK;
    OBJECT_ATTRIBUTES   threadAttr;
    HANDLE threadHandle;
............................
    InitializeObjectAttributes(&threadAttr, NULL,
        OBJ_KERNEL_HANDLE, NULL, NULL);

   status = PsCreateSystemThread(&threadHandle, THREAD_ALL_ACCESS,
                                        &threadAttr, NULL, NULL, threadProc, parameter);
...........................
}

threadProc()
{
         PETHREAD threadId;
         threadId = PsGetCurrentThreadId();
}

[培训]科锐软件逆向54期预科班、正式班开始火爆招生报名啦!!!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
或者说如何使threadHandle和threadId有对应关系
2010-3-18 14:56
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
3
ObReferenceObjectByHandle得到ethread
PsGetThreadId得到TID,2K下硬编码下偏移就可以

或者ZwQueryInformationThread->ThreadBasicInformation中就有TID,不过2K未导出
2010-3-18 15:15
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
NtQueryInformationThread  
多看看API吧
2010-3-18 15:17
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我刚才做了一下测试:
  PsCreateSystemThread(
    OUT PHANDLE  ThreadHandle,
    IN ULONG  DesiredAccess,
    IN POBJECT_ATTRIBUTES  ObjectAttributes  OPTIONAL,
    IN HANDLE  ProcessHandle  OPTIONAL,
    OUT PCLIENT_ID  ClientId  OPTIONAL,
    IN PKSTART_ROUTINE  StartRoutine,
    IN PVOID  StartContext
    );
这个函数里面的ClientId就可以直接找到threadId;        

ClientId 是一个PCLIENT_ID,定义在wdm.h中,如下:
typedef struct _CLIENT_ID {
    HANDLE UniqueProcess;
    HANDLE UniqueThread;
} CLIENT_ID;
typedef CLIENT_ID *PCLIENT_ID;

其中UniqueThread 就是所创建thread的ID。我在一个主进程里面create了两个线程,然后分别查看ClientId ->UniqueThread,和在线程函数里面通过调用PsGetCurrentThreadId得到的结果是一样的。

我想问各位高手,通过PsCreateSystemThread中out参数ClientId  来直接获得threadId有没有风险?
2010-3-18 16:12
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
6
clientid里面本来存放的就是创建的ID,当然没风险
2010-3-18 20:56
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢你
2010-3-20 22:31
0
游客
登录 | 注册 方可回帖
返回