Метод IVdsPack::CreateVolume (vds.h)
[Начиная с Windows 8 и Windows Server 2012 COM-интерфейс службы виртуальных дисков замечается API управления хранилищем Windows.]
Создает том в пакете. Указатель интерфейса для нового объекта тома можно получить, вызвав IVdsAsync::Wait с помощью параметра ppAsync . Возвращаемая структура VDS_ASYNC_OUTPUT содержит указатель интерфейса объекта тома в члене cv.pVolumeUnk .
Синтаксис
HRESULT CreateVolume(
[in] VDS_VOLUME_TYPE type,
[in] VDS_INPUT_DISK *pInputDiskArray,
[in] LONG lNumberOfDisks,
[in] ULONG ulStripeSize,
[out] IVdsAsync **ppAsync
);
Параметры
[in] type
Тип тома, перечисляемый VDS_VOLUME_TYPE. Тома на базовых дисках могут иметь только один экстент, и допустимы только флаг VDS_VT_SIMPLE .
[in] pInputDiskArray
Указатель на массив VDS_INPUT_DISK структур; одна структура для каждого диска. Диск можно включить в массив только один раз. Необходимо использовать все диски в массиве, иначе метод завершается ошибкой. Вызывающие элементы должны выделить и инициализировать массив, а также освободить память при возврате вызова.
[in] lNumberOfDisks
Общее количество дисков, участвующих в томе.
[in] ulStripeSize
Если том чередуется, размер каждой полосы в байтах. Передача ноль байтов для VDS_VT_SIMPLE, VDS_VT_SPAN и VDS_VT_MIRROR; 64 килобайта для VDS_VT_STRIPE и VDS_VT_PARITY.
[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 . Возможные возвращаемые значения включают следующие.
Возвращаемый код или значение | Описание |
---|---|
|
Том успешно создан. |
|
Уведомления о поступлении тома не получены. Может потребоваться вызвать IVdsService::Refresh. |
|
Том успешно создан, но VDS не удалось обновить параметры загрузки в хранилище данных конфигурации загрузки (BCD).
Windows Server 2003: Параметры загрузки хранятся в файле boot.ini в системе x86 или x64 или NVRAM в системе Itanium. |
|
Указанные диски не принадлежат к одному и тому же пакету. |
|
Служба LDM завершила сбой метода. |
|
Размер передаваемого экстента слишком мал. |
|
Указанное количество дисков недопустимо для этой операции. |
|
Число элементов для тома должно быть больше нуля. |
|
Индексы элементов должны монотонно увеличиваться и начинаться с нуля. |
|
Переданный диск является устройством с компакт-диска или DVD. |
|
Эта операция не разрешена в этом пакете дисков. |
|
Число plex для тома должно быть больше нуля. |
|
Индексы plex должны монотонно увеличиваться и начинаться с нуля. |
|
Размер чередования в байтах должен быть равным 2 для чередуемых типов томов и RAID-5 и нулю для всех остальных типов томов. |
|
Указанный диск отсутствует. |
|
На съемном диске нет носителей, передаваемых через массив дисков. |
|
Недостаточно места на одном из дисков. |
|
Тип тома не поддерживается или том уже существует на съемном диске, переданном в метод . Съемный диск может иметь только один том. |
|
По крайней мере один из переданных дисков не найден. |
|
Один диск не может участвовать в нескольких членах или нескольких сплетениях одного тома. |
|
Целевой пакет недоступен. |
|
Максимальное число секций (первичных секций или первичных секций с расширенной секцией) уже существует, когда вызывающий объект пытается создать дополнительную основную или расширенную секцию. |
|
Кэш динамического поставщика поврежден. |
|
На том разрешено не более 32 дисков. |
|
Размер тома слишком мал. |
Комментарии
Базовые диски могут содержать только простые тома. Динамические диски могут содержать тома всех типов, если операционная система поддерживает операцию привязки; несерверные платформы не поддерживают отказоустойчивые операции привязки. Во всех вновь созданных томах отсутствует буква диска.
На базовом диске этот метод создает основной раздел. Если на диске уже есть три основных раздела, он создает расширенный раздел для покрытия самого большого непрерывного свободного места на диске, а затем создает логический диск в расширенном разделе.
Диск не может участвовать в нескольких сплетениях одного тома; однако один диск может способствовать созданию нескольких томов. Простой том имеет только одну VDS_INPUT_DISK структуру, тогда как тома с чередованием, чередованием, зеркальным отображением и RAID-5 имеют одну структуру для каждого диска.
Размер диска, указанный в структуре VDS_INPUT_DISK , может быть полным диском или его частью. Когда два диска образуют зеркальный том, VDS использует наименьший диск для вычисления размера зеркало. (Политика поставщика определяет фактическое смещение, длину и количество экстентов диска, выделенных на данном входном диске.) Используйте метод IVdsPack::QueryVolumes , чтобы определить точный размер созданного тома.
Чтобы создать логический том с необязательным параметром выравнивания, используйте метод IVdsPack2::CreateVolume2 или используйте раздел реестраHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment , чтобы указать значение выравнивания в байтах.
Windows 7, Windows Server 2008 R2, Windows Vista и Windows Server 2008: На базовом диске метод CreateVolume игнорирует раздел реестраHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment . Это известная проблема, которая решается. В качестве обходного решения используйте метод IVdsAdvancedDisk::CreatePartition или IVdsCreatePartitionEx::CreatePartitionEx , чтобы создать разделы на базовом диске, чтобы они были правильно выровнены.
Динамические секции и тома выравниваются с помощью значений в следующем разделе реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment
Выравнивание по умолчанию составляет 1 МБ, если размер диска составляет 4 ГБ или больше, или 64 КБ, если диск меньше 4 ГБ.
Реализующие объекты должны возвращать указатель на интерфейс IVdsAsync для этого метода, независимо от того, инициирует ли вызов асинхронную операцию.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | vds.h |
Библиотека | Uuid.lib |