2017-02-27 6 views
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 프로세스가 가장 할에서 수행 할 수 있다는 것을 발견

+0

레거시 Shell() 함수는 이것을 제어하기에 너무 원시적입니다. .NET Process 클래스를 사용해야하며 ProcessStartInfo.LoadUserProfile 속성은 중요합니다. 또한 UserName 속성을 가지고 있으므로 더 이상 프로세스 상태가 더 이상 손상되지 않아도됩니다. –

+0

죄송합니다. LoadUserProfile에 문의하고 싶습니다. 이 문서에서 [https://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.loaduserprofile(v=vs.110).aspx 이 함수는 레지스트리에서로드됩니다. 가장을 수행하면 가장 프로세스가 LoadUserProfile 함수에 의해로드 될 레지스트리의 프로필 데이터를 설정합니까? ProcessStartInfo를 사용할 때 항상 '액세스가 거부되었습니다.'라는 점 때문에 저는 궁금합니다. 어쨌든 방향에 대한 감사 – user2291962

답변

0

'액세스 거부'항상 말을 ProcessStartInfo를 함께 cmd를 실행 시도 가장 밑의 runas 프로세스를 꺼내십시오.

그리고 저에게 도움이됩니다.