問題タブ [uipi]

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.

0 投票する
2 に答える
743 参照

c++ - XP SP3 でのユーザー インターフェイス特権の分離

ちょっとした確認の直後:

XP SP3 は、Vista に見られる User Interface Privilege Isolation (UIPI) メカニズムを実装していますか?

人間の興味のための裏話 :) 私は最近、かなり大きなアプリケーションに C++ ソースを渡されました。悲しいことに、このアプリケーションの唯一の開発者は、90 年代半ばに開始されて以来、最近亡くなったため、新しい開発者を雇うことができるまで、かなり厳しい状況に置かれています。

最近、ユーザーは、アプリケーションがランダムに動作を停止した、および/または以前は動作していた特定の機能がまったく起動していないように見えると報告しています。「何も変わっていない」はSP3であることが判明しました:)

これを知っていて、私は C/C++ の専門家ではありませんが、ソースを調べて何かを見つけられるかどうかを確認しようと思いました (ファイアウォール、ウイルス スキャナーなどを調べるのにかなりの時間を費やしたので)。外部要因)。

私は、Api 関数 SendMessage への呼び出しに 1 つのエラーを追跡し、MSDN ドキュメントにアクセスして確認しました。「Microsoft Windows Vista 以降。メッセージ送信は、ユーザー インターフェイス特権の分離 (UIPI) の対象となります。プロセスのスレッドは、整合性レベルが低いか等しいプロセスのスレッドのメッセージ キューにのみメッセージを送信できます。」100% 確実ではありませんが、これが原因である可能性が高いようです。

乾杯!

レニー。

0 投票する
2 に答える
4738 参照

c++ - Vista で DLL から別のプロセスのウィンドウにメッセージを送信する

私はこれで髪を引っ張っています。別のプロセスのウィンドウにメッセージを送信しようとしています。SendMessage または PostMessage または PostThreadMessage を呼び出した後、GetLastError() から Access Denied (0x5) を取得し続けます。UACをオフにしてみました。また、整合性レベルがプロセス全体で一致するようにすることで、UIPI も考慮しました。(SysInternals、現在はMSのProcess Explorerで確認しました)Windows Defenderも無効にしましたが、うまくいきませんでした。プロセス内からウィンドウにメッセージを送信することはできますが、外部からはブプカスが発生します。これはある種のセキュリティ上の問題のように思えますが、両方のプロセスが同じ整合性レベル (中 - 10 進数の 8192) を持っているため、それが何であるかはわかりません。

メッセージを送信する DLL からのコード

受信ウィンドウから選択されたコード

0 投票する
1 に答える
1228 参照

c++ - 外部ウィンドウハンドルへのアクセス

現在取り組んでいるプログラムに問題があります。これは、vista / Windows 7のセキュリティが強化されているために発生します。具体的には、整合性レベルの低いウィンドウが高いウィンドウと「通信」するのを防ぐUIPIです。

私の場合、整合性レベルの高いウィンドウにアプリケーションに移動するように指示したいと思います。セキュリティがオフのXPまたはWindows7で問題なく動作します。

findwindow()関数を使用するのではなく、上位ILウィンドウのHWNDを直接設定しようとしましたが、これは正常に機能しますが、プログラムを移動しようとしたり、一般的に操作しようとすると失敗します。ウィンドウハンドルはアプリによって保存され、低いILで実行されているアプリによって埋め込まれて読み取られます。

また、マニフェストのUIaccessをTRUEに設定し、プログラムにデジタル署名しようとしましたが、うまくいきませんでした。

この問題を解決する方法について何かアイデアはありますか?ありがとう。

0 投票する
1 に答える
970 参照

delphi - 管理者権限を持つアプリケーションから非管理者アプリケーションへのキーボード入力を受け取る方法は?

別のアプリケーションがフォーカスを持っている間、ホットキーを介して表示および非表示にできるオーバーレイの種類のウィンドウを持つアプリケーションをプログラムしました。上記の他のアプリケーションは、管理者権限で実行される DirectX ゲームです。

他のアプリケーションでホットキーが押されたときに通知を受け取るために、3 つの可能な解決策を既に試しました。それはある程度受け入れられますが、それらの特権を必要としないソリューションが必要です。TeamSpeak のようなアプリケーションは、管理者として実行しなくても入力を受け取ることができるため、方法が必要であると確信しています。

私がすでに試したこと:

  1. RegisterHotkey - DirectX ウィンドウでは機能しないため、適切ではありません。
  2. SetWindowsHookEx - 一般的なキーボード フックとして機能しますが、管理者権限でのみ機能します。
  3. GetAsyncKeyState - 指定されたホットキーをチェックするために機能しますが、管理者権限がないわけではありません。

ええ、私が考えることができるものはこれ以上ないので、誰かが別のソリューションのアイデアを提供できれば本当に感謝しています...私はDelphiを使用していますが、とにかくWindows APIに依存しているので、私はしません解決策は言語固有のものになると思います。

0 投票する
0 に答える
3720 参照

c# - UIPI が原因で SendInput が失敗する

私はWin7でマウスイベントをシミュレートしようとしています.Webサイトhttp://inputsimulator.codeplex.com/のオープンソースプロジェクト「Windows Input Simulator」を使用して、マウスイベントをシミュレートするために以下のコードを内部的に使用しています。

私のアプリケーションは、Visual Studio 2010 でデバッグすると完全に動作します。左ボタン クリック イベント、右ボタン クリック イベント、およびマウス移動イベントは問題ありません。しかし、.exe アプリケーションの実行可能ファイルをダブルクリックしてエクスプローラーからアプリケーションを起動すると、クリック イベントが送信されません。左ボタンのクリックまたは右クリックをシミュレートしようとすると、アプリケーションは例外を受け取り、終了します。以下のコードで例外がスローされることがわかりました。

つまり、UIPI が SendInput(...) をブロックしたということです。だから私はこのトピックをグーグルで調べて、いくつかのアドバイスを得ました.

1) アプリケーションのマニフェストに uiAccess="true" を追加します

2) テスト証明書を作成し、この証明書をローカル マシンの信頼されたルート証明機関の証明書ストアと信頼された発行元の証明書ストアに追加します。

3) 以前のデジタル署名でアプリケーションに署名する

4) 私のアプリケーションを、コンピューター上の安全な場所の 1 つである "C:\Program Files" フォルダーにインストールします。

UIPI 要件を満たすためにすべてのことを行ったと思いますが、アプリケーションを起動して UAC プロンプトに同意しても問題は解決しません。マウス移動イベントのみOK。

PS: テスト証明書でアプリケーションに署名せず、マニフェストに "requestedExecutionLevel" と uiAccess="true" を追加するだけの場合、アプリケーションは起動せず、Windows は "A referral was returned from the server." というメッセージのダイアログを表示します。テスト証明書でアプリケーションに署名した場合、アプリケーションの起動時に UAC が機能します。SendInput を呼び出してクリック イベントをシミュレートし、例外がスローされるまで、アプリケーションは動作します。

http://msdn.microsoft.com/en-us/library/bb625963.aspxで「Interface Privilege Isolation (UIPI) and integrity」に関する要件を読みましたが、これをすべて実行してもまだ機能しません。

ブログを見つけました。このブログでは、次のように書かれています。

[アプリケーション マニフェストの] requestedPrivileges 属性で UIAccess=”true” を指定することにより、アプリケーションは、特権レベルを超えてウィンドウ メッセージを送信する際の UIPI 制限をバイパスする要件を示しています。Windows Vista は、UIAccess 特権でアプリケーションを起動する前に、次のポリシー チェックを実装します。アプリケーションには、ローカル マシンの信頼されたルート証明機関の証明書ストア内の信頼されたルートに連鎖するデジタル証明書を使用して検証できるデジタル署名が必要です。アプリケーションは、Program Files ディレクトリなど、管理者のみが書き込み可能なローカル フォルダ アプリケーション ディレクトリにインストールする必要があります。

残念ながら、管理者以外のユーザーがアプリケーションをインストールできる場合、これは機能しません。

アプリケーションを最後の文「管理者以外のユーザーがアプリケーションをインストールできる場合、残念ながらこれは機能しません」に準拠させず、マニフェストに uiAccess="true" を追加して UIPI をバイパスする方法を知りたいです。

誰でもこれについて私を助けることができますか?

0 投票する
1 に答える
1955 参照

vb.net - このコードが機能しないときに別のプログラムでプログラムでマウスをクリックする方法

私は自動化の大ファンなので、機会があればいつでも、繰り返さなければならないタスクを自動化してみるのが好きです。次のコードを使用すると、通常、画面上のどこにいてもマウスをクリックできます (および、どのようなアプリケーションでも)。

これは通常問題なく動作します。私はそれをさまざまなアプリケーションで使用して、大きな効果を上げてきました。ただし、マウスとキーボードのコマンドを完全に無視しているように見えるアプリケーションに対して、マウスのクリック (およびキーストロークの送信) を実行しようとしています。マウスがプログラムでカバーされている画面の領域に移動すると、移動したり、クリックしたりしませんが、手動でマウスを離すと、正しく機能していたかのようにプロセスが続行されます。

それで、プログラムでマウスを制御する他の方法はありますか?

0 投票する
2 に答える
520 参照

c# - uiAccess=True でデスクトップ WPF アプリをインストールする際の考慮事項

バックグラウンド:

別のモニターで調光効果を作成する必要があります。Topmostand AllowsTransparency= Trueで画面全体のサイズを占める WPF Window を使用して解決したと思います。内側に黒いグロー効果があり、WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW(特に) スタイルが適用されており、ユーザーがクリックしてその背後にあるアプリにアクセスできるようになっています。

EVENT_OBJECT_REORDERWindows のイベントを監視し、呼び出しSetWindowPosて最上位の状態を他の最上位ウィンドウの上に強制します。私の概念実証テストでは、これまでのところうまく機能しているようです。

私が見つけた問題は、この減光 (ウィンドウ) がタスク バーを覆い隠すことでしたが、[スタート] メニューをクリックした場合には覆い隠されませんでした。現在、Windows 10 でテストしています。[スタート] メニューをクリックすると、[スタート] メニューとタスクバーが薄暗い (ウィンドウ) の上に表示されます。私は常にすべてが薄暗いままであることを望みました。

uiAccessアプリ マニフェストで =true を設定し、自己署名証明書を生成し、exe を "c:\program files*" にコピーすることで、この問題を解決しました。これにより、[スタート] メニューの上であっても、ウィンドウを強制的に最上位の状態にすることができます。

私の質問:

  • なしでスタートメニューの上にウィンドウを配置する方法はありますuiAccessか? または、ウィンドウを使用せずに画面を暗くする別の方法もあります (ただし、モニター ドライバーやハードウェア機能に依存しません)。

  • uiAccessそうでない場合、 =Trueで UIPI 制限をバイパスする WPF アプリを (WiX セットアップ プロジェクトなどを介して) 配布するときに、どのような考慮事項に留意する必要がありますか? セットアップ プロセス中に自己署名証明書を簡単にインストールできますか? ユーザーは追加のハードルに遭遇しますか? 私は、開発者として、これを構築する際に追加のハードルに遭遇しますか (既に述べたことは別として)?

ありがとうございました!

0 投票する
1 に答える
3268 参照

c++ - クロスプロセス PostMessage、UIPI 制限、および UIAccess="true"

セキュリティ上の理由から、アプリケーションの UI モジュールはhigh 必須の整合性レベルで実行されます。1 つのことを除いて、その中のすべてがうまく機能します。古いバージョンとの互換性のために、ユーザーが UI モジュールに対してコマンド ライン呼び出しを発行できるようにする必要があります。

現時点では、このメカニズムは次のように機能します。

  1. Windows エクスプローラーからのショートカットは、次のように私のモジュールを呼び出します。

    /li>
  2. プロセスは、このコマンド ラインを解析するときに、 FindWindowを使用して固有のクラス名module.exeで UI モジュール (または自己の別のコピー) の実行中のコピーを見つけます。次に、PostMessage APIを使用して登録済みのメッセージを送信します。

  3. 次に、実行中の UI モジュール (high完全性レベル) がメッセージを受信すると、それに応じて処理します。

問題は、UI モジュールの実行中のコピーにはhigh整合性レベルがあるため、整合性レベルが低い場合、またはショートカット コマンドを解析するために Windows エクスプローラーによって実行されたときにモジュールのコピーを受信できないため、整合性を保って実行されるmediumことです。レベル。

これに対処するために、このUIAccessフラグを見つけました ( here を参照し、「 UI 自動化アプリケーションの UIAccess」と表示されている場所までスクロールします)。

したがって、このフラグを設定して UI モジュールにコード署名すると、次のようになると仮定しました。

ここに画像の説明を入力

上で説明した UIPI の制限を回避できます。

それはうまく動作します:

ここに画像の説明を入力

しかし、私が見ているのはPostMessage、上記のアルゴリズムの API は、medium整合性レベルで実行されているモジュールから呼び出すと、依然として ERROR_ACCESS_DENIED で失敗するということです。

私はそこで何を逃したのですか?