異なるプロセス間でDuplicateHandle(…)関数を使用し共有する場合
異なるプロセス同士でハンドルの共有は、DuplicateHandle(…) 関数を使用して、以下の手順で行うことができます。
- 元のプロセスでOpenProcess関数を使用してターゲットプロセスを開き、ターゲットプロセスのハンドルを取得します。
- ソースプロセスのハンドルをターゲットプロセスに複製するには、DuplicateHandle関数を使用します。この関数では、ソースプロセスのハンドル、ソースプロセスのハンドルに関連するプロセスID、ターゲットプロセスのハンドル、アクセス権、さらにハンドルを継承するかどうかを指定します。
- 複製されたハンドルでは、対象プロセスで共有メモリーの読み込みや書き込み、共有ファイルへのアクセスなどの処理が行えます。
DuplicateHandle関数はカーネルオブジェクト関連のハンドル(プロセスハンドル、スレッドハンドル、ファイルハンドルなど)しか複製できないことに注意してください。独自のカスタムハンドルなど、他のタイプのハンドルを共有するには、他の方法が必要になる場合があります。