RpcImpersonateClient 関数 (rpcdce.h)
クライアント リモート プロシージャ 呼び出しを処理しているサーバー スレッドは 、RpcImpersonateClient 関数を呼び出して、アクティブなクライアントを偽装できます。
構文
RPC_STATUS RpcImpersonateClient(
RPC_BINDING_HANDLE BindingHandle
);
パラメーター
BindingHandle
クライアントへのバインドを表すサーバー上のバインド ハンドル。 サーバーは、このハンドルによって示されるクライアントを偽装します。 値 0 を指定すると、サーバーは、このサーバー スレッドによって処理されるクライアントを偽装します。
戻り値
値 | 説明 |
---|---|
|
呼び出しは成功しました。 |
|
このサーバー スレッドでアクティブなクライアントはありません。 |
|
この関数は、オペレーティング システム、トランスポート、またはこのセキュリティ サブシステムではサポートされていません。 |
|
バインド ハンドルが無効です。 |
|
これは、操作のバインドの種類が間違っていました。 |
|
サーバーには、クライアントを偽装する権限がありません。 |
メモ 有効なエラー コードの一覧については、「 RPC 戻り値」を参照してください。
解説
マルチスレッド アプリケーションでは、 RpcImpersonateClient の呼び出しが別のクライアント スレッドへのハンドルを使用している場合は、そのスレッドへのハンドルを使用して RpcRevertToSelfEx を呼び出して偽装を終了する必要があります。
この関数の呼び出し元 (RPC サーバー) が SeImpersonatePrivilege 特権を持っているかどうかを判断するために、チェック偽装するすべての関数。 呼び出し元に SeImpersonatePrivilege がある場合、または認証された ID がこの関数の呼び出し元の ID と同じ場合は、要求された偽装が許可されます。 それ以外の場合、偽装は識別レベルでのみ成功します。
Windows XP/2000/NT: SeImpersonatePrivilege 特権は、Windows XP Service Pack 2 (SP2) までサポートされません。
セキュリティに関する備考
RpcImpersonateClient の呼び出しが何らかの理由で失敗した場合、クライアント接続は偽装されず、クライアント要求はプロセスのセキュリティ コンテキストで行われます。 プロセスが LocalSystem などの高い特権を持つアカウントとして実行されている場合、または管理グループのメンバーとして実行されている場合、ユーザーは許可されないアクションを実行できる可能性があります。 したがって、呼び出しの戻り値を常にチェックすることが重要であり、失敗した場合はエラーを発生させます。クライアント要求の実行を続行しないでください。要件
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | rpcdce.h |
Library | Rpcrt4.lib |
[DLL] | Rpcrt4.dll |