Поделиться через


Метод IVdsVolume::Shrink (vds.h)

[Начиная с Windows 8 и Windows Server 2012 COM-интерфейс службы виртуальных дисков заменен API управления хранилищами Windows.]

Уменьшает размер тома и всех лексей и возвращает выпущенные экстенты в свободное место.

Синтаксис

HRESULT Shrink(
  [in]  ULONGLONG ullNumberOfBytesToRemove,
  [out] IVdsAsync **ppAsync
);

Параметры

[in] ullNumberOfBytesToRemove

Размер уменьшения байтов.

[out] ppAsync

Адрес указателя интерфейса IVdsAsync . VDS инициализирует интерфейс при возврате. Вызывающие элементы должны освободить интерфейс. Используйте этот интерфейс для отмены, ожидания или запроса состояния операции. Если вызывается IVdsAsync::Wait и возвращается значение HRESULT успешно, интерфейсы, возвращаемые в структуре VDS_ASYNC_OUTPUT , должны быть освобождены путем вызова метода IUnknown::Release для каждого указателя интерфейса. Однако если ожидание возвращает значение HRESULT сбоя или если параметр pHrResult в Wait получает значение HRESULT сбоя, указатели интерфейса в структуре VDS_ASYNC_OUTPUT имеют значение NULL и не нужно выпускать. Вы можете протестировать значения HRESULT успешно или неудачно, используя макросы SUCCESSED и FAILED , определенные в Winerror.h.

Возвращаемое значение

Этот метод может возвращать стандартные значения HRESULT, такие как E_INVALIDARG или E_OUTOFMEMORY, а также возвращаемые значения VDS. Он также может возвращать преобразованные системные коды ошибок с помощью макроса HRESULT_FROM_WIN32 . Ошибки могут возникать из самого VDS или от используемого поставщика VDS . Возможные возвращаемые значения включают следующие значения.

Возврат кода или значения Description
S_OK
Метод успешно завершен.
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
Кэш поставщика поврежден. Это означает проблему программного обеспечения или связи внутри поставщика, который кэширует сведения о подключенных устройствах. Вызывающий объект может использовать метод IVdsHwProvider::Reenumerate , за которым следует метод IVdsHwProvider::Refresh для восстановления кэша.
VDS_E_CANNOT_SHRINK
0x8004251EL
Том не может быть сжат, так как файловая система не поддерживает ее.
VDS_E_DISK_REMOVEABLE
0x8004255AL
Операция не поддерживается на съемных носителях.
VDS_E_SHRINK_SIZE_LESS_THAN_MIN
0x80042573L
Указанный размер сжатия меньше минимального допустимого размера сжатия.
VDS_E_SHRINK_SIZE_TOO_BIG
0x80042574L
Указанный размер сжатия слишком велик и приведет к тому, что объем будет меньше минимального размера тома.

Замечания

Этот метод является оболочкой для метода IVdsVolumeShrink::Shrink . При вызове IVdsVolume::Shrink значение параметра uNumberOfBytesToRemove используется для параметра ullDesiredNumberOfReclaimableBytes и ullMinNumberOfReclaimableBytesiVdsVolumeShrink::Shrink.

Операции сжатия и расширения поддерживаются только в томах NTFS и RAW.

Используйте этот метод для сжатия файловой системы и тома. Если VDS не удается уменьшить том, он останавливает операцию без сжатия файловой системы.

Для каждого тома можно выполнять только одну операцию сжатия или дефрагментации. Windows Server 2008 и Windows Vista: На компьютере может выполняться только одна операция сжатия или дефрагментации.

Если значение uNumberOfBytesToRemove равно нулю, метод завершается ошибкой. В противном случае VDS округляет uNumberOfBytesToRemove до нескольких размеров кластера файловой системы.

Реализующие должны вернуть указатель на интерфейс IVdsAsync для этого метода, даже если вызов не инициирует асинхронную операцию.

Метод IVdsVolumeShrink::QueryMaxReclaimableBytes можно использовать для оценки количества байтов, которые будут удалены операцией сжатия. Однако QueryMaxReclaimableBytes может возвращать больше байтов, чем фактически доступны.

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows Vista [только классические приложения]
минимальный поддерживаемый сервер Windows Server 2008 [только классические приложения]
целевая платформа Виндоус
Header vds.h
Library Uuid.lib

См. также

IVdsAsync

IVdsVolume

IVdsVolume::Extend