一身白 发表于 2020-4-17 11:58

Windows内核API PsGetCurrentThread

请教一下!!
这里的PsGetCurrentThread
为什么会报错 说不能指向不完整的类型 ,我参考WINDOWS 2003公开的代码写法也是这样子写   开源系统ReaceOs 里面也是这样的写法为啥我这项目里面不行!!! 项目配置问题??:(eew

古月不傲 发表于 2020-4-17 12:53

PETHREAD的成员变量是透明的 你只能用+xxx偏移的方式 或者自己把PETHREAD重新照着windbg 定义一下结构

klamauk 发表于 2020-4-17 13:23

ETHREAD的地址就是KTHREAD的地址,第一个参数直填CurrentThread就可以了。

一身白 发表于 2020-4-17 17:09

klamauk 发表于 2020-4-17 13:23
ETHREAD的地址就是KTHREAD的地址,第一个参数直填CurrentThread就可以了。

我定义了ETHREAD结构体里面放一个UNION   Tcb   编译就通过了~~既然第一个参数可以直接填 为什么这么多代码示例都要指针指向呢

一身白 发表于 2020-4-17 17:11

本帖最后由 一身白 于 2020-4-17 17:13 编辑

古月不傲 发表于 2020-4-17 12:53
PETHREAD的成员变量是透明的 你只能用+xxx偏移的方式 或者自己把PETHREAD重新照着windbg 定义一下结构
我定义了 _ETHREAD结构体 里面放了UNIONTcb编译就通过了, 偏移来访问?改怎么写~{:1_909:}为什么《Windows情景分析》书中能这样子写还有Windows2003源代码里面也是这样子写

klamauk 发表于 2020-4-17 18:59

那是因为是源代码,但你在编写驱动时,微软提供给你的WDK是没有这样的结构的,但你可以自己定义。至于书中的代码示例使用指针指向那是提高可阅读性。

一身白 发表于 2020-4-17 19:01

klamauk 发表于 2020-4-17 18:59
那是因为是源代码,但你在编写驱动时,微软提供给你的WDK是没有这样的结构的,但你可以自己定义。至于书中 ...

行吧,明白了{:1_893:}{:1_893:}:lol ,

klamauk 发表于 2020-4-17 19:14

至于使用偏移来访问就像这样
PUCHAR CurrentThread = (PUCHAR)PsGetCurrentThread();
KeSetPriorityThread((PKTHREAD)(CurrentThread + 0), LOW_REALTIME_PRIORITY + 3);
把CurrentThread 定义为PUCHAR是保证CurrentThread+1后指向下一个字节。

对照对应的系统的ETHREAD使用就可以
0: kd> dt _ETHREAD
ntdll!_ETHREAD
   +0x000 Tcb            : _KTHREAD
   +0x1c0 CreateTime       : _LARGE_INTEGER
   +0x1c0 NestedFaultCount : Pos 0, 2 Bits
   +0x1c0 ApcNeeded      : Pos 2, 1 Bit
   +0x1c8 ExitTime         : _LARGE_INTEGER
   +0x1c8 LpcReplyChain    : _LIST_ENTRY
   +0x1c8 KeyedWaitChain   : _LIST_ENTRY
   +0x1d0 ExitStatus       : Int4B
   ......

一身白 发表于 2020-4-17 19:43

klamauk 发表于 2020-4-17 19:14
至于使用偏移来访问就像这样
PUCHAR CurrentThread = (PUCHAR)PsGetCurrentThread();
KeSetPriorityThrea ...

感谢感谢!!{:1_893:}

一身白 发表于 2020-4-17 22:10

klamauk 发表于 2020-4-17 18:59
那是因为是源代码,但你在编写驱动时,微软提供给你的WDK是没有这样的结构的,但你可以自己定义。至于书中 ...

大佬 碰到个新问题PsGetCurrentThread()->Tcb.Win32Thread; 错误:表达式必须包涵结构或联合类型 这该怎么解决~~!!
页: [1] 2
查看完整版本: Windows内核API PsGetCurrentThread