答案在“此文件来自另一台计算机...” - 我怎样才能解除对文件夹中所有文件的阻止,而不必单独解除对它们的阻止?解释如何“解除阻止”来自远程源的文件。出于测试目的,我想完成相反的操作。如何设置文件的区域标识符以便 Windows 将其“阻止”?
我偏向于使用 PowerShell 解决方案,但其他机制也是可以接受的。
答案1
当文件下载到 NTFS 文件系统时,您可能会注意到文件属性对话框中有一个Security
带有复选框的附加部分Unblock
:
有关该文件的附加数据存储在备用数据流 (ADS)。该文件通常在下载结束时由浏览器进程写入。例如 Chrome.exe、Msedge.exe 等。可以使用文件系统监视工具观察此操作,例如进程监控。
通过公共符号,完整堆栈揭示了 Chromium 项目中添加此信息的代码,如下所示:https://source.chromium.org/chromium/chromium/src/+/main:components/services/quarantine/quarantine_win.cc;l=225
可以使用多种方式查看备用数据流,例如流但现在使用 PowerShell 更加方便。
例如,要查看文件的所有流,可以使用以下 PowerShell 命令:
Get-Item -Path Autologon.exe -Stream *
输出如下:
PSPath : Microsoft.PowerShell.Core\FileSystem::C:\ads\Autologon.exe::$DATA
PSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\ads
PSChildName : Autologon.exe::$DATA
PSDrive : C
PSProvider : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
FileName : C:\ads\Autologon.exe
Stream : :$DATA
Length : 138920
PSPath : Microsoft.PowerShell.Core\FileSystem::C:\ads\Autologon.exe:Zone.Identifier
PSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\ads
PSChildName : Autologon.exe:Zone.Identifier
PSDrive : C
PSProvider : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
FileName : C:\ads\Autologon.exe
Stream : Zone.Identifier
Length : 26
就这个问题而言,Zone.Identifier
我们感兴趣的是流。继续使用 PowerShell,我们可以使用 get-content 命令查看它:
Get-Content .\Autologon.exe:zone.identifier
[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://live.sysinternals.com/
HostUrl=https://live.sysinternals.com/Autologon.exe
要手动添加或更新Zone.Identifier
命名流并设置流的值,我们可以运行以下 PowerShell 命令:
Set-Content -Path .\file.exe -Stream Zone.Identifier -Value '[ZoneTransfer]','ZoneId=3'
其中ZoneId
指定可以是下列值之一:
0 = "Local machine"
1 = "Local intranet"
2 = "Trusted sites"
3 = "Internet"
4 = "Restricted sites"
笔记:要从ZoneTransfer
文件中删除流并因此执行与从文件属性对话框解除文件阻止相同的操作,您可以运行以下任一命令:
Unblock-File -path .\file.exe
Remove-Item -Path .\file.exe -Stream Zone.Identifier