Share via


IVdsLun::SetMask 메서드(vdshwprv.h)

[Windows 8 및 Windows Server 2012 가상 디스크 서비스 COM 인터페이스는 Windows Storage 관리 API로 대체됩니다.]

LUN에 대한 액세스 권한을 부여할 컴퓨터 목록인 마스킹 해제 목록을 지정합니다.

구문

HRESULT SetMask(
  [in] LPWSTR pwszUnmaskingList
);

매개 변수

[in] pwszUnmaskingList

LUN에 대한 액세스 권한을 부여할 컴퓨터를 지정하는 목록입니다. 목록은 세미콜론으로 구분된 NULL로 끝나는 사람이 읽을 수 있는 문자열입니다.

값이 ""이면 스토리지 하위 시스템에 연결된 HBA 포트가 있는 모든 컴퓨터에 LUN에 대한 액세스 권한이 부여됩니다.

참고 실제로 값이 ""인 경우 대부분의 하드웨어 공급자는 로컬 컴퓨터의 포트 및 초기자만 LUN에 대한 액세스 권한을 부여합니다.

 

값이 ""이면 이전에 LUN에 대한 액세스 권한이 부여된 모든 컴퓨터에 대해 액세스가 취소됩니다.

"*" 또는 ""를 지정하면 다른 값을 지정할 수 없습니다.

파이버 채널 네트워크 및 SAS(직렬 연결 SCSI) 네트워크의 경우 각 항목은 LUN이 마스크되지 않은 각 포트의 64비트 WWN(World-Wide Name)이며, 가장 중요한 바이트는 16자 길이인 16진수 문자열로 포맷됩니다. 예를 들어 01:23:45:67:89:AB:CD:EF의 WWN 주소는 "0123456789ABCDEF"로 표시됩니다. 자세한 내용은 파이버 채널SAS에 대한 T10 사양을 참조하세요.

iSCSI 네트워크의 경우 각 항목은 LUN이 마스크 해제된 각 초기자의 iSCSI 정규화된 이름(IQN)입니다. 특정 초기자에 대한 마스크를 해제한 LUN은 해당 초기자와 연결된 것으로 간주됩니다.

참고 마스킹 해제 목록에는 동일한 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을 마스킹하기 전에 호출자는 다음과 같이 해당 디스크를 제거해야 합니다. 먼저 IVdsServiceUninstallDisk::GetDiskIdFromLunInfo를 호출하여 마스킹되는 LUN에 해당하는 디스크의 VDS 개체 ID를 검색합니다. 그런 다음 디스크의 VDS 개체 ID를 사용하여 IVdsServiceUninstallDisk::UninstallDisks 를 호출합니다.

Windows Server 2003 및 Windows Server 2003 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. IVdsDisk::QueryExtents를 호출하여 가져온 볼륨 GUID를 사용하여 열거된 볼륨 목록에서 필요한 볼륨 이름을 확인합니다.
  2. FSCTL_LOCK_VOLUME 제어 코드를 사용하여 각 볼륨을 잠급 수 있습니다. LUN이 다른 컴퓨터로 그대로 볼륨으로 이동하고 다른 애플리케이션이 볼륨 잠금을 보유하는 경우 가능한 경우 FSCTL_LOCK_VOLUME 작업을 다시 시도한 후 다음 단계로 진행해야 합니다. 그러나 볼륨이 삭제되어 잠기고 분리되는 경우에는 FSCTL_LOCK_VOLUME 작업을 다시 시도할 필요가 없습니다.
    참고 이 단계는 선택 사항입니다. 이 단계의 목적은 잠금을 보유할 수 있는 다른 애플리케이션이 해제할 수 있도록 하는 것입니다. 잠금 작업이 실패하더라도 다음 단계로 계속 진행해야 합니다.
     
  3. FSCTL_DISMOUNT_VOLUME 제어 코드를 사용하여 각 볼륨을 분리합니다.
  4. 볼륨이 기본 디스크에 있는 경우 IOCTL_VOLUME_OFFLINE 제어 코드를 사용하여 오프라인으로 전환합니다.
  5. SetupDiCallClassInstaller 함수를 사용하여 각 볼륨을 제거하고 InstallFunction 매개 변수에 대한 DIF_REMOVE 전달합니다.
  6. SetupDiCallClassInstaller 함수를 사용하여 각 디스크를 제거하고 InstallFunction 매개 변수에 대한 DIF_REMOVE 전달합니다.
  7. IVdsService::CleanupObsoleteMountPoints 메서드를 호출하여 레지스트리에서 탑재된 폴더 및 드라이브 문자 할당과 같은 사용자 모드 경로를 제거합니다.

LUN을 대상 컴퓨터에 마스크 해제하거나 대상 컴퓨터에서 마스킹한 후에는 버스가 다시 검사될 때까지 해당 머신에 대한 LUN의 가시성이 변경되지 않을 수 있습니다. 대상 컴퓨터의 VDS 애플리케이션은 IVdsService::Reenumerate를 호출하여 버스 다시 검사를 시작합니다. 버스 다시 검사를 시작하는 것은 하드웨어 공급자가 아닌 VDS 애플리케이션의 책임입니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 vdshwprv.h
라이브러리 Uuid.lib

추가 정보

IVdsHwProvider::Reenumerate

IVdsHwProvider::Refresh

IVdsLun