Impersonation half way working

From: William Oliveri (wuji_at_bigvalley.net)
Date: 02/23/04


Date: Mon, 23 Feb 2004 13:51:09 -0800

Hello all,

I have a working example of Impersonation where I receive a token and a true
response for a specific user. However, if I try to access a drive that has
only that user's permission to access I get denied. Code below.

I tried this on a XP box and a W2K box with the same results. This
impersonation is in a Active Directory environment with W2K Server.

Thanks for any help

Bill
Dim LOGON32_LOGON_INTERACTIVE As Integer = 2
Dim LOGON32_PROVIDER_DEFAULT As Integer = 0
Dim impersonationContext As WindowsImpersonationContext
Declare Auto Function LogonUser Lib "advapi32.dll" (ByVal lpszUsername As
String, _
ByVal lpszDomain As String, _
ByVal lpszPassword As String, _
ByVal dwLogonType As Integer, _
ByVal dwLogonProvider As Integer, _
ByRef phToken As IntPtr) As Integer

Declare Auto Function DuplicateToken Lib "advapi32.dll" (ByVal
ExistingTokenHandle As IntPtr, ByVal ImpersonationLevel As Integer, ByRef
DuplicateTokenHandle As IntPtr) As Integer

Private Function impersonateValidUser(ByVal userName As String, _
ByVal domain As String, ByVal password As String) As Boolean

Dim tempWindowsIdentity As WindowsIdentity
Dim token As IntPtr
Dim tokenDuplicate As IntPtr
 If LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE, _
   LOGON32_PROVIDER_DEFAULT, token) <> 0 Then
    If DuplicateToken(token, 2, tokenDuplicate) <> 0 Then
      tempWindowsIdentity = New WindowsIdentity(tokenDuplicate)
      impersonationContext = tempWindowsIdentity.Impersonate()
  If impersonationContext Is Nothing Then
    impersonateValidUser = False
  Else
    impersonateValidUser = True
  End If
Else
  impersonateValidUser = False
 End If
  Else
  impersonateValidUser = False
  End If
End Function



Relevant Pages

  • logonuser api returns 127
    ... Declare Auto Function LogonUser Lib "advapi32.dll" (ByVal lpszUsername As ... String, ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal ... Dim LogonProvider As Integer ... impersonateValidUser = False ...
    (microsoft.public.dotnet.languages.vb)
  • Re: Impersonation half way working
    ... > Dim impersonationContext As WindowsImpersonationContext ... > ByVal lpszDomain As String, ... > ExistingTokenHandle As IntPtr, ByVal ImpersonationLevel As Integer, ByRef ... > impersonateValidUser = False ...
    (microsoft.public.dotnet.languages.vb)
  • Re: problems with Impersonate
    ... String, ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal ... Declare Auto Function RevertToSelf Lib "advapi32.dll" As Integer ... Sub Main ...
    (microsoft.public.dotnet.languages.vb)
  • Re: logonuser api returns 127
    ... > String, ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal ... > Dim LogonProvider As Integer ... > impersonateValidUser = False ... are you absolutely sure that GetLastError is returning ...
    (microsoft.public.dotnet.languages.vb)
  • problems with Impersonate
    ... String, ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal ... Declare Auto Function RevertToSelf Lib "advapi32.dll" As Integer ... Sub Main ...
    (microsoft.public.dotnet.languages.vb)