可以比较 PEPROCESS 值吗?

Is it OK to compare PEPROCESS values?

我是 "reviewing" 一些在我之前写得很好的代码,我注意到一个我有一些疑问的模式:

存储 PsGetCurrentProcess() 函数的结果,然后与该指针(指向 EPROCESS 结构的指针)进行比较。 但是,我没有在文档中找到任何内容,这表明此函数每次都保证 return 相同的指针。更令我惊讶的是这段代码显然已经运行了很长时间。

这是一个错误吗?您是否建议将该逻辑更改为例如比较进程 ID(使用 PsGetProcessId)?

是的,这几乎是正确的。 EPROCESS 的文档清楚地表明每个进程有一个这样的对象,任何 PEPROCESS 都指向这一点。这意味着 PsGetCurrentProcess() 不是 return 指向 an EPROCESS 而是指向 the EPROCESS.如果两个指针指向同一个对象,则它们比较相等。