我经常遇到与\??\C:\Windows
查看内存时类似的路径。我一直无法理解为什么将双“ ?
”附加到某些路径。我的 google-fu 使我无法找到双 ' ?
'的原因。任何帮助将不胜感激。
\??\C:\ 路径中的问号
逆向工程
视窗
记忆
2021-07-06 09:31:52
2个回答
我一直在寻找这个问题的答案,我知道这个问题已经存在多年了,但如果其他人遇到这个问题,我会在这里留下我的回答。
上面的答案是指非规范化的设备路径,正如您所问的\??\
那样\\?\
,问题可能只有很小的差异,但答案完全不同。
\??
是一个“假”前缀,它指的是每个用户的 Dos 设备,所以这里有一张图片,希望能帮助你理解这个过程是什么:
一些可能有助于您理解的定义:
- \Device - 内核驱动程序设备对象的默认位置
- \全球的??- 设备符号链接的系统位置,包括驱动器号
- \BaseNamedObjects - 命名资源的系统位置
- \Sessions\X - 登录会话 X 的目录
- \Session\0\DosDevices - 每个登录用户的“Dos 设备”目录。
来自Windows Internals,第 1 部分(第 6 版) ——
所有与命名空间管理相关的对象管理器功能都知道实例化目录并参与提供所有会话使用相同命名空间的错觉。Windows 子系统 DLL 前缀名称由 Windows 应用程序传递,这些应用程序使用\?? (例如,C:\Windows 变为 \??\C:\Windows)。当对象管理器看到特殊的\?? 前缀,它采取的步骤取决于 Windows 的版本,但它总是依赖于执行进程对象(EPROCESS,在第 5 章中进一步描述)中名为DeviceMap的字段,该字段指向一个由其他进程共享的数据结构同一届会议。
DeviceMap结构的DosDevicesDirectory字段指向代表进程的本地 \DosDevices 的对象管理器目录。当对象管理器看到对 \?? 的引用时,它通过使用DeviceMap的DosDevicesDirectory字段来定位进程的本地 \DosDevices 。如果对象管理器在该目录中没有找到对象,它会检查 目录对象的DeviceMap字段。如果有效,它会在DeviceMap结构的GlobalDosDevicesDirectory字段所指向的目录中查找对象,该目录始终为 \Global??。