Delen via


Registervirtualisatie

Registervirtualisatie is een toepassingscompatibiliteitstechnologie waarmee registerschrijfbewerkingen met wereldwijde impact kunnen worden omgeleid naar locaties per gebruiker. Deze omleiding is transparant voor toepassingen die lezen van of schrijven naar het register. Het wordt ondersteund vanaf Windows Vista.

Deze vorm van virtualisatie is een tussentijdse toepassingscompatibiliteitstechnologie; Microsoft is van plan het te verwijderen uit toekomstige versies van het Windows-besturingssysteem omdat meer toepassingen compatibel zijn met Windows Vista en latere versies van Windows. Daarom is het belangrijk dat uw toepassing niet afhankelijk is van het gedrag van registervirtualisatie in het systeem.

Virtualisatie is alleen bedoeld om compatibiliteit te bieden voor bestaande toepassingen. Toepassingen die zijn ontworpen voor Windows Vista en latere versies van Windows mogen niet naar gevoelige systeemgebieden schrijven, en mogen ook niet vertrouwen op virtualisatie om eventuele problemen op te lossen. Bij het bijwerken van bestaande code die moet worden uitgevoerd op Windows Vista en latere versies van Windows, moeten ontwikkelaars ervoor zorgen dat toepassingen alleen gegevens opslaan in locaties per gebruiker of in computerlocaties binnen %alluserprofile% die een toegangsbeheerlijst (ACL) correct gebruiken.

Zie de UAC Developer Guidevoor meer informatie over het bouwen van UAC-compatibele toepassingen.

Overzicht van virtualisatie

Vóór Windows Vista werden toepassingen doorgaans uitgevoerd door beheerders. Als gevolg hiervan hebben toepassingen vrij toegang tot systeembestanden en registersleutels. Als deze toepassingen worden uitgevoerd door een standaardgebruiker, mislukken ze vanwege onvoldoende toegangsrechten. Windows Vista en latere versies van Windows verbeteren de compatibiliteit van toepassingen voor deze toepassingen door deze bewerkingen automatisch om te leiden. Registerbewerkingen naar het globale archief (HKEY_LOCAL_MACHINE\Software) worden bijvoorbeeld omgeleid naar een locatie per gebruiker in het profiel van de gebruiker dat bekend staat als het virtuele archief (HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software).

Registervirtualisatie kan breed worden geclassificeerd in de volgende typen:

Registervirtualisatie openen

Als de beller geen schrijftoegang tot een sleutel heeft en de sleutel probeert te openen, wordt de sleutel geopend met de maximaal toegestane toegang voor die beller.

Als de vlag REG_KEY_DONT_SILENT_FAIL is ingesteld voor de sleutel, mislukt de bewerking en wordt de sleutel niet geopend. Zie 'Registervirtualisatie beheren' verderop in dit onderwerp voor meer informatie.

Registervirtualisatie schrijven

Als de aanroeper geen schrijftoegang heeft tot een sleutel en een waarde naar de sleutel probeert te schrijven of een subsleutel maakt, wordt de waarde naar het virtuele archief geschreven.

Als een beperkte gebruiker bijvoorbeeld probeert een waarde naar de volgende sleutel te schrijven: HKEY_LOCAL_MACHINE\Software\AppKey1, wordt de schrijfbewerking omgeleid naar HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software\AppKey1.

Registervirtualisatie lezen

Als de aanroeper leest van een sleutel die is gevirtualiseerd, geeft het register een samengevoegde weergave weer van zowel de gevirtualiseerde waarden (uit het virtuele archief) als de niet-virtuele waarden (uit het globale archief) naar de aanroeper.

Stel dat HKEY_LOCAL_MACHINE\Software\AppKey1- twee waarden V1 en V2 bevat en dat een beperkte gebruiker een waarde V3 naar de sleutel schrijft. Wanneer de gebruiker waarden uit deze sleutel probeert te lezen, bevat de samengevoegde weergave waarden V1 en V2 uit het globale archief en de waarde V3 uit het virtuele archief.

Houd er rekening mee dat virtuele waarden voorrang hebben op globale waarden wanneer deze aanwezig zijn. In het bovenstaande voorbeeld, zelfs als het globale archief waarde V3 onder deze sleutel had, wordt de waarde V3 nog steeds geretourneerd naar de beller uit de virtuele store. Als V3 uit het virtuele archief zou worden verwijderd, wordt V3 geretourneerd uit het globale archief. Met andere woorden, als V3 moet worden verwijderd uit HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software\AppKey1, maar HKEY_LOCAL_MACHINE\Software\AppKey1 een waarde V3 had, wordt die waarde geretourneerd uit het globale archief.

Bereik van registervirtualisatie

Registervirtualisatie is alleen ingeschakeld voor het volgende:

  • 32-bits interactieve processen.
  • Sleutels in HKEY_LOCAL_MACHINE\Software.
  • Sleutels waarnaar een beheerder kan schrijven. (Als een beheerder niet naar een sleutel kan schrijven, zou de toepassing zijn mislukt in eerdere versies van Windows, zelfs als deze door een beheerder werd uitgevoerd.)

Registervirtualisatie is uitgeschakeld voor het volgende:

  • 64-bits processen.

  • Processen die niet interactief zijn, zoals services.

    Houd er rekening mee dat het gebruik van het register als een IPC-mechanisme (inter-process communication) tussen een service (of een ander proces waarvoor geen virtualisatie is ingeschakeld) en dat een toepassing niet correct werkt als de sleutel is gevirtualiseerd. Als een antivirusservice bijvoorbeeld de handtekeningbestanden bijwerkt op basis van een waarde die is ingesteld door een toepassing, zal de service de handtekeningbestanden nooit bijwerken omdat de service leest uit het globale archief, maar de toepassing schrijft naar de virtuele opslag.

  • Processen die een gebruiker imiteren. Als een proces een bewerking probeert uit te voeren tijdens het imiteren van een gebruiker, wordt die bewerking niet gevirtualiseerd.

  • Kernelmodusprocessen zoals stuurprogramma's.

  • Processen met requestedExecutionLevel die zijn opgegeven in hun manifesten.

  • Sleutels en subsleutels van HKEY_LOCAL_MACHINE\Software\Classes, HKEY_LOCAL_MACHINE\Software\Microsoft\Windowsen HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT.

Registervirtualisatie beheren

Naast het beheren van virtualisatie op toepassingsniveau met behulp van requestedExecutionLevel in het manifest, kan een beheerder virtualisatie per sleutel in- of uitschakelen voor sleutels in HKEY_LOCAL_MACHINE\Software. Hiervoor gebruikt u de Reg.exe opdrachtregelprogramma FLAGS-optie met de vlaggen die in de volgende tabel worden vermeld.

Vlag Betekenis
REG_KEY_DONT_SILENT_FAIL Met deze vlag wordt het openen van registervirtualisatie uitgeschakeld. Als deze vlag is ingesteld en een open bewerking mislukt op een sleutel waarvoor virtualisatie is ingeschakeld, probeert het register de sleutel niet opnieuw te openen. Als deze vlag leeg is, probeert het register de sleutel opnieuw te openen met MAXIMUM_ALLOWED toegang in plaats van de aangevraagde toegang.
REG_KEY_DONT_VIRTUALIZE Met deze vlag wordt schrijfvirtualisatie van register uitgeschakeld. Als deze vlag is ingesteld en een bewerking voor het maken of instellen van een waarde mislukt omdat de aanroeper onvoldoende toegang heeft tot de bovenliggende sleutel, mislukt het register de bewerking. Als deze vlag leeg is, probeert het register de sleutel of waarde in het virtuele archief te schrijven. De beller moet de KEY_READ rechts op de bovenliggende sleutel hebben.
REG_KEY_RECURSE_FLAG Als deze vlag is ingesteld, worden registervirtualisatievlagmen doorgegeven vanaf de bovenliggende sleutel. Als deze vlag leeg is, worden registervirtualisatievlagmen niet doorgegeven. Als u deze vlag wijzigt, is dit alleen van invloed op nieuwe afstammingssleutels die zijn gemaakt nadat de vlag is gewijzigd. Deze vlaggen worden niet ingesteld of gewist voor bestaande afstammingssleutels.

 

In het volgende voorbeeld ziet u het gebruik van het opdrachtregelprogramma Reg.exe met de optie FLAGS om een query uit te voeren op de status van de virtualisatievlagmen voor een sleutel.

C:\>reg flags HKLM\Software\AppKey1 QUERY

HKEY_LOCAL_MACHINE\Software\AppKey1

        REG_KEY_DONT_VIRTUALIZE: CLEAR
        REG_KEY_DONT_SILENT_FAIL: CLEAR
        REG_KEY_RECURSE_FLAG: CLEAR

The operation completed successfully.

Wanneer controle is ingeschakeld op een sleutel die wordt gevirtualiseerd, wordt er een nieuwe virtualisatiecontrolegebeurtenis gegenereerd om aan te geven dat de sleutel wordt gevirtualiseerd (naast de gebruikelijke controlegebeurtenissen). Beheerders kunnen deze informatie gebruiken om de status van virtualisatie op hun systemen te bewaken.

Aan de slag met gebruikersaccountbeheer

Informatie over en configureren van gebruikersaccountbeheer

Best practices en richtlijnen voor ontwikkelaars voor toepassingen in een omgeving met minimale bevoegdheden