Share via


FSCTL_QUERY_ALLOCATED_RANGES IOCTL (winioctl.h)

Analizza un file o un flusso alternativo alla ricerca di intervalli che possono contenere dati diversi da zero. Solo i file compressi o sparse possono avere intervalli zero noti al sistema operativo. Per altri file, il buffer di output conterrà solo una singola voce contenente il punto iniziale e la lunghezza richiesta.

Per eseguire questa operazione, chiamare la funzione DeviceIoControl con i parametri seguenti.

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
);

Commenti

Per le implicazioni dell'I/O sovrapposto in questa operazione, vedere la sezione Osservazioni di DeviceIoControl.

Il file system NTFS arrotonda l'offset del file di input fino a un limite pratico e la lunghezza fino a un limite pratico e quindi inizia a attraversare il file.

Il sistema operativo non tiene traccia di ogni pezzo di zero (0) o di dati diversi da zero. Poiché zero (0) è spesso un dato perfettamente legale, sarebbe fuorviante. Il sistema tiene invece traccia degli intervalli in cui viene allocato spazio su disco. Se non viene allocato spazio su disco, si presuppone che tutti i dati siano zero (0). L'archiviazione allocata può contenere zero (0) o dati diversi da zero. Pertanto, tutte queste operazioni restituiscono informazioni sulle parti del file in cui possono trovarsi dati diversi da zero. Spetta all'applicazione analizzare queste parti del file in base alle convenzioni dei dati dell'applicazione.

Ogni voce nella matrice di output contiene un offset e una lunghezza che indica un intervallo nel file che può contenere dati diversi da zero. I dati effettivi diversi da zero, se presenti, si trovano all'interno di questo intervallo e il programma chiamante deve analizzare ulteriormente l'intervallo per individuarlo e determinare se sono effettivamente dati validi. All'interno dell'intervallo possono esistere più istanze di dati validi.

Gli intervalli allocati sono soggetti alla regola che un file remoto (di rete) mappato alla memoria e un handle aperto al file non sono necessariamente coerenti. Se è stato eseguito il mapping di un file di rete sparse e sono stati scritti dati diversi da zero in aree non allocate in precedenza del file, lo spazio su disco verrà allocato per i nuovi dati. Tuttavia, una chiamata a FSCTL_QUERY_ALLOCATED_RANGES successivamente non restituirà necessariamente un elenco corretto di aree allocate. Per garantire la coerenza tra la memoria di visualizzazione e l'handle di file, scaricare i dati nel file con la funzione FlushViewOfFile .

In Windows 8 e Windows Server 2012 questo codice è supportato dalle tecnologie seguenti.

Tecnologia Supportato
Protocollo SMB (Server Message Block) 3.0
Failover trasparente SMB 3.0 (TFO)
SMB 3.0 con condivisioni file di scalabilità orizzontale (SO)
File system del volume condiviso cluster (CsvFS)
Resilient File System (ReFS) No

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Intestazione winioctl.h (include Windows.h)

Vedi anche