Метод IVdsSubSystem2::CreateLun2 (vds.h)
[Начиная с Windows 8 и Windows Server 2012 COM-интерфейс службы виртуальных дисков замечается API управления хранилищем Windows.]
Создает LUN. Этот метод идентичен методу IVdsSubSystem::CreateLun , за исключением того, что автомагические указания предоставляются с помощью структуры VDS_HINTS2 вместо структуры VDS_HINTS .
Синтаксис
HRESULT CreateLun2(
[in] VDS_LUN_TYPE type,
[in] ULONGLONG ullSizeInBytes,
[in] VDS_OBJECT_ID *pDriveIdArray,
[in] LONG lNumberOfDrives,
[in] LPWSTR pwszUnmaskingList,
[in] VDS_HINTS2 *pHints2,
[out] IVdsAsync **ppAsync
);
Параметры
[in] type
Значение перечисления VDS_LUN_TYPE , указывающее тип LUN. Новый LUN может быть автоматическим или определенным типом RAID, но не одновременно. Если вызывающий объект задает автомагический тип, в параметре pHints следует указать одно или несколько автомагических указаний.
Указатель интерфейса для нового объекта LUN можно получить, вызвав метод IVdsAsync::Wait для указателя интерфейса, возвращаемого в параметре ppAsync . Структура VDS_ASYNC_OUTPUT , возвращаемая wait , содержит указатель интерфейса объекта LUN в элементе cl.pLunUnk .
[in] ullSizeInBytes
Размер нового LUN (в байтах). Поставщик может округлить размер в соответствии с требованиями выравнивания или другими ограничениями. (В большинстве случаев поставщик округляется, гарантируя, что, за редкими исключениями, LUN по крайней мере не меньше, чем запрошено.)
После создания LUN вызывающий объект может определить фактический размер LUN, вызвав метод IVdsLun::GetProperties .
[in] pDriveIdArray
Указатель на массив, содержащий VDS_OBJECT_ID для каждого диска, используемого для создания LUN. Указывая для этого параметра значение, отличное от NULL , вызывающий объект запрашивает, чтобы поставщик использовал все диски в указанном порядке, используя все экстенты на одном диске, прежде чем переходить к следующему, и останавливается, когда LUN достигнет запрошенного размера.
Кроме того, вызывающий объект может направить поставщика на автоматический выбор дисков, передав null в этом параметре и 0 в lNumberOfDrives. (Передайте ЗНАЧЕНИЕ NULL , если значение lNumberOfDrives равно 0.)
Если параметр type задает автоматический тип, этот параметр должен иметь значение NULL.
[in] lNumberOfDrives
Количество дисков, указанное в pDriveIdArray. Если вызывающий объект передает значение 0, поставщик выбирает диски.
Если параметр type задает автоматический тип, этот параметр должен иметь значение 0.
После создания LUN вызывающий объект может определить, какие диски используются, вызвав метод IVdsLunPlex::QueryExtents .
[in] pwszUnmaskingList
Список, указывающий компьютеры, которым будет предоставлен доступ к LUN. Список представляет собой удобочитаемую строку с разделителями точками с запятой, завершаемую значением NULL.
Если значение равно "", всем компьютерам с портом HBA, подключенным к подсистеме хранения, должен быть предоставлен доступ к LUN. Если значение равно "", компьютеры не должны предоставлять доступ к LUN.
Если задано значение "*" или "", другое значение не может быть указано.
Для сетей Fibre Channel и сетей с последовательным подключением SCSI (SAS) каждая запись представляет собой 64-разрядное имя (WWN) каждого порта, к которому не маскируется LUN, отформатированная в виде шестнадцатеричной строки (длиной 16 символов), наиболее важной из которых является байт. Например, адрес WWN 01:23:45:67:89:AB:CD:EF представлен как "0123456789ABCDEF". Дополнительные сведения см. в спецификациях T10 для Fibre Channel и SAS.
Для сетей iSCSI каждая запись представляет собой полное имя iSCSI (IQN) каждого инициатора, которому не маскируется LUN. Считается, что lun, не маски для определенного инициатора, связан с этим инициатором.
[in] pHints2
Указатель на структуру VDS_HINTS2 , которая указывает указания, которые будут использоваться при создании LUN. Поставщик не обязан применять указания к LUN. Указания, указанные в структуре VDS_HINTS2 , являются только запросом к поставщику.
После создания LUN вызывающий объект может определить указания, примененные поставщиком, вызвав метод IVdsLun2::QueryHints2 .
Если параметр type задает неавтомагический тип, этот параметр должен иметь значение NULL.
[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 . Возможные возвращаемые значения включают следующие.
Возвращаемый код или значение | Описание |
---|---|
|
Существует проблема с программным обеспечением или связью внутри поставщика, который кэширует сведения о массиве. Для восстановления кэша используйте метод IVdsHwProvider::Reenumerate , за которым следует метод IVdsHwProvider::Refresh . |
|
Объект подсистемы больше не присутствует. |
|
Подсистема находится в состоянии сбоя и не может выполнить запрошенную операцию. |
|
Выполняется другая операция; Эта операция не может продолжаться до завершения предыдущей операции или операций. |
|
Идентификатор не ссылается на существующий объект . Это значение может быть возвращено из любого метода, принимающего константу VDS_OBJECT_ID . |
|
Эта операция или сочетание параметров не поддерживается этим поставщиком. |
|
Недостаточно места для этой операции. |
|
Для выполнения этой операции в подсистеме присутствует слишком мало свободных дисков. |
Комментарии
Выбрав соответствующие значения для параметров типа и pHints2 , вызывающий объект может указать атрибуты LUN полностью, частично или минимально. Поставщик может автоматически включать неопределенные атрибуты на основе автомагийных указаний, указанных в структуре VDS_HINTS2 , на которую указывает параметр pHints .
Примечания для разработчиков: Поставщик должен возвращать указатель интерфейса IVdsAsync в параметре ppAsync , даже если вызов этого метода не инициирует асинхронную операцию.
Список WWN и IQN в параметре pwszUnmaskingList может содержать повторяющиеся имена. Поставщик несет ответственность за проверку всех имен в списке и удаление дубликатов при необходимости.
В ответ на метод CreateLun2 и перед развертыванием нового LUN на любом узле поставщик должен заполнить первые и последние мегабайты нулями, оставив LUN неинициализированным.
Между E_INVALIDARG и VDS_E_NOT_SUPPORTED возвращаемыми значениями существует незначительное различие. Поставщики не должны реализовывать все функции, которые API VDS может представить клиенту. Например, метод CreateLun2 предоставляет возможность создавать множество различных типов LUN (например, простые, зеркало, чередуемые и четные). Однако поставщики не обязаны поддерживать все типы LUN. Если вызывающий объект задает значение для параметра типа , которое не является допустимым значением перечисления VDS_LUN_TYPE , поставщик должен вернуть E_INVALIDARG. Если вызывающий объект указывает допустимое значение типа , которое поставщик не поддерживает, поставщик должен вернуть VDS_E_NOT_SUPPORTED.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 7 [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 R2 [только классические приложения] |
Целевая платформа | Windows |
Header | vds.h |
Библиотека | Uuid.lib |