次の方法で共有


SeImpersonateClientEx 関数 (ntifs.h)

SeImpersonateClientEx ルーチンにより、スレッドがユーザーを偽装します。

構文

NTSTATUS SeImpersonateClientEx(
  [in]           PSECURITY_CLIENT_CONTEXT ClientContext,
  [in, optional] PETHREAD                 ServerThread
);

パラメーター

[in] ClientContext

ユーザーのセキュリティ クライアント コンテキストへのポインター。

[in, optional] ServerThread

ユーザーを偽装するスレッドへのポインター。 指定しない場合は、呼び出し元のスレッドが使用されます。

戻り値

SeImpersonateClientEx は、次のような適切な NTSTATUS 値を返します。

リターン コード 形容
STATUS_SUCCESS
偽装の試行が成功しました。
STATUS_ACCESS_DENIED
ServerThread パラメーターで指定されたスレッドには、ClientContext パラメーターで指定されているセキュリティ クライアント コンテキストを持つユーザーを偽装するための十分なアクセス権がありませんでした。
STATUS_NO_MEMORY
SeImpersonateClientEx、偽装情報構造にメモリを割り当てるときにプール割り当てエラーが発生しました。

備考

SeImpersonateClientEx は、スレッドがユーザーを偽装するために使用されます。 ClientContext のクライアント セキュリティ コンテキストは、最新であると見なされます。

信頼されていないユーザー スレッドの特権状態を上げることは非常に安全ではありません (たとえば、ユーザーのスレッドを取得し、LocalSystem を偽装します)。 信頼されていないユーザー スレッドに特権が発生した場合、ユーザーは昇格後にスレッド トークンを取得し、システム全体のセキュリティを無効にできます。

より高い特権の状態が必要な場合は、タスクを作業キューにディスパッチする必要があります。タスクはシステム ワーカー スレッドで安全に処理できます。 この方法では、偽装は必要ありません。

ユーザーの偽装を終了するには、SeStopImpersonatingClient ルーチンを呼び出します。

PsImpersonateClient ルーチンを使用すると、サーバー スレッドでクライアントを偽装できます。

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

必要条件

要件 価値
サポートされる最小クライアント Windows 2000
ターゲット プラットフォーム 万国
ヘッダー ntifs.h (Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

関連項目

PsImpersonateClient

SeCreateClientSecurity

SeCreateClientSecurityFromSubjectContext

SeStopImpersonatingClient