関連するなりすましの質問をすべて読んだと思いますProcess.Start
-少なくともGoogleで見つけたものはすべてですが、この状況に一致するものは見つかりませんでした(そして90%がre:ASPであり、まったく異なる球技です)
シナリオ: 現在のユーザーの資格情報を使用して AD にクエリを実行し、検索に一致するサーバーのリストを取得し、SMB 経由でそれらに接続し、共有のリストを取得する小さなツールがあります。
ドメイン ユーザーの資格情報を使用して、ドメイン上にないマシンでこのプロセスを実行できるようにするよう依頼されました。
起動時に資格情報を要求し、適切な資格情報を使用して同じ実行可能ファイルを Process.Start() するスイッチを追加しました (誰かの学習を節約するためrunas /netonly ...
)。
これは私にいくつかの問題を与えています。私がテストしているコードは以下のとおりです...
Dim ProcInfo As New ProcessStartInfo With {
.Domain = dlgImpersonate.Domain,
.UserName = dlgImpersonate.Username,
.Password = dlgImpersonate.Password,
.FileName = Reflection.Assembly.GetEntryAssembly.Location,
.UseShellExecute = False}
Try
Process.Start(ProcInfo)
ShouldEnd = True
Catch ex As Exception
'HandleException(ex)
MessageBox.Show(ex.Message, "Impersonation failed", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
だから...私のマシン(ドメイン上)でコードを実行すると、誰でもなりすますことができます。AD のクエリにはいくつかの癖がありますが、それは別の問題です。
(ドメインではなく)真新しいマシンでコードを実行すると、次のようになります。
Win32Exception: Logon failure: unknown user name or bad password
Stack:
at Process.StartWithCreateProcess(ProcessStartInfo startInfo)
at Process.Start(ProcessStartInfo startInfo)
...My code
マシンが単にドメインを認識していないのか、ドメインに対して認証する方法を認識していないのかと思ったので、コマンドプロンプトから試しました...
runas /netonly /user:MyDomain\MyUser Test.exe
そして、これはうまくいきます。
Process.Start
だから...どうすれば期待どおりに認証されないのかを追跡できますか?
注意: 資格情報は正しいです。メモ帳からサニティ チェックにコピー/貼り付けすることさえしました。