在C#上登录后注销

时间:2011-10-03 09:30:25

标签: c# .net dllimport impersonation advapi32

我使用advapi32.dll的logonuser方法通过我们的网络访问数据 我知道它将线程的用户改为我给它的信息,但我想知道是否有办法扭转它。
我想访问数据,然后返回本地用户凭据。

2 个答案:

答案 0 :(得分:7)

前段时间我创建了a small impersonator class

基本上,您将代码包装在using块内的另一个用户下执行:

using ( new Impersonator( "myUsername", "myDomainname", "myPassword" ) )
{
   ...

   <code that executes under the new context>

   ...
}

为我的项目工作得非常好。

答案 1 :(得分:1)

您可以拨打RevertToSelf

也就是说,为模拟任务启动专用线程,并在模拟工作完成时终止它,可以说。这将隔离模拟工作,以便在主线程上处理任何回调或消息时,它们将在主体用户而非模拟用户的上下文中执行。事实上,我越想到这一点就越强烈,我认为专用线程就是解决方案。