Метод IVdsVolumeShrink::Shrink (vds.h)
[Начиная с Windows 8 и Windows Server 2012, COM-интерфейс службы виртуальных дисков замечается API управления хранилищем Windows.]
Сжимает том и все сплетения и возвращает освобожденные экстенты.
Синтаксис
HRESULT Shrink(
[in] ULONGLONG ullDesiredNumberOfReclaimableBytes,
[in] ULONGLONG ullMinNumberOfReclaimableBytes,
[out] IVdsAsync **ppAsync
);
Параметры
[in] ullDesiredNumberOfReclaimableBytes
Максимальное число байтов, на которое уменьшается размер тома. Значение этого параметра должно быть больше или равно значению параметра ullMinNumberOfReclaimableBytes . Если указанное число байтов не кратно размеру кластера файловой системы, метод Shrink округляет это значение до следующего кратного размера кластера файловой системы.
[in] ullMinNumberOfReclaimableBytes
Минимальное количество байтов, на которое уменьшается размер тома. Если размер тома не может быть сжат по крайней мере на это количество байтов, метод Shrink завершается ошибкой. Если указанное число байтов не кратно размеру кластера файловой системы, метод Shrink округляет это значение до следующего кратного размера кластера файловой системы. Укажите ноль, чтобы указать, что для успешного выполнения метода Shrink не требуется минимальное количество байтов, допускающих восстановление.
[out] ppAsync
Адрес указателя интерфейса IVdsAsync . VDS инициализирует интерфейс при возврате. Вызывающие стороны должны освободить интерфейс. Используйте этот интерфейс для отмены, ожидания или запроса состояния операции. Если вызывается IVdsAsync::Wait и возвращается успешное значение HRESULT, интерфейсы, возвращаемые в VDS_ASYNC_OUTPUT структуре, должны быть освобождены путем вызова метода IUnknown::Release для каждого указателя интерфейса. Однако если функция Wait возвращает значение HRESULT сбоя или параметр pHrResultобъекта Wait получает значение HRESULT сбоя, указатели интерфейса в структуре VDS_ASYNC_OUTPUT имеют значение NULL и не должны освобождаться. Вы можете проверить наличие значений HRESULT успешного или неудачного выполнения с помощью макросов SUCCEEDED и FAILED , определенных в Winerror.h.
Возвращаемое значение
Этот метод может возвращать стандартные значения HRESULT, такие как E_INVALIDARG или E_OUTOFMEMORY, а также возвращаемые значения VDS. Он также может возвращать коды преобразованных системных ошибок с помощью макроса HRESULT_FROM_WIN32 . Ошибки могут возникать из самого VDS или из используемого базового поставщика VDS . Возможные возвращаемые значения включают следующие.
Возвращаемый код/значение | Описание |
---|---|
|
Метод завершился успешно. |
|
Невозможно сжать том, так как файловая система не поддерживает его. |
|
Эта операция не поддерживается на съемном носителе. |
|
Внутренняя ошибка. Дополнительные сведения см. в журнале событий. |
|
Уведомление о поступлении тома не получено. Может потребоваться вызвать IVdsService::Refresh. |
|
Указанный размер сжатия слишком велик и приведет к тому, что размер тома будет меньше минимального размера тома. |
|
Указанный размер сжатия меньше минимально допустимого размера. |
|
Том не работоспособен. |
|
Операция поддерживается только на простых или развернутых томах. |
Комментарии
Метод Shrink перемещает файлы так, чтобы они были как можно ближе к началу тома, чтобы консолидировать свободное пространство в конце тома. (Объем свободного пространства, который можно консолидировать в конце тома, определяет объем тома, который можно сжать.) Затем он усекает том файловой системы, уменьшает его размер, а затем усекает секцию или динамический том.
Почти во всех случаях некоторые файлы будут неподвижны (т. е. файлы, которые нельзя переместить). Например, файлы метаданных драйвера файловой системы и хранилища, скорее всего, будут неподвижны. По этой причине объем, на который можно сжать том, обычно меньше, чем общий объем свободного места в томе.
Количество и размещение неуемных файлов могут отличаться от одного компьютера к другому, даже если оба компьютера настроены одинаково.
Возможно, файл будет временно неподвижным. По этой причине приложение может восстановить дополнительное пространство при повторном вызове этого метода с теми же параметрами.
Если параметры ullDesiredNumberOfReclaimableBytes и ullMinNumberOfReclaimableBytes равны нулю, метод Shrink уменьшит том на максимально возможное количество.
Операции сжатия и расширения поддерживаются только в томах NTFS и RAW.
Используйте этот метод для сжатия файловой системы и тома. Если VDS не удается сжать том, операция останавливается без сжатия файловой системы.
Одновременно на каждом томе можно выполнять только одну операцию сжатия или дефрагментации. Windows Server 2008 и Windows Vista: Одновременно на компьютере может выполняться только одна операция сжатия или дефрагментации.
Разработчики должны возвращать указатель на интерфейс IVdsAsync для этого метода, даже если вызов не инициирует асинхронную операцию.
Этот метод идентичен методу IVdsVolume::Shrink .
Вы можете использовать метод IVdsVolumeShrink::QueryMaxReclaimableBytes для оценки количества байтов, которые будут освобождены операцией сжатия. Однако QueryMaxReclaimableBytes может возвращать больше байтов, чем фактически доступно.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Целевая платформа | Windows |
Header | vds.h |
Библиотека | Uuid.lib |