Trying to read the sizes of disks that were created in multiple sessions using GetDiskFreeSpaceEx() gives the size of the last session only. How do I read correctly the number and sizes of all sessions in C/C++?
Thanks.
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
You might want to look at the DeviceIoControl API function. See here for control codes. Here is a code example that retrieves the size of a CD disk. Substitute
for e.g.
if you wish.
Note: The page says that
DeviceIoControlcan be used to “retrieve information about a floppy disk drive, hard disk drive, tape drive, or CD-ROM drive”, but I have also tested it on a DVD, and it seemed to work perfectly. I did not have access to any multisession DVDs to test, so you’ll have to test if that works yourself. If it doesn’t work, I’d try some of the other control codes, at leastIOCTL_DISK_GET_DRIVE_GEOMETRY_EX,IOCTL_DISK_GET_DRIVE_LAYOUT_EX,IOCTL_DISK_GET_LENGTH_INFOandIOCTL_DISK_GET_PARTITION_INFO_EX.If all fails with DeviceIoControl, you could possibly make use of the Windows Image Mastering API (IMAPI). You’ll need v2 of the API (included with Vista & later, can be added to XP & 2003 too, see here: What’s new in IMAPIv2) for DVD support. This API is primarily for CD burning, but does perhaps contain some functionality for retrieving disk size, I’d find it weird if it didn’t. Particularly, this example seems to be interesting. I do not know if this one works for multisession disks either, but since it can create them, I guess it’s likely.
Here are some resources for IMAPI:
MSDN – IMAPI
MSDN – IMAPI interfaces
MSDN – Creating multisession disks with IMAPI (note: example with VB, not C or C++)