Функция DebugActiveProcess дает возможность отладчику подключиться к активному процессу и отлаживать его.
Синтаксис
BOOL DebugActiveProcess( DWORD dwProcessId ); |
dwProcessId
[in] Идентификатор процесса, который будет отлаживаться. Отладчику предоставляется доступ к отлаживаемому процессу, как если бы он создавал процесс с флажком DEBUG_ONLY_THIS_PROCESS. Дополнительные подробности см. в разделе Замечаний.Если функция завершается успешно, возвращаемое значение не нуль.
Если функция завершается ошибкой, возвращаемое значение равняется нулю. Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.
Чтобы остановить отладку процесса, Вы должны выйти из него или вызвать функцию DebugActiveProcessStop. Выход из отладчика также порождает выход из процесса, если Вы не используете функцию DebugSetProcessKillOnExit.
Отладчик должен иметь соответствующий доступ к целевому процессу; он должен быть в состоянии открыть процесс для доступа PROCESS_ALL_ACCESS. В среде Windows Me/98/95, отладчик имеет соответствующий доступ, если идентификатор процесса допустим. На других версиях Windows, DebugActiveProcess может завершиться ошибкой, если целевой процесс создавался с дескриптором безопасности, который предоставляет отладчику что-то меньшее чем полный доступ.
Обратите внимание! на то, что, если процессу отладки предоставили привилегию SE_DEBUG_NAME и включили в работу, он может отладить любой процесс. |
После того, как система проверит идентификатор процесса и выяснит, что подсоединение отладки было сделано правильно, функция возвратит значение ИСТИНА (TRUE). Отладчик, как предполагается, будет ожидать события отладки, используя функцию WaitForDebugEvent. Система приостанавливает все потоки в процессе и отправляет события отладчика, обозначающие текущее состояние процесса.
Система отправляет отладчику единственное событие отладки CREATE_PROCESS_DEBUG_EVENT, обозначающее процесс, указанный параметром dwProcessId. Член lpStartAddress структуры CREATE_PROCESS_DEBUG_INFO равен ПУСТО (NULL).
Для каждого потока текущей части процесса, система отправляет событие отладки CREATE_THREAD_DEBUG_EVENT. Член lpStartAddress структуры CREATE_THREAD_DEBUG_INFO равен ПУСТО (NULL).
Для каждой динамически подключаемой библиотеки (DLL) в текущий момент загруженной в адресное пространство целевого процесса, система отправляет событие отладки LOAD_DLL_DEBUG_EVENT. Система подготавливает первый поток в процессе, чтобы исполнить команду контрольного останова после его возобновления. Продолжение работы этого потока заставляет его возвратиться к тому, что оно делало до подключения отладчика.
После того, как все это было сделано, система возобновляет все потоки в процессе. Когда первый поток в возобновит работу процесса, он исполнит команду контрольного останова, которая заставляет событие отладки EXCEPTION_DEBUG_EVENT отправить в отладчик. Все будущие события отладки отправляются в отладчик, используя обычный механизм и правила.
Смотри также
Обзор Основы отладки, Функции, используемые при отладке, CreateProcess, CREATE_PROCESS_DEBUG_INFO, CREATE_THREAD_DEBUG_INFO, DebugActiveProcessStop, WaitForDebugEvent
Размещение и совместимость DebugActiveProcess |
||
К |
Windows XP |
Да |
л |
Windows 2000 Professional |
Да |
и |
Windows NT Workstation |
Да |
е |
Windows Me |
Да |
н |
Windows 98 |
Да |
т |
Windows 95 |
Да |
С |
Windows Server 2003 |
Да |
е | Windows 2000 Server | Да |
р | Windows NT Server | Да |
в | ||
е | ||
р | ||
Используемая библиотека |
Kernel32.lib |
|
Используемая DLL | kernel32.dll | |
Заголовочный файл | ||
- объявлено в |
Winbase.h |
|
- включено в |
Windows.h |
|
Unicode |
Нет |
|
Замечания по платформе |
Не имеется |