получение внешнего типа носителя

0

Я хотел бы найти способ обнаружения типа носителя в моем оптическом диске (например, DVD + R, DVD-R, DVD-RW, CD + R и т.д.), используя простую функцию в C++ в окнах.

Функция не должна обладать правами администратора.

РЕДАКТИРОВАТЬ

Я выполнил следующий код:

#include <windows.h>
#include <winioctl.h>
#include <stdio.h>
#include <iostream>
#include <sstream>
#include <imapi2.h>
#include <imapi2fs.h>
#include <imapi2error.h>
#include <imapi2fserror.h>

int main(int argc, char *argv[])
{
IDiscFormat2Data*   discFormatData = NULL;
HRESULT hr;

       CoInitialize ( NULL );

hr = CoCreateInstance(  __uuidof(MsftDiscFormat2Data),
    NULL,
    CLSCTX_ALL,
    __uuidof(IDiscFormat2Data),
    (void**)&discFormatData);

if ( SUCCEEDED(hr) )
{        
    IMAPI_MEDIA_PHYSICAL_TYPE mediaType = IMAPI_MEDIA_TYPE_UNKNOWN; 

    hr = discFormatData->get_CurrentPhysicalMediaType(&mediaType);

    if ( SUCCEEDED(hr) )
    {
        std::cout << "MediaPhysicalType: " << mediaType << std::endl;
    }
    else
    {
        std::stringstream str;
        str << "get_CurrentPhysicalMediaType() failed with the error: 0x";

        str << std::hex << hr << ".";

        std::cout << str.str() << std::endl;


    }

    // Release the interface.
    // Tell the COM object that we're done with it.
    discFormatData->Release();
}
else
{
    std::stringstream str;
    str << "CoCreateInstance() failed with the error: 0x" << std::hex << hr;


    std::cout << str.str() << std::endl;
}

cin.get();

return 0;

}

на данный момент моя проблема в том, что я получаю следующую ошибку: E_IMAPI_RECORDER_REQUIRED, что означает: "Запрос требует, чтобы был выбран текущий дискрекорд".

Предполагая, что у меня есть как минимум два оптических драйвера, как я могу различаться между ними?

Есть идеи?

Теги:
visual-c++
winapi

1 ответ

0
Лучший ответ

В Windows 2000 и более поздних версиях вы можете использовать IOCTL_CDROM_GET_CONFIGURATION с флагом SCSI_GET_CONFIGURATION_REQUEST_TYPE_CURRENT чтобы запросить оптическое устройство для его текущего профиля, который скажет вам, какой тип диска (CD, DVD + -R/W, HDDVD, BluRay и т.д.) Был вставлен, если таковые имеются. В более ранних версиях вам придется вручную отправлять команды SCSI MMC непосредственно на устройство для запроса той же информации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню