【发布时间】:2014-10-30 14:27:46
【问题描述】:
我在驱动程序开发方面完全没有任何经验。我想访问结构 PEPROCESS 的属性。我有一个指向进程对象的指针,通过 PsGetCurrentProcess 例程获得。我已经看到一些描述结构内部(属性)声明的网络,所以我可以使用这些属性的偏移量来获取它们,例如:
hprocess = PsGetCurrentProcess();
List = (LIST_ENTRY*)((ULONG)hproces + 0x88); //Active Process Link Offset
但是,这种方式让我陷入了困境。我想构建可以在其他类型的平台(例如:x86、x86_64)和其他版本的 Windows(XP、7、...)上运行的代码;我认为这种方式是不可能的,因为偏移量不一样。
问题:有没有一个不蹩脚的解决方案?例如:像
List = process->ActiveProcessLink
什么的。
【问题讨论】:
-
最好声明一个结构而不是显式使用偏移量。如果您使用正确的类型,这也将处理跨平台差异。未记录的结构的内容可能会根据 Windows 的版本而改变,这一事实没有任何帮助。 (显然,如果您有任何其他选择,您不应该这样做。)
-
非常感谢哈利。看来我这里有一个严重的问题。
-
@HarryJohnston 声明一个结构可能会有所帮助,但不能保证成功。其他平台可能会添加或删除成员。
-
确保向您的客户明确说明您正在这样做。此外,让 Microsoft 应用程序兼容性团队知道他们不应该担心您的程序。
-
@AndrewMedico:好点;我假设 OP 发现的第三方文档涵盖了所有感兴趣的平台,并且会记录这些差异。这样的假设当然应该受到质疑。如果失败,添加和删除成员不是唯一的问题 - 一些成员可能有错误的类型,例如,如果只检查 32 位系统,当成员实际上是 LONG_PTR 时,可能会显示为 LONG。
标签: windows device-driver windows-kernel