locked
Comment étendre la virtualisation des écritures de fichier ? RRS feed

  • Question

  • Salut à tous,

    J'ai un programme assez ancien, installé dans L:\Program Files, que je souhaite faire bénéficier de la virtualisation du contrôle de compte d'utilisateur. Le problème, c'est que les écritures à virtualiser se font justement sur L:. Or, il semble que la virtualisation ne fonctionne pas en dehors de quelques répertoires sur le volume système (C:\Windows et C:\Program Files je crois).

    Connaissez-vous un moyen d'étendre cette virtualisation ? J'ai tenté les choses suivantes qui n'ont pas marché :

    1. Créer une jonction dans C:\Program Files vers le dossier de mon programme dans L:\Program Files, puis tenter une écriture depuis un processus virtualisé en passant par cette jonction
    2. Faire la même chose avec un lien symbolique vers un répertoire
    3. Ajouter un point de montage dans C:\Program Files vers le volume accessible via L: (il y a donc deux moyens d'y accéder, par L: et par C:\Program Files\Point de montage), puis tenter une écriture depuis un processus virtualisé en passant par ce point de montage
    4. Créer une jonction/un lien symbolique de répertoire dans %USERPROFILE%\AppData\Local\VirtualStore\Program Files vers L:\Program Files\Mon programme et tenter une écriture depuis un processus virtualisé en passant par cette jonction/ce lien symbolique

    Pour le point 3, j'ai également supprimé l'accès par L: et redémarré l'ordinateur, pour le cas où une opération de « canonisation » des chemins d'accès se faisait en L:, ce qui empêchait la virtualisation de l'écriture. Mais de toute évidence ce n'est pas le cas...

    Je pourrais également modifier les droits NTFS afin d'autoriser l'application à écrire dans les zone de L: où elle le souhaite, c'est d'ailleurs ce que j'ai fait actuellement; mais je renonce alors à un avantage de la virtualisation auquel je tiens, à savoir la possibilité de disposer de réglages différents par utilisateur.

    Donc, y a-t-il un moyen d'activer cette virtualisation ailleurs, peut-être par un autre chemin détourné ? Même au prix d'une désactivation de la virtualisation sur C:, car je n'en ai pas besoin.

    Merci de votre aide !

    mercredi 9 juin 2010 17:27

Réponses

  • Merci Roxana,

    Depuis le temps j'ai finalement trouvé la solution, qui semble peu connue même des professionnels (j'ai même lu un article où Mark Russinovitch disait que ce n'était pas possible...).

    Il est possible d'activer la virtualisation du contrôle de compte d'utilisateur sur des emplacements supplémentaires du système de fichiers, définis par l'utilisateur. C'est une simple modification de registre, qui nécessite un redémarrage du système (un redémarrage du filtre luafv suffirait peut-être, mais j'ai toujours préféré redémarrer le système). Dans mon cas, à savoir activer la virtualisation sur "L:\Program Files\Hasbro Interactive\RollerCoaster Tycoon" (oui, tout ça pour un jeu :) ), voici ma modification :

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\luafv\Parameters\FileList\Device\HarddiskVolume7\Program Files\Hasbro Interactive\RollerCoaster Tycoon]
    "Exclude"=dword:00000000

    Le point le plus délicat ici était de déterminer que le volume accessible par L: correspondait à « HarddiskVolume7 ». Pour cela, je n'ai trouvé aucune information particulière, et ma méthode a consisté à utiliser le gestionnaire de périphériques, afficher les volumes de stockage (faites afficher les périphériques cachés), déterminer de quel volume il s'agit, par exemple en regardant le chemin d'accès à l'instance du périphérique et en vous aidant des valeurs indiquées après SIGNATURE, OFFSET, et LENGTH, qui (si je me souviens bien), permettent d'identifier les disques (signatures identiques pour deux volumes <=> même disque), l'ordonnancement sur le disque avec OFFSET et la taille du volume avec LENGTH. Si vous regardez le gestionnaire de disque logique en même temps, vous devriez pouvoir ainsi déterminer quel volume de stockage correspond à quoi. Une fois identifié le volume qui vous intéresse, consultez le nom d'objet du périphérique physique, c'est l'information recherchée !

    Vous pouvez également essayer tous les volumes les uns après les autres jusqu'à voir quand ça marche, mais si vous redémarrez à chaque fois, ça risque de prendre un certain temps. Vous pourriez aussi ajouter tous les HarddiskVolumeX possibles dans le registre, mais là ça devient vraiment moche !

    Voici donc ma méthode, j'espère qu'elle vous sera utile.

    • Marqué comme réponse NovHak lundi 15 novembre 2010 00:29
    lundi 15 novembre 2010 00:19

Toutes les réponses

  • Bonjour,

    Plus de détails sur la virtualisation d’UAC : http://technet.microsoft.com/fr-fr/library/cc709628(WS.10).aspx  et  http://msdn.microsoft.com/en-us/library/bb756960.aspx

    Je vais déplacer votre question vers MSDN.

    Cordialement,  

    Roxana


    Roxana Panait, MSFT ________ Votez l’article qui vous est utile ou postez un pour participer au concours : Appel a la contribution! Publiez un tip ou un petit tutorial (comment faire) sur la technologie que vous connaissez le mieux ! - Appel à la contribution
    mardi 15 juin 2010 09:04
  • Merci Roxana,

    Depuis le temps j'ai finalement trouvé la solution, qui semble peu connue même des professionnels (j'ai même lu un article où Mark Russinovitch disait que ce n'était pas possible...).

    Il est possible d'activer la virtualisation du contrôle de compte d'utilisateur sur des emplacements supplémentaires du système de fichiers, définis par l'utilisateur. C'est une simple modification de registre, qui nécessite un redémarrage du système (un redémarrage du filtre luafv suffirait peut-être, mais j'ai toujours préféré redémarrer le système). Dans mon cas, à savoir activer la virtualisation sur "L:\Program Files\Hasbro Interactive\RollerCoaster Tycoon" (oui, tout ça pour un jeu :) ), voici ma modification :

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\luafv\Parameters\FileList\Device\HarddiskVolume7\Program Files\Hasbro Interactive\RollerCoaster Tycoon]
    "Exclude"=dword:00000000

    Le point le plus délicat ici était de déterminer que le volume accessible par L: correspondait à « HarddiskVolume7 ». Pour cela, je n'ai trouvé aucune information particulière, et ma méthode a consisté à utiliser le gestionnaire de périphériques, afficher les volumes de stockage (faites afficher les périphériques cachés), déterminer de quel volume il s'agit, par exemple en regardant le chemin d'accès à l'instance du périphérique et en vous aidant des valeurs indiquées après SIGNATURE, OFFSET, et LENGTH, qui (si je me souviens bien), permettent d'identifier les disques (signatures identiques pour deux volumes <=> même disque), l'ordonnancement sur le disque avec OFFSET et la taille du volume avec LENGTH. Si vous regardez le gestionnaire de disque logique en même temps, vous devriez pouvoir ainsi déterminer quel volume de stockage correspond à quoi. Une fois identifié le volume qui vous intéresse, consultez le nom d'objet du périphérique physique, c'est l'information recherchée !

    Vous pouvez également essayer tous les volumes les uns après les autres jusqu'à voir quand ça marche, mais si vous redémarrez à chaque fois, ça risque de prendre un certain temps. Vous pourriez aussi ajouter tous les HarddiskVolumeX possibles dans le registre, mais là ça devient vraiment moche !

    Voici donc ma méthode, j'espère qu'elle vous sera utile.

    • Marqué comme réponse NovHak lundi 15 novembre 2010 00:29
    lundi 15 novembre 2010 00:19
  • Bonjour,

    Merci beaucoup de votre retour,

    Cordialement,

    Roxana



    Roxana PANAIT, MSFT  Follow TechNetFr on Twitter 

    • Votez l’article qui vous est utile ou postez un pour participer au concours : Appel à la contribution

    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.
    lundi 15 novembre 2010 12:00