NtOpenProcessToken 関数 (ntifs.h)

NtOpenProcessToken ルーチンは、プロセスに関連付けられているアクセス トークンを開き、そのトークンへのアクセスに使用できるハンドルを返します。

構文

__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenProcessToken(
  [in]  HANDLE      ProcessHandle,
  [in]  ACCESS_MASK DesiredAccess,
  [out] PHANDLE     TokenHandle
);

パラメーター

[in] ProcessHandle

アクセス トークンを開くプロセスを処理します。 ハンドルにはPROCESS_QUERY_INFORMATIONアクセス権が必要です。 Ntddk.h で定義されている NtCurrentProcess マクロを使用して、現在のプロセスを指定します。

[in] DesiredAccess

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

[out] TokenHandle

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

戻り値

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

リターン コード 説明
STATUS_ACCESS_DENIED ProcessHandle にPROCESS_QUERY_INFORMATIONアクセス権がありませんでした。
STATUS_INSUFFICIENT_RESOURCES 新しいトークン ハンドルを割り当てませんでした。
STATUS_INVALID_HANDLE ProcessHandle が有効なハンドルではありません。
STATUS_OBJECT_TYPE_MISMATCH ProcessHandle はプロセス ハンドルではありません。
STATUS_PRIVILEGE_NOT_HELD 呼び出し元には、DesiredAccess パラメーターで指定されたアクセス権を持つトークン ハンドルを作成するために必要な特権 (SeSecurityPrivilege) がありません。
STATUS_QUOTA_EXCEEDED プロセスのメモリ クォータは、トークン ハンドルを割り当てるのに十分ではありません。
STATUS_UNSUCCESSFUL トークン ハンドルを作成できませんでした。

注釈

アクセス トークン ハンドルの属性を指定するには、代わりに NtOpenProcessTokenEx を使用します。

ハンドルには、ドライバーが実行されているコンテキストのプロセスからアクセスできます。

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

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

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

要件

要件
Header ntifs.h
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL PASSIVE_LEVEL

こちらもご覧ください

ACCESS_MASK

ACL

PsDereferencePrimaryToken

NtClose

NtOpenProcessTokenEx

NtOpenThreadTokenEx