2013-04-25 3 views
0

При чтении информации о рабочем каталоге и каталоге директорий сценария (или каталоге, содержащем образ исполняемого файла), я начал задаваться вопросом, как Windows знает, какой каталог будет передаваться процессу в качестве рабочего каталога , когда я на самом деле не указать рабочий каталог, когда я запускаю данную программу:В какой структуре Windows хранит данные о том, что является рабочим каталогом (или текущим каталогом) процесса?

working directory-explicit-implicit-Windows

  • Через командную строку я только передать расположение сценария каталога (~ в качестве нулевого параметр). Обратите внимание, что каталог скриптов не рабочий каталог.

Я знаю, что я могу использовать GetCurrentDir(), чтобы получить рабочую директорию внутри программы, но мне интересно, не Windows, есть какая-либо «внутренняя» структура, которая хранит рабочую директорию данного процесса? (и если да, есть ли какая-либо документация по этой структуре).

Я обнаружил следующие связанные с процессом структуры, но, похоже, ни одно из них не содержит свойства рабочего каталога.

ответ

0

Оболочка (или программа, которая запускает скрипт), вызывает функцию CreateProcess(). Функция CreateProcess имеет параметр lpCurrentDirectory. Оболочка (или любая другая программа, запускающая скрипт) устанавливает lpCurrentDirectory параметр неявно (~ не через параметры сценария).

CreateProcess

Этот параметр позже хранится в недокументированного свойство RTL_USER_PROCESS_PARAMETERS структуры. msdnLink, docLink

  • примечание слово: недокументированные (вот почему я не нашел информацию о MSDN, в первую очередь).

enter image description here

, связанные с StackOverflow вопросы: