[英]Windows Impersonation and TPL
我正在使用WindowsIdentity.Impersonate
以便从远程注册表中读取。 但是,实际的代码正在读取位于Task
委托中的注册表,因此它可能在不同的线程上运行。 我的问题是模拟用户界面线程并在线程池中执行提升的工作是否合法?
更新:
// get userHandle from LogonUser(...)
Task task = Task.Run(() =>
{
using (impersonationContext = WindowsIdentity.Impersonate(userHandle))
{
// Do stuff here
if (impersonationContext != null)
{
impersonationContext.Undo();
}
}
}
由于您使用的是TPL,.NET Framework 4.0中提供了TPL。 WindowsIdentity
应该自动流动,除非您明确禁止流动。
在.NET Framework版本1.0和1.1中,
WindowsIdentity
不会跨任何用户定义的异步点。 在.NET Framework 2.0版中,没有一个ExecutionContext
对象,该对象包含有关当前正在执行的线程的信息,并将其流过应用程序域内的异步点。WindowsIdentity
也是流经异步点的信息的一部分,这意味着,如果退出模拟上下文,它也将流动。 资源
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.