我使用advapi32.dll的logonuser方法通过我们的网络访问数据
我知道它将线程的用户改为我给它的信息,但我想知道是否有办法扭转它。
我想访问数据,然后返回本地用户凭据。
答案 0 :(得分:7)
前段时间我创建了a small impersonator class。
基本上,您将代码包装在using
块内的另一个用户下执行:
using ( new Impersonator( "myUsername", "myDomainname", "myPassword" ) )
{
...
<code that executes under the new context>
...
}
为我的项目工作得非常好。
答案 1 :(得分:1)
您可以拨打RevertToSelf
。
也就是说,为模拟任务启动专用线程,并在模拟工作完成时终止它,可以说。这将隔离模拟工作,以便在主线程上处理任何回调或消息时,它们将在主体用户而非模拟用户的上下文中执行。事实上,我越想到这一点就越强烈,我认为专用线程就是解决方案。