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


Метод 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

Общее количество дисков, участвующих в томе.

Примечание VDS накладывает ограничение на 32 диска для томов с чередованием, чередованием и чередованием с четностью (RAID-5).
 

[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 . Возможные возвращаемые значения включают следующие.

Возвращаемый код или значение Описание
S_OK
Том успешно создан.
VDS_S_NO_NOTIFICATION
0x00042517L
Уведомления о поступлении тома не получены. Может потребоваться вызвать IVdsService::Refresh.
VDS_S_UPDATE_BOOTFILE_FAILED
0x00042434L
Том успешно создан, но VDS не удалось обновить параметры загрузки в хранилище данных конфигурации загрузки (BCD).

Windows Server 2003: Параметры загрузки хранятся в файле boot.ini в системе x86 или x64 или NVRAM в системе Itanium.

VDS_E_DISK_NOT_FOUND_IN_PACK
0x8004252DL
Указанные диски не принадлежат к одному и тому же пакету.
VDS_E_DMADMIN_METHOD_CALL_FAILED
0x80042420L
Служба LDM завершила сбой метода.
VDS_E_EXTENT_SIZE_LESS_THAN_MIN
0x80042433L
Размер передаваемого экстента слишком мал.
VDS_E_INVALID_DISK_COUNT
0x80042526L
Указанное количество дисков недопустимо для этой операции.
VDS_E_INVALID_MEMBER_COUNT
0x80042522L
Число элементов для тома должно быть больше нуля.
VDS_E_INVALID_MEMBER_ORDER
0x80042524L
Индексы элементов должны монотонно увеличиваться и начинаться с нуля.
VDS_E_INVALID_OPERATION
0x80042415L
Переданный диск является устройством с компакт-диска или DVD.
VDS_E_INVALID_PACK
0x8004251AL
Эта операция не разрешена в этом пакете дисков.
VDS_E_INVALID_PLEX_COUNT
0x80042521L
Число plex для тома должно быть больше нуля.
VDS_E_INVALID_PLEX_ORDER
0x80042523L
Индексы plex должны монотонно увеличиваться и начинаться с нуля.
VDS_E_INVALID_STRIPE_SIZE
0x80042525L
Размер чередования в байтах должен быть равным 2 для чередуемых типов томов и RAID-5 и нулю для всех остальных типов томов.
VDS_E_MISSING_DISK
0x80042454L
Указанный диск отсутствует.
VDS_E_NO_MEDIA
0x80042412L
На съемном диске нет носителей, передаваемых через массив дисков.
VDS_E_NOT_ENOUGH_SPACE
0x8004240FL
Недостаточно места на одном из дисков.
VDS_E_NOT_SUPPORTED
0x80042400L
Тип тома не поддерживается или том уже существует на съемном диске, переданном в метод . Съемный диск может иметь только один том.
VDS_E_OBJECT_NOT_FOUND
0x80042405L
По крайней мере один из переданных дисков не найден.
VDS_E_ONE_EXTENT_PER_DISK
0x80042531L
Один диск не может участвовать в нескольких членах или нескольких сплетениях одного тома.
VDS_E_PACK_OFFLINE
0x80042444L
Целевой пакет недоступен.
VDS_E_PARTITION_LIMIT_REACHED
0x80042407L
Максимальное число секций (первичных секций или первичных секций с расширенной секцией) уже существует, когда вызывающий объект пытается создать дополнительную основную или расширенную секцию.
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
Кэш динамического поставщика поврежден.
VDS_E_VOLUME_DISK_COUNT_MAX_EXCEEDED
0x80042529L
На том разрешено не более 32 дисков.
VDS_E_VOLUME_TOO_SMALL
0x8004242CL
Размер тома слишком мал.

Комментарии

Примечание Этот метод нельзя использовать для создания тома на съемном диске.
 
Вызывающие объекты используют этот метод для создания нового простого, чередующегося, зеркального или чередующегося тома (RAID-5) в текущем пакете. Простые и объемные тома имеют ровно один сплетенный и один член. Чередующийся том и том RAID-5 имеют несколько столбцов и элементов. Зеркальные тома состоят из нескольких сплетений.

Базовые диски могут содержать только простые тома. Динамические диски могут содержать тома всех типов, если операционная система поддерживает операцию привязки; несерверные платформы не поддерживают отказоустойчивые операции привязки. Во всех вновь созданных томах отсутствует буква диска.

На базовом диске этот метод создает основной раздел. Если на диске уже есть три основных раздела, он создает расширенный раздел для покрытия самого большого непрерывного свободного места на диске, а затем создает логический диск в расширенном разделе.

Диск не может участвовать в нескольких сплетениях одного тома; однако один диск может способствовать созданию нескольких томов. Простой том имеет только одну 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

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

IVdsAsync

IVdsAsync::Wait

IVdsPack

IVdsPack2::CreateVolume2

IVdsPack::QueryVolumes

VDS_ASYNC_OUTPUT

VDS_INPUT_DISK

VDS_VOLUME_TYPE