Heute noch ein Blog-Beitrag zu einem Mysterium, auf welches mich ein Blog-Leser angesprochen hat. Es gibt um das Fragezeichen, welches in der Registrierung in manchen Pfadangaben zu finden ist.
Anzeige
Worum geht es?
Blog-Leser Johann V. kontaktierte mich mit einer seltsamen Beobachtung, die er kürzlich gemacht hat. Hier seine Information.
Ein Kunde von mir betreibt einen Windows Server 2012R2 mit aktuellem Patchstand. Auf diesem Server läuft eine Telefoniesoftware der Telekom die über IP mit einer Octopus FX Telefonanlage kommuniziert.
Nach der Installation der Telekom Telefoniesoftware fielen mir Fehler im Anwendungslog auf. Diese Einträge zeigten an, dass der Windows Installer nach verschiedenen *.dll sucht und diese aber unter dem in der Windowsregistrierung, dem dazu gehörenden Schluessel und dem darin aufgeführten Pfad nicht finden kann.
Ein Bespiel für solch ein Pfadangabe wäre C:\?Windows\SysWOW64\msvcrt.dll
Was nach genauem Hinsehen auffällt ist das ? in der Pfadangabe und die Erkenntnis, dass der Installer die dll nicht finden kann ist dann nicht weiter überraschend. Nach weiterem Suchen war ich dann aber doch überrascht das dieses ? in allen Registrierungsschluesseln und den entsprechenden Pfadangaben zu dll-Dateien gesetzt ist! Nicht nur für das Installationserzeichnis, dass für die Telefoniesoftware ist sondern auch im Windows\SysWOW64 und z.B. auch im Windows\System32.
Alleine das System32 hat über die 3000 dll's und so wie es aussieht hat jeder Installer-Pfadeintrag dazu das ? beinhaltet.
Ich habe dann mit dem String C:\? auf einem anderem 2012R2 gesucht und bin ebenfalls fündig geworden. Danach hatte ich telefonisch einen Kollegen gebeten, mal auf seinem 2012R2 zu suchen und dieser wurde ebenfalls fündig!
Google kann mir zu dem String C:\? nichts sagen, denn er weiß wohl nichts dazu…
Ist dieses ? vielleicht eine Art Wildcard oder ein Fehler oder was was bisher einfach keinem aufgefallen ist ?
Fakt ist, dass dieser oben beschriebene Server die Fehler im Anwendungslog nun nicht mehr hat und ich für meinen Teil nach Bereinigung der Registrierungspfade nun erstmal abwarten werde, ob die Maschine die nächsten Tage stabil durchlaufen wird.
Er meinte noch: Vielleicht würde ein Eintrag zu dieser die Sache mit dem ? in ihrem Blog zur Aufklärung beitragen …
Nicht bei meinem Windows 7-Client
An dieser Stelle habe ich dann erst einmal geschluckt. Irgendwie war mir, als hätte ich so etwas mit den Fragezeichen schon mal gesehen. Eine schnelle Suche unter Windows 7 mittels des Registrierungseditors ergab bei mir jedoch keine Treffer. Was es gibt, sind zwei Fragezeichen ?? in Schlüsseln wie:
Anzeige
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
Ich habe dann diverse Suchmuster probiert und bin dann doch auf entsprechende Einträge gestoßen. Nachfolgender Screenshot zeigt einen solchen Registrierungseintrag.
Was weiß das Internet?
Im Internet wurde ich bei einer Suche nach einer Erklärung sofort fündig. In diesem MS Answers-Forenbeitrag spricht ein Benutzer dies an. Normalerweise sollte dies kein Problem darstellen, aber es gibt auch Problemfälle (hier, hier und hier (link https://community.flexerasoftware.com/showthread.php?144659-Question-mark-in-path-quot-C-quot-instead-of-quot-C-quot kaputt)). Bei superuser.com wird diese Frage beispielsweise in diesem Forenthread angesprochen.
- Zwei Fragezeichen \??\ in Pfadangaben sind NT Object Manager-Objektnamen. Der Objektmanager organisiert viele verschiedene Arten von Systemressourcen (z.B. Geräte, Speicherbereiche, Fensterstationen, Ereignisse) in einer baumartigen Struktur. Hier gibt es noch eine Erklärung dazu.
- Ein Fragezeichen \\?\ ist nur ein Platzhalter für das Laufwerk, auf dem die Ressource liegt.
Microsoft hat ein Dokument Naming Files, Paths, and Namespaces (on MSDN) veröffentlicht, welches eine Erklärung enthält. Die Windows-API besitzt viele Funktionen, die auch Unicode-Versionen bereitstellen, um einen erweiterten Pfad für eine maximale Gesamtpfadlänge von 32.767 Zeichen zu ermöglichen. Dieser Pfadtyp besteht aus Komponenten, die durch umgekehrte Schrägstriche getrennt sind, jeweils bis zu dem Wert, der im Parameter lpMaximumComponentLength der GetVolumeInformation-Funktion zurückgegeben wird. Dieser Rückgabewert ist normalerweise 255 Zeichen lang. Um einen Pfad mit erweiterter Länge anzugeben, wird das Präfix \\?\a verwendet.
Wenn eine Software mit dieser Notation nichts anfangen kann, dürfte es das Problem geben, dass der Rückgabewert nicht sauber interpretiert werden kann. Der Registrierungseintrag ist dann scheinbar falsch. Vielleicht hilft es einem Betroffenen weiter.
Anzeige