Uac Windows Et Delphi
Recherche de Documents : Uac Windows Et Delphi. Rechercher de 53 000+ Dissertation Gratuites et Mémoiresnstater que même si la démarche est louable, dans les faits il existe beaucoup trop de limites à ce dispositif pour être utilisé avec efficacité …
2/Que vous soyez utilisateur standard ou administrateur, tout lancement d’un processus devant accéder au système doit provoquer l’appel d’un écran de confirmation d’exécution. Deux boites de dialogues différentes assurent cette tâche.
[pic]
En mode utilisateur, demande du mot de passe pour une élévation de privilège.
[pic]
En mode administrateur, une simple confirmation.
Important
C’est le processus (l’exe ou le COM) dans sa globalité qui fonctionne en mode administrateur ou utilisateur. N’envisagez donc pas d’avoir dans le même programme une partie du code demandant l’élévation de privilège administrateur. C’est au lancement du programme vous qu’il faut déterminer si le mode utilisateur standard suffit ou si le mode administrateur sera nécessaire.
Quelques règles de bonne conduite
Un ensemble de règles pour les nouveaux développements et bien sûr pour la reprise des anciens programmes peu facilement être appliqué.
1/Placer les données utilisateurs dans le répertoire de l’utilisateur ou dans un répertoire commun.
2/ Séparation du code en deux exécutables (ou 1 exécutable + 1 composant COM ). Toutes les fonctions ne nécessitant pas une élévation de privilège seront placées dans le programme principal. Les fonctions réservées à l’administrateur seront regroupées dans le second programme. Le premier ou le second processus devra disposer d’un mécanisme d’élévation de privilège pour les fonctions administrateurs.
3/Définir le niveau de sécurité que requière votre programme et créer un fichier manifest avec un des trois niveaux suivants (voir comment plus loin pour la création du fichier manisfest).
AsInvoker = le programme s’exécute avec le même niveau de droit que le parent.
HighestAvailable = l’application s’exécute avec les privilèges les plus hauts que l’utilisateur puisse obtenir.
RequireAdministrator = l’application ne peut être exécutée que par un administrateur.
Dans les 3 cas, il n’y aura plus de redirection vers VirtualStore.
4/ Dans vos sources, ne pas ouvrir les fichiers situés dans les répertoires protégés ou dans la registry avec un Flag WRITE ou dans un mode autorisant l’écriture.
5/ Ne pas utiliser le dossier de redirection (VirtualStore) pour vos nouveaux programmes et faites en sorte que ceux existants ne l’utilisent plus, car il n’est pas garanti que ce dossier et sa philosophie d’utilisation soient maintenus dans les prochaines versions de Windows.
6/ Est-il nécessaire de le préciser, ne jamais désactiver l’UAC, même, si cela permet de rendre a nouveau opérationnel un programme dans l’urgence. Il y a d’autres solutions.
7/ Informer l’utilisateur de la nécessité d’une élévation des droits par le symbole Bouclier (Shield)
[pic]
Pour le moment, nous en savons suffisamment pour commencer à travailler, mais je vous conseille néanmoins la lecture de l’excellent article de jacques MASSA sur l’UAC
http://msdn2.microsoft.com/fr-fr/library/bb469893.aspx
Cet article n’est pas orienté Delphi (et pour cause), mais vous y trouverez un complément d’information et disposerez ainsi d’une base de connaissance solide.
Comment faire pour
Déplacer les données vers un répertoire autre que ceux protégés.
Pour cela, utilisez les fonctions habituelles de localisation des répertoires particuliers
http://delphi.developpez.com/faq/?page=repertoire#specialdirectory
Rendre rapidement opérationnel un programme dont vous n’avez pas le source
Attention : opérationnel ne veux pas dire compatible VISTA au sans UAL du terme
Par l’ajout d’un fichier manifest externe.
Exemple
Voici le source d’un fichier manifest édité avec le notepad et enregistré sous le nom ‘NonExecutable.Exe.Manisfest’ et dans le même répertoire que l’exécutable. Ligne 8, choisissez le niveau de protection entre AsInvoker, HighestAvailable, et RequireAdministrator.
essai Application
ICI
Au prochain lancement, vous serez invité à passer en mode administrateur. A partir de ce moment, le programme se comportera comme sous XP, c’est dire sans redirection.
Ajout d’un fichier manifest interne
Créez le même fichier manifest que précédemment. Nommez-le ‘MonManifest.manifest’ par exemple.
Toujours avec le notepad, créez un second fichier nommé ‘MonManifest.rc’ et contenant cette simple ligne
1 24 "MonManifest.manifest"
Depuis le répertoire contenant ces 2 fichiers, passez en mode commande DOS (cmd) Puis compilez la ressource en tapant : brcc32 MonManifest.rc
Vous obtiendrez un fichier de ressource nommé MonManifest.res . Ajouter cette ligne
{$R 'MonManifest.res' 'MonManifest.rc' } au fichier project.dpr pour l’inclure en tant que ressources lors de la compilation Delphi.
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
{$R 'MonManifest.res' 'MonManifest.rc' } // ajouter cette ligne ici dans le source du projet
Lancement d’un exe en mode administrateur depuis un autre programme Delphi.
Cas typique de l’updater, le programme principal lance un second programme avant de mourir. Ce second programme se charge du download, de la décompression éventuelle, de l’installation et de la relance du programme principal en nouvelle version .
Dans ce cas, utilisez simplement ce code (pas besoin de manifest)
procedure RunAsAdmin(hWnd : HWND; aFile : String; aParameters : String);
Var
Sei : TShellExecuteInfoA;
begin
Fillchar(sei,SizeOf(sei),0);
sei.cbSize := SizeOf(sei);
sei.Wnd := hWnd;
sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
sei.lpfile := PChar(aFile);
sei.lpVerb := 'runas';
sei.lpParameters := PChar(aParameters);
...