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


Метод IVdsLun::SetMask (vds.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 vds.h
Библиотека Uuid.lib

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

IVdsHwProvider::Reenumerate

IVdsHwProvider::Refresh

IVdsLun