Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: USB storage emulate  (Прочитано 12047 раз)
0 Пользователей и 1 Гость смотрят эту тему.
L15e
Гость
« : 21-04-2010 13:17 » 

Всем привет!

Понадобилось с эмулировать usb флешку софтварным драйвером.
Тоесть, запуская программу или вызывая DeviceIoControl и передавая созданному драйверу сигнал, драйвер выполняет некоторые действия и Виндовс начинает считать что появилось новое устройтсво, съемный дисковый накопитель, опрашивает его, создает диск (букву) и тд.

Задача драйвера в свою очередь подсоединиться к USB шине, и далее выполнять все требования (в том числе предоставить интерфейс чтения и записи, а реально данные можно разместить в памяти) чтобы Виндовс думала что это реально включена флешка.

В общем получается некий RAMDISK в итоге, но реализованный через USB.

Как Вы думаете, это вообще реально или врятли возможно?

Если возможно, скажите что почитать и в какую сторону вообще капать.

Всем спасибо!

Дмитрий.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 21-04-2010 13:52 » 

все реально, почему нет)
вам необходимо чтобы обязательно диск как флешка выглядела? то есть и в USB стеке присутствовала, и кнопка извлечь устройство была? чем вам ramdisk не угодил?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
L15e
Гость
« Ответ #2 : 21-04-2010 14:29 » 

Спасибо!

Вот именно этим Улыбаюсь
Нужно чтобы извлекать можно было

Нашёл проект USB/IP, думаю надо бы с ним поразбираться будет, но вот чтобы ещё полезного почитать...  именно касаемо реализации возможностей хранения данных, какие функции делать... нигед не нашёл.

Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 21-04-2010 15:33 » 

ну погодите. извлекать... почему USB-то сразу?
неужели нельзя к ramdisk функцию "извлечения" прикрутить? ну пусть немного иначе выглядеть будет. или должно именно один-в-один быть?
ради одного этого - делать эмулятор...

а функции... по USB storage class искать надо. я пока только так представляю.
ну и http://www.usb.org
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
GG_shara
Постоялец

ua
Offline Offline
Пол: Мужской
Лицо под маской


« Ответ #4 : 14-06-2010 19:20 » 

кстати, а как винда распознает Съемный диск, аля флешка это или скажем НДД

может в DeviceObjecte какиенить флаги или поля стоят? 
хочу в Фильтре ФС при монтировании диска  выделять флеш\не флеш носители...
Записан

Не смеши меня с точки зрения аэродинамики шмель не может летать
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 15-06-2010 11:10 » 

Ну во-первых FILE_REMOVABLE_MEDIA. Во-вторых есть еще флаги removable в DEVICE_FLAGS и вроде еще где-то (не помню уже).
Записан
GG_shara
Постоялец

ua
Offline Offline
Пол: Мужской
Лицо под маской


« Ответ #6 : 15-06-2010 14:12 » 

resource,
спасибо, будем рыть дальше
Записан

Не смеши меня с точки зрения аэродинамики шмель не может летать
GG_shara
Постоялец

ua
Offline Offline
Пол: Мужской
Лицо под маской


« Ответ #7 : 15-06-2010 19:03 » 

нашел
DEVICE_OBJECT->Characteristics
флаг FILE_REMOVABLE_MEDIA
Цитата
Indicates that the storage device supports removable media. Notice that this characteristic indicates removable media, not a removable device. For example, drivers for JAZ drive devices should specify this characteristic, but drivers for PCMCIA flash disks should not.

а
Цитата
флаги removable в DEVICE_FLAGS
что-то не могу найти таких.. А черт его знает...
Записан

Не смеши меня с точки зрения аэродинамики шмель не может летать
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 15-06-2010 19:49 » 

Цитата: GG_shara
нашел
DEVICE_OBJECT->Characteristics
флаг FILE_REMOVABLE_MEDIA

Ну прям как будто капитана Гранта нашел  Улыбаюсь

Насчет DEVICE_FLAGS я возможно погорячился. Структура такая есть, но это не в ту степь.
« Последнее редактирование: 15-06-2010 20:01 от resource » Записан
GG_shara
Постоялец

ua
Offline Offline
Пол: Мужской
Лицо под маской


« Ответ #9 : 16-06-2010 17:11 » 


Цитата
Ну прям как будто капитана Гранта нашел 
  Отлично

но что-то этот капитан Грант не канает для определения DEVICE_OBJECT флешек

Код:
 
NTSTATUS
AttachToMountedDevice (
    __in PDEVICE_OBJECT AttachToDeviceObject,
    __in PDEVICE_OBJECT OurDeviceObject
    )
{
 ....
       ASSERT(IS_MY_DEVICE_OBJECT( OurDeviceObject));
 ....

if (FlagOn(AttachToDeviceObject->Characteristics, FILE_REMOVABLE_MEDIA)) {
KdPrint((" **** USB \n"));
} else {
KdPrint((" **** NOT USB \n"));
}
....

когда подключаем флешку - упроно пишет "NOT USB"


пробовал для AttachToDeviceObject вызвать функцию IoGetDiskDeviceObject она возвращает STATUS_INVALID_PARAMETER для только что подмонтированного тома (который был перехвачен в при обработке ирпа IRP_MN_MOUNT_VOLUME посланного файловой системе)

но если вот сначала была вставлена флешка, и только потом запущен драйвер, то все вроде бы работает нормально...

Записан

Не смеши меня с точки зрения аэродинамики шмель не может летать
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 16-06-2010 18:58 » 

Цитата: GG_shara
но если вот сначала была вставлена флешка, и только потом запущен драйвер, то все вроде бы работает нормально...

 Не понял

А AttachToDeviceObject это кто такой? Откуда взялся? И вообще функция AttachToMountedDevice когда и кем вызывается?

Если такая ситуация, то я бы бряк поставил на это поле и посмотрел бы, кто и когда ставит этот флаг.
« Последнее редактирование: 16-06-2010 19:04 от resource » Записан
GG_shara
Постоялец

ua
Offline Offline
Пол: Мужской
Лицо под маской


« Ответ #11 : 16-06-2010 19:28 » 

А AttachToDeviceObject это кто такой? Откуда взялся?
в данном случае, мой фильтр висит на CDO драйвера NTFS.sys и ловит запросы IRP_MN_MOUNT_VOLUME
от ттуда и берем AttachToDeviceObject


И вообще функция AttachToMountedDevice когда и кем вызывается?
вызывается после успешного монтирования вышеупомяноутго тома ( по завершению IRP_MN_MOUNT_VOLUME )

вроде-бы как-то так....


Если такая ситуация, то я бы бряк поставил на это поле и посмотрел бы, кто и когда ставит этот флаг.

а бряки ставить не умею  Скромно так...
Записан

Не смеши меня с точки зрения аэродинамики шмель не может летать
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines