Внутреннее устройство CM_Request_Device_Eject

Тема в разделе "WASM.NT.KERNEL", создана пользователем difusion, 29 мар 2011.

  1. difusion

    difusion New Member

    Публикаций:
    0
    Регистрация:
    16 мар 2011
    Сообщения:
    5
    Есть такая функция CM_Request_Device_Eject, осуществляющая подготовку USB, SATA и прочих внешних девайсов к безопасному извлечению. Что она в действительности делает внутри себя - какие выполняет операции?

    Интересует эмулировать ее работу - но сделать так чтобы она устройство принудительно отключалось даже если есть блокирующие процессы.
     
  2. ntkernelspawn

    ntkernelspawn New Member

    Публикаций:
    0
    Регистрация:
    17 дек 2010
    Сообщения:
    61
    Функция отправляет запрос серверу на Inject device ...
    - не чего не даст, какая раздница какой код отправляет сообщения ...

    Из User mode нормально этого не сделать ... Filter дров ...
     
  3. difusion

    difusion New Member

    Публикаций:
    0
    Регистрация:
    16 мар 2011
    Сообщения:
    5
    Один запрос и только? Какой именно запрос и к какому серверу?

    Мне не обязательно из User Mode. Хотелось бы понять как это в принципе сделать - в какую сторону копать.
     
  4. ntkernelspawn

    ntkernelspawn New Member

    Публикаций:
    0
    Регистрация:
    17 дек 2010
    Сообщения:
    61
    difusion
    Короче filter driver на класс устройств ...
    Или конкретный тип устройство нужен(Mass storage)? тогда для него дров ...
     
  5. difusion

    difusion New Member

    Публикаций:
    0
    Регистрация:
    16 мар 2011
    Сообщения:
    5
    Ага, нужен именно mass storage.

    Не понял о чем тут речь.
     
  6. ntkernelspawn

    ntkernelspawn New Member

    Публикаций:
    0
    Регистрация:
    17 дек 2010
    Сообщения:
    61
    difusion
    Что тут не понятного? пишешь lower usb mass storage filter.

    Фильтровать надо будет запрос IRP_MJ_INTERNAL_DEVICE_CONTROL.
    Dispatchers для AddDevice, DriverUnload.(из toaster filter).
    корректный обработчик для IRP_MJ_POWER и IRP_MJ_PNP.(из toaster filter).
    Все остальные запросы FilterPass(из toaster filter).
    Потом либо из дрова обращаешься к приложению, либо из приложения к дрову(это более правильный подход)

    приложения к дрову:
    IoRegisterDeviceInterface GUID_MY_FILTER
    из приложения RegisterDeviceNotification with GUID_MY_FILTER
    SetupDiGetClassDevsW with GUID_MY_FILTER
    после чего можно будет слать запрос к драверу на отключения или включения устройств ....

    П.С.
    Может возникнуть проблемы, при которых диск к винде приаттаченый , но он пустой и на него не чего нельзя записать, и система больше не посылает запросов, тогда enable\disable будет проходить успешно(из приложения), и девайс можно будет перегрузить ... :):):)
     
  7. difusion

    difusion New Member

    Публикаций:
    0
    Регистрация:
    16 мар 2011
    Сообщения:
    5
    Большое спасибо за информацию! К сожалению, это не совсем то, что я хочу узнать.

    Прежде чем что-то делать хотелось бы понять какие именно действия делает функция cm_request_device_eject? Я конечно представляю, что именно она делает, но довольно смутно: скидывает кэши на устройство, опрашивает драйвера устройства (какие?) на предмет того, могут ли они отключаться ну и потом посылает (кому?) собственно комманду остановки (какую?). Хотелось бы знать что именно она делает, какие команды посылает и в какой последовательности. Ну и главная цель этого выяснения - понять что именно мешает тормознуть девайс (а его иногда нельзя тормознуть, даже если нет программ, имеющих открытые хэндлы к девайсу), и решить как с этим бороться наиболее простым и эффективным способом.

    P.S.
    Перебирать и закрывать хэндлы файлового типа открытые к девайсу я умею, увы это не всегда помогает.
     
  8. korbian

    korbian New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2009
    Сообщения:
    9
    Адрес:
    Penza
    тоже интересно, что-нибудь прояснили по этим вопросам?
     
  9. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    А что прояснить ? Ведь очевидно что дров имеет право отказатся от выгрузки темболее по запросам от "CM_Request_Device_Eject". Да и сделать вминяемую защиту от mass storage только через дров, что есть не так уж и сложно. Там только вопрос будет с inf файлом и подписями . Куча чего может мешать тормазнуть девайс.
    Суть вопроса не раскрыта .
     
  10. korbian

    korbian New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2009
    Сообщения:
    9
    Адрес:
    Penza
    меня даже не столько драйвер интересует, а то, что в уcтройство приходит, что за scsi?
     
  11. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    scsi = Small Computer System Interface? так это уже другой класс устройств (или конвертер scsi to usb ). А с устройством не чего осебного попытка остановить и удалить.
     
  12. korbian

    korbian New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2009
    Сообщения:
    9
    Адрес:
    Penza
    да
    нет, я неправильно выразился. меня интересует какая команда из SCSI transparent command set приходит в устройство Mass-storage, то есть ее номер? если такая команда вообще приходит. интересует, как устройство узнает о том, что его "выкидывают" из системы?
     
  13. korbian

    korbian New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2009
    Сообщения:
    9
    Адрес:
    Penza
    кажется, нашел.
    PREVENT-ALLOW MEDIUM REMOVAL 1Eh
    вопрос снят. спасибо.