首页
社区
课程
招聘
[求助]PsLookupThreadByThreadId 总是返回错误,请问还有办法获取EThread结构吗大牛们帮下忙啊
发表于: 2010-8-23 16:05 6408

[求助]PsLookupThreadByThreadId 总是返回错误,请问还有办法获取EThread结构吗大牛们帮下忙啊

2010-8-23 16:05
6408
PsLookupThreadByThreadId 总是返回错误,请问如何解决,或者还有别的办法获取EThread结构吗 ?
驱动大概是这样的:

    PETHREAD         Thread;
    PULONG                Flags; 
    PHANDLE    ThreadId = (PHANDLE)Irp->AssociatedIrp.SystemBuffer; 
    
    status=PsLookupThreadByThreadId(ThreadId,&Thread); //查找EThread,总是失败,不知什么原因。


R3大概这样:
    hThreadSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0); 

    te32.dwSize=sizeof(THREADENTRY32); 

    if(Thread32First(hThreadSnapshot,&te32)) 
    { 
        do 
        { 
            if(te32.th32OwnerProcessID == dwPID)
            {
                pBuffer = &(te32.th32ThreadID); 

                if(!DeviceIoControl(hDevice, IOCTL_THREAD, &pBuffer, sizeof(te32.th32ThreadID),NULL, 0, NULL, NULL))
                {
                    CloseHandle(hDevice);
                    return FALSE;
                }

            }
        } 
        while(Thread32Next(hThreadSnapshot,&te32)); 
    } 


看了下别人也是这么写的,可是PsLookupThreadByThreadId总是返回错误。我在Windows2003 和 Windows XP SP3上都是这样。到底该怎么办啊。或者有其他什么办法能得到EThread结构吗?谢谢大家了。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 8142
活跃值: (2731)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
.....

WDK文档要看清呀.

NTSTATUS
PsLookupThreadByThreadId(
    __in HANDLE ThreadId,
    __deref_out PETHREAD *Thread
    );

第一个函数.是一个线程ID.是一个三十二位无符号数字.

你用一个PHANDLE的指针指向缓冲区的话.

传递参数的时候前面应该加一个 * 把它取出来.

换成
    status=PsLookupThreadByThreadId(*ThreadId,&Thread);  试试
PS:
注意参数合法性校验...
2010-8-23 16:41
0
雪    币: 73
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
额。。。。。郁闷
居然这样。。。。
多谢了。
2010-8-23 18:34
0
游客
登录 | 注册 方可回帖
返回
//