我发现用户计算机上出现了一些奇怪的行为。当我尝试在 Internet Explorer 文件选择器中选择文件时,我看到的文件夹与 Windows 中看到的不一样。
例如,如果我导航到C:\Users\username\Documents\
,子文件夹会有所不同。如果我将路径从 Windows 资源管理器复制到文件选择器对话框,它会显示正确的文件,但如果我转到C:\Users\username\Documents\
,它又会显示错误的文件。
这是怎么发生的?我该如何解决?
经过一些测试,此行为仅在 Silverlight 应用程序中的文件上传时发生。碰巧的是,那里显示的文件夹是:
C:\Users\username\AppData\Local\Microsoft\Windows\INetCache\Virtualized\C\Users\username\Documents\
答案1
正如评论中提到的,该文件夹已虚拟化。当尝试查看 Silverlight 插件时,实际上看到的是完全不同的地方。
首先,回顾一下历史
在从 Windows XP 过渡到 Vista 的过程中,微软认真对待以标准用户身份(而不是管理员)运行的用户。遗憾的是,应用程序开发人员并没有认真对待,大量程序写入“系统”位置,如C:\Windows
或HKEY_LOCAL_MACHINE
。为了让这些应用程序继续运行,微软添加了一项名为重定向或者UAC 虚拟化。当以标准用户身份运行的程序尝试写入仅限管理员的位置时,写入成功,但数据实际上存储在每个用户的位置,具体来说:
\Users\<username>\AppData\Local\VirtualStore
但这和这个有什么关系呢?
Internet Explorer 的保护模式导致 IE 及其插件以比标准用户权限更低的方式运行。XP → Vista 的过渡引入了强制性级别. 每一个可保护的对象都有一个强制性级别:低、中、高或系统。普通用户/程序编写的内容具有中等强制性级别。
即使是不受信任的程序也可以写入的内容具有较低的强制级别,这就是保护模式 IE 运行的方式。因此,它无法写入您的任何文档或将恶意内容放入您的用户文件夹中。文件系统会将这些插件重定向到:
\Users\<username>\AppData\Local\Microsoft\Windows\INetCache\Virtualized
请注意,即使自主访问控制列表允许访问,强制完整性级别也可能拒绝访问。如果您不了解强制访问控制,这可能会造成一些困惑。
如何检查文件或文件夹的强制级别?
使用icacls
实用程序,如icacls file.txt
或icacls \path\to\folder
。当我在文件夹上运行该程序时Virtualized
,我得到:
NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
BUILTIN\Administrators:(I)(OI)(CI)(F)
MYCOMP\Ben:(I)(OI)(CI)(F)
Mandatory Label\Low Mandatory Level:(OI)(CI)(NW)
如您所见,该文件夹的强制级别较低。在我的C:\
驱动器上,我得到:
NT AUTHORITY\Authenticated Users:(S,AD)
NT AUTHORITY\Authenticated Users:(OI)(CI)(IO)(M)
NT AUTHORITY\SYSTEM:(OI)(CI)(F)
BUILTIN\Administrators:(OI)(CI)(F)
BUILTIN\Users:(OI)(CI)(RX)
Mandatory Label\High Mandatory Level:(OI)(NP)(IO)(NW)
我的驱动器的根目录具有较高的强制级别。大多数对象不会显示该行;当该行不存在时,Windows 会假定该对象具有中等强制级别。
我如何停止重定向?
在所有地方禁用保护模式可以实现这一点,但这不利于安全。如果您信任为 Silverlight 应用程序提供服务的站点,则可以将其添加到已关闭保护模式的 Internet 区域。为此,请打开 Internet 选项对话框,切换到安全选项卡,选择可信任的网站区域,然后单击站点按钮。