FSCTL_QUERY_ALLOCATED_RANGES IOCTL (winioctl.h)

Analyse un fichier ou un autre flux à la recherche de plages qui peuvent contenir des données différentes de zéro. Seuls les fichiers compressés ou fragmentés peuvent avoir des plages de zéro connues du système d’exploitation. Pour les autres fichiers, la mémoire tampon de sortie ne contiendra qu’une seule entrée contenant le point de départ et la longueur demandée.

Pour effectuer cette opération, appelez la fonction DeviceIoControl avec les paramètres suivants.

BOOL DeviceIoControl(
  (HANDLE) hDevice,                 // handle to file
  FSCTL_QUERY_ALLOCATED_RANGES,     // dwIoControlCode
  (LPVOID) lpInBuffer,              // input buffer
  (DWORD) nInBufferSize,            // size of input buffer
  (LPVOID) lpOutBuffer,             // output buffer
  (DWORD) nOutBufferSize,           // size of output buffer
  (LPDWORD) lpBytesReturned,        // number of bytes returned
  (LPOVERLAPPED) lpOverlapped       // OVERLAPPED structure
);

Remarques

Pour connaître les implications des E/S qui se chevauchent sur cette opération, consultez la section Remarques de DeviceIoControl.

Le système de fichiers NTFS arrondit le décalage du fichier d’entrée jusqu’à une limite pratique et la longueur jusqu’à une limite pratique, puis commence à parcourir le fichier.

Le système d’exploitation ne suit pas toutes les données nulles (0) ou nulles. Comme zéro (0) est souvent une référence parfaitement légale, il serait trompeur. Au lieu de cela, le système effectue le suivi des plages où l’espace disque est alloué. Lorsqu’aucun espace disque n’est alloué, toutes les données sont supposées être égales à zéro (0). Le stockage alloué peut contenir zéro (0) ou aucune donnée. Par conséquent, cette opération ne fait que retourner des informations sur les parties du fichier où peuvent se trouver des données nulles. Il incombe à l’application d’analyser ces parties du fichier conformément aux conventions de données de l’application.

Chaque entrée du tableau de sortie contient un décalage et une longueur qui indiquent une plage dans le fichier qui peut contenir des données différentes de zéro. Les données différentes de zéro, le cas échéant, se trouvent quelque part dans cette plage, et le programme appelant doit analyser davantage dans la plage pour les localiser et déterminer s’il s’agit vraiment de données valides. Plusieurs instances de données valides peuvent exister dans la plage.

Les plages allouées sont soumises à la règle selon laquelle un fichier distant (réseau) mappé en mémoire et un handle ouvert au fichier ne sont pas nécessairement cohérents. Si vous avez mappé en mémoire un fichier réseau épars et écrit des données non nulles dans des régions précédemment non allouées du fichier, l’espace disque est alloué pour les nouvelles données. Toutefois, un appel à FSCTL_QUERY_ALLOCATED_RANGES par la suite ne retournerait pas nécessairement une liste correcte des régions allouées. Pour garantir la cohérence entre la mémoire d’affichage et le handle de fichier, videz les données dans le fichier avec la fonction FlushViewOfFile .

Dans Windows 8 et Windows Server 2012, ce code est pris en charge par les technologies suivantes.

Technologie Prise en charge
Protocole Server Message Block (SMB) 3.0 Oui
Basculement transparent SMB 3.0 (TFO) Oui
SMB 3.0 avec partages de fichiers avec montée en puissance parallèle (SO) Oui
Système de fichiers du volume partagé de cluster (CsvFS) Oui
Système de fichiers résilient (ReFS) No

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
En-tête winioctl.h (inclure Windows.h)

Voir aussi