Compartir a través de


Método IVdsLun::SetMask (vds.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 personas.

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

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.

En el caso de 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), primero el byte más significativo. 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á desenmascarado. Un LUN sin máscara a un iniciador determinado se considera que está asociado a ese iniciador.

Nota La lista de desenmascarado puede contener el mismo WWN o IQN más de una vez. No se espera que el autor de la llamada quite duplicados de la lista o que 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 sucesivamente, 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 se pueden originar en VDS en sí o en el proveedor de VDS subyacente que se está usando. Entre los posibles valores devueltos 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 un 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 autor de la llamada debe desinstalar los discos correspondientes de la siguiente manera. En primer lugar, recupere el identificador del objeto 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 en 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 mediante una llamada 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 obtenidos mediante una llamada 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 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 elimina, 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 puedan contener 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 en modo de usuario, como carpetas montadas y 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 enmascararse 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 nuevo examen del bus mediante una llamada 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 vds.h
Library Uuid.lib

Consulte también

IVdsHwProvider::Reenumerate

IVdsHwProvider::Refresh

IVdsLun