vasketsov
Теперь Вам спасибо за обстоятельный и, по всей видимости, правильный ответ. Однако, кое-какие вопросы у меня ещё остались (наверное, я тупой
![Sad](images/smilies/sad.gif)
... или самокритичный
![Smile](images/smilies/new/smile.gif)
).
В связи с вышеобозначенным статусом начинающего программиста мне достаточно сложно разобраться в данном вопросе на низком уровне (хотя абсолютно согласен с тем, что истину можно найти именно там и не только по этому вопросу). Хочу подойти к вопросу с немного другой стороны. В SDK нашёл определение текущего каталога как каталога, из которого запущено приложение, кроме явно изменённого. В то же время одним из параметров функции CreateProcess(), с помощью которой система создаёт новый процесс, является указатель на строку, задающую текущий каталог для создаваемого процесса. Если этот параметр равен NULL, в качестве текущего каталога для нового процесса задаётся текущий каталог родительского процесса. Выходит, что, как Вы и сказали, текущим каталогом для процесса может быть абсолютно любой каталог, указанный родительским процессом. В моём случае функция GetCurrentDirectory() возвратила "C:\Documents and Settings\имя_учётной_записи" при автозапуске программы из реестра. Значит, либо этот каталог явно указан в функции CreateProcess(), либо это текущий каталог родительского (системного) процесса, создающего мой процесс. Возникает вопрос - а почему система не задаёт в качестве текущего каталог, в котором расположен исполняемый файл? Ведь ей известен полный путь к нему, и именно так она поступает в остальных случаях (при автозапуске через папку "Автозагрузка" и при обычном запуске). Почему такое происходит только в случае автозапуска через реестр?