UAC sous Windows 7

Le
Julien Tartarin
Bonjour

Quelqu'un connait les API qui permettent d'exécuter une appli en mode Admin ?


--
Julien Tartarin
13 rue de l'Hermitage
Le Pallet, 44330
0699951234
ovh@mailjet.com
jt@sdns.fr
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Claude BELLAMY
Le #23688531
Le vendredi 26/08/2011 17:39:15, Julien Tartarin a écrit dans le
message
Bonjour

Quelqu'un connait les API qui permettent d'exécuter une appli en mode Admin
?




ATTENTION : ne pas confondre :
- l'exécution d'un processus sous un compte donné (ce qui existe depuis
W2K avec la fonction "CreateProcessWithLogonW", et que j'utilise dans
SUperExec)
- l'exécution d'un processus avec un certain niveau de privilèges
(apparu avec UAC, donc depuis Vista), pour laquelle il n'existe pas
d'API.
Par contre, il est possible d'indiquer dans un fichier .manifest dans
quel contexte doit être exécutée l'appli.

P.ex., pour qu'un exécutable requière systématiquement des privilèges
admin, il faut qu'il ait été doté d'un fichier manifest (ou compilé
avec) contenant l'instruction :

<requestedexecutionlevel level="requireadministrator" />

P.ex. pour toutes les applications que je veux être exécutées
obligatoirement avec les privilèges admin, j'utilise ce fichier

"UAC.manifest" :


<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="UAC_Elevation_Prompt"
type="win32"/>
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator"/>
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
</assembly>



Et si l'appli est déjà compilée (sans fichier manifest) , pour obliger
son exécution en tant qu'admin, on peut passer par un script qui fait
appel au verbe "runas" du shell de Windows :

Fichier "elevate.vbs"
----------- couper ici -----------
Set args = Wscript.Arguments
nbargs=args.count
If nbargs=0 Then Wscript.quit
Appli=args(0)
Params=""
For i= 1 To nbargs-1
Params=Params+" "+args(i)
Next
Set Shell=Wscript.CreateObject("Shell.Application")
Shell.ShellExecute Appli,Params,"","runas"
----------- couper ici -----------





--

May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP Expert IT Pro]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr
Julien Tartarin
Le #23690391
Dans l'article BELLAMY
P.ex., pour qu'un exécutable requière systématiquement des privilèges
admin, il faut qu'il ait été doté d'un fichier manifest (ou compilé
avec) contenant l'instruction :

<requestedexecutionlevel level="requireadministrator" />



Je veux bien compiler mon appli avec ce fichier manifest. Comment dois-je
l'inclure avec Delphi ?



--
Julien Tartarin
13 rue de l'Hermitage
Le Pallet, 44330
0699951234



Jean-Claude BELLAMY
Le #23690801
Le samedi 27/08/2011 04:10:40, Julien Tartarin a écrit dans le message
Dans l'article BELLAMY
P.ex., pour qu'un exécutable requière systématiquement des privilèges
admin, il faut qu'il ait été doté d'un fichier manifest (ou compilé
avec) contenant l'instruction :

<requestedexecutionlevel level="requireadministrator" />



Je veux bien compiler mon appli avec ce fichier manifest. Comment dois-je
l'inclure avec Delphi ?




TU crées (sous NOTEPAD p.ex.) un fichier .manifest comme celui que j'ai
donné dans mon message précédent (ici j'ai repris uniquement
l'essentiel), en l'appelant (p.ex.) "RequireAdmin.manifest" :


------------ couper ici ------------
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="X86"
name="Project3" type="win32" />
<description>Privilèges admin obligatoires</description>
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
------------ couper ici ------------

Ensuite, toujours sous NOTEPAD (p.ex.), tu crées un fichier nommé
(p.ex.) "RequireAdmin.rc" contenant cette unique ligne :

------------ couper ici ------------
1 24 "RequireAdmin.manifest"
------------ couper ici ------------

(pour info, 1 est l'ID de la ressource, et 24 son type)


Ensuite, dans une fenêtre de commandes, dans le dossier contenant les 2
fichier .manifest et .rc, tu exécutes la commande suivante :

brcc32 RequireAdmin.rc

Cela va générer un fichier "RequireAdmin.res"

et pour finir, tu insères la ligne suivante dans ton unité principale,
p.ex. après la déclaration "Uses" de "implementation", :

{$R 'RequireAdmin.RES'}

et tu compiles !





Tu peux aussi télécharger un tel fichier .RES depuis mon site, à
l'adresse :

http://www.bellamyjc.org/download/UAC_Manifest.RES
(876 octets)
(si tu optes pour ce fichier, à moins de le renommer, évidemment il
faudra changer la ligne $R... en {$R UAC_Manifest.RES'} )



NB: c'est plus long à décrire qu'à faire !!!

--

May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP Expert IT Pro]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr
Julien Tartarin
Le #23691581
NB: c'est plus long à décrire qu'à faire !!!



Merci Jean-Claude. Je n'imaginais pas que c'était aussi simple. Il suffisait de
connître le type.

Je vais télécharger ton fichier .RES et l'éditer avec XN Resource Editor.


--
Julien Tartarin
13 rue de l'Hermitage
Le Pallet, 44330
0699951234



Publicité
Poster une réponse
Anonyme