0

Windows Server 2012 にログインするときにユーザーの「シェル」の代わりとして実行される小さな C# (.NET 4) アプリケーションを作成しています。自分のローカルアカウントのパスワード。

次のコードを使用して..

 DirectoryEntry directory = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
 DirectoryEntry userEntry = directory.Children.Find(username);
 userEntry.Invoke("SetPassword", new object[] { newPassword });

 userEntry.CommitChanges();

...コードが昇格したコマンドプロンプトから起動された場合、正常に動作します。ただし、シェルの置き換えは「通常の」アプリケーションとして実行されるため、

アクセスが拒否されました

ユーザーがローカル管理者として設定されている場合でも、コードの実行時に例外が発生します。

昇格せずにユーザー自身のローカルアカウントパスワードをプログラムで設定するために使用できるコードまたはメカニズムはありますか? または(そして、これはおそらくServerFaultの質問であることを認識しています:) UACを無効にすることなく、昇格したプロセスとして「置換シェル」を実行する方法はありますか?

4

3 に答える 3

2

ユーザーのパスワードの変更は、悪意のあるコードが知らないうちに既存の資格情報を一掃することを望まないため、特権の高い操作です。を使用して、コマンドプロンプトからプログラムを実行できます
runas /user:<a-priviliged-user> <your-program>.exe。もちろん、特権ユーザーのパスワードを入力するように求められます。

于 2013-01-07T18:02:55.030 に答える
1

ややこしいですが、このページを見てください(Vista 時代のものですが、まだ関連があります)。

アイデアは、資格情報が埋め込まれたスケジュールされたタスクを作成して、十分な資格情報でアプリケーションを実行しますが、実際に実行するタスクをスケジュールしないことです。次に、オンデマンドで (ログイン中などに) 実行できます。

\windows\system32\schtasks.exe /run /tn "task name"

私が言うように:ボッジですが、要件には十分かもしれません.UACを要求することなく、プログラムは管理者権限で実行されます.

編集: サーバー 2012 でこれを試したところ、何らかの理由でテスト コンソール アプリを対話的に実行できません (つまり、ユーザーが実行中のプログラムを確認できるようにするため)。私はただの私かもしれませんが、Server 2012 で動作が変更された可能性があり、ユーザーとやり取りする必要がある場合、このトリックはニーズに合わない可能性があります。

于 2013-01-07T19:35:49.220 に答える
0

アセンブリにマニフェストを追加して、UAC(ユーザーアカウント制御)を通過します

ではVS2010、マニフェストファイルをプロジェクトに追加できます。Right click your projectソリューションエクスプローラーでファイルを選択し、を選択してから、を選択しAddますNew item。そこに見つけることができますApplication Manifest File

次のいずれかが得られるように変更します。

  1. 普通
  2. 利用可能な最高(ユーザー権限に依存)
  3. 管理者権限

そのために使用できるVS2010に付属の2つのツールもあります。

  1. MageUI.exe(マニフェスト生成および編集ツール、グラフィカルクライアント)
  2. Mage.exe(マニフェスト生成および編集ツール、コマンドライン)
于 2013-01-08T06:12:12.763 に答える