Я пытаюсь понять, как Windows обрабатывает командные строки. Документация MSDN помогает лишь незначительно.
Как связаны следующие вещи:
CreateProcessA()
и CreateProcessW()
аргументы lpApplicationName
и lpCommandLine
GetCommandLineA()
и GetCommandLineW()
возвращаемые значения WinMain()
и wWinMain()
аргумент lpCmdLine
main()
и wmain()
аргумент argv
- C глобальные переменные
__argc
, __argv
, __wargv
CommandLineToArgvW()
- Запуск исполняемого файла на основе командной строки, введенной в
cmd.exe
или PowerShell
В частности:
- Как Windows хранит командные строки процессов внутри себя?
- Что из перечисленного выше наиболее близко к этому представлению?
- Изменилось ли представление между Windows версиями?
- На представление влияют настройки кодовой страницы?
- Существуют ли командные строки, которые не могут быть представлены (в частности, кодовые страницы или вообще) и что произойдет, если вы попытаетесь передать их
CreateProcess()
? (Например, Unix, аргумент командной строки не может иметь нулевой байт, поскольку фундаментальное представление, взятое execve()
, является массивом байтовых строк с нулевым символом в конце.) CreateProcess()
может принимать либо lpApplicationName
или lpCommandLine
или оба одновременно. Если вы зададите оба варианта, эта ОС объединит их внутренне в одну строку, которая затем будет передана созданному процессу в качестве командной строки?
Вопросы, связанные с данной: