Как же так, товарищ Комманд Ком?

Oct 03, 2023 14:38


На RSDN поделились ужасным и прекрасным одновременно:

У меня есть несколько тестовых виртуалок с разными версиями винды, включая XP, и для автоматизации работы в них используются командные файлы с хоста, вызываемые через shared folders. Давно заметил, что работа мало-мальски сложных командных файлов в виртуалках совершенно неадекватно тормозит. Например, десяток скриптов, вызывающих друг друга для настройки окружения и копирования нескольких файлов с хоста, может работать по полминуты и дольше. Пару раз порывался выяснить, отчего так тормозит, но обнаружилось, что везде тормозит равномерно, а разбираться глубже руки не доходили.

Сегодня вот, наконец, дошли - догадался последить за работой cmd.exe в Process Monitor. Увидел, что для чтения каждой строки скрипта он открывает файл, устанавливает текущую позицию, читает до 8191 символа (максимальная длина строки), затем закрывает файл.  Внутри одной системы спасает кэширование, а для сетевых операций то ли винда, то ли поддержка shared folders, добавляют флаг запрета кэширования, и привет.

Теперь мучительно пытаюсь это развидеть, и заодно понять, в каком бреду можно было родить такой чудовищный алгоритм. Это не CRT - чтение в cmd.exe реализовано независимо. И так оно работает вплоть до последних версий Win 11, если что.



Объяснение:

Наверное тот, кто это писал, держал в поле зрения тот факт, что в MS-DOS по умолчанию может быть всего 20 открытых файлов на всю систему. И не хорошо запущенным программам оставлять из них только 19...

Кстати, это давно известная багофича коммандкома. Если на лету модифицировать скрипт, который он исполняет (например, в MS-DOS типичный сценарий - обновлять autoexec.bat, чтобы добавить новый путь в PATH), то интерпретатор станет чудить и читать инструкции с произвольного места. Я лично с этим сталкивался и даже хакерски хакал, ещё в 3.30 (а то и в 3.20 - привет, олды!)

Конечно, в винде давно уже нет autoexec (нет же, да?), но, как видим, эхо войны долетело, откуда не ждали.

Ну и на StackOverflow кто-то вляпался, аж 14 лет назад. Не с сетевой файловой системой, а с самоисправлениями.

ужасы, rsdn, возопиил, windows

Previous post Next post
Up