다음을 통해 공유


IVdsPack::CreateVolume 메서드(vds.h)

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

팩 내에 볼륨을 만듭니다. ppAsync 매개 변수를 통해 IVdsAsync::Wait를 호출하여 새 볼륨 개체에 대한 인터페이스 포인터를 검색할 수 있습니다. 반환된 VDS_ASYNC_OUTPUT 구조체에는 cv.pVolumeUnk 멤버의 볼륨 개체 인터페이스 포인터가 포함됩니다.

구문

HRESULT CreateVolume(
  [in]  VDS_VOLUME_TYPE type,
  [in]  VDS_INPUT_DISK  *pInputDiskArray,
  [in]  LONG            lNumberOfDisks,
  [in]  ULONG           ulStripeSize,
  [out] IVdsAsync       **ppAsync
);

매개 변수

[in] type

VDS_VOLUME_TYPE 열거된 볼륨 형식입니다. 기본 디스크의 볼륨은 익스텐트 하나만 가질 수 있으며 VDS_VT_SIMPLE 플래그만 유효합니다.

[in] pInputDiskArray

VDS_INPUT_DISK 구조체의 배열에 대한 포인터입니다. 각 디스크에 대해 하나의 구조입니다. 디스크는 배열에 한 번만 포함할 수 있습니다. 배열의 모든 디스크를 사용해야 합니다. 그렇지 않으면 메서드가 실패합니다. 호출자는 배열을 할당 및 초기화하고 호출이 반환되면 메모리를 해제해야 합니다.

[in] lNumberOfDisks

볼륨에 기여하는 총 디스크 수입니다.

참고 VDS는 패리티(RAID-5) 볼륨으로 스팬, 스트라이프 및 스트라이프에 32 디스크 제한을 적용합니다.
 

[in] ulStripeSize

볼륨이 스트라이프된 경우 각 스트라이프의 크기(바이트)입니다. VDS_VT_SIMPLE, VDS_VT_SPANVDS_VT_MIRROR 대해 0바이트를 전달합니다. VDS_VT_STRIPE 및 VDS_VT_PARITY 경우 64킬로바이트입니다.

[out] ppAsync

반환 시 VDS가 초기화하는 IVdsAsync 인터페이스 포인터의 주소입니다. 호출자는 인터페이스를 해제해야 합니다. 이 포인터를 사용하여 작업의 상태 취소, 대기 또는 쿼리할 수 있습니다.

이 메서드에서 IVdsAsync::Wait를 호출하고 성공 HRESULT 값이 반환되는 경우 각 인터페이스 포인터에서 IUnknown::Release 메서드를 호출하여 VDS_ASYNC_OUTPUT 구조에서 반환된 인터페이스를 해제해야 합니다. 그러나 Wait가 실패 HRESULT 값을 반환하거나 WaitpHrResult 매개 변수가 오류 HRESULT 값을 수신하는 경우 VDS_ASYNC_OUTPUT 구조체의 인터페이스 포인터는 NULL이며 해제할 필요가 없습니다. Winerror.h에 정의된 SUCCEEDED 및 FAILED 매크로를 사용하여 성공 또는 실패 HRESULT 값을 테스트할 수 있습니다.

반환 값

이 메서드는 표준 HRESULT 값(예: E_INVALIDARG 또는 E_OUTOFMEMORY) 및 VDS 관련 반환 값을 반환할 수 있습니다. 또한 HRESULT_FROM_WIN32 매크로를 사용하여 변환된 시스템 오류 코드를 반환할 수도 있습니다. 오류는 VDS 자체 또는 사용 중인 기본 VDS 공급자 에서 발생할 수 있습니다. 가능한 반환 값은 다음과 같습니다.

반환 코드/값 Description
S_OK
볼륨이 성공적으로 생성되었습니다.
VDS_S_NO_NOTIFICATION
0x00042517L
볼륨 도착 알림을 받지 못했습니다. IVdsService::Refresh를 호출해야 할 수 있습니다.
VDS_S_UPDATE_BOOTFILE_FAILED
0x00042434L
볼륨이 성공적으로 만들어졌지만 VDS가 BCD(부팅 구성 데이터) 저장소에서 부팅 옵션을 업데이트하지 못했습니다.

Windows Server 2003: 부팅 옵션은 itanium 시스템의 x86 또는 x64 시스템 또는 NVRAM의 boot.ini 파일에 저장됩니다.

VDS_E_DISK_NOT_FOUND_IN_PACK
0x8004252DL
지정된 디스크가 동일한 팩에 속하지 않습니다.
VDS_E_DMADMIN_METHOD_CALL_FAILED
0x80042420L
LDM 서비스가 메서드에 실패했습니다.
VDS_E_EXTENT_SIZE_LESS_THAN_MIN
0x80042433L
전달된 익스텐트 크기가 너무 작습니다.
VDS_E_INVALID_DISK_COUNT
0x80042526L
지정된 디스크 수가 이 작업에 유효하지 않습니다.
VDS_E_INVALID_MEMBER_COUNT
0x80042522L
볼륨의 멤버 수는 0보다 커야 합니다.
VDS_E_INVALID_MEMBER_ORDER
0x80042524L
멤버 인덱스는 단조롭게 증가하고 0으로 시작해야 합니다.
VDS_E_INVALID_OPERATION
0x80042415L
전달된 디스크는 CD-ROM 또는 DVD 장치입니다.
VDS_E_INVALID_PACK
0x8004251AL
이 디스크 팩에서는 이 작업이 허용되지 않습니다.
VDS_E_INVALID_PLEX_COUNT
0x80042521L
볼륨의 플렉스 수는 0보다 커야 합니다.
VDS_E_INVALID_PLEX_ORDER
0x80042523L
플렉스 인덱스는 단조롭게 증가하고 0으로 시작해야 합니다.
VDS_E_INVALID_STRIPE_SIZE
0x80042525L
스트라이프 크기(바이트)는 스트라이프 및 RAID-5 볼륨 형식의 경우 2의 힘이어야 하며 다른 모든 볼륨 형식의 경우 0이어야 합니다.
VDS_E_MISSING_DISK
0x80042454L
지정된 디스크가 없습니다.
VDS_E_NO_MEDIA
0x80042412L
디스크 배열을 통해 전달되는 이동식 드라이브에는 미디어가 없습니다.
VDS_E_NOT_ENOUGH_SPACE
0x8004240FL
디스크 중 하나에 공간이 부족합니다.
VDS_E_NOT_SUPPORTED
0x80042400L
볼륨 유형이 지원되지 않거나 메서드에 전달된 이동식 디스크에 볼륨이 이미 있습니다. 이동식 디스크에는 하나의 볼륨만 있을 수 있습니다.
VDS_E_OBJECT_NOT_FOUND
0x80042405L
전달된 디스크 중 하나 이상을 찾을 수 없습니다.
VDS_E_ONE_EXTENT_PER_DISK
0x80042531L
단일 디스크는 동일한 볼륨의 여러 멤버 또는 여러 플렉스에 기여할 수 없습니다.
VDS_E_PACK_OFFLINE
0x80042444L
대상 팩에 액세스할 수 없습니다.
VDS_E_PARTITION_LIMIT_REACHED
0x80042407L
호출자가 추가 주 파티션 또는 확장 파티션을 만들려고 할 때 최대 파티션 수(기본 파티션 또는 확장 파티션이 있는 기본 파티션)가 이미 존재합니다.
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
동적 공급자 캐시가 손상되었습니다.
VDS_E_VOLUME_DISK_COUNT_MAX_EXCEEDED
0x80042529L
볼륨당 32개 이하의 디스크가 허용되지 않습니다.
VDS_E_VOLUME_TOO_SMALL
0x8004242CL
볼륨 크기가 너무 작습니다.

설명

참고 이 메서드는 이동식 디스크에 볼륨을 만드는 데 사용할 수 없습니다.
 
호출자는 이 메서드를 사용하여 현재 팩에서 패리티(RAID-5)로 새 단순, 스팬, 스트라이프, 미러링 또는 스트라이프 볼륨을 만듭니다. 단순 및 스팬 볼륨에는 정확히 하나의 플렉스와 1개의 멤버가 있습니다. 스트라이프 및 RAID-5 볼륨에는 여러 열과 멤버가 있습니다. 미러된 볼륨은 여러 플렉스로 구성됩니다.

기본 디스크는 단순 볼륨만 포함할 수 있습니다. 동적 디스크는 운영 체제에서 바인딩 작업을 지원하는 한 모든 형식의 볼륨을 포함할 수 있습니다. 비 서버 플랫폼은 내결함성 바인딩 작업을 지원하지 않습니다. 새로 만든 모든 볼륨에는 드라이브 문자가 부족합니다.

기본 디스크에서 이 메서드는 기본 파티션을 만듭니다. 디스크에 이미 세 개의 기본 파티션이 있는 경우 디스크에 남아 있는 가장 큰 연속된 사용 가능한 디스크 공간을 커버하는 확장 파티션을 만든 다음 확장 파티션 내에 논리 드라이브를 만듭니다.

디스크는 동일한 볼륨의 둘 이상의 플렉스에 기여할 수 없습니다. 그러나 단일 디스크는 여러 볼륨에 기여할 수 있습니다. 단순 볼륨에는 하나의 VDS_INPUT_DISK 구조만 있는 반면, 스팬, 스트라이프, 미러링 및 RAID-5 볼륨에는 각 기여 디스크에 대해 하나의 구조가 있습니다.

VDS_INPUT_DISK 구조에 지정된 디스크의 크기는 전체 디스크 또는 디스크의 일부일 수 있습니다. 두 개의 디스크가 미러된 볼륨을 형성하는 경우 VDS는 가장 작은 디스크를 사용하여 미러 크기를 계산합니다. (공급자 정책은 지정된 입력 디스크에 할당된 실제 오프셋, 길이 및 디스크 익스텐트 수를 결정합니다.) IVdsPack::QueryVolumes 메서드를 사용하여 생성된 볼륨의 정확한 크기를 확인합니다.

선택적 맞춤 매개 변수를 사용하여 논리 볼륨을 만들려면 IVdsPack2::CreateVolume2 메서드를 사용하거나 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment 레지스트리 키를 사용하여 정렬 값을 바이트 단위로 지정합니다.

Windows 7, Windows Server 2008 R2, Windows Vista 및 Windows Server 2008: 기본 디스크에서 CreateVolume 메서드는 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment 레지스트리 키를 무시합니다. 알려진 문제이며 해결 중입니다. 해결 방법으로 IVdsAdvancedDisk::CreatePartition 또는 IVdsCreatePartitionEx::CreatePartitionEx 메서드를 사용하여 올바르게 정렬되도록 기본 디스크에 파티션을 만듭니다.

동적 파티션 및 볼륨은 다음 레지스트리 키 아래의 값을 사용하여 정렬됩니다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment

기본 맞춤은 디스크가 4GB 이상인 경우 1MB, 디스크가 4GB보다 작은 경우 64KB입니다.

구현자는 호출이 비동기 작업을 시작하는지 여부에 관계없이 이 메서드에 대한 IVdsAsync 인터페이스에 대한 포인터를 반환해야 합니다.

요구 사항

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

추가 정보

IVdsAsync

IVdsAsync::Wait

IVdsPack

IVdsPack2::CreateVolume2

IVdsPack::QueryVolumes

VDS_ASYNC_OUTPUT

VDS_INPUT_DISK

VDS_VOLUME_TYPE