次の方法で共有


RpcImpersonateClient 関数 (rpcdce.h)

クライアント リモート プロシージャ 呼び出しを処理しているサーバー スレッドは 、RpcImpersonateClient 関数を呼び出して、アクティブなクライアントを偽装できます。

構文

RPC_STATUS RpcImpersonateClient(
  RPC_BINDING_HANDLE BindingHandle
);

パラメーター

BindingHandle

クライアントへのバインドを表すサーバー上のバインド ハンドル。 サーバーは、このハンドルによって示されるクライアントを偽装します。 値 0 を指定すると、サーバーは、このサーバー スレッドによって処理されるクライアントを偽装します。

戻り値

説明
RPC_S_OK
呼び出しは成功しました。
RPC_S_NO_CALL_ACTIVE
このサーバー スレッドでアクティブなクライアントはありません。
RPC_S_CANNOT_SUPPORT
この関数は、オペレーティング システム、トランスポート、またはこのセキュリティ サブシステムではサポートされていません。
RPC_S_INVALID_BINDING
バインド ハンドルが無効です。
RPC_S_WRONG_KIND_OF_BINDING
これは、操作のバインドの種類が間違っていました。
RPC_S_NO_CONTEXT_AVAILABLE
サーバーには、クライアントを偽装する権限がありません。
 
メモ 有効なエラー コードの一覧については、「 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

関連項目

クライアントの権限借用

RpcRevertToSelf