rplusg
rplusg

Reputation: 3446

how to know whether disk is basic or dynamic?

In windows is it possible to know what kind of disk we are dealing with from a c/c++ program? forget about gpt or mbr, how to know whether it is basic or dynamic? Program input can be drive letter or any info related to disk, output should be dynamic or basic. No need of a direct way of doing, even if it is lengthy process, its okay. I couldn't find much in msdn. Please help me out.

Upvotes: 2

Views: 4794

Answers (3)

Alan
Alan

Reputation: 46813

There is a way in windows, but it's not straight forward.

There is no direct API to determine if a disk is Basic or Dynamic, however all dynamic disks will have LDM Information.

So if a drive has a partion with LDM information on it, then it's going to be a dynamic disk.

the DeviceIoControl() method with the IOCTL_DISK_GET_DRIVE_LAYOUT_EX control code can be used to get this information.

Here is a post with a sample console application to do what you're asking for.

Upvotes: 6

Nitin Midha
Nitin Midha

Reputation: 2268

As per from MSDN http://msdn.microsoft.com/en-us/library/aa363785(VS.85).aspx

Detecting the Type of Disk

There is no specific function to programmatically detect the type of disk a particular file or directory is located on. There is an indirect method.

First, call GetVolumePathName. Then, call CreateFile to open the volume using the path. Next, use IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS with the volume handle to obtain the disk number and use the disk number to construct the disk path, such as "\?\PhysicalDriveX". Finally, use IOCTL_DISK_GET_DRIVE_LAYOUT_EX to obtain the partition list, and check the PartitionType for each entry in the partition list.

Upvotes: 0

Ashish
Ashish

Reputation: 8529

check out for GetDriveType() .

Upvotes: -2

Related Questions