次の方法で共有


IDebugEngine2::Attach

プログラム (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 は次のイベントを、次の順序で送信する必要があります。

  1. IDebugEngineCreateEvent2 (デバッグ エンジンの特定のインスタンスに対してまだ送信されていない場合)

  2. IDebugProgramCreateEvent2

  3. IDebugLoadCompleteEvent2

    さらに、アタッチする理由が ATTACH_REASON_LAUNCH の場合、DE では IDebugEntryPointEvent2 イベントを送信する必要があります。

    DE では、デバッグ中のプログラムに対応する IDebugProgramNode2 オブジェクトを取得した後、任意のプライベート インターフェイスに対してクエリを実行できます。

    pProgram または rgpProgramNodes によって指定された配列内のプログラム ノードのメソッドを呼び出す前に、プログラム ノードを表す IDebugProgram2 インターフェイスで、必要に応じて偽装を有効にする必要があります。 ただし、通常、この手順は必要ありません。 詳細については、セキュリティの問題に関するページを参照してください。

関連項目