как узнать какой тип носителя Cdrom?

Тема в разделе "WASM.WIN32", создана пользователем wint, 11 апр 2008.

  1. wint

    wint New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2006
    Сообщения:
    66
    Ваще засада... уже голову сломал. Как с прикладного уровня определить к какому типу относится носитель в Cdrom'e (CDDA, Mode 2 Form 1, Mode 1 и т.п.)?

    Буду рад любой ссылке... ОЧ. СРОЧНО надо.
     
  2. wint

    wint New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2006
    Сообщения:
    66
    Пробовал считывать страницы параметров с помощи команды MODE SENSE.
    На странице Capabilities and Mechanical Status Page есть флаги Mode 2 Form 2 и Mode 2 Form 1, которые, !по идее!, должны указывать на тип носителя, однако у меня на носителе с типом Mode 2 Form 1 оба этих флага нулевые.

    Также пробовал считать TOC в формате 010b (кто в теме тот поймет=)) и смотреть у записей со значением Point = A0 параметр DiscType, но там слишком мало информации и она не всегда там отражена.

    Как истчо мона? :/
     
  3. zoool

    zoool New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    412
    Оно, не? Или я что-то не так понимаю? )

    Код (Text):
    1. GetDriveType Function
    2.  
    3. Determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive.
    4.  
    5. To determine whether a drive is a USB-type drive, call SetupDiGetDeviceRegistryProperty and specify the SPDRP_REMOVAL_POLICY property.
    6.  
    7.  
    8. UINT WINAPI GetDriveType(
    9.   __in          LPCTSTR lpRootPathName
    10. );
    11.  
    12. Parameters
    13. lpRootPathName
    14. The root directory for the drive.
    15.  
    16. A trailing backslash is required. If this parameter is NULL, the function uses the root of the current directory.
    17.  
    18. Return Value
    19. The return value specifies the type of drive, which can be one of the following values.
    20.  
    21. Return code Description
    22. DRIVE_UNKNOWN
    23.  The drive type cannot be determined.
    24.  
    25. DRIVE_NO_ROOT_DIR
    26.  The root path is invalid; for example, there is no volume is mounted at the path.
    27.  
    28. DRIVE_REMOVABLE
    29.  The drive has removable media; for example, a floppy drive, thumb drive, or flash card reader.
    30.  
    31. DRIVE_FIXED
    32.  The drive has fixed media; for example, a hard drive or flash drive.
    33.  
    34. DRIVE_REMOTE
    35.  The drive is a remote (network) drive.
    36.  
    37. DRIVE_CDROM
    38.  The drive is a CD-ROM drive.
    39.  
    40. DRIVE_RAMDISK
    41.  The drive is a RAM disk.
    42.  
    43.  
    44. Requirements
    45. Client
    46.  Requires Windows Vista, Windows XP, or Windows 2000 Professional.
    47.  
    48. Server
    49.  Requires Windows Server 2008, Windows Server 2003, or Windows 2000 Server.
    50.  
    51. Header
    52.  Declared in WinBase.h; include Windows.h.
    53.  
    54. Library
    55.  Use Kernel32.lib.
    56.  
    57. DLL
    58.  Requires Kernel32.dll.
    59.  
    60. Unicode
    61.  Implemented as GetDriveTypeW (Unicode) and GetDriveTypeA (ANSI).
     
  4. wint

    wint New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2006
    Сообщения:
    66
    Не... GetDriveType() позволяет определить только что за тип носителя скрывается за буквой "\\.\X:", это я могу узнать, тут проблем никаких.
    У меня другая проблема, я ЗНАЮ что у меня там CD ROM и мне нужно узнать в каком формате он записан.

    Существует несколько стандартов записи CD дисков, они отличаются форматом секторов на физическом уровне. Я как раз на этом уровне и пытаюсь с ними работать, потому и надо знать какого формата диск.

    P.S. Но все равно пасибо что откликнулся=)
     
  5. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    ASPI или SetupDi* функции или SPTI
     
  6. wint

    wint New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2006
    Сообщения:
    66
    Так это... через SPTI и пытаюсь. (ASPI предоставляет практически такой же интерфейс).

    Изучил спецификацию ATAPI Packet Commands for CD-ROM devices, там только в двух командах нашел ссылки на определение режима. В команде MODE SENSE и при чтении TOC.

    Что из этого получилось, я уже выше написал=(((...

    По поводу SetupDi - спасибо, поищу... пока с этим не сталкивался... если есть какие-то более конкретные ссылки буду благодарен.

    *ушел в гугл=)
     
  7. satrau

    satrau Александр

    Публикаций:
    0
    Регистрация:
    5 янв 2008
    Сообщения:
    229
    у криса была статья про использование DeviceIOControl(), как называется не помню, но название то ли - использование портов ...вобщем что то в этом роде... так вот там все эксперименты проводятся над сидиромом. и если мне не изменяет память, там есть примеры определения типа носителя, как раз в том ключе что надо.
     
  8. wint

    wint New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2006
    Сообщения:
    66
    Я "курил" его книжку "Техника и философия хакерских атак. Записки Мыщ'а". Там целая глава на эту тему. Но про то как узнать тип носителя ни слова. Тама тока сводная таблица размеров секторов есть=(.