AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) UNC Pfade + \\?\ MAX_MATH usw. (Win Ver. 1607)
Thema durchsuchen
Ansicht
Themen-Optionen

UNC Pfade + \\?\ MAX_MATH usw. (Win Ver. 1607)

Ein Thema von MicMic · begonnen am 23. Jan 2021 · letzter Beitrag vom 25. Jan 2021
Antwort Antwort
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

UNC Pfade + \\?\ MAX_MATH usw. (Win Ver. 1607)

  Alt 23. Jan 2021, 18:05
Hallo,
habe ich das richtig verstanden?
Bei längeren Pfaden (260) gibt man "\\?\" mit an.

Zum Beispiel:

"\\?\c:\huhu\ich\bin\der\boss\usw...\" und ich glaube bei Root aber nicht (falsch="\\?\c:\")

Beispiel für normales UNC:
weniger als 260 = "\\SERVER\huhu\ich\bin\der\boss\"
mehr als 260 = \\?\UNC\SERVER\huhu\ich\bin\der\boss\usw...\"

Bis hier korrekt?

Ab Windows 10 - 1607 benötigt man bei einigen Funktionen das "\\?\" nicht mehr. Also bedeutet das, dass ich bei UNC-Pfaden mit mehr als 260 Zeichen dann hier ebenfalls nicht mehr "\\?\UNC\" angeben muss?

Das 1607 Update wird z.B. bei "FindFirstFileW" angegeben. Zum Beispiel bei "GetFinalPathNameByHandleW" nicht. Ich dachte ja erst, dass alle Funktionen mit "W" am Schluss, dieses Update bekommen haben. Wenn das nicht so ist (also nicht alle Funktionen), gibt es da irgendwo eine Info-Liste von Microsoft? Ich kann mir nämlich vorstellen, dass auf den "docs.microsoft.com" Seiten (wo jede Funktion beschrieben wird) evtl. die Info zu den 1607Update nicht immer angegeben wurde, die Funktion es aber dann doch kann.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#2

AW: UNC Pfade + \\?\ MAX_MATH usw. (Win Ver. 1607)

  Alt 23. Jan 2021, 19:39
Zitat:
und ich glaube bei Root aber nicht
Du kannst überall \\?\ angeben. Egal ob root oder nicht und egal ob mehr oder weniger als 260 Zeichen.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#3

AW: UNC Pfade + \\?\ MAX_MATH usw. (Win Ver. 1607)

  Alt 23. Jan 2021, 19:40
Bis hier korrekt?
Bislang hab ich das auch so verstanden.

Zitat:
Ab Windows 10 - 1607 benötigt man bei einigen Funktionen das "\\?\" nicht mehr.
Ja, mit einem großen Aber: Man kann das Long Path Prefix nur dann weglassen, wenn das im System aktiviert ist und die Anwendung ein Manifest enthält, das angibt, dass die Anwendung Long Path Aware ist!

Siehe auch den zugehörigen MS-Artikel:
Zitat von Microsoft:
Starting in Windows 10, version 1607, MAX_PATH limitations have been removed from common Win32 file and directory functions. However, you must opt-in to the new behavior.
(Hervorhebung von mir.) Also mit "ab Windows 1607 geht das automatisch" wird das nichts, denn Anwendungen müssen in jedem Fall mit entsprechendem Manifest neu kompiliert werden.

Zitat:
Also bedeutet das, dass ich bei UNC-Pfaden mit mehr als 260 Zeichen dann hier ebenfalls nicht mehr "\\?\UNC\" angeben muss?
Das wird auch auf UNC-Pfade zutreffen, sofern diese an die "unlimitierten" Funktionen gegeben werden, die in oben verlinktem Artikel angegeben sind.

Zitat:
Das 1607 Update wird z.B. bei "FindFirstFileW" angegeben. Zum Beispiel bei "GetFinalPathNameByHandleW" nicht.
Doch, siehe Liste in oben verlinktem Artikel.

Grüße
Dalai
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#4

AW: UNC Pfade + \\?\ MAX_MATH usw. (Win Ver. 1607)

  Alt 23. Jan 2021, 19:56
Die MaxPath Sache erkläre ich in diesem Video ab ca. 5m40s.

Ich muss aber gestehen, dass ich nicht auf die UNC Sache eingehe.

Dateipfade - ein Einstieg, Vorstellung von nützlichen Funktionen und das MAX_PATH Limit brechen
https://www.youtube.com/watch?v=pTEJxX3SFFU
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott

Geändert von generic (23. Jan 2021 um 19:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: UNC Pfade + \\?\ MAX_MATH usw. (Win Ver. 1607)

  Alt 24. Jan 2021, 01:21
Jupp, seit Win10 1607 ist die MAX_PATH-Grenze bei vielen APIs inzwischen aufgehoben, auch ohne mit UNC rumspielen zu müssen,
allerdings muß es in der Registry erst aktiviert werden, zusätzlich zum Manifest.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem > LongPathsEnabled

Und nein, neu kompiliert muß nichts werden.
Das Manifest liegt in den Resourcen und Diese lassen sich auch nachträglich noch editieren.
Eventuell muß man noch neu signieren, jedenfalls wenn die EXE signiert war.
$2B or not $2B

Geändert von himitsu (24. Jan 2021 um 01:28 Uhr)
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: UNC Pfade + \\?\ MAX_MATH usw. (Win Ver. 1607)

  Alt 24. Jan 2021, 13:59
Danke für Eure Anregungen und Infos.
Also wenn das alles erst aktiviert werden muss bzw. ab und zu (wenn es halt noch nicht ist beim Endbenutzer), dann ist der alte Weg ("\\?\" und "\\?\UNC\") wohl besser. Blöd ist aber echt, wenn man vor doofen Problemen steht, die sowieso immer vorhanden sind. Zum Beispiel das laden eines Icons aus EXE-Dateien in so einem langen Pfad. Da geht halt nicht SHGetFileInfo und andere Icon-Routinen wegen MAX_PATH. Die Umwandlung zu einem kurzen Pfad gibt es zwar auch aber es wird beschrieben, dass dies auch nicht immer geht. Bei dem Icon-Beispiel, wäre man wohl nur auf der sicheren Seite, wenn man aus der Exe-Datei den Icon-Header sucht und direkt das Icon mit CreateFile herausliest.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: UNC Pfade + \\?\ MAX_MATH usw. (Win Ver. 1607)

  Alt 25. Jan 2021, 11:37
Ja, ganz früher gab es nur Kurz,
dann wurde Optional zusätzlich noch Lang angehängt (in FAT: in mehreren speziellen "Kurz"-Einträgen auf den originalen Eintrag folgend)

Später wurden im NTFS standardmäßig keine Kurzen Einträge mehr erzeugt, (oder man muß in der Registry die Einstellungen den NTFS-Treiber anpassen und diese Funktion wieder aktivieren)
außer man erstellte die Datei mit der ANSI-API (CreateFileA), bzw. wenn man mit gewissen ANSI-APIs nach Dateien suchte (FindFirstFileA), dann wurde auch noch der Kurzname angelegt (falls nötig)
und aktuell, oder war's zukünftig, soll auch dieses Verhalten entfernt werden (dann nur noch lang).


Und trotzt UNC hat man auch keine Garantie, dass es funktioniert.
* so habe ich in einem ältenen Programm (im Manifest nichts zur Windowskompatibilität) auch mit UNC keinen Zugriff auf längere Pfade

* und selbst im Explorer hatte ich "manchmal" Probleme -> beim Kopieren von NTFS via SMB auf ein Linux, da wurden im Linux alle längeren Pfade ohne Fehlermeldung abgeschnitten
* * geknallt hatte es nur, wenn zufällig ein \ bzw. / als letztes im Datei-Pfad zurück blieb
* * ich weiß aber nicht wer genau es Abschnitt (Windows, SMB oder Linux) ... hatte es versucht rauszubekommen, aber absichtlich zu lange Pfade erzeugt und damit rumgespielt, da ging zufällig immer alles
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#8

AW: UNC Pfade + \\?\ MAX_MATH usw. (Win Ver. 1607)

  Alt 25. Jan 2021, 12:17
Und nein, neu kompiliert muß nichts werden.
Das Manifest liegt in den Resourcen und Diese lassen sich auch nachträglich noch editieren.
Eventuell muß man noch neu signieren, jedenfalls wenn die EXE signiert war.
OK, ich formulier's anders: Der Autor einer Software muss (sowieso) eingreifen, ob nun beim Manifest oder im Code. Wenn die Software bisher keine überlangen Pfade unterstützt hat (z.B. weil man überall MAX_PATH genutzt hat), muss die Software neu kompiliert werden, wenn man sicherstellen will, dass sie mit überlangen Pfaden zurechtkommt. Der Weg per Manifest hat den Nachteil, dass dieser Schalter allein nicht ausreicht, weil im System noch ein weiterer umgelegt werden muss, und auch auf älteren Windows-Versionen nicht funktioniert. Das Long Path Prefix funktioniert aber immer und überall (wenn man es richtig nutzt).

Grüße
Dalai
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz