Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Logoff after logonuser on C#

I use advapi32.dll's logonuser method to access data over our network.
I know it change the thread's user to the information i give it, but i was wondering if there's a way to reverse it.
I want to access the data and then return to the local user credentials.

like image 452
Ben2307 Avatar asked Oct 03 '11 09:10

Ben2307


2 Answers

Some time ago I created a small impersonator class.

Basically you wrap your code to execute under another user simply inside a using block:

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

   <code that executes under the new context>

   ...
}

Worked very well for my projects.

like image 120
Uwe Keim Avatar answered Oct 04 '22 13:10

Uwe Keim


You can call RevertToSelf.

That said, there is something to be said for spinning up a dedicated thread for the impersonation task, and terminating it when the impersonation work is complete. This will segregate the impersonation work so that if any callbacks or messages are processed on the main thread they will be performed in the context of the principal user rather than the impersonated user. In fact, the more I think about this the stronger I feel that a dedicated thread is the solution.

like image 43
David Heffernan Avatar answered Oct 04 '22 12:10

David Heffernan