FSCTL_SHRINK_VOLUME IOCTL (winioctl.h)

Сигнализирует о том, что том должен быть подготовлен к выполнению операции сжатия, операция сжатия должна быть зафиксирована или операция сжатия должна быть завершена.

Для выполнения этой операции вызовите функцию DeviceIoControl со следующими параметрами.

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

Комментарии

Этот код элемента управления поддерживается только в файловых системах NTFS и RAW.

Чтобы завершить операцию сжатия, необходимо:

  1. Вызовите CreateFile , чтобы открыть дескриптор тома.
  2. Вызов FSCTL_SHRINK_VOLUME. Задайте для элемента ShrinkRequestType структуры SHRINK_VOLUME_INFORMATION значение ShrinkPrepare. Задайте для элемента NewNumberOfSectors той же структуры нулевое значение. Если этот вызов будет выполнен успешно, файловая система не будет выделять кластеры после окончания новой длины тома.
  3. Вызовите FSCTL_MOVE_FILE для всех файлов за пределами нового количества секторов и переместите их в допустимый диапазон. Вы несете ответственность за перемещение всех файлов, затронутых операцией сжатия.
  4. Вызов FSCTL_SHRINK_VOLUME. Задайте для элемента ShrinkRequestType структуры SHRINK_VOLUME_INFORMATION значение ShrinkCommit. Задайте для элемента NewNumberOfSectors той же структуры нулевое значение. Если все файлы за пределами нового размера тома не были перемещены, вызов завершается сбоем с STATUS_ALREADY_COMMITTED (ERROR_ACCESS_DENIED). В противном случае файловая система теперь сократилась.
  5. Вызов IOCTL_DISK_GROW_PARTITION. Задайте для элемента BytesToGrow структуры DISK_GROW_PARTITION отрицательное число, представляющее число удаляемых байтов.

В Windows 8 и Windows Server 2012 этот код поддерживается следующими технологиями.

Технология Поддерживается
Протокол SMB 3.0 Нет
Прозрачная отработка отказа (TFO) SMB 3.0 Нет
SMB 3.0 с масштабируемыми общими папками (SO) Нет
Файловая система общего тома кластера (CSVFS) См. комментарий

Поддерживается только на узле с подключенной системой NTFS.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Верхняя часть winioctl.h (включая Windows.h)

См. также раздел