Windows内核API PsGetCurrentThread
请教一下!!这里的PsGetCurrentThread
为什么会报错 说不能指向不完整的类型 ,我参考WINDOWS 2003公开的代码写法也是这样子写 开源系统ReaceOs 里面也是这样的写法为啥我这项目里面不行!!! 项目配置问题??:(eew PETHREAD的成员变量是透明的 你只能用+xxx偏移的方式 或者自己把PETHREAD重新照着windbg 定义一下结构 ETHREAD的地址就是KTHREAD的地址,第一个参数直填CurrentThread就可以了。 klamauk 发表于 2020-4-17 13:23
ETHREAD的地址就是KTHREAD的地址,第一个参数直填CurrentThread就可以了。
我定义了ETHREAD结构体里面放一个UNION Tcb 编译就通过了~~既然第一个参数可以直接填 为什么这么多代码示例都要指针指向呢 本帖最后由 一身白 于 2020-4-17 17:13 编辑
古月不傲 发表于 2020-4-17 12:53
PETHREAD的成员变量是透明的 你只能用+xxx偏移的方式 或者自己把PETHREAD重新照着windbg 定义一下结构
我定义了 _ETHREAD结构体 里面放了UNIONTcb编译就通过了, 偏移来访问?改怎么写~{:1_909:}为什么《Windows情景分析》书中能这样子写还有Windows2003源代码里面也是这样子写 那是因为是源代码,但你在编写驱动时,微软提供给你的WDK是没有这样的结构的,但你可以自己定义。至于书中的代码示例使用指针指向那是提高可阅读性。 klamauk 发表于 2020-4-17 18:59
那是因为是源代码,但你在编写驱动时,微软提供给你的WDK是没有这样的结构的,但你可以自己定义。至于书中 ...
行吧,明白了{:1_893:}{:1_893:}:lol , 至于使用偏移来访问就像这样
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
...... klamauk 发表于 2020-4-17 19:14
至于使用偏移来访问就像这样
PUCHAR CurrentThread = (PUCHAR)PsGetCurrentThread();
KeSetPriorityThrea ...
感谢感谢!!{:1_893:} klamauk 发表于 2020-4-17 18:59
那是因为是源代码,但你在编写驱动时,微软提供给你的WDK是没有这样的结构的,但你可以自己定义。至于书中 ...
大佬 碰到个新问题PsGetCurrentThread()->Tcb.Win32Thread; 错误:表达式必须包涵结构或联合类型 这该怎么解决~~!!
页:
[1]
2