Возможно, вы захотите взглянуть на API-функцию DeviceIoControl .См. здесь для контрольных кодов. Здесь - это пример кода, который извлекает размер CD-диска.Замените
CreateFile(TEXT("\\\\.\\PhysicalDrive0")
, например,
CreateFile(TEXT("\\\\.\\F:") /* Drive is F: */
, если хотите.
Примечание: На странице написано, что DeviceIoControl
можно использовать для «извлечения информации о дисководах гибких дисков, жестких дисках, ленточных накопителях или дисководе компакт-дисков», но яЯ также проверил его на DVD, и он, кажется, работал отлично.У меня не было доступа к многосессионным DVD для тестирования, поэтому вам придется проверить, работает ли это самостоятельно.Если это не сработает, я бы попробовал некоторые другие управляющие коды, по крайней мере IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
, IOCTL_DISK_GET_DRIVE_LAYOUT_EX
, IOCTL_DISK_GET_LENGTH_INFO
и IOCTL_DISK_GET_PARTITION_INFO_EX
.Если все не удается с DeviceIoControl, вы могли бы использовать API Мастеринг образов Windows (IMAPI).Вам потребуется v2 API (входит в Vista и более поздние версии, также может быть добавлено в XP & 2003, см. Здесь: Что нового в IMAPIv2 ) для поддержки DVD.Этот API в первую очередь предназначен для записи компакт-дисков, но, возможно, содержит некоторые функции для определения размера диска, я бы посчитал его странным, если бы его не было.В частности, этот пример представляется интересным.Я не знаю, работает ли этот диск и для мультисессионных дисков, но, поскольку он может их создавать, я думаю, это вероятно.
Вот некоторые ресурсы для IMAPI: MSDN - IMAPI MSDN - интерфейсы IMAPI MSDN - Создание многосессионных дисков с IMAPI (примечание: пример с VB, а не C или C ++)