The following example demonstrates how to impersonate a user and then
revert
to the original identity.
[Visual Basic]
Imports System
Imports System.Runtime. InteropServices
Imports System.Security .Principal
Imports System.Security .Permissions
<Assembly:Secur ityPermissionAt tribute(Securit yAction.Request Minimum,
UnmanagedCode := true)>
Public Class Impersonation
<DllImport("C:\ \WINNT\\System3 2\\advapi32.dll ")> _
Public Shared Function LogonUser(lpszU sername As String, lpszDomain As
String, lpszPassword As String, _
dwLogonType As Integer, dwLogonProvider As Integer, ByRef
phToken As Integer) As Boolean
End Function
<DllImport("C:\ \WINNT\\System3 2\\Kernel32.dll ")> _
Public Shared Function GetLastError() As Integer
End Function
Public Shared Sub Main(args() As String)
'The Windows NT user token.
Dim token1 As Integer
'Get the user token for the specified user, machine, and password
using the unmanaged LogonUser method.
'The parameters for LogonUser are the user name, computer name,
password,
'Logon type (LOGON32_LOGON_ NETWORK_CLEARTE XT), Logon provider
(LOGON32_PROVID ER_DEFAULT),
'and user token.
Dim loggedOn As Boolean = LogonUser("bob" , "AARDVARK", "coffee", 3, 0,
token1)
Console.WriteLi ne("LogonUser called")
'Call GetLastError to try to determine why logon failed if it did not
succeed.
Dim ret As Integer = GetLastError()
Console.WriteLi ne("LogonUser Success? " + loggedOn)
Console.WriteLi ne("NT Token Value: " + token1)
If ret <> 0 Then
Console.WriteLi ne("Error code (126 == ""Specified module could not
be found""): " + ret)
End If
'Starting impersonation here:
Console.WriteLi ne("Before impersonation:" )
Dim mWI1 As WindowsIdentity = WindowsIdentity .GetCurrent()
Console.WriteLi ne(mWI1.Name)
Console.WriteLi ne(mWI1.Token)
Dim token2 As IntPtr = new IntPtr(token1)
Console.WriteLi ne("New identity created:")
Dim mWI2 As WindowsIdentity = new WindowsIdentity (token2)
Console.WriteLi ne(mWI2.Name)
Console.WriteLi ne(mWI2.Token)
'Impersonate the user.
Dim mWIC As WindowsImperson ationContext = mWI2.Impersonat e()
Console.WriteLi ne("After impersonation:" )
Dim mWI3 As WindowsIdentity = WindowsIdentity .GetCurrent()
Console.WriteLi ne(mWI3.Name)
Console.WriteLi ne(mWI3.Token)
'Revert to previous identity.
mWIC.Undo()
Console.WriteLi ne("After impersonation is reverted:")
Dim mWI4 As WindowsIdentity = WindowsIdentity .GetCurrent()
Console.WriteLi ne(mWI4.Name)
Console.WriteLi ne(mWI4.Token)
End Sub
End Class
"RTT" <RT*@pandora.be > wrote in message news:RT*@pandor a.be:
i'm writing a windows form but codebased a iwant to run the code as a
different user.
like in a webapplication you can impersonate a user so the website does
not
run on the standard ASP.NET user.
is it possible to do the same for a windows form and define a user
codebased
and run the code like that user is running the application.