セキュリティ上の理由から、アプリケーションの UI モジュールはhigh
必須の整合性レベルで実行されます。1 つのことを除いて、その中のすべてがうまく機能します。古いバージョンとの互換性のために、ユーザーが UI モジュールに対してコマンド ライン呼び出しを発行できるようにする必要があります。
現時点では、このメカニズムは次のように機能します。
Windows エクスプローラーからのショートカットは、次のように私のモジュールを呼び出します。
path-to-module\module.exe -op="a, s, r"
プロセスは、このコマンド ラインを解析するときに、 FindWindowを使用して固有のクラス名
module.exe
で UI モジュール (または自己の別のコピー) の実行中のコピーを見つけます。次に、PostMessage APIを使用して登録済みのメッセージを送信します。次に、実行中の UI モジュール (
high
完全性レベル) がメッセージを受信すると、それに応じて処理します。
問題は、UI モジュールの実行中のコピーにはhigh
整合性レベルがあるため、整合性レベルが低い場合、またはショートカット コマンドを解析するために Windows エクスプローラーによって実行されたときにモジュールのコピーを受信できないため、整合性を保って実行されるmedium
ことです。レベル。
これに対処するために、このUIAccess
フラグを見つけました ( here を参照し、「 UI 自動化アプリケーションの UIAccess」と表示されている場所までスクロールします)。
したがって、このフラグを設定して UI モジュールにコード署名すると、次のようになると仮定しました。
上で説明した UIPI の制限を回避できます。
それはうまく動作します:
しかし、私が見ているのはPostMessage
、上記のアルゴリズムの API は、medium
整合性レベルで実行されているモジュールから呼び出すと、依然として ERROR_ACCESS_DENIED で失敗するということです。
私はそこで何を逃したのですか?