繁体   English   中英

Windows模拟和TPL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM