Олицетворение в Windows 7 - PullRequest
       31

Олицетворение в Windows 7

1 голос
/ 27 августа 2011

У меня есть класс олицетворения, который до сих пор прекрасно работал на Windows XP, однако, когда я пытаюсь использовать то же самое олицетворение на Windows 7, у меня возникает проблема.Насколько мне известно, олицетворение работает, но когда я пытаюсь получить доступ к файлам этого пользователя, я получаю сообщение об ошибке отказа в доступе.Кто-нибудь еще сталкивался с этой проблемой и нашел исправление?

Public Sub BeginImpersonation ()

Const LOGON32_PROVIDER_DEFAULT As Integer = 0
Const LOGON32_LOGON_INTERACTIVE As Integer = 2
Const SecurityImpersonation As Integer = 2

Dim win32ErrorNumber As Integer

_tokenHandle = IntPtr.Zero
_dupeTokenHandle = IntPtr.Zero

If Not LogonUser(_username, _domainname, _password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, _tokenHandle) Then
  win32ErrorNumber = System.Runtime.InteropServices.Marshal.GetLastWin32Error()
  Throw New ImpersonationException(win32ErrorNumber, GetErrorMessage(win32ErrorNumber), _username, _domainname)
End If

If Not DuplicateToken(_tokenHandle, SecurityImpersonation, _dupeTokenHandle) Then
  win32ErrorNumber = System.Runtime.InteropServices.Marshal.GetLastWin32Error()

  CloseHandle(_tokenHandle)
  Throw New ImpersonationException(win32ErrorNumber, "Unable to duplicate token!", _username, _domainname)
End If

Dim newId As New System.Security.Principal.WindowsIdentity(_dupeTokenHandle)
_impersonatedUser = newId.Impersonate()

End Sub

  Dim aa As fcGlobals.AliasAccount
  'Use Impersonation
  aa = New fcGlobals.AliasAccount("xxxx", "xxxx")
  aa.BeginImpersonation()
  For a = 0 To mPages.Count - 1
    If System.IO.File.Exists(mFileNames(a)) = True Then
      System.IO.File.Delete(mFileNames(a))
    End If
  Next

  aa.EndImpersonation()
  aa.Dispose()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...