<legacyImpersonationPolicy> 元素
指定 Windows 标识不流经异步点,而不考虑当前线程上执行上下文的流设置。
configuration
runtime
<legacyImpersonationPolicy>
语法
<legacyImpersonationPolicy
enabled="true|false"/>
特性和元素
下列各节描述了特性、子元素和父元素。
特性
属性 | 描述 |
---|---|
enabled |
必需的特性。 指定无论当前线程上的 ExecutionContext流设 置如何,WindowsIdentity 都不会跨异步点流动。 |
enabled 特性
值 | 说明 |
---|---|
false |
根据当前线程的 ExecutionContext 流设置,WindowsIdentity 可以跨异步点流动。 这是默认值。 |
true |
无论当前线程的 ExecutionContext 流设置如何,WindowsIdentity 都不会跨异步点流动。 |
子元素
无。
父元素
元素 | 说明 |
---|---|
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 函数的
flags
参数设置为 STARTUP_LEGACY_IMPERSONATION。
有关详细信息,请参阅 <alwaysFlowImpersonationPolicy >元素。
配置文件
在 .NET Framework 应用程序中,此元素只能在应用程序配置文件中使用。
对于 ASP.NET 应用程序,可以在 <Windows 文件夹>\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>