DuplicateTokenEx

既存のトークンを複製して新しいアクセストークンを作成する。この関数は、プライマリトークンまたは偽装トークンのいずれかを作成できる。

DuplicateTokenEx hExistingToken, dwDesiredAccess, lpTokenAttributes, ImpersonationLevel, TokenType, phNewToken

hExistingToken : [intptr] TOKEN_DUPLICATE アクセスで開いたアクセストークンへのハンドル。
dwDesiredAccess : [int] 新しいトークンに要求するアクセス権を指定する。DuplicateTokenEx 関数は要求されたアクセス権を既存のトークンの任意アクセス制御リスト (DACL) と比較して、どの権利が許可または拒否されるかを判定する。既存のトークンと同じアクセス権を要求するにはゼロを指定する。呼び出し側に対して有効なすべてのアクセス権を要求するには MAXIMUM_ALLOWED を指定する。
lpTokenAttributes : [var] 新しいトークンのセキュリティ記述子を指定し、子プロセスがそのトークンを継承できるかどうかを決定する SECURITY_ATTRIBUTES 構造体へのポインタ。lpTokenAttributes が NULL の場合、トークンは既定のセキュリティ記述子を取得し、ハンドルは継承できない。セキュリティ記述子にシステム アクセス制御リスト (SACL) が含まれている場合、dwDesiredAccess で要求されていなくてもトークンには ACCESS_SYSTEM_SECURITY アクセス権が与えられる。新しいトークンのセキュリティ記述子に所有者を設定するには、呼び出し元プロセスのトークンが SE_RESTORE_NAME 特権を設定している必要がある。
ImpersonationLevel : [int] 新しいトークンの偽装レベルを示す SECURITY_IMPERSONATION_LEVEL 列挙の値を指定する。
TokenType : [int] 
phNewToken : [intptr] 新しいトークンを受け取る HANDLE 変数へのポインタ。新しいトークンの使用が終わったら、CloseHandle 関数を呼び出してトークンハンドルを閉じる。

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

解説

既存のトークンを複製して新しいアクセストークンを作成する。この関数は、プライマリトークンまたは偽装トークンのいずれかを作成できる。

[戻り値]
関数が成功した場合はゼロ以外の値を返す。失敗した場合はゼロを返す。拡張エラー情報を取得するには GetLastError を呼び出す。

[備考]
DuplicateTokenEx 関数を使用すると、CreateProcessAsUser
関数で使用できるプライマリトークンを作成できる。これにより、クライアントを偽装しているサーバアプリケーションが、クライアントのセキュリティコンテキストを持つプロセスを作成できる。DuplicateToken
関数は偽装トークンしか作成できず、これは CreateProcessAsUser には無効である点に注意する。以下は
DuplicateTokenEx
を使用してプライマリトークンを作成する典型的なシナリオである。サーバアプリケーションが、ImpersonateNamedPipeClient
などの偽装関数のいずれかを呼び出すスレッドを作成してクライアントを偽装する。偽装中のスレッドは OpenThreadToken
関数を呼び出して自身のトークンを取得する。これはクライアントのセキュリティコンテキストを持つ偽装トークンである。スレッドはこの偽装トークンを
DuplicateTokenEx の呼び出しで指定し、TokenPrimary フラグを指定する。DuplicateTokenEx
関数はクライアントのセキュリティコンテキストを持つプライマリトークンを作成する。

情報

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