Что делает "__COMPAT_LAYER" на самом деле?

Недавно я пытался предоставить права администратора приложения без системного запроса: "Вы хотите предоставить права администратора?" и я нашел способ, который отлично работает.

Решение, которое я нашел

Я создал файл bat с именем nonadmin.bat и написал в нем код ниже

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

и если мы перетаскиваем любой exe на него, он дает им права администратора (до того, как он не позволил мне получить доступ к переменным окружения без него, но после того, как он запустил файл на лету, он действительно сработал).

Вопрос

Теперь мой вопрос:

  1. Что означает "__COMPAT_LAYER" и что он делает?
  2. Как удалить такую вещь, чтобы она снова запрашивала права администратора?
  3. Это снижает безопасность системы?

Ответы

Ответ 1

__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= команд set __COMPAT_LAYER=.

Поскольку вы устанавливаете переменную с помощью пакетного скрипта, переменная автоматически отменяется после завершения исполняемого файла, который завершается, и скрипт закрывается. Важно отметить, что параметры переменной сохраняются для любых дочерних процессов, которые порождаются выбранным исполняемым файлом.

Безопасность использования __COMPAT_LAYER
Установка __COMPAT_LAYER на RunAsInvoker фактически не дает вам прав администратора, если у вас их нет; он просто препятствует появлению всплывающего окна UAC, а затем запускает программу, как любой пользователь ее вызывал. Таким образом, безопасно использовать это, так как вы не волшебным образом получаете права администратора.

Вы также можете установить переменную в RunAsHighest (только триггеры UAC, если у вас есть права администратора, но также не предоставляют права администратора, если у вас их нет) или RunAsAdmin (всегда запускает UAC).