次の方法で共有


NtOpenThreadTokenEx 関数 (ntifs.h)

NtOpenThreadTokenEx ルーチンは、スレッドに関連付けられているアクセス トークンを開きます。

構文

__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenThreadTokenEx(
  [in]  HANDLE      ThreadHandle,
  [in]  ACCESS_MASK DesiredAccess,
  [in]  BOOLEAN     OpenAsSelf,
  [in]  ULONG       HandleAttributes,
  [out] PHANDLE     TokenHandle
);

パラメーター

[in] ThreadHandle

アクセス トークンを開くスレッドへのハンドル。 ハンドルにはTHREAD_QUERY_INFORMATIONアクセス権が必要です。 NtCurrentThread マクロを使用して、現在のスレッドを指定します。

[in] DesiredAccess

ACCESS_MASK アクセス トークンへの要求されたアクセスの種類を指定する構造体です。 これらの要求されたアクセスの種類は、トークンの随意アクセス制御リスト (DACL) と比較して、許可または拒否されるアクセス権を決定します。

[in] OpenAsSelf

NtOpenThreadTokenEx を呼び出すスレッドのセキュリティ コンテキストに対してアクセス チェック を行うか、呼び出し元スレッドのプロセスのセキュリティ コンテキストに対してアクセス チェックを行うかを指定するブール値。

このパラメーターが FALSE場合、アクセス チェックは呼び出し元スレッドのセキュリティ コンテキストを使用して実行されます。 スレッドがクライアントを偽装している場合、このセキュリティ コンテキストはクライアント プロセスのセキュリティ コンテキストになります。 このパラメーターが TRUE場合、呼び出し元スレッドのプロセスのセキュリティ コンテキストを使用してアクセス チェックが行われます。

[in] HandleAttributes

作成されたハンドルの属性。 現在、OBJ_KERNEL_HANDLEのみがサポートされています。 呼び出し元がシステム プロセス コンテキストで実行されていない場合は、このパラメーターにOBJ_KERNEL_HANDLEを指定する必要があります。

[out] TokenHandle

新しく開かれたアクセス トークンへのハンドルを受け取る呼び出し元によって割り当てられた変数へのポインター。

戻り値

NtOpenThreadTokenEx は、STATUS_SUCCESSまたは適切なエラー状態を返します。 考えられるエラー状態コードは次のとおりです。

リターン コード 形容
STATUS_ACCESS_DENIED
ThreadHandle にTHREAD_QUERY_INFORMATIONアクセス権がありませんでした。
STATUS_CANT_OPEN_ANONYMOUS クライアントが SecurityAnonymous 偽装レベルを要求しました。 ただし、匿名トークンを開くことはできません。 詳細については、SECURITY_IMPERSONATION_LEVELを参照してください。
STATUS_INVALID_HANDLE ThreadHandle は有効なハンドルではありません。
STATUS_INVALID_PARAMETER 指定した HandleAttributes にOBJ_KERNEL_HANDLEが含まれていませんでした。
STATUS_NO_TOKEN 現在クライアントを偽装していないスレッドに関連付けられているトークンを開こうとしました。
STATUS_OBJECT_TYPE_MISMATCH ThreadHandle はスレッド ハンドルではありません。

備考

NtOpenThreadTokenEx スレッドに関連付けられているアクセス トークンを開き、そのトークンのハンドルを返します。

OpenAsSelf パラメーターを使用すると、クライアント プロセスが列挙型の SecurityIdentification 偽装レベルを指定した場合に、サーバー プロセスでクライアント プロセスのアクセス トークンを開 SECURITY_IMPERSONATION_LEVEL。 このパラメーターがないと、SecurityIdentification 偽装レベルを使用してエグゼクティブ レベルのオブジェクトを開くことができず、呼び出し元プロセスはクライアントのセキュリティ コンテキストを使用してクライアントのアクセス トークンを開くことができません。

NtOpenThreadTokenEx 呼び出して取得したハンドルは、最終的に NtClose呼び出すことによって解放する必要があります。

システム プロセス以外のプロセス コンテキストで実行されるドライバー ルーチンは、NtOpenThreadTokenExの HandleAttributes パラメーターのOBJ_KERNEL_HANDLE属性 設定する必要があります。 これにより、NtOpenThreadTokenEx によって返されるハンドルの使用が、カーネル モードで実行されているプロセスに制限されます。 それ以外の場合は、ドライバーが実行されているコンテキスト内のプロセスによってハンドルにアクセスできます。

セキュリティとアクセス制御の詳細については、ドライバー開発者向けの Windows セキュリティ モデルの と、Windows SDK のこれらのトピックに関するドキュメントを参照してください。

カーネル モード ドライバーからの呼び出しの場合、Windows ネイティブ システム サービス ルーチンの NtXxx および ZwXxx バージョンは、入力パラメーターを処理および解釈する方法で動作が異なる場合があります。 ルーチンの NtXxxZwXxx バージョンの間の関係の詳細については、「ネイティブ システム サービス ルーチンの Nt および Zw バージョンの使用 を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows XP
ターゲット プラットフォーム の 万国
ヘッダー ntifs.h (Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 を する HwStorPortProhibitedDIs、PowerIrpDDis

関連項目

ACCESS_MASK

ACL

PsDereferencePrimaryToken の

SECURITY_IMPERSONATION_LEVEL

ZwClose

ZwOpenProcessTokenEx