Hallo,
ich habe ein Problem mit der UAC auf Windows 2008 R2:
Ich habe eine installierte Anwendung, deren Ausführungdateien im Programme (x86)-Verzeichnis abgelegt sind. Die Anwendungsdaten liegen unter dem versteckten ProgramData Verzeichnis. Wenn die Anwendung startet, wird bei UAC-Virtualisierung im Taskmanager
der Wert "Nicht zugelassen" angezeigt. Das bedeutet für mich, dass keine Dateien virtualisiert werden. In der lokalen Sicherheitsrichtlinie ist der Eintrag "Datei- und Registrierungsschreibfehler an Einzelbenutzerstandorte virtualisieren"
deaktiviert!
Der Benutzer, unter dem die Anwendung läuft, besitzt die Standard-Stufe der Benutzersteuerung. Die Anwendung hat ein eingebundenes Manifest unter dem Ressourcenknoten RT_MANIFEST mit der ID 1:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32" processorArchitecture="*" version="6.0.0.0" name="Symundo" />
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" language="*" processorArchitecture="*" publicKeyToken="6595b64144ccf1df"/>
</dependentAssembly>
</dependency>
<ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2">
<ms_asmv2:security>
<ms_asmv2:requestedPrivileges>
<ms_asmv2:requestedExecutionLevel level="asInvoker" uiAccess="false" />
</ms_asmv2:requestedPrivileges>
</ms_asmv2:security>
</ms_asmv2:trustInfo>
</assembly>
Nun wird von der Anwendung eine Datei im ProgramData-Verzeichnis geändert. Jedoch geschieht es unter diesen Voraussetzungen, dass
a) diese Datei bei Schreibzugriffen virtualisiert wird, also unter ...Benutzer\AppData\Local\VirtualStore... zu finden ist und dort aktualisiert wird, obwohl Virtualisierung ausgeschaltet ist!!!
b) bei Lesezugriffen jedoch die Datei unter ProgramData gelesen wird (!), also die unveränderte Datei !!!
Das führt zum vollendeten Chaos.
Das Debuggen der Anwendung hat ergeben, dass Schreib- wie Lesezugriffe ohne Fehler durchgeführt werden und sich immer auf die Datei im ProgramData Verzeichnis beziehen. Die Anwendung bekommt überhaupt nicht mit, dass irgendetwas falsch läuft.
Wie kann ich es erreichen, dass dieses Verhalten aufgehoben ist, d.h. eine Virtualisierung nicht mehr stattfindet?
Wie kann ich erkennen, welche Dateien des Token virtualisiert werden/worden sind, um adäquat darauf zu reagieren?
Ist ProgramData tatsächlich der richtige Ort zur Aufbewahrung von veränderlichen Programmdaten für alle User?
Ich hoffe, dass irgendjemand meine Fragen beantworten kann!
Schönen Gruß
René