В случае успеха дескриптор, возвращенный CreateProcess, имеет PROCESS_ALL_ACCESS
, так что это не проблема.
Проблема в том, что сразу после CreateProcess Windows еще не выполнила инициализацию и, следовательно, не настроила список модулей. Попытка запросить модули отладчика (даже основной модуль) в этот момент потерпит неудачу, независимо от того, какой интерфейс вы используете (Toolhelp, psapi, kernel32).
Лучше всего подождать CREATE_PROCESS_DEBUG_EVENT
и затем запросить.
Если вам нужны имена загруженных библиотек DLL, вам придется подождать, пока они загрузятся и получат LOAD_DLL_DEBUG_EVENT
. В прошлый раз, когда я проверял XP, они также не могут быть запрошены здесь, вам придется ждать следующего события отладки, чтобы эта информация была доступна.
Возможно, может помочь использование нативного NT API или это может быть исправлено в Vista и выше.
Из любопытства, зачем вам имя файла модуля, когда оно у вас явно есть при вызове CreateProcess?