web-dev-qa-db-fra.com

Que signifie \\? \ Lorsqu'il est ajouté à un chemin de fichier

J'ai trouvé une référence à un fichier dans un journal qui avait le format suivant:

\\?\C:\Path\path\file.log

Je ne trouve pas de référence à ce que la séquence de \?\Signifie. Je crois que la partie entre les contre-obliques fait référence à un nom d'hôte.

Par exemple, sur mon ordinateur Windows, les éléments suivants fonctionnent très bien:

dir \\?\C:\

et aussi, très bien avec le même résultat:

dir \\.\C:\

Des questions:

  1. Y a-t-il une référence à ce que signifie le point d'interrogation dans ce format de chemin particulier?
  2. Qu'est-ce qui pourrait générer un chemin de fichier dans un tel format?
47
bjjer

Une longue lecture, mais vaut la peine d'être lue si vous êtes dans ce domaine: http://msdn.Microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx

Extrait:

L'API Windows possède de nombreuses fonctions qui ont également des versions Unicode pour autoriser un chemin de longueur étendue pour une longueur de chemin totale maximale de 32 767 caractères. Ce type de chemin est composé de composants séparés par des barres obliques inverses, chacun jusqu'à la valeur renvoyée dans le paramètre lpMaximumComponentLength de la fonction GetVolumeInformation (cette valeur est généralement de 255 caractères). Pour spécifier un chemin de longueur étendue, utilisez le "\\?\" préfixe. Par exemple, "\\?\D:\very long path".

et:

Le "\\?\" le préfixe peut également être utilisé avec des chemins construits selon la convention de dénomination universelle (UNC). Pour spécifier un tel chemin en utilisant UNC, utilisez le "\\?\UNC\" préfixe. Par exemple, "\\?\UNC\server\share", où "server" est le nom de l'ordinateur et "share" est le nom du dossier partagé. Ces préfixes ne sont pas utilisés dans le cadre du chemin lui-même. Ils indiquent que le chemin doit être transmis au système avec un minimum de modifications, ce qui signifie que vous ne pouvez pas utiliser de barres obliques pour représenter les séparateurs de chemin, ni un point pour représenter le répertoire actuel, ni des points doubles pour représenter le répertoire parent. Parce que vous ne pouvez pas utiliser le "\\?\" préfixe avec un chemin relatif, les chemins relatifs sont toujours limités à un total de MAX_PATH personnages.

48
Ferenc Deak

L'API Windows analyse les chaînes d'entrée pour les E/S de fichiers. Entre autres, il traduit / à \ dans le cadre de la conversion du nom en un nom de style NT ou de l'interprétation du . et .. pseudo répertoires. À quelques exceptions près, l'API Windows limite également les noms de chemin à 260 caractères.

Le documenté objectif du \\?\ le préfixe est:

Pour les E/S de fichier, le préfixe "\\? \" D'une chaîne de chemin d'accès indique aux API Windows de désactiver toutes les analyses de chaînes et d'envoyer la chaîne qui la suit directement au système de fichiers.

Cela permet l'utilisation de . ou .. dans les noms de chemin, ainsi que l'assouplissement de la limite de nom de chemin de 260 caractères, si le système de fichiers sous-jacent prend en charge les longs chemins et les noms de fichier.

5
IInspectable