分享方式:


<legacyImpersonationPolicy> 元素

指定 Windows 識別不會流經非同步點,而不論目前執行緒上執行內容的流程設定為何。

<設定>
  <執行階段>
    <legacyImpersonationPolicy>

Syntax

<legacyImpersonationPolicy
   enabled="true|false"/>  

屬性和項目

下列章節說明屬性、子元素和父元素。

屬性

屬性 描述
enabled 必要屬性。

指示不論目前線程上的 ExecutionContext 流程設定為何,WindowsIdentity 都不會流向非同步點。

啟用屬性

描述
false WindowsIdentity 會根據目前線程的 ExecutionContext 流程設定流向非同步點。 此為預設值。
true 不論目前線程上的 ExecutionContext 流程設定為何,WindowsIdentity 都不會流向非同步點。

子元素

無。

父項目

元素 Description
configuration 通用語言執行平台和 .NET Framework 應用程式所使用之每個組態檔中的根項目。
runtime 包含有關組件繫結和記憶體回收的資訊。

備註

在 .NET Framework 1.0 和 1.1 版中 WindowsIdentity ,不會流向任何使用者定義的非同步點。 從 .NET Framework 2.0 版開始,有一個 ExecutionContext 物件包含目前執行中線程的相關資訊,而且它會流向應用程式域內的非同步點。 WindowsIdentity 包含在此執行內容,因此也會流經非同步點,這表示如果模擬內容存在,也同樣會流動。

從 .NET Framework 2.0 開始,您可以使用 <legacyImpersonationPolicy> 元素來指定 WindowsIdentity 不會流向非同步點的 。

注意

通用語言執行平台 (CLR) 能感知到只使用受控程式碼執行的模擬作業,而無法感知在受控程式碼外部執行的模擬作業,例如透過平台叫用非受控程式碼,或透過直接呼叫 Win32 函式。 只有受控 WindowsIdentity 物件可以流經非同步點,除非元素 alwaysFlowImpersonationPolicy 已設定為 true (<alwaysFlowImpersonationPolicy enabled="true"/>)。 將 alwaysFlowImpersonationPolicy 元素設定為 true 會指定無論模擬的執行方式為何,Windows 身分識別一律會流經非同步點。 如需非受控模擬跨非同步點流動的詳細資訊,請參閱 <alwaysFlowImpersonationPolicy> 元素

您可以透過另外兩種方式來改變此預設行為:

  1. 以每個執行緒為基礎的受控程式碼中。

    您可以使用 ExecutionContext.SuppressFlowSecurityContext.SuppressFlowWindowsIdentitySecurityContext.SuppressFlow 方法來修改 ExecutionContextSecurityContext 設定,以根據每個執行緒隱藏流程。

  2. 在呼叫非受控裝載介面以載入通用語言執行平台 (CLR) 時。

    如果使用非受控裝載介面 (而不是簡單的受控可執行檔) 來載入 CLR,您可以在 CorBindToRuntimeEx Function 函式呼叫指定特殊旗標。 若要啟用整個程式的相容性模式,請將 CorBindToRuntimeEx Functionflags 參數設定為 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 身分識別的舊版行為。

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

另請參閱