Функция DebugActiveProcess (debugapi.h)
Позволяет отладчику подключаться к активному процессу и выполнять его отладку.
Синтаксис
BOOL DebugActiveProcess(
[in] DWORD dwProcessId
);
Параметры
[in] dwProcessId
Идентификатор отлаживаемого процесса. Отладчику предоставляется доступ к процессу отладки, как если бы он создал процесс с флагом DEBUG_ONLY_THIS_PROCESS . Дополнительные сведения см. в разделе Примечания этой статьи.
Возвращаемое значение
Если функция выполняется успешно, возвращается ненулевое значение.
Если функция завершается сбоем, возвращаемое значение равно 0 (ноль). Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Комментарии
Чтобы остановить отладку процесса, необходимо выйти из процесса или вызвать функцию DebugActiveProcessStop . Выход из отладчика также завершает процесс, если вы не используете функцию DebugSetProcessKillOnExit .
Отладчик должен иметь соответствующий доступ к целевому процессу и иметь возможность открыть процесс для PROCESS_ALL_ACCESS. 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 в отладчик. Все будущие события отладки отправляются в отладчик с помощью обычного механизма и правил.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | debugapi.h (включая Windows.h) |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |