Ваще засада... уже голову сломал. Как с прикладного уровня определить к какому типу относится носитель в Cdrom'e (CDDA, Mode 2 Form 1, Mode 1 и т.п.)? Буду рад любой ссылке... ОЧ. СРОЧНО надо.
Пробовал считывать страницы параметров с помощи команды MODE SENSE. На странице Capabilities and Mechanical Status Page есть флаги Mode 2 Form 2 и Mode 2 Form 1, которые, !по идее!, должны указывать на тип носителя, однако у меня на носителе с типом Mode 2 Form 1 оба этих флага нулевые. Также пробовал считать TOC в формате 010b (кто в теме тот поймет=)) и смотреть у записей со значением Point = A0 параметр DiscType, но там слишком мало информации и она не всегда там отражена. Как истчо мона? :/
Оно, не? Или я что-то не так понимаю? ) Код (Text): GetDriveType Function Determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive. To determine whether a drive is a USB-type drive, call SetupDiGetDeviceRegistryProperty and specify the SPDRP_REMOVAL_POLICY property. UINT WINAPI GetDriveType( __in LPCTSTR lpRootPathName ); Parameters lpRootPathName The root directory for the drive. A trailing backslash is required. If this parameter is NULL, the function uses the root of the current directory. Return Value The return value specifies the type of drive, which can be one of the following values. Return code Description DRIVE_UNKNOWN The drive type cannot be determined. DRIVE_NO_ROOT_DIR The root path is invalid; for example, there is no volume is mounted at the path. DRIVE_REMOVABLE The drive has removable media; for example, a floppy drive, thumb drive, or flash card reader. DRIVE_FIXED The drive has fixed media; for example, a hard drive or flash drive. DRIVE_REMOTE The drive is a remote (network) drive. DRIVE_CDROM The drive is a CD-ROM drive. DRIVE_RAMDISK The drive is a RAM disk. Requirements Client Requires Windows Vista, Windows XP, or Windows 2000 Professional. Server Requires Windows Server 2008, Windows Server 2003, or Windows 2000 Server. Header Declared in WinBase.h; include Windows.h. Library Use Kernel32.lib. DLL Requires Kernel32.dll. Unicode Implemented as GetDriveTypeW (Unicode) and GetDriveTypeA (ANSI).
Не... GetDriveType() позволяет определить только что за тип носителя скрывается за буквой "\\.\X:", это я могу узнать, тут проблем никаких. У меня другая проблема, я ЗНАЮ что у меня там CD ROM и мне нужно узнать в каком формате он записан. Существует несколько стандартов записи CD дисков, они отличаются форматом секторов на физическом уровне. Я как раз на этом уровне и пытаюсь с ними работать, потому и надо знать какого формата диск. P.S. Но все равно пасибо что откликнулся=)
Так это... через SPTI и пытаюсь. (ASPI предоставляет практически такой же интерфейс). Изучил спецификацию ATAPI Packet Commands for CD-ROM devices, там только в двух командах нашел ссылки на определение режима. В команде MODE SENSE и при чтении TOC. Что из этого получилось, я уже выше написал=(((... По поводу SetupDi - спасибо, поищу... пока с этим не сталкивался... если есть какие-то более конкретные ссылки буду благодарен. *ушел в гугл=)
у криса была статья про использование DeviceIOControl(), как называется не помню, но название то ли - использование портов ...вобщем что то в этом роде... так вот там все эксперименты проводятся над сидиромом. и если мне не изменяет память, там есть примеры определения типа носителя, как раз в том ключе что надо.
Я "курил" его книжку "Техника и философия хакерских атак. Записки Мыщ'а". Там целая глава на эту тему. Но про то как узнать тип носителя ни слова. Тама тока сводная таблица размеров секторов есть=(.