web-dev-qa-db-ja.com

'__COMPAT_LAYER'は実際に何をしますか?

最近、私は「管理者権限を与えますか?」を要求するシステムなしでアプリケーション管理者権限を与えようとしましたと完璧に機能する方法を見つけました。

解決策が見つかりました

nonadmin.batという名前のbatファイルを作成し、その中に以下のコードを記述しました

cmd min C set __COMPAT_LAYER=RunAsInvoker && start  %1

そして、exeをドラッグすると、管理者権限が与えられます(それなしで環境変数にアクセスすることはできませんでしたが、batでファイルをドラッグした後は機能しました)。

質問

今私の質問は:

  1. 実際に「__COMPAT_LAYER」とは何を意味し、何をしますか?
  2. 管理者権限を再度要求するようにそのようなものを削除するにはどうすればよいですか?
  3. これによりシステムのセキュリティが低下しますか?
17
Agent_Spock

__ COMPAT_LAYER、およびその使用方法
__ COMPAT_LAYERは、互換性レイヤーを設定できるシステム環境変数です。これは、実行可能ファイルを右クリックして[プロパティ]を選択し、[互換性]タブに移動するときに調整できる設定です。

Imgur

あなたが知っているものに加えて、 選択するいくつかのオプション があります:

  • 256Color-256色で実行
  • 640x480-640x480の画面解像度で実行
  • DisableThemes-視覚テーマを無効にします
  • Win95-Windows 95の互換モードでプログラムを実行します
  • Win98-Windows 98/MEの互換モードでプログラムを実行します
  • Win2000-Windows 2000の互換モードでプログラムを実行します
  • NT4SP5-Windows NT 4.0 SP5の互換モードでプログラムを実行します

複数のオプションを使用するには、それらをスペースで区切ります:set __COMPAT_LAYER=Win98 640x480

__ COMPAT_LAYER変数の設定解除
これらの設定は、変数が存在する限り保持されます。変数が設定されたコマンドプロンプトが閉じられるか、コマンドset __COMPAT_LAYER=を使用して変数が手動で設定解除されると、変数は存在しなくなります。

バッチスクリプトを使用して変数を設定しているため、変数をドラッグした実行可能ファイルが完了してスクリプトが終了すると、変数は自動的に設定解除されます。変数の設定は、選択した実行可能ファイルによって生成されるすべての子プロセスに保持されることに注意することが重要です。

__COMPAT_LAYERを使用するセキュリティ
__ COMPAT_LAYERをRunAsInvokerに設定しても、管理者権限がない場合は実際には管理者権限が付与されません; UACポップアップが表示されないようにするだけで、 ユーザーが呼び出したものとしてプログラムを実行します 。そのため、魔法のように管理者権限を取得していないため、これを使用しても安全です。

また、変数を RunAsHighest (管理者権限がある場合のみUACをトリガーしますが、管理者権限がない場合は管理者権限を付与しません)またはRunAsAdmin(常にUACをトリガーします)に設定することもできます。

25
SomethingDark