Cъемный диск в драйвере устройства Windows XP

Тема в разделе "WASM.WIN32", создана пользователем CRA, 6 сен 2006.

  1. CRA

    CRA New Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    6
    Есть PCI-ная плата собственного производства, на которой есть USB хост контроллер. Необходимо из под винды (ХР) работать с USB-устройствами класса масс сторадж через PCI-плату. Драйвер девайса (платы) создает объект устройства следующим вызовом:
    Код (Text):
    1. ntStatus = IoCreateDevice( DriverObject,
    2.             sizeof( USBDISK_EXTENSION ),
    3.             &deviceName,
    4.             FILE_DEVICE_DISK, //FILE_DEVICE_VIRTUAL_DISK,
    5.             (FILE_REMOTE_DEVICE |
    6.             FILE_REMOVABLE_MEDIA |
    7.             FILE_DEVICE_SECURE_OPEN),
    8.             FALSE,
    9.             &deviceObject );
    т.е. создается объект устройства типа FILE_DEVICE_DISK с характеристикой FILE_REMOVABLE_MEDIA. Далее регистрируется интерфейс устройства
    Код (Text):
    1. ntStatus = IoRegisterDeviceInterface( diskExtension->UnderlyingPDO,
    2.             (LPGUID) &MOUNTDEV_MOUNTED_DEVICE_GUID,             // For mounting devices
    3.             NULL,
    4.             &diskExtension->InterfaceString );
    и разрешается
    Код (Text):
    1. ntStatus = IoSetDeviceInterfaceState( &diskExtension->InterfaceString,
    2.                 TRUE );
    Суть проблемы в том, что изначально после разрешения интерфейса в Моем компьютере отображается иконка Съемного диска Х:, как и должно быть. Но как только к USB-порту девайса подключается устройство масс сторадж с «правильной» файловой системой на нем (т.е. отформатированное), и ОС начинает читать его, иконка меняется на Локальный диск Х:. Это приводит к пропаданию опции извлечения диска Х: (поскольку он теперь виден как локальный), а она как раз-таки и необходима. Как сделать, чтобы ОС постоянно видела Х: как съемный диск?

    Заранее благодарен за любые идеи.