0
다른 사용자로 가장하는 성공 후 CMD.exe를 호출합니다.VB.NET Shell() 가장
cmd를 표시 한 후.
그런 다음 코드 echo %username%
으로 확인하면 내 사용자에게 다시 표시됩니다.
디버그 모드에서 WindowsIdentity를 호출합니다. 다른 사용자로 성공했습니다.
가 여기 내 가장 할 몇 가지 코드의
Dim impersonationContext As WindowsImpersonationContext = Nothing
Dim userHandle As IntPtr = IntPtr.Zero
Dim fAccess As New FAccess.clsFAccess
Try
If LogonUser("my.user", "domain", "password", 2, 0, userHandle) Then
If userHandle <> IntPtr.Zero Then
impersonationContext = WindowsIdentity.Impersonate(userHandle)
shell("cmd.exe", AppWinStyle.NormalFocus, True)
End Using
End If
End If
Catch ex As Exception
MsgBox(ex.ToString)
MsgBox(ex.Message)
Finally
If impersonationContext IsNot Nothing Then
impersonationContext.Undo()
End If
If userHandle <> IntPtr.Zero Then
Marshal.FreeHGlobal(userHandle)
End If
End Try
난 그냥 물어보고 싶은
, 나는 사용자 로그인 창으로 항상 전화 쉘을 했습니까?
* 나는 또한 그래서, '디렉토리 실패'또는 '파일을 찾을 수 없습니다'또는 내가 RUNAS 프로세스가 가장 할에서 수행 할 수 있다는 것을 발견
레거시 Shell() 함수는 이것을 제어하기에 너무 원시적입니다. .NET Process 클래스를 사용해야하며 ProcessStartInfo.LoadUserProfile 속성은 중요합니다. 또한 UserName 속성을 가지고 있으므로 더 이상 프로세스 상태가 더 이상 손상되지 않아도됩니다. –
죄송합니다. LoadUserProfile에 문의하고 싶습니다. 이 문서에서 [https://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.loaduserprofile(v=vs.110).aspx 이 함수는 레지스트리에서로드됩니다. 가장을 수행하면 가장 프로세스가 LoadUserProfile 함수에 의해로드 될 레지스트리의 프로필 데이터를 설정합니까? ProcessStartInfo를 사용할 때 항상 '액세스가 거부되었습니다.'라는 점 때문에 저는 궁금합니다. 어쨌든 방향에 대한 감사 – user2291962