7 Appendix B: Product Behavior

The information in this specification is applicable to the following Microsoft products or supplemental software. References to product versions include updates to those products.

  • Windows Server 2003 operating system

  • Windows Server 2003 R2 operating system

  • Windows Vista operating system

  • Windows Server 2008 operating system

  • Windows 7 operating system

  • Windows Server 2008 R2 operating system

  • Windows 8 operating system

  • Windows Server 2012 operating system

  • Windows 8.1 operating system

  • Windows Server 2012 R2 operating system

  • Windows 10 operating system

  • Windows Server 2016 operating system 

  • Windows Server operating system

  • Windows Server 2019 operating system

  • Windows Server 2022 operating system

  • Windows 11 operating system

  • Windows Server 2025 operating system

Exceptions, if any, are noted in this section. If an update version, service pack or Knowledge Base (KB) number appears with a product name, the behavior changed in that update. The new behavior also applies to subsequent updates unless otherwise specified. If a product edition appears with the product version, behavior is different in that product edition.

Unless otherwise specified, any statement of optional behavior in this specification that is prescribed using the terms "SHOULD" or "SHOULD NOT" implies product behavior in accordance with the SHOULD or SHOULD NOT prescription. Unless otherwise specified, the term "MAY" implies that the product does not follow the prescription.

<1> Section 1.3: The VDS Remote Protocol is implemented by the Windows Virtual Disk Service (VDS). Windows XP operating system and Windows 2000 operating system do not support VDS, but the Disk Management Remote Protocol [MS-DMRP] on those operating systems provides a subset of the functionality that VDS provides.

<2> Section 1.6: The VDS Remote Protocol is the preferred protocol to use except on Windows XP and Windows 2000, which do not support VDS.

<3> Section 1.7: There is no optional support of interfaces, but a server has to implement all interfaces of the targeted operating system to be compliant with it.

The following table lists, by operating system version, the interfaces used when managing disks and volumes.

Supported operating system version

Interface

Windows Server 2003

Windows Server 2003 R2

Windows Vista

Windows Server 2008 operating system

Windows 7\Windows Server 2008 R2

Windows 8/Windows Server 2012/Windows 8.1/Windows Server 2012 R2/Windows 10 /Windows Server 2016 / Windows Server operating system / Windows Server 2019 / Windows Server 2022 / Windows 11 / Windows Server 2025

IVdsProvider

X

X

X

X

X

X

IVdsSwProvider

X

X

X

X

X

X

IVdsPack

X

X

X

X

X

X

IVdsDisk

X

X

X

X

X

X

IVdsAdvancedDisk

X

X

X

X

X

X

IVdsCreatePartitionEx

X

X

X

X

X

X

IVdsRemovable

X

X

X

X

X

X

IVdsVolume

X

X

X

X

X

X

IVdsVolume2

X

X

IVdsVolumeMF

X

X

X

X

X

X

IVdsVolumePlex

X

X

X

X

X

X

IVdsServiceUninstallDisk

X

X

X

X

X

IVdsPack2

X

X

X

X

IVdsDisk2

X

X

X

X

IVdsDisk3

X

X

IVdsAdvancedDisk2

X

X

X

X

IVdsAdvancedDisk3

X

IVdsDiskPartitionMF

X

X

X

X

IVdsDiskPartitionMF2

X

X

IVdsVolumeMF2

X

X

X

X

IVdsVolumeMF3

X

X

IVdsVolumeShrink

X

X

X

X

IVdsVolumeOnline

X

X

IVdsHwProvider

X

X

X

X

X

X

IVdsServiceLoader

X

X

X

X

X

X

IVdsVdProvider

X

X

IVdsVDisk

X

X

IVdsOpenVDisk

X

X

IVdsServiceSw

X

IVdsSubSystemImportTarget

X

X

X

X

X

The following list provides a brief overview of the functionality available for managing disks and volumes starting with the initial release of the Virtual Disk Service Remote Protocol in Windows Server 2003:

IVdsAdvancedDisk2 extends IVdsAdvancedDisk with new functionality that is related to changing a partition type.

IVdsAdvancedDisk3 contains new functionality related to disk properties and unique ID.

IVdsServiceUninstallDisk contains new functionality that is related to uninstalling disks and the volumes that are contained on those disks.

IVdsServiceSw contains new functionality for mapping a PnP Device ID string to a disk object.

IVdsPack2 extends IVdsPack with new functionality that is related to creating aligned volumes.

IVdsDisk2 extends IVdsDisk with new functionality that is related to bringing disks online and offline in clustered and other scenarios.

IVdsDisk3 extends IVdsDisk with new functionality that is related to detecting the BIOS 0 disk or system disk. This allows a client to find the disk that will be used at boot as the system disk (hosts the system partition on MBR disks or the ESP for GPT disks). Also, IVdsDisk3 extends IVdsDisk with functionality to return the list of free extents associated with a disk and to align those extents. The output of this method is useful as input when creating partitions and volumes.

IVdsVolume2 extends IVdsVolume with new functionality that is related to volume properties.

IVdsVolumeMF2 extends IVdsVolumeMF with new functionality that is related to file systems.

IVdsVolumeMF3 extends IVdsVolumeMF with new functionality that is related to file systems.

IVdsDiskPartitionMF contains new functionality that is related to file systems.

IVdsDiskPartitionMF2 contains a new format method that allows the user to specify metadata duplication when formatting as UDF.

IVdsVolumeShrink contains new functionality that is related to shrinking volumes.

IVdsVolumeOnline contains new functionality that is related to bringing volumes back to a healthy state.

Interfaces that are used when querying HBA and iSCSI initiator information.

The following interfaces, used when querying HBA and iSCSI initiator information, are not supported in Windows Server 2003: IVdsServiceHba, IVdsServiceIscsi, IVdsHbaPort, IVdsIscsiInitiatorAdapter, and IVdsIscsiInitiatorPortal.

<4> Section 2.1: Windows configures the underlying RPC transport by using the following flags. For more information on the meaning of these flags, see [C706] and [MS-RPCE].

  • RPC_C_AUTHN_LEVEL_PKT_PRIVACY

  • RPC_C_IMP_LEVEL_IDENTIFY

  • EOAC_SECURE_REFS | EOAC_NO_CUSTOM_MARSHAL

<5> Section 2.1: The authorization constraints in Windows do not vary by operating system release. All interfaces that are described in this document require an access level that corresponds to any of the following Windows security groups:

  • Administrators

  • Backup Operators

  • SYSTEM

    • The VDS Remote Protocol works only when the client and the server are on the same domain, or in domains that have a trust relationship with one another.

    • The VDS Remote Protocol does NOT work when client and server are on a workgroup; server throws ACCESS_DENIED error.

<6> Section 2.2.1.2.2: Windows does not currently send this notification under any circumstance, but might do so in future releases.

<7> Section 2.2.1.2.5: Implementations on Windows 8 and Windows Server 2012 interpret this value as VDSBusTypeVirtual.

<8> Section 2.2.1.2.5:  This field is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<9> Section 2.2.1.2.5:  This field is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<10> Section 2.2.1.2.9:  This field is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<11> Section 2.2.1.2.9:  This field is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<12> Section 2.2.1.2.12: This enumeration type is used only in Windows Vista and Windows Server 2008.

<13> Section 2.2.1.2.22: No Win32 API path names are created. Win32 APIs such as FindFirstVolume and FindNextVolume do not enumerate this volume.

<14> Section 2.2.1.2.23: For Windows Server 2003 and Windows Server 2003 R2, VDS_VF_NO_DEFAULT_DRIVE_LETTER cannot be set or cleared on dynamic disk volumes, and is always enabled. On basic disks, it is disabled by default, and the flags can only be changed using the IVdsVolume::SetFlags (section 3.4.5.2.32.10) and IvdsVolume::ClearFlag (section 3.4.5.2.32.11) methods. Assigning or removing a drive letter does not toggle the flag for basic GPT disks.

<15> Section 2.2.1.2.23: Windows Server 2003 and Windows Server 2003 R2 do not use BitLocker full-volume encryption; otherwise Windows-based client and servers use BitLocker full-volume encryption.

<16> Section 2.2.1.2.23:  This field is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<17> Section 2.2.1.2.23:  This field is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<18> Section 2.2.1.2.23: The settings for dynamic disk volumes are the same as for basic GPT disks on Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2 operating system.

<19> Section 2.2.1.3.1: This notification is never sent by the Windows implementation of the Virtual Disk Service.

<20> Section 2.2.1.3.11: Windows recognizes the following partition types on MBR disks and treats all others as OEM partitions (which do not automatically get assigned drive letters except in Windows Preinstallation Environment (Windows PE)):

Value

Meaning

0x00

An unused entry.

0x01

Partition with 12-bit FAT entries.

0x04

Partition with 16-bit FAT entries.

0x05

Extended partition entry.

0x06

MS-DOS version 4 huge partition.

0x07

Installable file system (IFS) partition.

0x0B

FAT32 partition.

0x0C

FAT32 partition using extended INT13 services.

0x0E

16-bit FAT partition using extended INT13 services.

0x0F

Extended partition using extended INT13 services.

0x42

Logical disk manager (LDM) data partition.

<21> Section 2.2.1.3.12: Windows recognizes the following partition types on GPT disks.

Value

Meaning

{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}

EFI system partition.

{E3C9E316-0B5C-4DB8-817D-F92DF00215AE}

MSR space partition; used to reserve space for subsequent use by operating system software.

{EBD0A0A2-B9E5-4433-87C0-68B6B72699C7}

A basic data partition.

{5808C8AA-7E8F-42E0-85D2-E1E90434CFB3}

LDM metadata partition.

{AF9B60A0-1431-4F62-BC68-3311714A69AD}

LDM data partition.

{DE94BBA4-06D1-4D40-A16A-BFD50179D6AC}

Microsoft recovery partition.

<22> Section 2.2.1.3.12: The partition is recognized as an OEM partition and will not be converted to dynamic if the disk is converted to dynamic. The partition will not get a drive letter except in Windows PE.

<23> Section 2.2.1.3.18: This structure is used only in Windows Vista and Windows Server 2008.

<24> Section 2.2.1.3.22: Only the basic data partition type is allowed.

<25> Section 2.2.1.3.22: The partition is recognized as an OEM partition and is not converted to dynamic if the disk is converted to dynamic. The partition does not get a drive letter except in Windows PE.

<26> Section 2.2.1.3.23: The VIRTUAL_STORAGE_TYPE structure is not used in Windows Server 2003, Windows Server 2003 R2, Windows Vista, and Windows Server 2008.

<27> Section 2.2.2.1.2.2:  This field is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<28> Section 2.2.2.1.2.3: VDS_QUERY_HARDWARE_PROVIDERS returns no additional providers when it is used with IVdsService::QueryProviders(Opnum 6) on a Windows installation that has no additional software installed. Third-party providers need to be installed to get hardware providers.

<29> Section 2.2.2.1.3.1: Each version of Windows has its pwszVersion string set as follows.

Version

pwszVersion string

Windows Server 2003

1.0

Windows Server 2003 R2

1.1

Windows Vista

2.0

Windows Server 2008

2.1

Windows Server 2008 R2

3.0

Windows 7

3.0

Windows 8

4.0

Windows Server 2012

4.0

Windows 8.1

4.0

Windows Server 2012 R2

4.0

Windows 10

4.0

Windows Server 2016

4.0

Windows Server operating system

4.0

Windows Server 2019

4.0

Windows Server 2022

4.0

Windows 11

4.0

Windows Server 2025

4.0

<30> Section 2.2.2.1.3.3: In Windows Server 2003, Windows Server 2003 R2, Windows Vista, and Windows Server 2008: (1) The first entry's wszName field is overwritten with "UDF". The first entry's wszName field contains "FAT". (2) The string of illegal label characters for the second entry (the FAT32 entry), pwszIllegalLabelCharSet, is not set and contains an invalid string. (3) The fifth entry's wszName field is unset. It is supposed to contain "UDF", but instead contains invalid characters. (4) The third entry's ulCompressionFlags field is incorrectly set to 0x000F0000 (the NTFS entry).

In Windows, the third entry's ulCompressionFlags field is incorrectly set to 0x000F0000 (the NTFS entry).

<31> Section 2.2.2.2.1.1:  This field is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<32> Section 2.2.2.2.1.1:  This field is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<33> Section 2.2.2.3.1.1: The VDS_ISCSI_SHARED_SECRET structure is not used in Windows Server 2003.

<34> Section 2.2.2.4.1.1: The VDS_HBAPORT_TYPE enumeration type is not used in Windows Server 2003.

<35> Section 2.2.2.4.1.2: The VDS_HBAPORT_STATUS enumeration type is not used in Windows Server 2003.

<36> Section 2.2.2.4.1.3: The VDS_HBAPORT_SPEED_FLAG enumeration type is not used in Windows Server 2003. 

<37> Section 2.2.2.4.2.1: The VDS_WWN structure is not used in Windows Server 2003.

<38> Section 2.2.2.4.2.2: The VDS_HBAPORT_PROP structure is not used in Windows Server 2003.

<39> Section 2.2.2.5.1.1: The VDS_ISCSI_INITIATOR_ADAPTER_PROP structure is not used in Windows Server 2003.

<40> Section 2.2.2.6.1.1: The VDS_IPADDRESS_TYPE enumeration type is not used in Windows Server 2003.

<41> Section 2.2.2.6.2.1: The VDS_IPADDRESS structure is not used in Windows Server 2003.

<42> Section 2.2.2.6.2.2: The VDS_ISCSI_INITIATOR_PORTAL_PROP structure is not used in Windows Server 2003.

<43> Section 2.2.2.10.1.1:  This field is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<44> Section 2.2.2.10.1.1:  This field is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<45> Section 2.2.2.10.1.1:  This field is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<46> Section 2.2.2.11.1.1: The partition is recognized as an OEM partition and is not converted to dynamic if the disk is converted to dynamic. The partition does not get a drive letter except in Windows PE.

<47> Section 2.2.2.12.1.1: The CHANGE_PARTITION_TYPE_PARAMETERS structure is not used in Windows Server 2003 and Windows Server 2003 R2.

<48> Section 2.2.2.12.1.1: Only the basic data partition type is allowed.

<49> Section 2.2.2.13.1.1:  This structure is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<50> Section 2.2.2.18.2.1: The default block size of 2 megabytes is used.

<51> Section 2.2.2.19.1.2: The kernels use this at boot time to load the system disk when booting from a virtual disk.

<52> Section 2.2.2.20.1.1: This value is available for use by a WIN32 non-VDS API.

<53> Section 3.1: Group 2 is not supported in Windows Server 2003.

Group 3 is not supported in Windows Server 2003 and Windows Server 2003 R2.

Group 4 is not supported in Windows Server 2003, Windows Server 2003 R2, and Windows Vista.

Group 5 is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, and Windows Server 2008.

Group 6 is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<54> Section 3.1:  This group is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, and Windows Server 2008.

<55> Section 3.1.5.3: This interface is not supported in Windows Server 2003. If a client attempts to get the interface in Windows Server 2003 by calling IUnknown::QueryInterface, E_NOINTERFACE (0x80004002) is returned.

<56> Section 3.1.5.4: This interface is not supported in Windows Server 2003. If a client attempts to get the interface in Windows Server 2003 by calling IUnknown::QueryInterface, E_NOINTERFACE (0x80004002) is returned.

<57> Section 3.1.5.5: This interface is not supported in Windows Server 2003. If a client attempts to get the interface in Windows Server 2003 by calling IUnknown::QueryInterface, E_NOINTERFACE (0x80004002) is returned. Attempting to call methods with opnums 5, 6, 7, or 9 can result in NDR raising a RPC_X_BAD_STUB_DATA exception. For more information, see [MS-DCOM].

<58> Section 3.1.5.7:  This interface is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<59> Section 3.1.6.1: This interface is not supported in Windows Server 2003. If a client attempts to get the interface in Windows Server 2003 by calling IUnknown::QueryInterface, E_NOINTERFACE (0x80004002) is returned.

<60> Section 3.1.7.1: This interface is not supported in Windows Server 2003. If a client attempts to get the interface in Windows Server 2003 by calling IUnknown::QueryInterface, E_NOINTERFACE (0x80004002) is returned. Attempting to call these methods with opnums 5 or 6 can result in NDR raising an RPC_X_BAD_STUB_DATA exception. For more information, see [MS-DCOM].

<61> Section 3.1.7.1: Gaps in the opnum numbering sequence apply to Windows as follows.

Opnum

Description

05

Only used locally by Windows, never used remotely.

06

Only used locally by Windows, never used remotely.

<62> Section 3.1.8.1: This interface is not supported in Windows Server 2003. If a client attempts to get the interface in Windows Server 2003 by calling IUnknown::QueryInterface, E_NOINTERFACE (0x80004002) is returned. Attempting to call methods with opnums 5, 6, or 7 can result in NDR raising an RPC_X_BAD_STUB_DATA exception. For more information, see [MS-DCOM].

<63> Section 3.1.12.4: This method is not implemented for removable disks in Windows Server 2003.

<64> Section 3.1.12.6:  This interface is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<65> Section 3.3.6:  When the sequence shown in the following event log entry is executed repeatedly in a program (say, 200 times) on Windows Server 2008, the client will occasionally encounter the error "0x800706BE". This error mainly comes at AddDisk and sometimes on Wait. In this circumstance, the following entry is recorded in the event log on the server:"====Faulting application vds.exe, version 6.0.6001.18000, time stamp 0x479198cb, faulting module ntdll.dll, version 6.0.6001.18000, time stamp 0x4791adec, exception code 0xc0000005, fault offset 0x000000000001f7fa, process id 0xda4, application start time 0x01c967e37ddea470.====- QueryUnallocatedDisks- CreatePack- AddDisk- Clean- Wait (for clean to complete)"

<66> Section 3.4.1.1: The IVdsServiceUninstallDisk, IVdsServiceHba, and IVdsServiceIscsi interfaces are not available in Windows Server 2003.

<67> Section 3.4.1.2: In Windows, only partitions on hard disks that have the following partition types are considered volumes: 0x01, 0x04, 0x06, 0x07, 0x0B, 0x0C, and 0x0E.

<68> Section 3.4.5.1.7: The operating system allows a disk object to be queried to determine whether it is a virtual disk.

<69> Section 3.4.5.1.8: The operating system allows a disk object to be queried to determine whether it is a virtual disk.

<70> Section 3.4.5.2: Windows-based servers enforce authorization checks. For information on the authorization requirements for the various methods, see section 2.1. In Windows, the client needs to be a member of the administrator or backup operators groups, or be the local_system account.

<71> Section 3.4.5.2.4.1: In Windows, the IVdsService::GetProperties method will not fail if called before the service has finished initializing, but the data returned is not valid. Client applications wait for the service to finish initializing before making any calls against the service, other than IVdsService::IsServiceReady or IVdsService::WaitForServiceReady.

<72> Section 3.4.5.2.4.8: Note the following issues in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008 R2, and Windows Server 2012: (1) The first entry's wszName field is overwritten with "UDF". The first entry's wszName field contains "FAT". (2) The string of illegal label characters for the second entry (the FAT32 entry), pwszIllegalLabelCharSet, is not set and contains an invalid string. (3) The fifth entry's wszName field is left unset. It is supposed to contain "UDF", but instead contains invalid characters.

In Windows, the third entry's ulCompressionFlags field is incorrectly set to 0x000F0000 (the NTFS entry).

<73> Section 3.4.5.2.4.14: In Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, Windows Server 2016, Windows Server operating system, Windows Server 2019, Windows Server 2022, Windows Server 2025 and Windows 11 this method succeeds only if the client allows the server to impersonate the client's security context. The client does so by changing its impersonation level to RPC_C_IMPL_LEVEL_IMPERSONATE. For more information on the meaning of the RPC_C_IMPL_LEVEL_IMPERSONATE flag, see [C706] and [MS-RPCE] section 2.2.1.1.9.

<74> Section 3.4.5.2.8.3: The Windows implementation of this method always returns VDS_E_TARGET_SPECIFIC_NOT_SUPPORTED (0x80042706) if a target ID is specified.

<75> Section 3.4.5.2.10.1:  This method is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<76> Section 3.4.5.2.11.2: This method returns VDS_E_NOT_SUPPORTED.

Windows Server 2003 R2 returns the S_OK status whether or not storage is connected to the ends of the paths.

<77> Section 3.4.5.2.17.2: Windows uses a string in the Security Descriptor Definition Language (SDDL) format.

<78> Section 3.4.5.2.17.2: For the Microsoft virtual hard disk provider, this parameter is zero.

<79> Section 3.4.5.2.17.2: Windows 7 and Windows 8 ignore  this value.

<80> Section 3.4.5.2.19.5: Windows supports at most 32 disks in a volume. Windows-based servers fail requests that specify more than 32 disks, and Windows clients never submit such requests.

<81> Section 3.4.5.2.19.5: The Windows implementation requires the stripe size to be 65536 if the type is VDS_VT_STRIPE or VDS_VT_PARITY. Other volume types are not striped and the stripe size is 0.

<82> Section 3.4.5.2.19.6: If a GPT disk is added to a basic pack, the operation automatically creates an MSR partition on the disk, except when the server is running in Windows PE because an administrator might want to create an EFI system partition on the disk. The EFI system partition, if present, needs to be the first partition on the disk. If a disk is added to a dynamic pack, the operation does not create an MSR partition.

<83> Section 3.4.5.2.19.7: It is not possible to migrate a basic disk from one basic disk pack to another basic disk pack. A dynamic disk with volumes cannot be converted to a basic disk.

<84> Section 3.4.5.2.19.7: If the server is running on Windows Server 2003 or Windows Server 2003 R2:

  • If this method is called to convert a basic disk to a dynamic disk, and there is not enough space on the disk to create the dynamic disk metadata database, then this method returns VDS_E_NO_FREE_SPACE.

  • If this method is called to import a set of foreign dynamic disks into the online pack, and the disks do not all belong to the same foreign pack, then this method returns VDS_E_IMPORT_SET_INCOMPLETE.

  • If this method is called to convert a basic disk to a dynamic disk, and the disk contains an active partition that is not the current active partition, then this method returns VDS_E_ACTIVE_PARTITION.

  • If this method is called to convert a basic disk to a dynamic disk, and the disk contains a partition which is of a type not recognized by the Windows operating system, then this method returns VDS_E_PARTITION_OF_UNKNOWN_TYPE.

  • If this method is called to convert a basic disk to a dynamic disk, and the disk contains a partition which is part of an FtDisk volume, then this method returns VDS_E_LEGACY_VOLUME_FORMAT.

  • If this method is called to convert a basic disk to a dynamic disk, then the disk contains a partition which is either of unknown type, or, which has a type indicating that it is a known OEM partition, and the aforementioned partition is both preceded and followed by data partitions with recognized partition types, method returns VDS_E_NON_CONTIGUOUS_DATA_PARTITIONS.

<85> Section 3.4.5.2.19.8: On Windows Server 2003 and Windows Server 2003 R2, removing a missing disk called against a dynamic disk does two things:

  1. Removes the disk from the online disk group.

  2. Reverts the disk to basic.

If the missing disk is in the online disk group and is being converted to basic, both steps are completed. If a missing disk is being removed from the disk group, only step 1 is performed. If the disk is foreign, only step 2 is performed because the disk is not in the online disk group.

<86> Section 3.4.5.2.20.1: This array's size is 32 objects or less, because Windows imposes a limit of 32 disks that can be used with a single volume.

<87> Section 3.4.5.2.20.1: The stripe size is 65,536 if type is VDS_VT_STRIPE or VDS_VT_PARITY; otherwise, stripe size is 0.

<88> Section 3.4.5.2.20.1: In Windows, if zero is specified, the server determines the alignment value that is specified in one of the following registry keys under HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\vds\Alignment, depending on the size of the disk on which the volume is created. The following default values appear after the operating system is installed and can be overridden by an administrator.

Value

Meaning

"Disk Size 4GB"

65536

Registry Key: LessThan4GB

"Disk Size 4 - 8GB"

1048576

Registry Key: Between4_8GB

"Disk Size 8 - 32GB"

1048576

Registry Key: Between8_32GB

"Disk Size > 32GB"

1048576

Registry Key: GreaterThan32GB

<89> Section 3.4.5.2.21.5: For Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, Windows Server 2016, Windows Server operating system, Windows Server 2019, Windows Server 2022, Windows Server 2025, and Windows 11 if the disk is not convertible because there are data partitions or volumes on the disk or because the disk is removable, VDS_E_DISK_NOT_CONVERTIBLE is returned. Windows 7, Windows Server 2008 R2, Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, Windows Server 2016, Windows Server operating system, Windows Server 2019, Windows Server 2022, Windows Server 2025, and Windows 11 require that the disk have a minimum size of 128 MB in order for the disk to be converted from the MBR disk partition formatting style to the GPT disk partition formatting style. If the disk meets all other requirements for conversion, and if the disk's size is less than this minimum, the error returned will be VDS_E_DISK_NOT_CONVERTIBLE_SIZE.

<90> Section 3.4.5.2.21.6: Not implemented in Windows Server 2003, Windows Server 2003 R2, and Windows Vista prior to Windows Vista operating system with Service Pack 1 (SP1).

<91> Section 3.4.5.2.21.7: Not implemented in Windows Server 2003, Windows Server 2003 R2, and Windows Vista prior to Windows Vista SP1.

<92> Section 3.4.5.2.22.1: This method will fail on Windows Server 2008 if called against a basic disk or dynamic disk, and will only succeed if the disk has no disk partitioning format. This method was added for Windows Vista, but was superseded by the IVdsDiskOnline::Online method in Windows Server 2008.

<93> Section 3.4.5.2.22.1: For Windows Server 2008, if this method is called to either online or offline the disk and the disk is already online or offline, the method returns S_OK or ERROR_SUCCESS (0x00000000). In Windows Server 2008 R2, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server operating system, Windows Server 2019, Windows Server 2022, and Windows Server 2025 if this method is called to either online or offline the disk and the disk is found to already be online or offline, the method returns VDS_E_DISK_NOT_ONLINE (0x8004244B) or VDS_E_DISK_NOT_OFFLINE (0x80042595), respectively.

<94> Section 3.4.5.2.24.3: On Windows Vista and Windows Server 2008, the offset supplied to this method can be rounded up or down to an alignment boundary.

<95> Section 3.4.5.2.24.4: OEM partitions, EFI system partitions, and MSR partitions are considered protected and cannot be deleted unless bForceProtected is specified.

<96> Section 3.4.5.2.24.5: In Windows, the partition size is returned.

<97> Section 3.4.5.2.24.9: On Windows 7 and Windows Server 2008 R2, if the method call is made using FAT, FAT32, or ExFAT file system, and the bEnableCompression parameter is TRUE, VDS_E_COMPRESSION_NOT_SUPPORTED is returned. On all other Windows-based clients and servers the parameter is ignored.

<98> Section 3.4.5.2.24.9: On Windows 7 and Windows Server 2008 R2, if the method call is made using FAT, FAT32, or ExFAT file system types, and the bEnableCompression parameter is TRUE, VDS_E_COMPRESSION_NOT_SUPPORTED is returned. On all other Windows-based clients and servers the parameter is ignored.

<99> Section 3.4.5.2.24.10:  On GPT disks, Windows recognizes any partition with the GPT_ATTRIBUTE_PLATFORM_REQUIRED flag set as an OEM partition. On MBR disks, Windows recognizes the following partition types as OEM partitions.

Value

Meaning

0x12

EISA partition.

0x27

Microsoft recovery partition (recognized only in Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012).

0x84

Hibernation partition for laptops.

0xA0

Diagnostic partition on some HP notebooks.

0xDE

Dell partition.

0xFE

IBM IML partition.

<100> Section 3.4.5.2.24.10: On Windows Server 2003, Windows Server 2003 R2, Windows Vista, and Windows Server 2008, this method returns VDS_E_OPERATION_DENIED for a basic disk. Otherwise, this method returns VDS_E_CLEAN_WITH_DATA for a basic disk.

<101> Section 3.4.5.2.24.10: On Windows Server 2003, Windows Server 2003 R2, Windows Vista, and Windows Server 2008, this method returns VDS_E_OPERATION_DENIED for a basic disk. Otherwise, this method returns VDS_E_CLEAN_WITH_OEM for a basic disk.

<102> Section 3.4.5.2.24.10: On Windows Vista and Windows Server 2008, clean operations cannot be canceled. The basic provider will return VDS_E_CANCEL_TOO_LATE, and the Dynamic Provider will return VDS_E_NOT_SUPPORTED. For raw disks that belong to neither provider, VDS will return VDS_E_CANCEL_TOO_LATE.

<103> Section 3.4.5.2.26.1:  This method is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<104> Section 3.4.5.2.26.2:  This method is not supported in Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<105> Section 3.4.5.2.27.1: For MBR-formatted disks, partition size is limited to 2^32 sectors. For example, for a sector size of 512 bytes, there is a 2-terabyte limit for partitions.

<106> Section 3.4.5.2.27.1: In Windows, if zero is specified the server will determine the alignment value specified in one of the following registry keys under HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\vds\Alignment, depending on the size of the disk on which the volume is created.

The values listed in the following table are the defaults that appear after the operating system is installed, and can be overridden by an administrator.

Disk Size

Registry Key

Default Value in Registry

< 4 GB

LessThan4GB

65536

4 - 8 GB

Between4_8GB

1048576

8 - 32 GB

Between8_32GB

1048576

> 32 GB

GreaterThan32GB

1048576

<107> Section 3.4.5.2.29.3: This method does not return valid values when called with Windows Vista as the client and Windows Server 2008 as the server.

<108> Section 3.4.5.2.29.4: If the method call is made using FAT, FAT32, or ExFAT file system types, and the bEnableCompression parameter is TRUE, VDS_E_COMPRESSION_NOT_SUPPORTED will be returned in the return value of this method call. On Windows Server 2003, Windows Server 2003 R2, Windows Vista, and Windows Server 2008, the parameter is ignored.

<109> Section 3.4.5.2.29.4: If the method call is made using FAT, FAT32, or ExFAT file system types, and the bEnableCompression parameter is TRUE, VDS_E_COMPRESSION_NOT_SUPPORTED will be returned in the return value of this method call. On Windows Server 2003, Windows Server 2003 R2, Windows Vista, and Windows Server 2008, the parameter will be ignored.

<110> Section 3.4.5.2.30.1: If the method is called with an Options parameter that includes the VDS_ESOF_COMPRESSION flag and a file system type of FAT, FAT32, or ExFAT, the method will return VDS_E_COMPRESSION_NOT_SUPPORTED. Windows Server 2003, Windows Server 2003 R2, Windows Vista, and Windows Server 2008 ignore this flag in the Options parameter. The NTFS file system supports compression.

<111> Section 3.4.5.2.32.4: No more than 32 disks are used with a volume; therefore, this value will not exceed 31.

<112> Section 3.4.5.2.32.4: If the file system on the volume is an NTFS file system, extend the file system to fill the newly extended volume.

<113> Section 3.4.5.2.32.4: On Windows, when the Extend operation has completed successfully, calling IVdsAsync::QueryStatus returns S_OK in the pHrResult output parameter but incorrectly returns 0 in the pulPercentCompleted output parameter. When the operation has completed successfully, IVdsAsync::QueryStatus is expected to return 100 in the pulPercentCompleted output parameter.

<114> Section 3.4.5.2.32.5: Only an NTFS file system or raw volumes support this operation. This method is not implemented on Windows Server 2003 or Windows Server 2003 R2.

<115> Section 3.4.5.2.32.5: The Shrink will only work on volumes with an NTFS file system or RAW file systems; otherwise, it returns VDS_E_CANNOT_SHRINK (HRESULT of 0x8004251E).

<116> Section 3.4.5.2.32.5: The NTFS file system supports shrinking, the FAT file systems do not.

<117> Section 3.4.5.2.32.5: On Windows Server 2003 R2 when the Shrink operation has completed successfully, calling IVdsAsync::QueryStatus returns S_OK in the pHrResult output parameter but incorrectly returns 0 in the pulPercentCompleted output parameter. When the operation has completed successfully, IVdsAsync::QueryStatus is expected to return 100 in the pulPercentCompleted output parameter.

<118> Section 3.4.5.2.32.9: On Windows Server 2003, the crash dump and hibernate volumes remain on the boot partition.

On Windows Server 2003, after the volume is deleted, VDS tries to delete the volume mount points. If deleting the mount points fails, Delete will return VDS_S_ACCESS_PATH_NOT_DELETED, even though the volume was successfully deleted.

<119> Section 3.4.5.2.32.9: For Windows Server 2003 R2, the volume plex can continue to be available for a few seconds after the volume has been deleted.

<120> Section 3.4.5.2.32.10: In Windows, the server does not allow the setting of the VDS_VF_HIDDEN and VDS_VF_READONLY flags on boot critical volumes, such as the system volume, boot volume, pagefile volume, hibernation volume, and crashdump volume. If the volume is on a basic MBR disk and the disk contains any of the boot critical volumes, the server does not allow the setting of the VDS_VF_HIDDEN and VDS_VF_READONLY flags on the volume.

<121> Section 3.4.5.2.32.10: Windows does not implement the VDS_VF_LBN_REMAP_ENABLED flag on a volume. Windows does not support setting or clearing the VDS_VF_INSTALLABLE flag on basic disk volumes.

<122> Section 3.4.5.2.32.10: If bRevertOnClose is set, the server does not dismount the volume. If flags VDS_VF_READONLY and/or VDS_VF_HIDDEN are being set and bRevertOnClose is not set, the server dismounts the volume so that the file system is mounted with the new flags when the volume is mounted. Windows Server 2003 and Windows Server 2003 R2 do not follow this behavior.

<123> Section 3.4.5.2.32.10: In Windows, VDS_VF_INSTALLABLE is only valid for dynamic disk volumes.

<124> Section 3.4.5.2.32.11: If the VDS_VF_READONLY and/or VDS_VF_HIDDEN flags are being cleared, the server dismounts the volume so that the file system is mounted with the new flags. If the volume is a boot critical volume, the server will fail to dismount the volume. Windows Server 2003 and Windows Server 2003 R2 do not follow this behavior.

<125> Section 3.4.5.2.32.11: Windows does not implement the VDS_VF_LBN_REMAP_ENABLED flag on a volume. Windows does not support setting or clearing the VDS_VF_INSTALLABLE flag on basic disk volumes.

<126> Section 3.4.5.2.34.1: Windows Server 2008  returns VDS_E_VOLUME_NOT_MOUNTED when the device is offline.

<127> Section 3.4.5.2.34.2: On Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012, if the method call is made using FAT, FAT32, or ExFAT file file system, and the bEnableCompression parameter is TRUE, VDS_E_COMPRESSION_NOT_SUPPORTED will be returned in the return value of this method call. On Windows Server 2003, Windows Server 2003 R2, Windows Vista, and Windows Server 2008, the parameter will be ignored.This parameter is ignored if the file system is not an NTFS file system.

<128> Section 3.4.5.2.34.2: On Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012, if the method call is made using FAT, FAT32, or ExFAT file system types, and the bEnableCompression parameter is TRUE, VDS_E_COMPRESSION_NOT_SUPPORTED will be returned in the return value of this method call. On Windows Server 2003, Windows Server 2003 R2, Windows Vista, and Windows Server 2008, the parameter will be ignored.

<129> Section 3.4.5.2.34.3: An access path can apply to a drive letter or an empty folder on an NTFS file system.

<130> Section 3.4.5.2.34.3: Due to an inconsistency in the Windows code, only one notification is sent. Rather than sending VDS_MOUNT_POINT_NOTIFICATION with ulEvent as VDS_NF_MOUNT_POINT_CHANGE and VDS_DRIVE_LETTER_NOTIFICATION with ulEvent as VDS_NF_DRIVE_LETTER_FREE, Windows sends VDS_MOUNT_POINT_NOTIFICATION with ulEvent VDS_NF_MOUNT_POINT_CHANGE (0x000000CD).

<131> Section 3.4.5.2.34.3: Mounted folder path names cannot be assigned to hidden volumes. A hidden volume is one that is not reported to the Mount Point Manager because: (1) the GPT_BASIC_DATA_ATTRIBUTE_HIDDEN flag is set, (2) the partition type is not recognized, (3) the partition type is a known OEM partition type, or (4) the partition type is either PARTITION_SYSTEM_GUID (an ESP partition) or PARTITION_MSFT_RECOVERY_GUID (a recovery partition).

<132> Section 3.4.5.2.34.6: In Windows, only one notification is sent. Rather than sending VDS_MOUNT_POINT_NOTIFICATION with ulEvent as VDS_NF_MOUNT_POINT_CHANGE and VDS_DRIVE_LETTER_NOTIFICATION with ulEvent as VDS_NF_DRIVE_LETTER_FREE, Windows sends VDS_MOUNT_POINT_NOTIFICATION with ulEvent as VDS_NF_MOUNT_POINT_CHANGE. (0x000000CD).

<133> Section 3.4.5.2.34.8: For Windows Server 2003,Windows Server 2003 R2, Windows Vista, Windows Server 2008: If the volume is offline, the VDS_VF_PERMANENTLY_DISMOUNTED flag is set in the ulFlags member of the VDS_VOLUME_PROP (section 2.2.2.14.1.1) or VDS_VOLUME_PROP2 (section 2.2.2.15.1.1) structure, but the volume status is not updated to VDS_VS_OFFLINE.

<134> Section 3.4.5.2.35.3: If the method call is made using FAT, FAT32, or ExFAT file system types, and the bEnableCompression parameter is TRUE, VDS_E_COMPRESSION_NOT_SUPPORTED will be returned in the return value of this method call. On Windows Server 2003, Windows Server 2003 R2, Windows Vista, and Windows Server 2008, the parameter will be ignored.

<135> Section 3.4.5.2.35.3: If the method call is made using FAT, FAT32, or ExFAT file system types, and the bEnableCompression parameter is TRUE, VDS_E_COMPRESSION_NOT_SUPPORTED will be returned in the return value of this method call. On Windows Server 2003, Windows Server 2003 R2, Windows Vista, and Windows Server 2008, the parameter will be ignored.

<136> Section 3.4.5.2.36.2: If the method is called with an Options parameter that includes the VDS_ESOF_COMPRESSION flag and a file system type of FAT, FAT32, or ExFAT, the method will return VDS_E_COMPRESSION_NOT_SUPPORTED. Windows Server 2003, Windows Server 2003 R2, Windows Vista, and Windows Server 2008 ignore this flag in the Options parameter. The NTFS file system supports compression.

<137> Section 3.4.5.2.37.2: The Shrink method works only on volumes that have NTFS or RAW file systems; otherwise, Shrink returns VDS_E_CANNOT_SHRINK (HRESULT of 0x8004251E).

<138> Section 3.4.5.2.37.2: The NTFS file system supports shrinking; FAT file systems do not.

<139> Section 3.4.5.2.40.3: Windows does not implement the IVdsVDisk::GetHostVolume method.

<140> Section 3.4.5.2.41.1: Windows uses a string in the Security Descriptor Definition Language (SDDL) format.

<141> Section 3.4.5.2.41.1: For the Microsoft virtual disk provider, this parameter is 0 or 1. If the parameter is 1, the pStringSecurityDescriptor parameter is NULL.

<142> Section 3.4.5.2.41.1: In Windows, TimeoutInMs is not used.

<143> Section 3.4.5.2.41.2: For the Microsoft provider, this is 0.

<144> Section 3.4.5.2.41.3: For the Microsoft provider, this is 0.

<145> Section 3.4.5.2.41.5: In Windows, once the merge operation completes, the given virtual disk is still usable but, once the blocks in the differencing disk have been merged into its parent, the list of changed blocks stored in the differencing disk are duplicates of the same blocks in the parent. It is for this reason that: (1) It is recommended that the given virtual disk be deleted because it is no longer necessary and continuing to use the given disk will waste space; by definition, a differencing virtual disk consists of only the set of blocks that differ from blocks in the parent virtual disk. (2) If a merge operation fails to complete, then the given differencing disk and its children are still valid. (3) Because it is recommended that the given virtual disk be deleted, any differencing virtual disks using the given virtual disk as a parent will become invalid as a result of deleting the given virtual disk.

Also note that once the merge operation has commenced, any other virtual disks using the given disk's parent as a parent become invalid. These disks will fail all operations. The reason for this is that any other virtual disks using the given virtual disk's parent as a parent can have change blocks that conflict with blocks merged into the parent. 

To illustrate the above: Given diskA, its parent is diskB, diskB's parent is diskC, and diskX, which also uses diskC as its parent, then once a merge of diskB into diskC is started (some number of blocks have been copied from diskB to diskC), diskX becomes invalid.

<146> Section 3.4.5.2.41.5: For the Microsoft virtual disk provider, the disk has been opened with a ReadWriteDepth at least equal to this value.

<147> Section 3.4.5.2.41.6: In Windows, the expand operation invalidates a virtual disk differencing chain.

<148> Section 3.4.7: Windows Virtual Disk Service Remote Protocol servers use the Plug and Play subsystem to register with the operating system to receive notifications of changes to the storage device.

<149> Section 3.4.7: When the sequence in the behavior log entry shown here is executed repeatedly in a program (say, 200 times) on Windows Server 2008, the client will occasionally encounter the error "0x800706BE". This error mainly comes at AddDisk and sometimes on Wait. However, on the server, the following entry is recorded in the event log: "====Faulting application vds.exe, version 6.0.6001.18000, time stamp 0x479198cb, faulting module ntdll.dll, version 6.0.6001.18000, time stamp 0x4791adec, exception code 0xc0000005, fault offset 0x000000000001f7fa, process id 0xda4, application start time 0x01c967e37ddea470.====- QueryUnallocatedDisks- CreatePack- AddDisk- Clean- Wait (for clean to complete)"