Цитата:
В SDK нашёл определение текущего каталога как каталога, из которого запущено приложение, кроме явно изменённого
|
Это неверное определение, может SDK старый?
Цитата:
В то же время одним из параметров функции CreateProcess(), с помощью которой система создаёт новый процесс, является указатель на строку, задающую текущий каталог для создаваемого процесса. Если этот параметр равен NULL, в качестве текущего каталога для нового процесса задаётся текущий каталог родительского процесса
|
Да, это верно. Правда, это не система так делает, а реализуется в функции CreateProcess и тех функциях, что вызываются из нее. Если при непосредственном создании процесса указать, что у него текущий каталог NULL - так оно и будет.
Цитата:
функция GetCurrentDirectory() возвратила "C:\Documents and Settings\имя_учётной_записи" при автозапуске программы из реестра. Значит, либо этот каталог явно указан в функции CreateProcess(), либо это текущий каталог родительского (системного) процесса, создающего мой процесс
|
1-е - вряд ли.
2-е - вероятнее всего, ибо запускает процессы оттуда сам Explorer, какой у него текущий каталог? У того Explorer-а им будет папка в профиле, именно та, что Вы указали, правда, я сейчас проверил для internat.exe - там еще добавлен подкаталог с рабочим столом.
Цитата:
Возникает вопрос - а почему система не задаёт в качестве текущего каталог, в котором расположен исполняемый файл?
|
Еще раз, система сама это не делает, это устанавливаетс запускающая программа. Если из проводника даблкликом запускать процесс, то Explorer запускает его с тем текущим каталогом, что открыт (если только не нашелся ярлык, корректирующий запуск, например, pif).
Вобщем, различие связано с тем, как запускает процессы Explorer. Оно как раз показывает, что пока работает автозагрузка из реестра, текущим каталогом является текущий каталог самого Explorer-а, а при последующих запусках он текущий каталог устанавливает принудительно.
Автозагрузка из папки автозагрузки на самом деле реализуется через запуск ярлыка, так что это попадает под то, что выше написано.