次の方法で共有


DuplicateTokenEx 関数 (securitybaseapi.h)

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

構文

BOOL DuplicateTokenEx(
  [in]           HANDLE                       hExistingToken,
  [in]           DWORD                        dwDesiredAccess,
  [in, optional] LPSECURITY_ATTRIBUTES        lpTokenAttributes,
  [in]           SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
  [in]           TOKEN_TYPE                   TokenType,
  [out]          PHANDLE                      phNewToken
);

パラメーター

[in] hExistingToken

TOKEN_DUPLICATE アクセスで開かれたアクセス トークンへのハンドル。

[in] dwDesiredAccess

新しいトークンに対して要求されたアクセス権を指定します。 DuplicateTokenEx 関数は、要求されたアクセス権を既存のトークンの 随意アクセス制御リスト (DACL) と比較して、許可または拒否される権限を決定します。 既存のトークンと同じアクセス権を要求するには、ゼロを指定します。 呼び出し元に対して有効なすべてのアクセス権を要求するには、MAXIMUM_ALLOWEDを指定します。

アクセス トークンのアクセス権の一覧については、「Access-Token オブジェクトのアクセス権」を参照してください。

[in, optional] lpTokenAttributes

新しいトークンの セキュリティ記述子 を指定し、子プロセスがトークンを継承できるかどうかを判断する SECURITY_ATTRIBUTES 構造体へのポインター。 lpTokenAttributes が NULL場合、トークンは既定のセキュリティ記述子を取得し、ハンドルを継承できません。 セキュリティ記述子に システム アクセス制御リスト (SACL) が含まれている場合、トークンは dwDesiredAccessで要求されていなくても、アクセス権 ACCESS_SYSTEM_SECURITY取得します。

新しいトークンのセキュリティ記述子で所有者を設定するには、呼び出し元のプロセス トークンに SE_RESTORE_NAME 特権が設定されている必要があります。

[in] ImpersonationLevel

新しいトークンの偽装レベルを示す SECURITY_IMPERSONATION_LEVEL 列挙体の値を指定します。

[in] TokenType

TOKEN_TYPE 列挙体から次のいずれかの値を指定します。

価値 意味
TokenPrimary
新しいトークンは、CreateProcessAsUser 関数で使用できる プライマリ トークン です。
TokenImpersonation
新しいトークンは偽装トークンです。

[out] phNewToken

新しいトークンを受け取る HANDLE 変数へのポインター。

新しいトークンの使用が完了したら、CloseHandle 関数を呼び出してトークン ハンドルを閉じます。

戻り値

関数が成功した場合、関数は 0 以外の値を返します。

関数が失敗すると、0 が返されます。 拡張エラー情報を取得するには、GetLastError呼び出します。

備考

DuplicateTokenEx 関数を使用すると、CreateProcessAsUser 関数で使用できる プライマリ トークン を作成できます。 これにより、クライアントを偽装しているサーバー アプリケーションは、クライアントの セキュリティ コンテキストを持つプロセスを作成できます。 DuplicateToken 関数は偽装トークンのみを作成でき、CreateProcessAsUser有効ではありません。

DuplicateTokenEx 使用して、プライマリ トークンを作成する一般的なシナリオを次に示します。 サーバー アプリケーションは、ImpersonateNamedPipeClientなど、偽装関数のいずれかを呼び出してクライアントを偽装するスレッドを作成します。 その後、偽装スレッドは OpenThreadToken 関数を呼び出して独自のトークンを取得します。これは、クライアントのセキュリティ コンテキストを持つ 偽装トークン です。 スレッドは、TokenPrimary フラグを指定して、DuplicateTokenEx呼び出しでこの偽装トークンを指定します。 DuplicateTokenEx 関数は、クライアントのセキュリティ コンテキストを持つ プライマリ トークン を作成します。

必要条件

要件 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリ |UWP アプリ]
サポートされる最小サーバー Windows Server 2003 [デスクトップ アプリ |UWP アプリ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー securitybaseapi.h (Windows.h を含む)
ライブラリ Advapi32.lib
DLL Advapi32.dll

関連項目

アクセス制御の

基本的なアクセス制御関数の

CloseHandle の

CreateProcessAsUser の

DdeImpersonateClient の

DuplicateToken の

ImpersonateNamedPipeClient

OpenThreadToken

RevertToSelf

RpcImpersonateClient の

SECURITY_ATTRIBUTES

SECURITY_IMPERSONATION_LEVEL