Эти данные хранятся в альтернативном файловом потоке NTFS вместе с исполняемым файлом.Поток называется Zone.Identifier :
Windows® Internet Explorer® использует имя потока Zone.Identifier для хранения зон безопасности URL.
Полная формаsample.txt:Zone.Identifier:$DATA
Поток представляет собой простой текстовый поток в форме:
[ZoneTransfer]
ZoneId=3
MSDN-SECZONES дает объяснение зон безопасности.
(NB. В оригинале есть пробел между двоеточием и "Зоной", но я думаю, что это ошибочно.)
Вы можете найти ZoneIds в UrlMon.h в SDK;есть перечисление, равное
enum URLZONE {
URLZONE_LOCAL_MACHINE = 0,
URLZONE_INTRANET = 1,
URLZONE_TRUSTED = 2,
URLZONE_INTERNET = 3,
URLZONE_RESTRICTED = 4
};
(оригинал использует предыдущее значение + 1, а не абсолютные значения.)
Как говорит Ганс в комментариях, их можно записать с помощью стандартного Win32файловые API CreateFile и WriteFile .Firefox всегда записывает Интернет-зону, зона 3 - Код Firefox здесь (три-лицензия 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 Вы можете использовать это, чтобы абстрагироваться от всего этого для вас.