Logoff after logonuser on C#
Asked Answered
U

2

5

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.

Unspoken answered 3/10, 2011 at 9:30 Comment(0)
L
8

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.

Lamellirostral answered 3/10, 2011 at 9:49 Comment(5)
You should add the code here. SO answers should be self-contained when source code can be provided (considering how small that class is, it probably can be).Drusi
Is this the new trend here on Stack Overflow to meta-comment? Just go search for answers with self-contained code and those without and then compare the ratio.Lamellirostral
I just like source code to be on SO. Didn't mean to antagonize you :)Drusi
@Merlyn in this case the answer is much better as it stands because the code at code project contains multiple files and has a nice article attached. I'm upvoting this answer.Syncope
I stand corrected, guys. Good answer and an upvote for you Uwe.Drusi
S
1

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.

Syncope answered 3/10, 2011 at 9:32 Comment(1)
what if i use logonuserA? i saw that there is revertToSelf() methodUnspoken

© 2022 - 2024 — McMap. All rights reserved.