Это оказывает такое большое влияние из-за давно известной слабости в Win32 API.
Программы порождаются в Win32 через CreateProcess()системный вызов. Это может быть использовано несколькими способами. Люди, пришедшие из фонов Unix, Linux или OS / 2, обычно думают, что они берут два отдельных аргумента для программы (файл образа) для появления и командный хвост для передачи новому процессу, потому что имена файлов и аргументы векторы / командные хвосты две отдельные вещи в API этих операционных систем. Но на самом деле системный вызов может быть вызван в альтернативной форме с именем программы и аргументами, объединенными в одну большую строку. CreateProcess()попытается отделить имя файла программы от хвоста команды.
Проблема заключается в том, что он делает это путем постепенного разделения строки по два на каждый последующий пробел, пока левая часть не совпадет с файлом или каталогом. Многие программы Win32 будут пытаться передать строки, как C:\Program Files\Contoso\TakeOver.exe StackExchange.comсистемный вызов. Это будет запускать правильную программу - C:\Program Files\Contoso\TakeOver.exeс правильным командным хвостом - StackExchange.comдо тех пор, пока не придет какой-то явно опасный человек и не создаст C:\Programфайл, как вы.
В этот момент системный вызов завершается попыткой запустить файл образа программы C:\Programс помощью команды tail Files\Contoso\TakeOver.exe StackExchange.com. Небеса помогут вам, если C:\Programна самом деле образ исполняемой программы.
Это общая слабость, и она применяется к любому имени файла программы, содержащему пробелы в сочетании с любой программой, которая использует One Big String для порождения других программ. Но наиболее распространенным случаем, который поражает это, являются все программы, которые живут под, C:\Program Files\и большое количество программ Win32, которые используют подход One Big String.
Слишком поздно менять Win32 API. Это было слишком поздно десять лет назад. И Microsoft не может изменить все программы, написанные другими людьми, которые передают одну большую строку вместо двух CreateProcess(). Таким образом, Microsoft выполняет проверку Windows при входе пользователя в систему C:\Programи выдает предупреждение, которое вы видите.
И, как вы можете видеть, в документе Microsoft Win32 есть серьезное предупреждение «Безопасность», в котором говорится, что разработчики не должны писать программы с использованием подхода One Big String, который существует уже несколько лет.
дальнейшее чтение