DebugActiveProcess 関数 (debugapi.h)
デバッガーでアクティブなプロセスにアタッチしてデバッグできるようにします。
構文
BOOL DebugActiveProcess(
[in] DWORD dwProcessId
);
パラメーター
[in] dwProcessId
デバッグするプロセスの識別子。 デバッガーには、 DEBUG_ONLY_THIS_PROCESS フラグを使用してプロセスを作成した場合と同様に、プロセスへのデバッグ アクセスが許可されます。 詳細については、このトピックの「解説」セクションを参照してください。
戻り値
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
プロセスのデバッグを停止するには、プロセスを終了するか、 DebugActiveProcessStop 関数を呼び出す必要があります。 デバッガーを終了すると、 DebugSetProcessKillOnExit 関数を使用しない限り、プロセスも終了します。
デバッガーはターゲット プロセスに適切なアクセス権を持っている必要があり、 PROCESS_ALL_ACCESSのプロセスを開くことができる必要があります。 DebugActiveProcess は、デバッガーにフル アクセス未満のものを許可するセキュリティ記述子を使用してターゲット プロセスが作成された場合に失敗する可能性があります。 デバッグ プロセスに SE_DEBUG_NAME 特権が付与され、有効になっている場合は、任意のプロセスをデバッグできます。
システムがプロセス識別子を確認し、有効なデバッグ添付ファイルが作成されていることを確認した後、関数は TRUE を返します。 その後、デバッガーは WaitForDebugEvent 関数を使用して、デバッグ イベントを待機する必要があります。 システムは、プロセス内のすべてのスレッドを中断し、プロセスの現在の状態を表すデバッガー イベントを送信します。
システムは、dwProcessId パラメーターで指定されたプロセスを表す 1 つのCREATE_PROCESS_DEBUG_EVENTデバッグ イベントをデバッガーに送信します。 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 |