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) と比較して、許可または拒否される権限を決定します。 既存のトークンと同じアクセス権を要求するには、0 を指定します。 呼び出し元に対して有効なすべてのアクセス権を要求するには、MAXIMUM_ALLOWEDを指定します。

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

[in, optional] lpTokenAttributes

新しいトークンのセキュリティ記述子を指定し、子プロセスがトークンを継承できるかどうかを判断する、SECURITY_ATTRIBUTES構造体へのポインター。 lpTokenAttributesNULL の場合、トークンは既定のセキュリティ記述子を取得し、ハンドルを継承できません。 セキュリティ記述子に システム アクセス制御リスト (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 関数を呼び出して、クライアントのセキュリティ コンテキストを持つ 偽装トークン である独自のトークンを取得します。 スレッドは、 DuplicateTokenEx の呼び出しでこの偽装トークンを指定し、TokenPrimary フラグを指定します。 DuplicateTokenEx 関数は、クライアントのセキュリティ コンテキストを持つプライマリ トークンを作成します。

要件

   
サポートされている最小のクライアント Windows XP [デスクトップ アプリ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー securitybaseapi.h (Windows.h を含む)
Library Advapi32.lib
[DLL] Advapi32.dll

関連項目

アクセス制御

基本的なAccess Control関数

CloseHandle

CreateProcessAsUser

DdeImpersonateClient

DuplicateToken

ImpersonateNamedPipeClient

OpenThreadToken

Reverttoself

RpcImpersonateClient

SECURITY_ATTRIBUTES

SECURITY_IMPERSONATION_LEVEL