Freigeben über


FSCTL_QUERY_ALLOCATED_RANGES IOCTL (winioctl.h)

Scannt eine Datei oder einen alternativen Stream nach Bereichen, die möglicherweise Daten ungleich null enthalten. Nur komprimierte Dateien oder Sparsedateien können Null-Bereiche aufweisen, die dem Betriebssystem bekannt sind. Bei anderen Dateien enthält der Ausgabepuffer nur einen einzelnen Eintrag, der den Startpunkt und die angeforderte Länge enthält.

Um diesen Vorgang auszuführen, rufen Sie die Funktion DeviceIoControl mit den folgenden Parametern auf.

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

Hinweise

Die Auswirkungen von überlappenden E/A-Vorgängen auf diesen Vorgang finden Sie im Abschnitt Hinweise von DeviceIoControl.

Das NTFS-Dateisystem rundet den Eingabedateioffset auf eine bequeme Grenze und die Länge bis zu einer geeigneten Grenze ab und beginnt dann, die Datei zu durchlaufen.

Das Betriebssystem verfolgt nicht alle 0 (null) oder nichtzero-Daten nach. Da null (0) oft ein völlig legales Datum ist, wäre dies irreführend. Stattdessen verfolgt das System Bereiche nach, in denen Speicherplatz zugewiesen wird. Wenn kein Speicherplatz zugewiesen ist, wird davon ausgegangen, dass alle Daten null (0) sind. Der zugewiesene Speicher kann null (0) oder nichtzero-Daten enthalten. Daher gibt dieser Vorgang nur Informationen zu Teilen der Datei zurück, in denen sich möglicherweise nichtzero-Daten befinden. Es liegt an der Anwendung, diese Teile der Datei gemäß den Datenkonventionen der Anwendung zu überprüfen.

Jeder Eintrag im Ausgabearray enthält einen Offset und eine Länge, die einen Bereich in der Datei angibt, der möglicherweise nichtzero-Daten enthält. Die tatsächlichen nichtzero-Daten, falls vorhanden, befinden sich irgendwo innerhalb dieses Bereichs, und das aufrufende Programm muss weiter innerhalb des Bereichs scannen, um sie zu finden und zu ermitteln, ob es sich wirklich um gültige Daten handelt. Innerhalb des Bereichs können mehrere Instanzen gültiger Daten vorhanden sein.

Zugeordnete Bereiche unterliegen der Regel, dass eine speicherzuordnungsgesteuerte Remotedatei (Netzwerkdatei) und ein geöffnetes Handle für die Datei nicht unbedingt kohärent sind. Wenn Sie im Arbeitsspeicher eine Sparse-Netzwerkdatei zugeordnet und nichtzero-Daten in zuvor nicht zugeordnete Regionen der Datei geschrieben haben, wird Speicherplatz für die neuen Daten zugewiesen. Ein Aufruf von FSCTL_QUERY_ALLOCATED_RANGES danach würde jedoch nicht unbedingt eine richtige Liste der zugeordneten Regionen zurückgeben. Um die Kohärenz zwischen dem Ansichtsspeicher und dem Dateihandle sicherzustellen, leeren Sie die Daten mit der FlushViewOfFile-Funktion in die Datei.

In Windows 8 und Windows Server 2012 wird dieser Code von den folgenden Technologien unterstützt.

Technologie Unterstützt
SMB 3.0-Protokoll (Server Message Block) Ja
SMB 3.0 Transparent Failover (TFO) Ja
SMB 3.0 mit Dateifreigaben mit horizontaler Skalierung (SO) Ja
Dateisystem mit freigegebenen Clustervolumes (CsvFS) Ja
Robustes Dateisystem (Resilient File System, ReFS) No

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Kopfzeile winioctl.h (einschließlich Windows.h)

Weitere Informationen