問題タブ [uac]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - ChangeWindowMessageFilter を使用して、保護モード IE から DocumentComplete イベントを受け取ることはできますか?
私のアプリでは、新しい IE ウィンドウを開き、新しく開いた IE から発生したDocumentCompleteおよびNavigateComplete2イベントを受け取って処理したいと考えています。XP では、すべて正常に動作します。Vista では、新しい IE が保護モードで実行されているため、アプリは IE から DocumentCompelte イベントを受け取ることができません。
IE を保護モードで開いたり、アプリの整合性を下げたりするなど、セキュリティ レベルを変更したくありません。ChangeWindowsMessageFilter を使用して、プロテクト モード IE から DocumentComplete および NavigateComplete2 イベントを受信できるのでしょうか? 私のコードは次のようなものです:
ありがとう!
windows-7 - レジストリ仮想化の検出
私は一連の C# (v2) アプリを持っており、Win7 (およびそれほどではないが Vista) でのレジストリ仮想化に苦労しています。
アプリケーションが HKLM\Software\Company にアクセスする必要がある共有レジストリ構成領域があります。
このコードは、そのレジストリ キーへの書き込みの失敗を適切に検出し、適切にフォールバックします (代わりに HKCU に書き込み、適用した設定が現在のユーザーにのみ影響することをユーザーに通知します)。
Vista では、HKLM 書き込みに使用していたアクセス チェックがサイレントに「成功」し、代わりに HKCR\VirtualStore\Machine... に仮想化されるため、レジストリの仮想化によってこれらすべてが壊れていました。この場合、ユーザーはマシン全体の構成を保存したと考えますが、代わりに仮想ストアに書き込んだだけです。
悲しいことに、HKLM reg キーのアクセス許可を列挙しようとしても、ユーザーがアクセスしているかどうかに関係なく、ユーザーがアクセスできることを示す結果が明示的に返されます。
Vista のサポートを追加したときに使用した回避策は、HKLM へのプローブ書き込みを実行することでした...次に、HKCR\VirtualStore\Machine... で同じ値をチェックインし、値が見つかった場合は仮想化が行われたことに注意してください。
明示的な仮想ロケーション (HKCR) に対するクエリは、書き込みが仮想化されていない場合でも、HKLM ロケーションからマージされた結果を表示するようになったため、Win7 はこれを (再び) 破ったようです。
これを回避するための提案はありますか?
制約: - 昇格を必要とせずに機能するソリューションが必要です (管理者レベルのアクセス許可がない場合、HKCU でユーザーごとの構成にフォールバックしますが、このケースを確実に検出できる必要があります)。
v2 C# アプリで動作する必要があります (C++ コードで見たオプションの 1 つは、.exe の仮想化を無効にするマニフェストを埋め込むことですが、C# V2 ではそれを行うことができませんでした。Windows でフォルダーの仮想化を無効にするを参照してください) .
「インストーラー」なしで動作する必要があります (これにより、REG FLAGS... コマンドで必要なレジストリ キーの仮想化を無効にすることができなくなります)。
windows - すべてのユーザーのレジストリ データを保存する場所
Windows レジストリですべてのユーザー間で少量のデータを共有したいと考えています。マシンまたはマシン上のサービスにログインする任意のユーザー間で読み取りおよび書き込みアクセスを共有するため。これができる場所はありますか?「HKEY_USERS\.DEFAULT\Software\」を使用してみましたが、これは Vista UAC ルールによってブロックされているようです。
windows - Windows 7: 自動昇格を利用して自分のプロセスを昇格させますか?
2009 年 7 月の Technet の記事Inside Windows 7 User Account Controlで、Mark Russinovishは、標準ユーザーとして実行されているアプリケーションが暗黙のうちに昇格して管理者権限を取得できる可能性があると説明しています。
...標準ユーザー権限を持つ PA (保護された管理者) アカウントで実行されているサードパーティ製ソフトウェアが、自動昇格を利用して管理者権限を取得する可能性があります。たとえば、ソフトウェアは WriteProcessMemory APIを使用してExplorerにコードを挿入し、 CreateRemoteThread APIを使用してそのコードを実行できます。これはDLL インジェクションと呼ばれる手法です。コードは Windows 実行可能ファイルであるエクスプローラーで実行されるため、コピー/移動/名前変更/削除/リンク オブジェクトなどの自動昇格する COM オブジェクトを利用して、システム レジストリ キーまたはディレクトリを変更し、ソフトウェアに管理権限を与えることができます。権利。
彼は続けて、マルウェアがこれを行うことは決してないだろうと述べています。
...これらの手順には意図的な意図が必要であり、簡単なことではありません...
そして最後に
...マルウェアは、同じ手法を使用して管理者権限を取得できます。
だから私は実際の実装を見たいと思っています。
PROCESS_VM_WRITEは標準ユーザーには与えられない権利だと思っていたでしょう。
注:世界中の他のすべての開発者がそうであるように、私自身が悪いことをすることは決してありません。
delphi - Vista: 別の EXE を呼び出すときに、EXE はユーザーの確認をバイパスできますか?
Delphi で作成された 2 つのアプリケーションがあります。最初の exe (ユーザー インターフェイスを含む) は、バックグラウンド プロセスとして実行される ShellExecuteEx() を使用して別の exe を呼び出します。
最初の exe が 2 番目の exe を呼び出すと、次の 2 つのいずれかが発生します。
管理者としてログインすると、UAC ダイアログに許可/キャンセルのプロンプトが表示されます。[許可] を選択すると、実行が続行されます。
非管理者としてログインすると、管理者の資格情報ダイアログ ボックスが表示され、続行するには管理者のユーザー名とパスワードを入力する必要があります。
どちらの場合も、ユーザーの介入なしで 2 番目の exe を実行したいと考えています。どうすればそれを可能にできますか?
はい、SUA ツールで提案されている ElevateCreateProcess 軽減策を適用してみましたが、うまくいかないようです。動作は以前と同じです。
ご協力いただきありがとうございます。
c++ - 別のプロセスを開始せずにプロセスをUAC昇格させることは可能ですか
別のプロセスを開始せずに、プログラムがUACプロンプトでユーザーに独自の権限を上げるように促すことができるかどうか疑問に思っていました。
インターネットで見つけることができるすべての例は、昇格された特権で新しいプロセスを作成する「runas」をShellExecuteするようです。
これが不可能な場合、私の最善の解決策は、名前付きパイプを作成し、特殊な引数を使用して独自のプログラムを ShellExecute し、操作を実行するために必要なすべてのデータをパイプに押し込むことです。より良い提案があれば、私はそれらを聞いてうれしいです.
ご意見ありがとうございます。
c# - .NET/C# でアプリケーションのショートカット (.lnk) をプログラムでスタートアップ フォルダーに追加するにはどうすればよいですか?
私のアプリケーションには、(ユーザーごとではなく) マシンごとのスタートアップ ショートカットがあります。インストーラー プロセス中に問題なくショートカットを作成できます。私の問題は、ユーザーが後でそれを削除してから再度有効にしようとしたときに発生します。つまり、RunOnStartup をオフにし (これによりスタートアップ インクが削除されます)、後でスタートアップ時に実行することを決定したため、設定に戻って再度有効にします。
どうやら、これはショートカットを作成するためのネイティブな方法がないという .NET のかなり一般的な不満です。しかし、あまり良い解決策は見つかりませんでした。
私が見つけた/検討した解決策:
代わりに、ショートカットを作成します。コピーするだけです。これは良い解決策かもしれません。スタートメニューのリンクがあることに頼ることはできません。しかし、私はおそらくそれを作成してプログラムディレクトリに保持することができると思います...これにより、問題はインストーラーに移行し、インストール時に指定される適切なパスでショートカットを作成する必要があります。
この他のstackoverflowの答えが何であるかを行い、COMラッパーオブジェクトを使用してください。COMは避けたいです。これも 2003 年に作成されました。そのため、Vista をどれだけサポートできるかはわかりません。試してみたいのですが、Vista ボックスが手元にありません。
代わりにレジストリを使用してください。これが私が現在行っている方法です...しかし、Vistaで問題が発生します。スタートアップメニューのショートカットがこれを行う適切な方法であるというのは一般的なコンセンサスであるように思われるので、それが私の目標です。
また、通常のユーザー (管理者ではない) がこの設定を変更しようとした場合にも対処する必要があります。この場合、正常に失敗するか、Vista の場合はユーザーが管理者パスワードを入力して管理者セキュリティ トークンを取得できるようにする必要があります。このケースをすでに適切に考慮した回答は素晴らしいでしょう。
このトピックが既にカバーされていたら、申し訳ありません。投稿する前にいろいろ調べました。
更新:インストーラーが作成したショートカットをコピーするのが最善の解決策です。終了したらコードを投稿します... a) Environment.GetSpecialFolder が解決された StartMenu への参照を持たないといういくつかのハードルに遭遇しました...しかし、今、私はファイルを適切な場所。このトピックについて、新しい stackoverflow の質問を作成しました:管理者の資格情報をユーザーに要求することで、Vista で "標準ユーザー" としてファイルをコピーするにはどうすればよいですか (つまり、"管理者選択アプリケーション")?
c# - ユーザーに管理者の資格情報を求めるプロンプトを表示して、Vista で「標準ユーザー」(つまり「管理選択アプリケーション」) としてファイルをコピーするにはどうすればよいですか?
私は、UAC 開発ガイドで「管理選択アプリケーション」と呼ばれるものを持っています。これが何であるかに精通している場合は、次のセクションにスキップしてください。
バックグラウンド:
「標準」ユーザーが、アプリケーションの設定で [起動時に実行] オプションを選択または選択解除できるようにしたいと考えています。
私のアプリケーションはマシンごと (ユーザーごとではありません) であるため、ショートカット ファイルを削除するか、スタート メニュー/プログラム/スタートアップ フォルダーにコピーする必要があります。これには、この操作を実行するための管理者アクセスが必要です。
したがって、「ユーザー アカウント制御資格情報プロンプト」が表示され、ユーザーが管理者アカウントを持っている場合は、資格情報を入力することもできます。これは明らかに、ユーザーが何か管理を行う必要があるたびに別のアカウントに切り替える必要がないようにアプリケーションを設計する方法です。
MSDN ドキュメントからの抜粋:
管理選択アプリケーション
昇格されたプロセスまたは COM オブジェクト
最初のアプリケーションは、昇格を必要とせずに起動します。管理者アクセス トークンを必要とするユーザー インターフェイスのアイテムは、識別として盾のアイコンで装飾されています。この装飾は、その機能を使用するには管理者の承認が必要であることをユーザーに示します。これらのボタンのいずれかが選択されたことをアプリケーションが検出すると、次の 2 つの選択肢があります。
- アプリケーションは、ShellExecute() を使用して 2 番目のプログラムを起動し、管理タスクを実行します。この 2 番目のプログラムは、requireAdministrator の requestedExecutionLevel でマークされるため、ユーザーは承認を求められます。この 2 番目のプログラムは、完全な管理アクセス トークンで実行され、目的のタスクを実行できます。-また-
- アプリケーションは、CreateElevatedComObject() を使用して COM オブジェクトを起動します。この API は、承認後に完全な管理アクセス トークンを使用して COM オブジェクトを起動し、この COM オブジェクトは目的のタスクを実行できるようになります。
ファイルをコピーする必要があるだけです... ShellExecute() を使用して新しいプロセスをフォークするには過剰に思えます。COM を使用してファイルをコピーできるかどうかを知るには、COM について十分に知りません。ファイルをコピーする方法を提供し、理想的には「シールドデコレータ」でMenuItemを装飾する方法も説明するコードを誰かが投稿できることを願っています。
ノート:
アクセス許可に関連するトピックに関する(パスが保護されている場合は、Windows Vista UAC の昇格を要求しますか? コードには、別のプロセスを呼び出す例のみが含まれています。
c++ - UAC がオンのときに VC++ 6.0 でファイルを作成するにはどうすればよいですか?
UAC がオンのときに、管理者として実行せずに C++ でファイルを作成するにはどうすればよいですか?
Vista の UAC がオンの場合、VC++ 6.0 で「C:\Programdata\Desktop」というパスにテキスト ファイルを作成しようとしています。ただし、Createfile(...)
「許可が拒否されました」で失敗しました。
「管理者として実行」でサンプル アプリケーションを実行すると、動作します。しかし、私のサンプル アプリケーションは「管理者として実行」されるべきではありません。
UACがオンのときに、上記のパスに許可を与えるAPIはありますか?
サンプル コード: const nSize = 100; CStdioFile ファイル。CFileException obFileExp; CString csFilePath(_T("C:\ProgramData\Desktop\sample.txt"));
注: UAC をオンにし、VC++ 6.0 を管理者として実行しないでください。
java - UACとJava
Javaアプリケーション内から昇格された権限を要求することは可能ですか?私が見た提案はすべて、外部実行可能ファイルの実行または起動時に特権を要求するマニフェストの設定に集中しているようです。これらは、たとえばアプレットでは使用できません。実行中のアプリケーションから昇格を要求する方法はありますか?