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を実行しようと、それは常に「ディレクトリに失敗しました」または「ファイルが見つかりません」または「アクセスが拒否されました」
従来のShell()関数はこれを制御するにはあまりにも原始的です。 .NET Processクラス、ProcessStartInfo.LoadUserProfileプロパティを使用する必要があります。これにはUserNameプロパティもあり、偽装を使用して独自のプロセス状態を破損する必要はありません。 –
申し訳ありませんが、私はLoadUserProfileに質問したいと思います。 この文書から[https://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.loaduserprofile(v=vs.110).aspx これは機能がレジストリからロードされることを示します。 Impersonateを実行すると、偽装プロセスでLoadUserProfile関数によってロードされるレジストリからプロファイルデータが設定されますか? 私はProcessStartInfoを使用するときは常に「アクセスが拒否されている」ので、不思議です。とにかく方向性のおかげで – user2291962