DuplicateHandle

機能
オブジェクトのハンドルをコピーする
Declare Function DuplicateHandle Lib "kernel32.dll"  _
(ByVal hSourceProcessHandle As Long, ByVal hSourceHandle As Long, _
ByVal hTargetProcessHandle As Long, ByVal lpTargetHandle As Long, _
ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwOptions As Long) As Long
Declare Function DuplicateHandle Lib "kernel32.dll"  _
(ByVal hSourceProcessHandle As Integer, ByVal hSourceHandle As Integer, _
ByVal hTargetProcessHandle As Integer, ByVal lpTargetHandle As Integer, _
ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, _
ByVal dwOptions As Integer) As Integer

BOOL DuplicateHandle(
HANDLE hSourceProcessHandle,
HANDLE hSourceHandle,
HANDLE hTargetProcessHandle,
LPHANDLE lpTargetHandle,
DWORD dwDesiredAccess,
BOOL bInheritHandle,
DWORD dwOptions
);
引数
hSourceProcessHandle

コピー元のハンドルを持つプロセスのID
hSourceHandle
コピー元のオブジェクトのハンドル
hTargetProcessHandle
コピー先のプロセスのID
lpTargetHandle
(戻り値)コピーされたオブジェクトのハンドル
dwDesiredAccess
新しいハンドルへのアクセス方法を指定する定数
(オブジェクトのタイプにより依存するため、解説を省略する)

dwOptionsがDUPLICATE_SAME_ACCESSのとき、無効(通常)
bInheritHandle
ハンドルを継承するかどうかを指定するフラッグ
   ハンドルを継承するとき        1
   同、しないとき                0
dwOptions
動作方法を指定する定数の組み合わせ
戻り値
正常終了のとき  0以外
エラーのとき               0
備考
この関数は、複数のプロセス間でオブジェクトを共有したいようにするようなときに使う。
この関数を使って取得したハンドルはCloseHandle()関数を使って開放しなければならない。
dwOptionsの定数

DUPLICATE_CLOSE_SOURCE = &H1              コピー元のハンドルをクローズする
                                           (エラー発生しても実行される)
DUPLICATE_SAME_ACCESS = &H2               dwDesireAccessを無視する
                                           (元のアクセス方法と同じになる)