Наверняка почти каждый из вас сталкивался с ситуацией, когда исполняемый файл установщика какой-либо программы, скачанный из интернета, отказывался запускаться просто так. Вместо этого Windows выкидывала предупреждение о безопасности, мол, вы действительно хотите запустить файл krutayaproga.exe от неизвестного издателя, или всё-таки подумаете. Разумеется, можно нажать «Да», да ещё и поставить флаг, мол, больше не спрашивать, но проблему это не решит и, когда вы скачаете программу с другого сайта, вы снова увидите этот запрос. Знаю многих людей, которые пытались отключить это дело через реестр, отключение SmartScreen и защитника Windows, однако, не знаю, помогло ли им это. Точно знаю, что в таких случаях помогает копирование такого файла на флешку, отформатированную в fat32 и обратно. Однако, во-первых, бывают установщики и размером более 4 гб, так что на fat32 они просто не влезут, а во-вторых это навело меня на кое-какие размышления, о которых я напишу ниже.
И так, раз при копировании на флешку и обратно это гадливое предупреждение исчезает, значит дело тут в файловой системе ntfs, вернее в том, что в ней есть что-то такое, чего нет в fat32 и что безвозвратно теряется при копировании с тома ntfs на том fat32. Имена в юникоде? Да, их нет в fat32, но англоязычные имена файлов всё равно порождают это гадливое предупреждение. Иной способ организации хранения файлов? Журналирование? Индексирование? Двоичные деревья? Всё оно не подходит к нашему случаю. Так что же подходит? А вот что. в ntfs появилось новое понятие — файловые потоки (file streams). Любой файл на томе ntfs может содержать кроме основного потока сколько угодно иных потоков. Проведите эксперимент. Для этого очень желательно, чтобы у вас был Total Commander.
- Войдите в любую папку и создайте в ней файл test.txt, например, по комбинации клавиш shift+f4;
- Откройте его и что-нибудь напишите, например, «это первый тест;
- Сохранитесь;
- Теперь нажмите shift+f4, сотрите всё, что там написано, и напишите вот так: test.txt:test2, после чего нажмите enter;
- В открывшемся пустом окне редактора напишите что-нибудь, например, «Это второй тест»;
- Теперь проделайте то же самое, что и во втором пункте, только после двоеточия напишите test3 вместо test2;
- Снова откроется пустое окно редактора, в котором вы можете написать, например, «Это третий тест».
Что получилось после наших экспериментов? Получилось то, что наш файл test.txt имеет три файловых потока:
- Поток по умолчанию, который сформировался при создании файла и в котором мы написали «Это первый тест»;
- Поток с именем test2, в котором мы написали «Это второй тест»;
- Поток с именем test3, в котором мы написали «Это третий тест».
После примера с файловыми потоками, думаю, вы уже догадались, что при скачивании файлов из интернета, система добавляет к ним какой-то файловый поток и, если Windows «видит» такой поток у исполняемых файлов, то при запуске на выполнение такого exe-шника она обязательно будет «ругаться.
Что же это за поток? Сведения о том, откуда конкретно был скачан файл, Windows сохраняет в потоке «zone identifier». Для примера перед написанием этого поста я скачал с официального сайта последнюю версию архиватора 7zip. Давайте посмотрим, что содержится в потоке zone.identifier.
[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://www.7-zip.org/download.html
HostUrl=https://www.7-zip.org/a/7z1900.exe
Вот на это всё и «Ругается» Windows. Отсюда вывод: чтобы не заниматься глупостями с копированием на флешку и обратно и при этом сделать так, чтобы Windows не «ругалась на скачанные файлы, поток zone.identifier надо удалить. Как это сделать? Есть два способа. Способ безопасный:
- скачайте и установите, если ещё не установили, архиватор 7zip;
- Откройте приложение 7Zip file manager;
- Найдите в нём файл, скачанный из интернета;
- Вызовите контекстное меню файла и откройте пункт «Альтернативные потоки»;
- Найдите поток zone identifier и удалите его, нажав клавишу delete.
Второй способ: открыть поток в ручную и удалить всё, что там написано. Показываю на примере Total Commander-а.
- Найдите тоталом скачанный файл;
- Находясь на нём, нажмите shift+f4;
- Переместитесь в конец строки, поставьте двоеточие и напишите zone.identifier;
- Нажмите enter;
- В открывшемся окне редактора нажмите ctrl+a и за тем delete, чтобы выделить весь текст и удалить его;
- Сохранитесь.
Всё, вы только что удалили штуку, из-за которой Windows «Ругалась на файлы, скачанные из интернета.
Вообще же… Файловые потоки — очень интересная вещь, с ними можно делать много чего интересного. Если интересно, что же именно с ними можно делать, спрашивайте, отвечу.
Расскажи, пожалуйста, что же именно с ними можно делать. 🙂
Вот например такая шутка. Никаких вирусов, всё безопасно, но обычного пользователя поставит в тупик. Скачайте по ссылке архив music.rar
https://cloud.mail.ru/public/5hWc/38u86e3Wb
Посмотрите на свойства файла:
Размер: 10,8 МБ (11 407 037 байт)
На диске: 10,8 МБ (11 407 360 байт)
Создан: 17 июня 2020 г., 15:29:31
Изменен: 17 июня 2020 г., 15:29:36
А теперь распакуйте его. Вы увидите один файл music.txt, размером 89 байт. Откройте его блокнотом и прочитайте текст.
Парадокс? Заархивированный файл больше разархивированного и это мягко говоря, что больше, больше на несколько порядков. Если быть более конкретным, то упакованный файл больше распакованного в 128169 раз. Вот так вот.
Есть третий — самый лёгкий способ убрать поток «zone identifier». Если вызвать свойства файла, можно активировать пункт «Разблокировать».
Да, совершенно верно, это — самый простой способ и я про него не знал, ну то есть даже не думал, что такое может быть на столько на поверхности.