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


Метод 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 для каждого указателя интерфейса. Однако если wait возвращает значение HRESULT сбоя или параметр pHrResultwait получает значение HRESULT сбоя, указатели интерфейса в структуре VDS_ASYNC_OUTPUT имеют значение NULL и не должны освобождаться. Вы можете проверить наличие значений HRESULT успешно или неудачно с помощью макросов SUCCEEDED и FAILED , определенных в Winerror.h.

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

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

Возвращаемый код или значение Описание
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 и ullMinNumberOfReclaimableBytes параметров IVdsVolumeShrink::Shrink.

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

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

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

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

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

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

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header vds.h
Библиотека Uuid.lib

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

IVdsAsync

IVdsVolume

IVdsVolume::Extend