【问题标题】:Reproducing the blocked exe "unblock" option in file properties in windows 2003在 Windows 2003 的文件属性中重现被阻止的 exe“解除阻止”选项
【发布时间】:2010-09-13 05:32:48
【问题描述】:

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

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

但我无法轻松重现让我的 exe 处于需要解锁的状态。

我怎样才能让解除阻止出现在我的 exe 上以便我可以测试此功能?

【问题讨论】:

    标签: security windows-server-2003 nsis


    【解决方案1】:

    这是使用 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,或者简单地假设如果流存在,您的用户将收到该警告。

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

    【讨论】:

      【解决方案2】:

      有一个受支持的 API,记录在 MSDN 上。在 MSDN 上搜索“Persistent Zone Identifier Object”。基本上你CoCreateInstanceCLSID_PersistentZoneIdentifier 并请求IPersistFile 接口。然后,您使用相关文件的名称调用IPersistFile::Load。接下来,对IZoneIdentifier 接口进行QI 并使用IZoneIdentifier::GetId 获取文件的区域。如果没有“网络标记”,您应该得到URLZONE_LOCAL_MACHINE。另一个回复中提到的3的ZoneId是URLZONE_INTERNET。 (枚举称为URLZONE,也记录在MSDN 上,或参见sdk\inc\urlmon.h。)您可以通过调用IZoneIdentifier::RemoveIZoneIdentifier::SetId 删除或更改“网络标记”,然后调用IPersistFile::Save。 MSDN 上有关于所有这些的更多详细信息。祝你好运!

      【讨论】:

        【解决方案3】:

        感谢这对我帮助很大。

        如果您创建一个包含内容的批处理文件,则可以使该过程更加轻松。

        echo [ZoneTransfer] > Zone.Identifier
        echo ZoneId=3 >> Zone.Identifier
        more Zone.Identifier > %1:Zone.Identifier
        

        这将为您生成 Zone.Identifier 并相应地标记文件。

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

        mark.bat myfile.txt
        

        【讨论】:

          猜你喜欢
          • 2012-02-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-07-01
          • 2018-05-30
          • 1970-01-01
          • 2011-10-13
          • 2021-06-03
          相关资源
          最近更新 更多