Определение доступных секторов DVD Dual Layer диска библиотекой IMAPI2.dll - C#

Узнай цену своей работы

Формулировка задачи:

Как известно на DVD DL диске содержится большее количество секторов, чем может определить оригинальная прошивка. Делается это во избежании некачественной записи на самом конце диска. Модифицированная прошивка для некоторых приводов может производить запись в эту недоступную область. 1 и 2 скриншоты показывают в окне проводника доступный размер модифицированной прошивки и оригинальной соответственно (количество секторов - 4 267 040, размер - 8 738 897 920 байт (8.13ГБ); количество секторов - 4 173 824, размер - 8 547 991 552 байт (7.96ГБ), информационная ёмкость одного сектора – 2048 байт). Я попробовал определить доступный размер через системную библиотеку IMAPI2.dll, программа работает, но определяет количество секторов в 4 173 824 соответственно и размер 7.96ГБ в независимости в каком приводе находится диск (скриншоты 3 и 4)
Int64 totalDiscSize;
 
private void button1_Click(object sender, EventArgs e)
        {
            if (comboBox1.SelectedIndex == -1)
                return;
 
            var discRecorder = (MsftDiscRecorder2)comboBox1.Items[comboBox1.SelectedIndex];
 
            IMAPI2FS.MsftFileSystemImage fileSystemImage = null;
            MsftDiscFormat2Data discFormatData = null;
 
            try
            {
                discFormatData = new MsftDiscFormat2Data();
                if (!discFormatData.IsCurrentMediaSupported(discRecorder))
                {
                    label1.Text = "Media not supported!";
                    totalDiscSize = 0;
                    return;
                }
                else
                {
                    discFormatData.Recorder = discRecorder;
                    IMAPI2FS.IMAPI_MEDIA_PHYSICAL_TYPE mediaType = 
                        (IMAPI2FS.IMAPI_MEDIA_PHYSICAL_TYPE)discFormatData.CurrentPhysicalMediaType;
                    label1.Text = "Тип: " + GetMediaTypeString(mediaType);
 
                    fileSystemImage = new IMAPI2FS.MsftFileSystemImage();
                    fileSystemImage.ChooseImageDefaultsForMediaType(mediaType);
 
                    if (!discFormatData.MediaHeuristicallyBlank)
                    {
                        fileSystemImage.MultisessionInterfaces = discFormatData.MultisessionInterfaces;
                        fileSystemImage.ImportFileSystem();
                    }
 
                    Int64 freeMediaBlocks = fileSystemImage.FreeMediaBlocks;
                    totalDiscSize = 2048 * freeMediaBlocks;
                }
            }
            finally
            {
                if (discFormatData != null)
                    Marshal.ReleaseComObject(discFormatData);
                if (fileSystemImage != null)
                    Marshal.ReleaseComObject(fileSystemImage);
            }
            UpdateSize();
        }
 
private void UpdateSize()
        {
            label2.Text = "Доступно: " + (totalDiscSize < 1073741824 ? 
                string.Format("{0}MB", totalDiscSize / 1048576) :
                string.Format("{0:F2}GB", (float)totalDiscSize / 1073741824.0));
        }
 
private static string GetMediaTypeString(IMAPI2FS.IMAPI_MEDIA_PHYSICAL_TYPE mediaType)
        {
            switch (mediaType)
            {
                case IMAPI2FS.IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_DVDPLUSR_DUALLAYER:
                    return "DVD+R Dual Layer";
            }
        }
Вопрос: я что-то делаю не правильно или просто данная библиотека не может работать с дополнительными секторами?, хотя windows размер диска на модифицированной прошивки нормально определяет. Если так, то какая системная библиотека отвечает за информацию о доступном размере диска в окне проводника?

Решение задачи: «Определение доступных секторов DVD Dual Layer диска библиотекой IMAPI2.dll»

textual
Листинг программы
Int64 freeMediaBlocks = discFormatData.FreeSectorsOnMedia;
totalDiscSize = 2048 * freeMediaBlocks;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы