DuplicateHandle

オブジェクトハンドルを複製する。

DuplicateHandle hSourceProcessHandle, hSourceHandle, hTargetProcessHandle, lpTargetHandle, dwDesiredAccess, bInheritHandle, dwOptions

hSourceProcessHandle : [intptr] 複製するハンドルを持つプロセスへのハンドル。
hSourceHandle : [intptr] 複製するハンドル。これはソースプロセスのコンテキストで有効なオープンオブジェクトハンドルである。複製可能なハンドルを持つオブジェクトのリストについては、以下の Remarks セクションを参照。
hTargetProcessHandle : [intptr] 複製されたハンドルを受け取るプロセスへのハンドル。ハンドルは PROCESS_DUP_HANDLE アクセス権を持っていなければならない。このパラメータはオプションであり、_Options_ に **DUPLICATE_CLOSE_SOURCE** フラグが設定されている場合は NULL を指定できる。
lpTargetHandle : [intptr] 複製ハンドルを受け取る変数へのポインタ。このハンドル値は対象プロセスのコンテキストで有効である。hSourceHandle が GetCurrentProcess または GetCurrentThread から返された擬似ハンドルである場合、DuplicateHandle はそれをそれぞれプロセスまたはスレッドへの実ハンドルに変換する。lpTargetHandle が NULL の場合、関数はハンドルを複製するが、複製ハンドルの値を呼び出し側に返さない。この動作はこの関数の以前のバージョンとの後方互換性のためにのみ存在する。対象プロセスが終了するまでシステムリソースを失うため、この機能を使用すべきではない。_hTargetProcessHandle_ が **NULL** の場合、このパラメータは無視される。
dwDesiredAccess : [int] 新しいハンドルに要求するアクセス権。各オブジェクト型に指定できるフラグについては、以下の Remarks セクションを参照。dwOptions パラメータが DUPLICATE_SAME_ACCESS フラグを指定している場合、このパラメータは無視される。それ以外の場合、指定できるフラグは複製対象のハンドルのオブジェクトの種類に依存する。_hTargetProcessHandle_ が **NULL** の場合、このパラメータは無視される。
bInheritHandle : [int] ハンドルが継承可能かどうかを示す変数。TRUE の場合、複製されたハンドルは対象プロセスから作成された新しいプロセスに継承できる。FALSE の場合、新しいハンドルは継承できない。_hTargetProcessHandle_ が **NULL** の場合、このパラメータは無視される。
dwOptions : [int] 

(プラグイン / モジュール : kernel32.dll)

解説

オブジェクトハンドルを複製する。

[戻り値]
関数が成功した場合、戻り値は 0 以外である。関数が失敗した場合、戻り値は 0 となる。拡張エラー情報を取得するには
GetLastError を呼ぶ。

[備考]

複製されたハンドルは元のハンドルと同じオブジェクトを参照する。したがって、オブジェクトへの変更は両方のハンドルを通じて反映される。たとえばファイルハンドルを複製した場合、現在のファイル位置は両方のハンドルで常に同じである。ファイルハンドルが異なるファイル位置を持つようにするには、CreateFile
関数を使って同じファイルへのアクセスを共有するファイルハンドルを作成する。DuplicateHandle
はソースプロセスまたは対象プロセス(あるいはソースと対象の両方であるプロセス)のいずれからでも呼び出せる。たとえばプロセスは
DuplicateHandle
を使って、継承可能なハンドルの非継承複製、または元のハンドルとは異なるアクセス権を持つハンドルを作成できる。ソースプロセスは
GetCurrentProcess 関数を使って自身へのハンドルを取得する。このハンドルは擬似ハンドルだが、DuplicateHandle
はそれを実プロセスハンドルに変換する。対象プロセスのハンドルを取得するには、ソースプロセスにプロセス識別子を伝えるためのプロセス間通信(たとえば名前付きパイプや共有メモリ)を使う必要がある場合がある。ソースプロセスは、この識別子を
OpenProcess 関数で使って対象プロセスへのハンドルを取得できる。DuplicateHandle
を呼ぶプロセスが対象プロセスでもない場合、ソースプロセスは複製ハンドルの値を対象プロセスに渡すためにプロセス間通信を使わなければならない。DuplicateHandle
は 32bit プロセスと 64bit
プロセスの間でハンドルを複製するために使用できる。結果のハンドルは対象プロセスで動作するように適切なサイズになる。詳細は Process
Interoperability を参照。DuplicateHandle は次の種類のオブジェクトへのハンドルを複製できる。
(以下省略)

情報

プラグイン / モジュールkernel32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_kernel32_gen2.hs