Security 复制被阻止的exe“;“解除封锁”;windows 2003中文件属性中的选项

Security 复制被阻止的exe“;“解除封锁”;windows 2003中文件属性中的选项,security,windows-server-2003,nsis,Security,Windows Server 2003,Nsis,当我将我的程序从我的网站下载到我的windows 2003计算机时,它上面有一个块,你必须右键单击exe,然后单击属性,然后选择“取消阻止”按钮 我想在我的安装程序中添加当文件被阻止,因此没有足够的权限时的检测 但我无法在需要取消阻止的状态下复制获取exe 如何使取消阻止显示在我的exe上,以便测试此功能?这是使用NTFS文件流完成的。下载的文件中添加了一个名为“Zone.Identifier”的流。当IE7下载流包含的某些类型的文件时: [ZoneTransfer] ZoneId=3 设置它

当我将我的程序从我的网站下载到我的windows 2003计算机时,它上面有一个块,你必须右键单击exe,然后单击属性,然后选择“取消阻止”按钮

我想在我的安装程序中添加当文件被阻止,因此没有足够的权限时的检测

但我无法在需要取消阻止的状态下复制获取exe


如何使取消阻止显示在我的exe上,以便测试此功能?

这是使用NTFS文件流完成的。下载的文件中添加了一个名为“Zone.Identifier”的流。当IE7下载流包含的某些类型的文件时:

[ZoneTransfer]
ZoneId=3
设置它的最简单方法是创建一个包含这些内容的文本文件,并使用“更多”将其添加到备用流中

Zone.Identifier.txt:

[ZoneTransfer]
ZoneId=3
命令:

more Zone.Identifier.txt > file.exe:Zone.Identifier
然后,检查它的方法是尝试打开Zone.Identifier流并查找ZoneId=3,或者简单地假设如果该流存在,您的用户将收到该警告


还需要注意的是,这与权限无关。管理员看到同样的警告;这完全与文件的源和类型有关。当用户取消选中“打开此文件前始终询问”框,然后单击“运行”时,整个流将消失。

MSDN上记录了支持此操作的API。在MSDN上搜索“持久区域标识符对象”。基本上,您可以使用
CLSID\u PersistentZoneIdentifier
CoCreateInstance
,并请求一个
IPersistFile
接口。然后调用
IPersistFile::Load
,并使用相关文件的名称。接下来,QI用于
IZoneIdentifier
接口,并使用
IZoneIdentifier::GetId
获取文件的区域。如果没有“网络标记”,您应该获得
URLZONE\u LOCAL\u机器
。另一个答复中提到的3个区域ID是
URLZONE\u INTERNET
。(枚举名为
URLZONE
,也记录在MSDN上,或参见
sdk\inc\urlmon.h
)您可以通过调用
IZoneIdentifier::remove
IZoneIdentifier::SetId
删除或更改“web标记”,然后调用
IPersistFile::Save
。MSDN上有关于所有这些的更多详细信息。祝你好运

谢谢你,这对我帮助很大

如果创建一个包含这些内容的批处理文件,则可以使该过程更加容易

echo [ZoneTransfer] > Zone.Identifier
echo ZoneId=3 >> Zone.Identifier
more Zone.Identifier > %1:Zone.Identifier
这将为您生成Zone.Identifier并相应地标记文件

要运行它,只需提供文件名,例如,如果文件名为mark.bat

mark.bat myfile.txt