web-dev-qa-db-fra.com

Que fait réellement «__COMPAT_LAYER»?

Récemment, j'essayais de donner à mes droits d'administrateur d'application sans que le système demande "Voulez-vous donner des droits d'administrateur?" et j'ai trouvé un moyen qui fonctionne parfaitement.

Solution que j'ai trouvée

J'ai créé un fichier bat nommé nonadmin.bat et y ai écrit le code ci-dessous

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

et si nous faisons glisser un exe dessus, cela leur donne des droits d'administrateur (avant qu'il ne me permette pas d'accéder aux variables d'environnement sans lui mais après avoir fait rouler le fichier sur bat, cela a fonctionné).

Question

Maintenant ma question est: -

  1. Que signifie réellement "__COMPAT_LAYER" et que fait-il?
  2. Comment supprimer une telle chose pour qu'elle demande à nouveau des droits d'administrateur?
  3. Cela réduit-il la sécurité du système?
17
Agent_Spock

__ COMPAT_LAYER, et comment l'utiliser
__ COMPAT_LAYER est une variable d'environnement système qui vous permet de définir des couches de compatibilité, qui sont les paramètres que vous pouvez ajuster lorsque vous cliquez avec le bouton droit sur un exécutable, sélectionnez Propriétés et accédez à l'onglet Compatibilité.

Imgur

Il y a plusieurs options au choix en plus de celle que vous connaissez:

  • 256Color - Fonctionne en 256 couleurs
  • 640x480 - Fonctionne avec une résolution d'écran de 640x480
  • DisableThemes - Désactive les thèmes visuels
  • Win95 - Exécute le programme en mode de compatibilité pour Windows 95
  • Win98 - Exécute le programme en mode de compatibilité pour Windows 98/ME
  • Win2000 - Exécute le programme en mode de compatibilité pour Windows 2000
  • NT4SP5 - Exécute le programme en mode de compatibilité pour Windows NT 4.0 SP5

Vous pouvez utiliser plusieurs options en les séparant par un espace: set __COMPAT_LAYER=Win98 640x480

Suppression de la variable __COMPAT_LAYER
Ces paramètres persistent tant que la variable existe. La variable cesse d'exister lorsque soit l'invite de commande dans laquelle la variable a été définie est fermée, soit lorsque la variable est manuellement désactivée avec la commande set __COMPAT_LAYER=.

Étant donné que vous définissez la variable via un script de traitement par lots, la variable est automatiquement désactivée une fois que l'exécutable que vous faites glisser dessus se termine et que le script se ferme. Il est important de noter que les paramètres des variables persistent dans tous les processus enfants générés par l'exécutable que vous sélectionnez.

La sécurité d'utilisation de __COMPAT_LAYER
Définir __COMPAT_LAYER sur RunAsInvoker ne vous donne en fait pas de privilèges d'administrateur si vous ne les avez pas; cela empêche simplement le pop-up UAC d'apparaître, puis exécute le programme comme n'importe quel utilisateur l'a appelé . En tant que tel, il est sûr de l'utiliser car vous n'obtenez pas comme par magie les droits d'administrateur.

Vous pouvez également définir la variable sur RunAsHighest (déclenche uniquement UAC si vous avez des droits d'administrateur, mais n'accorde pas non plus de droits d'administrateur si vous n'en avez pas) ou RunAsAdmin (déclenche toujours UAC).

25
SomethingDark