プログラム (1 つまたは複数) にデバッグ エンジン (DE) をアタッチします。 DE が SDM に対してインプロセスで実行されているときに、セッション デバッグ マネージャー (SDM) によって呼び出されます。
構文
int Attach(
IDebugProgram2[] pProgram,
IDebugProgramNode2[] rgpProgramNodes,
uint celtPrograms,
IDebugEventCallback2 pCallback,
Enum_ATTACH_REASON dwReason
);
パラメーター
pProgram
[入力] アタッチするプログラムを表す IDebugProgram2 オブジェクトの配列。 これらはポート プログラムです。
rgpProgramNodes
[入力] プログラムごとに 1 つのプログラム ノードを表す IDebugProgramNode2 オブジェクトの配列。 この配列のプログラム ノードは、pProgram
と同じプログラムを表します。 プログラム ノードは、アタッチするプログラムを DE が識別できるように指定されます。
celtPrograms
[入力] pProgram
および rgpProgramNodes
配列内のプログラムまたはプログラム ノードの数。
pCallback
[入力] デバッグ イベントを SDM に送信するために使用される IDebugEventCallback2 オブジェクト。
dwReason
[入力] これらのプログラムをアタッチする理由を指定する ATTACH_REASON 列挙型の値。 詳細については、「解説」を参照してください。
戻り値
成功した場合は、S_OK
を返します。それ以外の場合は、エラー コードを返します。
解説
プログラムにアタッチする理由には、次の 3 つがあります。
ATTACH_REASON_LAUNCH
は、ユーザーがプログラムを含むプロセスを起動したため、DE がそれにアタッチしていることを示します。ATTACH_REASON_USER
は、ユーザーが DE にプログラム (またはプログラムが含まれているプロセス) にアタッチするよう明示的に要求したことを示します。ATTACH_REASON_AUTO
は、特定のプロセス内の他のプログラムを既にデバッグ中のため、DE が特定のプログラムにアタッチしていることを示します。 これは、自動アタッチとも呼ばれます。このメソッドが呼び出された場合、DE は次のイベントを、次の順序で送信する必要があります。
IDebugEngineCreateEvent2 (デバッグ エンジンの特定のインスタンスに対してまだ送信されていない場合)
-
さらに、アタッチする理由が
ATTACH_REASON_LAUNCH
の場合、DE では IDebugEntryPointEvent2 イベントを送信する必要があります。DE では、デバッグ中のプログラムに対応する IDebugProgramNode2 オブジェクトを取得した後、任意のプライベート インターフェイスに対してクエリを実行できます。
pProgram
またはrgpProgramNodes
によって指定された配列内のプログラム ノードのメソッドを呼び出す前に、プログラム ノードを表すIDebugProgram2
インターフェイスで、必要に応じて偽装を有効にする必要があります。 ただし、通常、この手順は必要ありません。 詳細については、セキュリティの問題に関するページを参照してください。