запускаю - не работает
Прикольно что LogonUser возвращает 0
что как бы и правильно по МСДН,
но Элиот рассматривает это как ошибку !!!
Читаю МСДН - похожий код
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemsecurityprincipalwindowsidentityclassimpersonatetopic.asp
говорят что он не рабочий под 2000 в целях безопасности.
Вопрос:
люди помогите как выполнить часть программного кода с правами админа !!!
Я использовал CreateProcessWithLogon и для приложений это проходит,
но теперь мне надо использовать функцию /удалённый доступ/,
а прав нет.
Функции то CreateProcessWithLogon не ест.
Всем спасибо заранее
- Код: Выделить всё
Imports System.Security.Principal
Module Impersonation
Dim LOGON32_LOGON_INTERACTIVE As Integer = 2
Dim LOGON32_PROVIDER_DEFAULT As Integer = 0
Dim moImpersonationContext As WindowsImpersonationContext
Public 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
Public Declare Auto Function DuplicateToken Lib "advapi32.dll" _
(ByVal ExistingTokenHandle As IntPtr, _
ByVal ImpersonationLevel As Integer, _
ByRef DuplicateTokenHandle As IntPtr) As Integer
Public Function ImpersonateUser(ByVal userName As String, _
ByVal domain As String, _
ByVal password As String) As Boolean
'------------------------------------------------
'PURPOSE: Impersonate a prescribed user
'INPUTS: username(str), domain (str), pwd(str)
'OUTPUTS: Boolean
'GLOBALS AFFECTED:
'NOTES:
'DEPENDENCIES:
'EXAMPLE:
'HISTORY:
'8/21/2002 10:16:32 AM - Jon Elliott - Created
'
'------------------------------------------------
Try
'--START CODE
Dim otempWindowsIdentity 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
otempWindowsIdentity = New WindowsIdentity(tokenDuplicate)
moImpersonationContext = otempWindowsIdentity.Impersonate()
If moImpersonationContext Is Nothing Then
ImpersonateUser = False
Else
ImpersonateUser = True
End If
Else
ImpersonateUser = False
End If
Else
ImpersonateUser = False
End If
Catch ex As Exception
Throw New System.Exception("Error Occured in ImpersonateUser() : " & ex.ToString)
End Try
End Function
Public Sub undoImpersonation()
'------------------------------------------------
'PURPOSE: Undo the impersonation
'INPUTS: None
'OUTPUTS: None
'GLOBALS AFFECTED:
'NOTES:
'DEPENDENCIES:
'EXAMPLE:
'HISTORY:
'8/21/2002 10:25:17 AM - Jon Elliott - Created
'
'------------------------------------------------
Try
moImpersonationContext.Undo()
Catch ex As Exception
Throw New System.Exception("Error Occured in undoImpersonation() : " & ex.ToString)
End Try
End Sub
End Module