34

是否有可能取消阻止从 ac# 程序中从 Internet 下载的文件。我在网上冲浪时了解到,该信息被写入包含当前区域信息的 (NTFS) 文件的替代流中(值 3 来自互联网并被解释为被阻止)。

是否存在清除或更改文件的区域信息(取消阻止)的托管可能性,或者是否存在复制没有区域信息的文件的托管复制功能?如果没有,我该如何使用 PInvoke 但不包括外部程序集(我不允许在当前项目中这样做)。

4

3 回答 3

40

根据您的输入,我完成了以下代码:

public class FileUnblocker {
    [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool DeleteFile(string name);

    public bool Unblock(string fileName) {
        return DeleteFile(fileName + ":Zone.Identifier");
    }
}

感谢 Stuart Dunkeld、Alex K(+1) 和 Sven 为我指明了方向。

更新如果它在生产环境中工作可靠, 我已经在这里发布了代码以获取反馈。如果有人想使用它,请查看那里。

于 2011-06-16T16:33:12.490 回答
20

它存储在:Zone.Identifier流 ( more < c:\theapp.exe:Zone.Identifier) 中,您需要使用本机 IO 例程来操作它们,这里是托管包装器

于 2011-06-16T15:58:48.377 回答
6

管理此标识符的官方方法是使用 PersistentZoneIdentifier COM 对象: http: //msdn.microsoft.com/en-us/library/ms537029 (v=vs.85).aspx

于 2012-07-19T09:06:47.560 回答