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 参数指定的进程。 CREATE_PROCESS_DEBUG_INFO 结构的 lpStartAddress 成员为 NULL。
对于当前属于进程的每个线程,系统会发送 一个CREATE_THREAD_DEBUG_EVENT 调试事件。 CREATE_THREAD_DEBUG_INFO 结构的 lpStartAddress 成员为 NULL。
对于当前加载到目标进程的地址空间中的每个动态链接库 (DLL) ,系统会发送 LOAD_DLL_DEBUG_EVENT 调试事件。 系统安排进程中的第一个线程在恢复后执行断点指令。 继续此线程会使它恢复执行与附加调试器之前相同的操作。
完成所有这些操作后,系统将恢复进程中的所有线程。 当进程中的第一个线程恢复时,它会执行断点指令,导致 将EXCEPTION_DEBUG_EVENT 调试事件发送到调试器。 所有将来的调试事件都通过使用常规机制和规则发送到调试器。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | debugapi.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |