【问题标题】:How can I access to an attribute of PEPROCESS structure?如何访问 PEPROCESS 结构的属性?
【发布时间】: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


【解决方案1】:

尝试使用宏: PCHAR CONTAINING_RECORD( [in] PCHAR 地址, [in] 类型类型, [in] PCHAR 字段);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-15
    • 2021-04-01
    • 2022-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2018-04-07
    相关资源
    最近更新 更多