Метод IVdsLun::SetMask (vdshwprv.h)

[Начиная с Windows 8 и Windows Server 2012 COM-интерфейс службы виртуальных дисков замечается API управления хранилищем Windows.]

Указывает список распаковки, который представляет собой список компьютеров, которым будет предоставлен доступ к LUN.

Синтаксис

HRESULT SetMask(
  [in] LPWSTR pwszUnmaskingList
);

Параметры

[in] pwszUnmaskingList

Список, указывающий компьютеры, которым будет предоставлен доступ к LUN. Список представляет собой удобочитаемую строку с разделителями точками с запятой, завершаемую значением NULL.

Если значение равно "", всем компьютерам с портом HBA, подключенным к подсистеме хранения, должен быть предоставлен доступ к LUN.

Примечание На практике, если значение равно "", большинство поставщиков оборудования предоставляют доступ к 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, не маски для определенного инициатора, связан с этим инициатором.

Примечание Список unmasking может содержать один и тот же WWN или IQN несколько раз. Вызывающий объект не должен удалять дубликаты из списка или проверять формат имени WWN или iSCSI. Кроме того, доступ не является накопительным. Иными словами, если этот метод вызывается дважды подряд, доступ будет предоставлен только компьютерам, указанным во втором вызове.
 

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

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

Возвращаемый код или значение Описание
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
Это возвращаемое значение сигнализирует о проблеме программного обеспечения или связи внутри поставщика, который кэширует сведения о массиве. Для восстановления кэша используйте метод IVdsHwProvider::Reenumerate , за которым следует метод IVdsHwProvider::Refresh .
VDS_E_OBJECT_DELETED
0x8004240BL
Объект LUN больше не присутствует.
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
LUN находится в состоянии сбоя и не может выполнить запрошенную операцию.
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
Выполняется другая операция; Эта операция не может продолжаться до завершения предыдущей операции или операций.

Комментарии

Перед вызовом метода SetMask для маскирования LUN вызывающий объект должен удалить соответствующие диски следующим образом. Сначала получите идентификатор объекта VDS диска, соответствующего маскированному LUN, вызвав IVdsServiceUninstallDisk::GetDiskIdFromLunInfo. Затем вызовите IVdsServiceUninstallDisk::UninstallDisks с идентификатором объекта VDS диска.

Windows Server 2003 и Windows Server 2003 с пакетом обновления 1 (SP1): Чтобы удалить соответствующие диски, выполните следующие действия. Обратите внимание, что эти шаги устарели в Windows Server 2003 R2.

  1. Найдите тома на дисках, которые будут маскироваться, следующим образом:
    1. Для каждого диска вызовите метод IVdsDisk::QueryExtents , чтобы перечислить экстенты диска. Этот метод возвращает список VDS_DISK_EXTENT структур. Элемент volumeId этой структуры содержит guid тома.
    2. Перечисление томов, управляемых поставщиком программного обеспечения, путем вызова метода IVdsSwProvider::QueryPacks для перечисления пакетов и вызова IVdsPack::QueryVolumes для перечисления томов в каждом пакете. Вызовите IVdsVolume::GetProperties , чтобы получить структуру VDS_VOLUME_PROP для каждого тома. Элемент id этой структуры содержит GUID тома. Элемент pwszName содержит имя тома, передаваемое в CreateFile для получения дескриптора тома.
    3. Используйте идентификаторы GUID тома, полученные путем вызова IVdsDisk::QueryExtents , чтобы определить, какие имена томов потребуются из списка перечисляемых томов.
  2. Блокировка каждого тома с помощью кода элемента управления FSCTL_LOCK_VOLUME . Если LUN перемещается на другой компьютер как нетронутый том, а другое приложение удерживает блокировку тома, по возможности повторите операцию FSCTL_LOCK_VOLUME , прежде чем переходить к следующему шагу. Однако если том блокируется и отключается только из-за удаления, нет необходимости повторять операцию FSCTL_LOCK_VOLUME .
    Примечание Этот шаг является необязательным. Цель этого шага — разрешить другим приложениям, которые могут содержать блокировки, освобождать их. Даже если операция блокировки завершится сбоем, следует перейти к следующему шагу.
     
  3. Отключите каждый том с помощью кода элемента управления FSCTL_DISMOUNT_VOLUME .
  4. Если тома находятся на базовых дисках, переведите их в автономный режим с помощью кода управления IOCTL_VOLUME_OFFLINE .
  5. Удалите каждый том с помощью функции SetupDiCallClassInstaller , передав DIF_REMOVE для параметра InstallFunction .
  6. Удалите каждый диск с помощью функции SetupDiCallClassInstaller , передав DIF_REMOVE для параметра InstallFunction .
  7. Удалите пути в пользовательском режиме, такие как подключенные папки и назначения букв диска, из реестра, вызвав метод IVdsService::CleanupObsoleteMountPoints .

После распаковки LUN на целевом компьютере или маскирования с целевого компьютера видимость LUN на этом компьютере может не измениться, пока не будет выполнено повторное сканирование шины. Приложение VDS на целевом компьютере инициирует повторное сканирование шины, вызывая IVdsService::Reenumerate. За инициализацию повторного сканирования шины отвечает приложение VDS, а не поставщик оборудования.

Требования

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

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

IVdsHwProvider::Reenumerate

IVdsHwProvider::Refresh

IVdsLun