FSCTL_SHRINK_VOLUME IOCTL (winioctl.h)

Signalisiert, dass das Volume für die Ausführung des Verkleinerungsvorgangs vorbereitet, der Verkleinerungsvorgang committet oder der Verkleinerungsvorgang beendet werden soll.

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

BOOL DeviceIoControl(
  (HANDLE) hDevice,             // handle to device
  FSCTL_SHRINK_VOLUME,          // dwIoControlCode
  (LPVOID) lpInBuffer,          // input buffer
  nInBufferSize,                // size of input buffer    
  NULL,                         // output buffer
  O,                            // size of output buffer
  (LPDWORD) lpBytesReturned,    // number of bytes returned
  (LPOVERLAPPED) lpOverlapped   // OVERLAPPED structure
);

Hinweise

Dieser Steuercode wird nur auf NTFS- und RAW-Dateisystemen unterstützt.

Um einen Verkleinerungsvorgang abzuschließen, müssen Sie:

  1. Rufen Sie CreateFile auf, um ein Handle für das Volume zu öffnen.
  2. Rufen Sie FSCTL_SHRINK_VOLUME auf. Legen Sie den ShrinkRequestType-Member der SHRINK_VOLUME_INFORMATION-Struktur auf ShrinkPrepare fest. Legen Sie den NewNumberOfSectors-Member derselben Struktur auf 0 (null) fest. Wenn dieser Aufruf erfolgreich ist, ordnet das Dateisystem keine Cluster über das Ende der neuen Volumelänge hinaus zu.
  3. Rufen Sie FSCTL_MOVE_FILE für alle Dateien auf, die über die neue Anzahl von Sektoren hinausgehen, und verschieben Sie sie innerhalb des gültigen Bereichs. Sie sind für das Verschieben aller Dateien verantwortlich, die vom Verkleinerungsvorgang betroffen sind.
  4. Rufen Sie FSCTL_SHRINK_VOLUME auf. Legen Sie den ShrinkRequestType-Member der SHRINK_VOLUME_INFORMATION-Struktur auf ShrinkCommit fest. Legen Sie den NewNumberOfSectors-Member derselben Struktur auf 0 (null) fest. Wenn alle Dateien, die über das Ende der neuen Volumegröße hinausgehen, nicht verschoben wurden, schlägt der Aufruf mit STATUS_ALREADY_COMMITTED (ERROR_ACCESS_DENIED) fehl. Andernfalls wurde das Dateisystem jetzt verkleinert.
  5. Rufen Sie IOCTL_DISK_GROW_PARTITION auf. Legen Sie den BytesToGrow-Member der DISK_GROW_PARTITION-Struktur auf die negative Zahl fest, die die Anzahl der zu entfernenden Bytes darstellt.

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) No
SMB 3.0 Transparent Failover (TFO) No
SMB 3.0 mit Dateifreigaben mit horizontaler Skalierung (SO) No
Dateisystem mit freigegebenen Clustervolumes (CsvFS) Siehe Kommentar

Wird nur auf dem Knoten unterstützt, auf dem NTFS eingebunden ist.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [nur Desktop-Apps]
Kopfzeile winioctl.h (windows.h einschließen)

Weitere Informationen