2017-02-27 7 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のプロセスは偽装の下で実行できないことが判明

*私もProcessStartInfoでcmdを実行しようと、それは常に「ディレクトリに失敗しました」または「ファイルが見つかりません」または「アクセスが拒否されました」

+0

従来のShell()関数はこれを制御するにはあまりにも原始的です。 .NET Processクラス、ProcessStartInfo.LoadUserProfileプロパティを使用する必要があります。これにはUserNameプロパティもあり、偽装を使用して独自のプロセス状態を破損する必要はありません。 –

+0

申し訳ありませんが、私はLoadUserProfileに質問したいと思います。 この文書から[https://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.loaduserprofile(v=vs.110).aspx これは機能がレジストリからロードされることを示します。 Impersonateを実行すると、偽装プロセスでLoadUserProfile関数によってロードされるレジストリからプロファイルデータが設定されますか? 私はProcessStartInfoを使用するときは常に「アクセスが拒否されている」ので、不思議です。とにかく方向性のおかげで – user2291962

答えて

0

を言う、 だから私は、偽装の下でrunasプロセスを取り出します。

それは私の仕事です。