Compartilhar via


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

[Começando com Windows 8 e Windows Server 2012, a interface COM do Serviço de Disco Virtual é substituída pela API de Gerenciamento de Armazenamento do Windows.]

Especifica a lista de desmascaramento, que é a lista de computadores a receber acesso ao LUN.

Sintaxe

HRESULT SetMask(
  [in] LPWSTR pwszUnmaskingList
);

Parâmetros

[in] pwszUnmaskingList

Uma lista que especifica os computadores a serem concedidos acesso ao LUN. A lista é uma cadeia de caracteres delimitada por ponto e vírgula, terminada em NULL e legível por humanos.

Se o valor for "", todos os computadores que têm uma porta HBA anexada ao subsistema de armazenamento receberão acesso ao LUN.

Nota Na prática, se o valor for "", a maioria dos provedores de hardware só concederá às portas e iniciadores no computador local acesso ao LUN.

 

Se o valor for "", o acesso será revogado para todos os computadores que receberam acesso anteriormente ao LUN.

Se "*" ou "" for especificado, nenhum outro valor poderá ser especificado.

Para redes Fibre Channel e redes SAS (SCS) anexadas em série, cada entrada é um WWN (Nome mundial) de 64 bits de cada porta à qual o LUN é desmascarado, formatado como uma cadeia de caracteres hexadecimal (16 caracteres de comprimento), primeiro byte mais significativo. Por exemplo, um endereço WWN de 01:23:45:67:89:AB:CD:EF é representado como "0123456789ABCDEF". Para obter mais informações, consulte as especificações T10 para Fibre Channel e SAS.

Para redes iSCSI, cada entrada é um IQN (nome qualificado iSCSI) de cada iniciador no qual o LUN é desmascarado. Um LUN desmascarado para um iniciador específico é considerado associado a esse iniciador.

Nota A lista de desmascaramento pode conter o mesmo WWN ou IQN mais de uma vez. Não se espera que o chamador remova duplicatas da lista ou valide o formato do nome WWN ou iSCSI. Além disso, o acesso não é cumulativo. Em outras palavras, se esse método for chamado duas vezes seguidas, somente os computadores especificados na segunda chamada receberão acesso.
 

Retornar valor

Esse método pode retornar valores HRESULT padrão, como E_INVALIDARG ou E_OUTOFMEMORY, e valores retornados específicos do VDS. Ele também pode retornar códigos de erro do sistema convertidos usando a macro HRESULT_FROM_WIN32 . Os erros podem se originar do próprio VDS ou do provedor de VDS subjacente que está sendo usado. Os possíveis valores retornados incluem o seguinte.

Valor/código retornado Descrição
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
Esse valor retornado sinaliza um problema de software ou comunicação dentro de um provedor que armazena em cache informações sobre a matriz. Use o método IVdsHwProvider::Reenumerate seguido pelo método IVdsHwProvider::Refresh para restaurar o cache.
VDS_E_OBJECT_DELETED
0x8004240BL
O objeto LUN não está mais presente.
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
O LUN está em um estado com falha e não consegue executar a operação solicitada.
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
Outra operação está em andamento; essa operação não pode continuar até que a operação ou as operações anteriores sejam concluídas.

Comentários

Antes de chamar o método SetMask para mascarar um LUN, o chamador deve desinstalar os discos correspondentes da seguinte maneira. Primeiro, recupere a ID do objeto VDS do disco que corresponde ao LUN que está sendo mascarado chamando IVdsServiceUninstallDisk::GetDiskIdFromLunInfo. Em seguida, chame IVdsServiceUninstallDisk::UninstallDisks com a ID do objeto VDS do disco.

Windows Server 2003 e Windows Server 2003 com SP1: Para desinstalar os discos correspondentes, execute as etapas a seguir. Observe que essas etapas se tornaram obsoletas com o Windows Server 2003 R2.

  1. Localize os volumes nos discos a serem mascarados da seguinte maneira:
    1. Para cada disco, chame o método IVdsDisk::QueryExtents para enumerar as extensões de disco. Esse método retorna uma lista de estruturas de VDS_DISK_EXTENT . O membro volumeId dessa estrutura contém o GUID de volume.
    2. Enumerar os volumes gerenciados pelo provedor de software chamando o método IVdsSwProvider::QueryPacks para enumerar os pacotes e chamar IVdsPack::QueryVolumes para enumerar os volumes em cada pacote. Chame IVdsVolume::GetProperties para obter a estrutura VDS_VOLUME_PROP para cada volume. O membro da ID dessa estrutura contém o GUID de volume. O membro pwszName contém o nome do volume a ser passado para CreateFile para obter um identificador de volume.
    3. Use os GUIDs de volume obtidos chamando IVdsDisk::QueryExtents para determinar quais dos nomes de volume você precisará na lista de volumes enumerados.
  2. Bloqueie cada volume usando o código de controle FSCTL_LOCK_VOLUME . Se o LUN estiver sendo movido para outro computador como um volume intacto e outro aplicativo mantiver um bloqueio de volume, você deverá repetir a operação de FSCTL_LOCK_VOLUME , se possível, antes de continuar para a próxima etapa. No entanto, se o volume estiver sendo bloqueado e desmontado apenas porque está sendo excluído, não será necessário repetir a operação de FSCTL_LOCK_VOLUME .
    Nota Esta etapa é opcional. A finalidade desta etapa é permitir que outros aplicativos que possam manter bloqueios os liberem. Mesmo que a operação de bloqueio falhe, você deverá continuar para a próxima etapa.
     
  3. Desmonte cada volume usando o código de controle FSCTL_DISMOUNT_VOLUME .
  4. Se os volumes estiverem em discos básicos, leve-os offline usando o código de controle IOCTL_VOLUME_OFFLINE .
  5. Desinstale cada volume usando a função SetupDiCallClassInstaller , passando DIF_REMOVE para o parâmetro InstallFunction .
  6. Desinstale cada disco usando a função SetupDiCallClassInstaller , passando DIF_REMOVE para o parâmetro InstallFunction .
  7. Remova caminhos do modo de usuário, como pastas montadas e atribuições de letra de unidade, do registro chamando o método IVdsService::CleanupObsoleteMountPoints .

Depois que um LUN é desmascarado em um computador de destino ou mascarado de um computador de destino, a visibilidade do LUN nesse computador pode não ser alterada até que um rescan seja executado. O aplicativo VDS no computador de destino inicia o repositório de barramento chamando IVdsService::Reenumerate. O início do rescan do barramento é responsabilidade do aplicativo VDS, não do provedor de hardware.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho vdshwprv.h
Biblioteca Uuid.lib

Confira também

IVdsHwProvider::Reenumerate

IVdsHwProvider::Refresh

IVdsLun