<legacyImpersonationPolicy> 要素

Windows ID が、現在のスレッドの実行コンテキストのフロー設定に関係なく、非同期ポイント間でフローしないことを指定します。

<configuration>
  <runtime>
    <legacyImpersonationPolicy>

構文

<legacyImpersonationPolicy
   enabled="true|false"/>  

属性および要素

以降のセクションでは、属性、子要素、および親要素について説明します。

属性

属性 説明
enabled 必須の属性です。

WindowsIdentity が、現在のスレッドの ExecutionContext フロー設定に関係なく、非同期ポイント間でフローしないことを指定します。

enabled 属性

[値] 説明
false WindowsIdentity は、現在のスレッドの ExecutionContext フロー設定に応じて、非同期ポイント間でフローします。 既定値です。
true WindowsIdentity は、現在のスレッドの ExecutionContext フロー設定に関係なく、非同期ポイント間でフローしません。

子要素

なし。

親要素

要素 説明
configuration 共通言語ランタイムおよび .NET Framework アプリケーションで使用されるすべての構成ファイルのルート要素です。
runtime アセンブリのバインディングとガベージ コレクションに関する情報が含まれています。

解説

.NET Framework Version 1.0 および 1.1 では、WindowsIdentity はユーザー定義の非同期ポイント間をフローしません。 .NET Framework Version 2.0 以降では、現在実行中のスレッドに関する情報を格納する ExecutionContext オブジェクトがあり、アプリケーション ドメイン内の非同期ポイント間をフローします。 WindowsIdentity はこの実行コンテキストに含まれているため、非同期ポイント間でもフローします。つまり、権限借用コンテキストが存在する場合は、同様にフローが行われます。

.NET Framework 2.0 以降では、<legacyImpersonationPolicy> 要素を使用して、WindowsIdentity が非同期ポイント間でフローしないように指定できます。

注意

共通言語ランタイム (CLR) は、マネージド コードのみを使用して実行される偽装操作を認識しますが、アンマネージド コードへのプラットフォーム呼び出し、Win32 関数への直接呼び出しなどによる、マネージド コードの外部で実行される偽装は認識しません。 alwaysFlowImpersonationPolicy 要素が true に設定されていない限り (<alwaysFlowImpersonationPolicy enabled="true"/>)、非同期ポイント間でフローできるのは管理オブジェクト WindowsIdentity だけです。 alwaysFlowImpersonationPolicy 要素を true に設定すると、偽装の実行方法に関係なく、Windows ID が常に非同期ポイント間でフローするように指定されます。 非同期ポイント間でアンマネージ偽装をフローする方法の詳細については、「<alwaysFlowImpersonationPolicy> 要素」を参照してください。

この既定の動作は、次の 2 つの方法で変更できます。

  1. マネージド コード内で、スレッド単位で行う場合。

    ExecutionContext.SuppressFlowSecurityContext.SuppressFlowWindowsIdentity、または SecurityContext.SuppressFlow メソッドを使用して ExecutionContext 設定および SecurityContext 設定を変更することで、スレッド単位でフローを抑制できます。

  2. アンマネージド ホスティング インターフェイスを呼び出して、共通言語ランタイム (CLR) を読み込む場合。

    (単純なマネージド実行可能ファイルではなく) アンマネージド ホスティング インターフェイスを使用して CLR を読み込む場合は、CorBindToRuntimeEx 関数の呼び出しで特別なフラグを指定できます。 プロセス全体で互換モードを有効にするには、CorBindToRuntimeEx 関数flags パラメーターを STARTUP_LEGACY_IMPERSONATION に設定します。

詳細については、「<alwaysFlowImpersonationPolicy> 要素」を参照してください。

構成ファイル

.NET Framework アプリケーションでは、この要素はアプリケーション構成ファイルでのみ使用できます。

ASP.NET アプリケーションの場合は、<Windows Folder>\Microsoft.NET\Framework\vx.x.xxxx ディレクトリにある aspnet.config ファイルで偽装フローを構成できます。

ASP.NET では、既定で、次の構成設定を使用して、aspnet.config ファイルで偽装フローが無効になっています。

<configuration>  
   <runtime>  
      <legacyImpersonationPolicy enabled="true"/>  
      <alwaysFlowImpersonationPolicy enabled="false"/>  
   </runtime>  
</configuration>  

ASP.NET では、代わりに偽装のフローを許可する場合は、次の構成設定を明示的に使用する必要があります。

<configuration>  
   <runtime>  
      <legacyImpersonationPolicy enabled="false"/>  
      <alwaysFlowImpersonationPolicy enabled="true"/>  
   </runtime>  
</configuration>  

次の例では、非同期ポイント間で Windows ID がフローしない従来の動作を指定する方法を示します。

<configuration>  
   <runtime>  
      <legacyImpersonationPolicy enabled="true"/>  
   </runtime>  
</configuration>  

関連項目