次の方法で共有


偽装レベル (承認)

SECURITY_IMPERSONATION_LEVEL 列挙は、サーバーがクライアントのコンテキストで実行できる操作を決定する 4 つの偽装レベルを定義します。

偽装レベル 形容
SecurityAnonymous サーバーは、クライアントを偽装または識別できません。
SecurityIdentification サーバーはクライアントの ID と特権を取得できますが、クライアントを偽装することはできません。
SecurityImpersonation サーバーは、ローカル システムでクライアントのセキュリティ コンテキストを偽装できます。
SecurityDelegation サーバーは、リモート システムでクライアントのセキュリティ コンテキストを偽装できます。

 

名前付きパイプ、RPC、または DDE 接続のクライアントは、偽装レベルを制御できます。 たとえば、名前付きパイプ クライアントは、CreateFile 関数を呼び出して、名前付きパイプへのハンドルを開き、サーバーの偽装レベルを指定できます。

名前付きパイプ、RPC、または DDE 接続がリモートの場合、偽装レベルを設定するために CreateFile渡されるフラグは無視されます。 この場合、クライアントの偽装レベルは、サーバーによって有効になっている偽装レベルによって決まります。このレベルは、ディレクトリ サービス内のサーバーのアカウントのフラグによって設定されます。 たとえば、サーバーで委任が有効になっている場合、CreateFile 渡されたフラグで識別偽装レベルを指定 場合でも、クライアントの偽装レベルも委任に設定されます。

DDE クライアントは、権限借用レベルを指定するために、SECURITY_QUALITY_OF_SERVICE 構造体と共に DdeSetQualityOfService 関数を使用します。 SecurityImpersonation レベルは、名前付きパイプ、RPC、および DDE サーバーの既定値です。 ImpersonateSelf、DuplicateToken、および DuplicateTokenEx関数すると、呼び出し元は偽装レベルを指定できます。 GetTokenInformation 関数を使用して、アクセス トークンの偽装レベルを取得します。

SecurityImpersonation レベルでは、スレッドのほとんどのアクションは、スレッドを所有する プロセスプライマリ トークン ではなく、スレッドの 偽装トークン のセキュリティ コンテキストで発生します。 たとえば、偽装スレッドがセキュリティ保護可能なオブジェクト を開いた場合、システムは偽装トークンを使用してスレッドのアクセスを確認します。 同様に、偽装スレッドが新しいオブジェクトを作成する場合 (たとえば、CreateFile 関数を呼び出すことによって)、新しいオブジェクトの所有者は、クライアントの アクセス トークンの既定の所有者になります。

ただし、システムは、次の状況で呼び出し元スレッドの偽装トークンではなく、プロセスのプライマリ トークンを使用します。

  • 偽装スレッドが CreateProcess 関数を呼び出すと、新しいプロセスは常にプロセスのプライマリ トークンを継承します。
  • LogonUser 関数など、SE_TCB_NAME特権を必要とする関数の場合、システムは常にプロセスのプライマリ トークン内の特権をチェックします。
  • ObjectOpenAuditAlarm 関数など、SE_AUDIT_NAME特権を必要とする関数の場合、システムは常にプロセスのプライマリ トークン内の特権をチェックします。
  • OpenThreadToken 関数の呼び出しでは、スレッドは、関数が偽装トークンまたはプライマリ トークンを使用して、要求されたアクセス権を付与するかどうかを決定するかどうかを指定できます。