- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如何在从互联网下载的可执行文件上设置 MOTW(网络标记)?
最佳答案
此数据存储在 NTFS alternative file stream 中与可执行文件一起。该流称为 Zone.Identifier :
Windows® Internet Explorer® uses the stream name Zone.Identifier for storage of URL security zones.
The fully qualified form issample.txt:Zone.Identifier:$DATA
The stream is a simple text stream of the form:[ZoneTransfer]
ZoneId=3MSDN-SECZONES gives an explanation of security zones.
(注意,原文在冒号和“区域”之间有一个空格,但我认为这是错误的。)
ZoneIds可以在SDK的UrlMon.h中找到;有一个枚举等同于
enum URLZONE {
URLZONE_LOCAL_MACHINE = 0,
URLZONE_INTRANET = 1,
URLZONE_TRUSTED = 2,
URLZONE_INTERNET = 3,
URLZONE_RESTRICTED = 4
};
(原文使用的是前值+1,而不是绝对值。)
正如 Hans 在评论中所说,这些可以用标准的 Win32 文件 API 编写 CreateFile和 WriteFile .Firefox 始终写入 Internet 区域,区域 3 - Firefox code here (MPL/LGPL/GPL 三证):
bool SetInternetZoneIdentifier(const FilePath& full_path) {
const DWORD kShare = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE;
std::wstring path = full_path.value() + L":Zone.Identifier";
HANDLE file = CreateFile(path.c_str(), GENERIC_WRITE, kShare, NULL,
OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE == file)
return false;
const char kIdentifier[] = "[ZoneTransfer]\nZoneId=3";
DWORD written = 0;
BOOL result = WriteFile(file, kIdentifier, arraysize(kIdentifier), &written,
NULL);
CloseHandle(file);
if (!result || written != arraysize(kIdentifier)) {
DCHECK(FALSE);
return false;
}
return true;
}
或者还有一个 IE COM API CLSID_PersistentZoneIdentifier你可以用它来为你抽象这一切。
关于c++ - 如何在可执行文件上设置 MOTW,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4412669/
如何在从互联网下载的可执行文件上设置 MOTW(网络标记)? 最佳答案 此数据存储在 NTFS alternative file stream 中与可执行文件一起。该流称为 Zone.Identifi
我是一名优秀的程序员,十分优秀!