Compartir a través de


Método IVdsLun::SetMask (vdshwprv.h)

[A partir de Windows 8 y Windows Server 2012, la interfaz COM del servicio de disco virtual se sustituye por la API de administración de almacenamiento de Windows.]

Especifica la lista de desenmascarado, que es la lista de equipos a los que se va a conceder acceso al LUN.

Sintaxis

HRESULT SetMask(
  [in] LPWSTR pwszUnmaskingList
);

Parámetros

[in] pwszUnmaskingList

Lista que especifica los equipos a los que se va a conceder acceso al LUN. La lista es una cadena delimitada por punto y coma, terminada en NULL y legible por humanos.

Si el valor es "", se concederá acceso al LUN a todos los equipos que tienen un puerto HBA conectado al subsistema de almacenamiento.

Nota En la práctica, si el valor es "", la mayoría de los proveedores de hardware solo conceden los puertos e iniciadores en el equipo local acceso al LUN.

 

Si el valor es "", se revoca el acceso para todos los equipos a los que se concedió acceso previamente al LUN.

Si se especifica "*" o "", no se puede especificar ningún otro valor.

Para las redes de canal de fibra y las redes SCSI (SAS) conectadas en serie, cada entrada es un nombre mundial de 64 bits (WWN) de cada puerto al que el LUN está sin máscara, con formato de cadena hexadecimal (16 caracteres de longitud), el byte más significativo primero. Por ejemplo, una dirección WWN de 01:23:45:67:89:AB:CD:EF se representa como "0123456789ABCDEF". Para obtener más información, consulte las especificaciones T10 para Canal de fibra y SAS.

En el caso de las redes iSCSI, cada entrada es un nombre completo iSCSI (IQN) de cada iniciador al que el LUN está sin máscara. Se considera que un LUN sin máscara a un iniciador determinado está asociado a ese iniciador.

Nota La lista de desenmascarado puede contener la misma WWN o IQN más de una vez. No se espera que el autor de la llamada quite duplicados de la lista ni valide el formato del nombre WWN o iSCSI. Además, el acceso no es acumulativo. En otras palabras, si se llama a este método dos veces en sucesión, solo se concede acceso a los equipos especificados en la segunda llamada.
 

Valor devuelto

Este método puede devolver valores HRESULT estándar, como E_INVALIDARG o E_OUTOFMEMORY, y valores devueltos específicos de VDS. También puede devolver códigos de error del sistema convertidos mediante la macro HRESULT_FROM_WIN32 . Los errores pueden originarse en VDS en sí o en el proveedor de VDS subyacente que se está usando. Entre los valores devueltos posibles se incluyen los siguientes.

Código o valor devuelto Descripción
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
Este valor devuelto indica un problema de software o comunicación dentro de un proveedor que almacena en caché información sobre la matriz. Use el método IVdsHwProvider::Reenumerate seguido del método IVdsHwProvider::Refresh para restaurar la memoria caché.
VDS_E_OBJECT_DELETED
0x8004240BL
El objeto LUN ya no está presente.
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
El LUN está en estado de error y no puede realizar la operación solicitada.
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
Otra operación está en curso; esta operación no puede continuar hasta que se completen las operaciones o operaciones anteriores.

Comentarios

Antes de llamar al método SetMask para enmascarar un LUN, el llamador debe desinstalar los discos correspondientes como se indica a continuación. En primer lugar, recupere el identificador de objeto de VDS del disco que corresponde al LUN enmascarado mediante una llamada a IVdsServiceUninstallDisk::GetDiskIdFromLunInfo. A continuación, llame a IVdsServiceUninstallDisk::UninstallDisks con el identificador de objeto VDS del disco.

Windows Server 2003 y Windows Server 2003 con SP1: Para desinstalar los discos correspondientes, realice los pasos siguientes. Tenga en cuenta que estos pasos se han quedado obsoletos con Windows Server 2003 R2.

  1. Busque los volúmenes de los discos que se van a enmascarar de la siguiente manera:
    1. Para cada disco, llame al método IVdsDisk::QueryExtents para enumerar las extensiones del disco. Este método devuelve una lista de estructuras de VDS_DISK_EXTENT . El miembro volumeId de esta estructura contiene el GUID del volumen.
    2. Enumere los volúmenes administrados por el proveedor de software llamando al método IVdsSwProvider::QueryPacks para enumerar los paquetes y llamar a IVdsPack::QueryVolumes para enumerar los volúmenes de cada paquete. Llame a IVdsVolume::GetProperties para obtener la estructura de VDS_VOLUME_PROP para cada volumen. El miembro id de esta estructura contiene el GUID del volumen. El miembro pwszName contiene el nombre del volumen que se va a pasar a CreateFile para obtener un identificador de volumen.
    3. Use los GUID de volumen que se obtuvieron llamando a IVdsDisk::QueryExtents para determinar cuáles de los nombres de volumen necesitará de la lista de volúmenes enumerados.
  2. Bloquee cada volumen mediante el código de control de FSCTL_LOCK_VOLUME . Si el LUN se mueve a otra máquina como un volumen intacto y otra aplicación contiene un bloqueo de volumen, debe reintentar la operación de FSCTL_LOCK_VOLUME si es posible antes de continuar con el paso siguiente. Sin embargo, si el volumen solo se bloquea y se desmonta porque se está eliminando, no es necesario volver a intentar la operación de FSCTL_LOCK_VOLUME .
    Nota Este paso es opcional. El propósito de este paso es permitir que otras aplicaciones que contengan bloqueos para liberarlos. Incluso si se produce un error en la operación de bloqueo, debe continuar con el paso siguiente.
     
  3. Desmonte cada volumen mediante el código de control FSCTL_DISMOUNT_VOLUME .
  4. Si los volúmenes están en discos básicos, tómelos sin conexión mediante el código de control IOCTL_VOLUME_OFFLINE .
  5. Desinstale cada volumen mediante la función SetupDiCallClassInstaller y pase DIF_REMOVE para el parámetro InstallFunction .
  6. Desinstale cada disco mediante la función SetupDiCallClassInstaller y pase DIF_REMOVE para el parámetro InstallFunction .
  7. Quite las rutas de acceso del modo de usuario, como las carpetas montadas y las asignaciones de letras de unidad, del Registro mediante una llamada al método IVdsService::CleanupObsoleteMountPoints .

Después de desenmascarar un LUN en una máquina de destino o enmascarada desde una máquina de destino, es posible que la visibilidad del LUN en esa máquina no cambie hasta que se realice un nuevo examen de bus. La aplicación VDS en la máquina de destino inicia el rescan de bus llamando a IVdsService::Reenumerate. El inicio del examen de bus es responsabilidad de la aplicación VDS, no del proveedor de hardware.

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado vdshwprv.h
Library Uuid.lib

Consulte también

IVdsHwProvider::Reenumerate

IVdsHwProvider::Refresh

IVdsLun