DebugActiveProcess
The DebugActiveProcess
function allows a debugger to attach to an active process and then debug it.
BOOL DebugActiveProcess(
DWORD dwProcessId |
// process to be
debugged |
); |
|
Parameters
dwProcessId
Specifies the
identifier for the process to be debugged. The debugger gets debugging access
to the process as if it created the process with the DEBUG_ONLY_THIS_PROCESS
flag.
Return Values
If the
function succeeds, the return value is nonzero.
If the function
fails, the return value is zero. To get extended error information, call GetLastError
Remarks
The debugger must
have appropriate access to the target process; it must be able to open the
process for PROCESS_ALL_ACCESS access. In the Win32 application programming
interface (API) for Windows 95, this is always true if the process identifier
is valid. However, in the Win32 API for Windows NT, DebugActiveProcess
can fail if the target process was created with a security descriptor that
denies the debugger appropriate access.
After the
system checks the process identifier and determines that a valid debugging
attachment is being made, the function returns TRUE. The debugger is then
expected to wait for debugging events by using the WaitForDebugEvent
The system
sends the debugger a single CREATE_PROCESS_DEBUG_EVENT debugging event
representing the process specified by the dwProcessId parameter. The lpStartAddress
member of the CREATE_PROCESS_DEBUG_INFO
For each
thread currently part of the process, the system sends a
CREATE_THREAD_DEBUG_EVENT debugging event. The lpStartAddress member of
the CREATE_THREAD_DEBUG_INFO
For each
dynamic-link library (DLL) currently loaded into the address space of the
target process, the system sends a LOAD_DLL_DEBUG_EVENT debugging event. The
system arranges for the first thread in the process to execute a breakpoint
instruction after it resumes. Continuing this thread causes it to return to
whatever it was doing before the debugger was attached.
After all of
this has been done, the system resumes all threads in the process. When the
first thread in the process resumes, it executes a breakpoint instruction that
causes an EXCEPTION_DEBUG_EVENT debugging event to be sent to the debugger. All
future debugging events are sent to the debugger by using the normal mechanism
and rules.
See Also