我安装了 MinGW 和 MSYS,但从来没有真正关心过二进制文件是如何工作的。然而,今天我打开了Process Explorer并意识到我有一些虚拟化的进程:
我知道 make/gcc/sh/mintty 通常用于 POSIX/unix-like 系统,但是我认为 MinGW/MSYS 项目将提供本机可执行文件。虚拟化通常是我与虚拟机相关联的一个术语,它让我有点困惑。任务管理器实际上将相应的列称为“UAC 虚拟化”。
那么Windows中的虚拟化标志是什么意思呢?它是 Vista 前可执行文件的某种兼容层吗?
它基本上是一个文件系统和注册表“包装器”,如果用户没有正确的写入权限,它会重定向文件写入尝试,有关更多信息,请参阅维基百科文章:
假设用户将以管理员权限运行而编写的应用程序在从有限的用户帐户运行时在早期版本的 Windows 中遇到问题,通常是因为它们试图写入机器范围或系统目录(例如程序文件)或注册表项(特别是香港邮政)。UAC 尝试使用文件和注册表虚拟化来缓解这种情况,它将写入(和后续读取)重定向到用户配置文件中的每个用户位置。
例如,如果应用程序尝试写入用户没有写入权限的目录(例如“C:\Program Files\appname\settings.ini”),则写入将重定向到“C:\Users\username \AppData\Local\VirtualStore\Program Files\appname\settings.ini”。重定向功能仅适用于非提升的 32 位应用程序,并且仅当它们不包含请求特定权限的清单时。
Journeyman Geek 解释了什么是虚拟化。我将解释 Windows 如何确定虚拟化的需要。
操作系统在应用程序清单文件(或 PE 资源)中查找,如果根本找不到清单或没有适当的compatibility部分 - Windows 假定应用程序是“旧的”并启用虚拟化。
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"></supportedOS>
</application>
</compatibility>
Run Code Online (Sandbox Code Playgroud)
附注。虚拟化作品登记(分)按键喜欢HKEY_LOCAL_MACHINE到HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE。
| 归档时间: |
|
| 查看次数: |
3596 次 |
| 最近记录: |