Was passiert intern, wenn ein Dateipfad ca. 32767 Zeichen in Windows?

Unter Windows (vorausgesetzt ab 2000) darf ein Dateipfad höchstens ungefähr 32767 Zeichen lang sein. Diese Einschränkung besteht aufgrund des internen Umgangs mitUNICODE_STRING in der nativen API (auch auf der Kernelseite, in Treibern usw.). So weit, ist es gut. Ich kenne die Theorie hinter diesem Teil.

Der Grund für die Begrenzung ist, dass dieLength undMaximumLength Mitglieder vonUNICODE_STRING Zählen Sie die Anzahl der Bytes imBuffer, sind aber selbst 16-Bit-Ganzzahlen ohne Vorzeichen.

Ich weiß auch, warum die Grenze eher eine Annäherung als eine festgelegte Grenze ist. Dies liegt hauptsächlich daran, wie Ihr Dateiname (z.\\.\C:\boot.ini) wird in seine native Form aufgelöst (z.\??\C:\boot.ini) und dann auf etwas, dem das vorangestellt isttatsächlich Volume-Gerätename und anschließend der Pfad relativ zu diesem Volume, z.\Device\HarddiskVolume2\boot.ini.

Desweiteren aus dem Windows Explorer das bekannte Symptom beim Anschlagen des ("ANSI")MAX_PATH Die Beschränkung besteht darin, vorzutäuschen, dass die Datei oder der Ordner in einigen Windows-Versionen nicht vorhanden ist (möglicherweise wurde dies irgendwann behoben).

Aber was passiert auf der Ebene des Objektmanagers, des E / A-Managers und des Dateisystemtreibers? wenn ich anrufeCreateFile() mit einem Pfad, der aussieht wie\\.\C:\...\filename.ext und der ganze Weg tutnicht das Limit überschreiten, abererreicht es, in meinem aufruf zukernel32.dll'sCreateFile() unddann wird erweitert? ...

Weder die SDKs noch die WDKs scheinen über das Thema besonders gesprächig zu sein. Oder habe ich in den falschen Abschnitten gesucht?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage