<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> 元素。
您可以透過另外兩種方式來改變此預設行為:
以每個執行緒為基礎的受控程式碼中。
您可以使用 ExecutionContext.SuppressFlow、SecurityContext.SuppressFlowWindowsIdentity 或 SecurityContext.SuppressFlow 方法來修改 ExecutionContext 和 SecurityContext 設定,以根據每個執行緒隱藏流程。
在呼叫非受控裝載介面以載入通用語言執行平台 (CLR) 時。
如果使用非受控裝載介面 (而不是簡單的受控可執行檔) 來載入 CLR,您可以在 CorBindToRuntimeEx Function 函式呼叫指定特殊旗標。 若要啟用整個程式的相容性模式,請將 CorBindToRuntimeEx Function 的
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 身分識別的舊版行為。
<configuration>
<runtime>
<legacyImpersonationPolicy enabled="true"/>
</runtime>
</configuration>