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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 [Все]   Вниз
  Печать  
Автор Тема: USB driver filter  (Прочитано 38967 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AlexCasual
Помогающий

by
Offline Offline

« : 06-03-2012 19:49 » 

Может кто-нибудь поделиться примерами/соображениями по написанию драйвера-фильтра usb-устройств с возможностью блокировки записи/чтения?
Можно ли отличить какое именно устройство подключено к usb - камера,флешка?
Записан
Ochkarik
Модератор

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

« Ответ #1 : 06-03-2012 20:54 » 

1. примеров готовых нет. общих - у майкрософта:
WinDDK\7600.16385.1\src\usb\osrusbfx2\umdf\filter\
XPDDK\src\wdm\usb\filter
...

2. эээ.... туго соображаю. а вы куда хотите фильтр поставить? и как?) на все устройства разом?)
флешка через класс mass storage идет, если не путаю, может там лучше запрещать. как камера - не знаю.
цель то какая?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #2 : 07-03-2012 07:38 » 

Хочу мониторить все usb устройства с целью определения типа устройства (камера,флэшка и т.д.) и запрета записи/чтения на них.
Записан
Ochkarik
Модератор

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

« Ответ #3 : 07-03-2012 08:11 » 

для мониторинга наверное можно без фильтра обойтись
пример C:\DDK\6001.18001\src\usb\usbview\
начните с этого...

фильтр - в версии DDK 2003  предлагают для USB - использовать пример фильтров из "toaster".
C:\DDK\6001.18001\src\general\toaster\filter\
там есть примеры фильтров: buslower, busupper, claslower, clasupper, devlower, devupper.

Добавлено через 1 минуту и 33 секунды:
возможно, вам стоит в строну верхнего фильтра шины смотреть...
но сам не занимался - точнее не скажу.
« Последнее редактирование: 07-03-2012 08:13 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #4 : 13-03-2012 06:31 » 

Для отмены запроса,посылаемого драйверу,можно ли отменить его в верхнем фильтре для данного драйвера вот таким образом :

Код:
...
irp->IoStatus.Status = STATUS_ACCESS_DENIED;
irp->IoStatus.Information = 0;
IoCompleteRequest(irp, IO_NO_INCREMENT);
return status;
...
?
Записан
Ochkarik
Модератор

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

« Ответ #5 : 13-03-2012 07:47 » 

да вроде можно)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #6 : 20-03-2012 14:21 » 

Короче проблему решить не удалось...
При установке фильтра как UpperFilter,он виден в DeviceTree во всех USB устройствах (attached device),логирую все запросы на создание/удаление USB,но при записи/чтении с флэш-накопителя не приходят ВООБЩЕ никакие запросы...
Записан
Ochkarik
Модератор

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

« Ответ #7 : 20-03-2012 18:59 » 

 тема "usb фильтр" на RSDN
Цитата
Windows Driver Model (WDM) clients of the Universal Serial Bus (USB) driver stack communicate to the USB driver stack, by submitting an IRP with major code IRP_MJ_INTERNAL_DEVICE_CONTROL, and a minor code corresponding to an IOCTL value.
ну и нижнего уровня фильтр видимо нужен
« Последнее редактирование: 20-03-2012 19:01 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #8 : 20-03-2012 19:35 » 

Вот мой DriverEntry() :

Код:
NTSTATUS
DriverEntry(
    __in PDRIVER_OBJECT  DriverObject,
    __in PUNICODE_STRING RegistryPath
    )
{
    NTSTATUS          status = STATUS_SUCCESS;
    INT               ulIndex;
    PDRIVER_DISPATCH  *dispatch;

    UNREFERENCED_PARAMETER (RegistryPath);

    for (ulIndex = 0, dispatch = DriverObject->MajorFunction; ulIndex <= IRP_MJ_MAXIMUM_FUNCTION; ulIndex++, dispatch++)
   {
        *dispatch = FilterPass;
    }

    DriverObject->MajorFunction[IRP_MJ_PNP]            = FilterDispatchPnp;
    DriverObject->MajorFunction[IRP_MJ_POWER]          = FilterDispatchPower;
    DriverObject->DriverExtension->AddDevice           = FilterAddDevice;
    DriverObject->DriverUnload                         = FilterUnload;


    return status;
}

В FilterPass() я просто вывожу через DebugPrint() код MajorFunction и пропускаю IRP ниже по стэку...
Но при записи/чтении с флэшки мне не приходит НИ ЕДИНОГО сообщения в FilterPass()...
В чём-то жёстко туплю,но не могу понять в чём...

PS:при установке как LowerFilter - картина не меняется за исключением того,что теперь сыпятся в FilterPass() запросы с кодом 0xF,что является "фуфлом"...
« Последнее редактирование: 20-03-2012 19:46 от AlexCasual » Записан
Ochkarik
Модератор

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

« Ответ #9 : 20-03-2012 20:02 » 

#define IRP_MJ_INTERNAL_DEVICE_CONTROL  0x0f
внимательнее надо быть) это как раз нужный вам ....

PS я вам в предыдущем посте ссылку на ветку обсуждения на RSDN выложил. там все есть)
« Последнее редактирование: 20-03-2012 20:07 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #10 : 21-03-2012 06:07 » 

Да,за ссылку огромное спасибо.
Но вот только case мой не фильтрует 0xF почему-то...
Код:
NTSTATUS
FilterPass (
    PDEVICE_OBJECT DeviceObject,
    PIRP Irp
    )
{
    PDEVICE_EXTENSION           deviceExtension;
    NTSTATUS    status;
   
PIO_STACK_LOCATION irpStack = IoGetCurrentIrpStackLocation(Irp);

DebugPrint(("FILTER_PASS CODE : 0x%x \n",irpStack->MajorFunction));

switch (irpStack->MajorFunction)
{
case IRP_MJ_INTERNAL_DEVICE_CONTROL:
DebugPrint(("IRP_MJ_INTERNAL_DEVICE_CONTROL\n"));            <--- не выводится это сообщение при irpStack->MajorFunction = 0xF
break;

case IRP_MJ_DEVICE_CONTROL:
DebugPrint(("IRP_MJ_DEVICE_CONTROL\n"));
break;

case IRP_MJ_READ:
DebugPrint(("IRP_MJ_READ\n"));
break;

case IRP_MJ_WRITE:
DebugPrint(("IRP_MJ_WRITE\n"));
break;
}
...............
Записан
Ochkarik
Модератор

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

« Ответ #11 : 21-03-2012 06:50 » 

с виду вроде все должно... А черт его знает...
проверьте  на тестах, или по ассемблерному листингу.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #12 : 21-03-2012 10:45 » 

Ochkarik, да была небольшая ошибка в коде.
Теперь при установке фильтра как LowerFilters на класс USB устройств получаю сообщения IRP_MJ_INTERNAL_DEVICE_CONTROL с кодом IOCTL_INTERNAL_USB_SUBMIT_URB...
Только вот всё равно не понимаю почему так происходит,почему в UpperFilters  я не получаю никаких сообщений?
Записан
Ochkarik
Модератор

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

« Ответ #13 : 21-03-2012 11:07 » 

а почему вы считаете, что должны их там получать???
не, картинка не под делу была)
http://msdn.microsoft.com/en-us/library/windows/hardware/ff552547(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/hardware/hh439632(v=vs.85).aspx
« Последнее редактирование: 21-03-2012 11:16 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #14 : 21-03-2012 11:28 » 

Ochkarik, ну как я понимаю,когда я сажу фильтр как UpperFilter на USBSTOR.SYS,то я как минимум должен получать запросы от DISK.SYS или нет?
И ещё,-получается,что USBSTOR.SYS не передаёт дальше по стэку запросы на USBHUB.SYS (имеется в виду чтение/запись данных)?
« Последнее редактирование: 21-03-2012 13:52 от AlexCasual » Записан
Ochkarik
Модератор

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

« Ответ #15 : 21-03-2012 13:55 » 

найдите утилитку под названием devicetree.exe  от OSR, раньше она в состав DDK входила.
там ручками можно пощупать - кто к чему приатачен.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #16 : 21-03-2012 14:55 » 

Ochkarik, в ссылке,которую ты мне скинул (http://msdn.microsoft.com/en-us/library/windows/hardware/hh439632(v=vs.85).aspx) написано :

The IRP is created by Disk.sys, which is the function driver in the device stack for the My USB Storage Device node. Disk.sys passes the IRP down the device stack to Usbstor.sys.

Что-то не укладывается всё это в моей слабенькой голове...
Записан
Ochkarik
Модератор

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

« Ответ #17 : 21-03-2012 15:02 » 

что не укладывается, что одно функциональное устройство в процессе своей работы может инициировать IRP запросы к другим функциональным устройствам в другом стеке?

Добавлено через 5 часов, 50 минут и 27 секунд:
ЗЫ стеки то разные. просто на картинке зависимости отобразили, но это не значит что один конктерный IRP идет по функциональным устройствам всех перечисленных дров.
« Последнее редактирование: 21-03-2012 20:52 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #18 : 22-03-2012 07:44 » 

Ochkarik, но всё же смущает строчка :

The IRP is created by Disk.sys, which is the function driver in the device stack for the My USB Storage Device node. Disk.sys passes the IRP down the device stack to Usbstor.sys.

Как же тогда узнать от кого конкретно пришёл IRP?

И вот такой ещё вопрос - AddDevice однозначно вызывается для каждого подключаемого к шине устройства,соответсвенно,в своём фильтре в  функции AddDevice я вывожу через DebugPrint название драйвера к стэку которого аттачусь,но получаю только "\Driver\usbhub" :

Код:
NTSTATUS
FilterAddDevice(
    __in PDRIVER_OBJECT DriverObject,
    __in PDEVICE_OBJECT PhysicalDeviceObject
    )
{
   ........

    PAGED_CODE ();

if(PhysicalDeviceObject->DriverObject->DriverName.Length > 0)
{
DebugPrint(("ATTACH TO DRIVER : %wZ\n",&PhysicalDeviceObject->DriverObject->DriverName)); <----- "\Driver\usbhub"
}
  .......
}
Записан
Ochkarik
Модератор

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

« Ответ #19 : 22-03-2012 11:10 » 

английский знаю хреново, но по-моему вольный перевод такой:
IRP создается функциональным устройством (драйвера Disk.sys) расположенном в стеке "My USB Storage Device" (но это не значит что IRP запущен на обработку в этом стеке, оно там только географически создано).
Этот IRP отправляется на обработку в стек "USB Mass Storage Device" путем его отправки физическому устройству PDO (это - корень стека "My USB Storage Device", созданный Usbstor.sys).

PDO из "My USB Storage Device" и FDO из "USB Mass Storage Device" рождается одним драйвером Usbstor.sys поэтому они там сами разбираются что делать с запрошенным IRP. Может PDO Usbstor-а генерирует новые запросы IRP в стеке "USB Mass Storage Device", может как-то пересылает. Факт в том, что это уже другой стек, поэтому вы эти IRP увидите только если у вас второй фильтр стоит в другом стеке.

кажется так...

PDO (Usbstor.sys) создано функциональным устройством (FDO) расположенным в "USB Mass Storage Device" (Usbstor.sys)

PS ответ на второй вопрос вытекает из ответа на первый) получается что вы ставите фильтр в стек "USB Mass Storage Device", корень которого (PDO) которого создается драйвером \Driver\usbhub.
это (PhysicalDeviceObject->DriverObject->DriverName) имя драйвера а не имя PDO устройства!

Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #20 : 22-03-2012 15:10 » 

Ochkarik, но я же нахожусь в стэке "USB Mass Storage Device" или нет?Блин,голова кругом от всех этих PDO и FDO...

Или получается так,что я сижу над FDO,созданным Usbstor.sys в стэке "USB Mass Storage Device",а DISK.SYS отправляет запрос PDO,который создан Usbstor.sys,но находящийся в стэке "My USB Storage Device",т.е. стэке DISK.SYS - и поэтому не получаю данные IRP?

Фууухххх....
Записан
Ochkarik
Модератор

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

« Ответ #21 : 22-03-2012 21:43 » 

если Upper Filter - то над FDO. если Lower - то под FDO.
вот тут на примере PCI шины и устройств на ней.
http://msdn.microsoft.com/en-us/library/windows/hardware/ff554721(v=vs.85).aspx

всегда структура древовидная: шина, на которой висят отдельные девайсы.

что до вопроса.. Usbstor.sys в данной точке какие функции должен иметь? обрабатывать запросы обращения к дисковому устройству сверху,  переводить их в формат шины USB (а запросы USB передаются в IRP_MJ_INTERNAL_DEVICE_CONTROL) и отправлять вниз.
то есть нижний фильтр будет ловить IRP_MJ_INTERNAL_DEVICE_CONTROL.
а вот верхний естественно их не увидит. верхний - должен ловить то что отправляется от Disk.sys через PDO usbstor.sys... и формат их будет соответствующий(какой не знаю)))... и кстати еще могут  быть FastIO запросы... но тут я не копал  никогда)

кажется так)
кстати вообще попробуйте поставить сразу оба фильтра и верхний и нижний) а результаты посмотрите в одном логе) увидите какой  IRP  запрос приходит сверху,  и как снизу выходит эти самые  IRP_MJ_INTERNAL_DEVICE_CONTROL...
« Последнее редактирование: 22-03-2012 21:45 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #22 : 23-03-2012 10:15 » 

USBSTOR.sys создаёт два устройства,к одному присоединяется девайс драйвера DISK.sys,а ко второму присоединяется мой UpperFilter...Но почему фильтр не присоединяется к девайсу  DISK.sys?
Я чего-то серьёзно не догоняю в строении стэка девайсов...
Записан
Ochkarik
Модератор

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

« Ответ #23 : 23-03-2012 10:28 » 

inf фильтра как выглядит?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #24 : 23-03-2012 11:40 » 

В аттаче.
Основной вопрос - почему я не сажусь в стэк девайса USBSTOR,который получает запросы от DISK.SYS?

* usbstor.inf (30.62 Кб - загружено 911 раз.)
« Последнее редактирование: 23-03-2012 11:50 от AlexCasual » Записан
Ochkarik
Модератор

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

« Ответ #25 : 23-03-2012 11:46 » 

ща посмотрим...

Добавлено через 2 минуты и 43 секунды:
нет, все равно:
"что это?"
 Не может быть...

Добавлено через 2 часа, 53 минуты и 19 секунд:
C:\DDK\6001.18001\src\general\toaster\filter\
там есть примеры фильтров: buslower, busupper, claslower, clasupper, devlower, devupper.
« Последнее редактирование: 23-03-2012 14:47 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #26 : 23-03-2012 20:19 » 

Последний вопрос :

когда я UpperFilter,то я сижу в стэке PDO,созданного usbhub.sys,а usbstor.sys отправляет сформированный URB в это PDO,но почему я не получаю URB в этом случае?Ведь запрос должен пройти через меня,или я совсем не верно понимаю смысл device stack?
Записан
Ochkarik
Модератор

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

« Ответ #27 : 24-03-2012 00:45 » 

когда вы UpperFilter - чего? тот inf который вы выложили... там единственная строка касающаяся фильтра это:
[USBSTOR_CBI_NR.DelReg]
HKR,,"LowerFilters"
и означает она удаление из реестра ссылки на использование нижнего фильтра перед установкой USBSTOR, если он там вдруг был прописан...

PS как вы свой фильтр вообще устанавливаете?

PPS если предположить.. что вы все таки в том стеке в каком описываете... то:
запрос IRP идет сверху. сначала проходит UpperFilter потом FDO, потом  LowerFilter, потом доходит до PDO.
но в общем случае: любое из этих устройств может не пускать пришедший IRP вниз по стеку а например создать два новых IRP и пустить их вниз. а потом  на основе того как те обработаются нижними устройствами - сигнализировать о завершении "исходного" IRP. тогда IRP пришедший в сверху и IRP идущий в низ по стеку - могут быть совершенно разными.
я понятно намекаю?)

и второй раз намекаю, что помимо IRP есть механизм FastIO для ускоренного обмена запросами в стеке TCP/IP и некоторых дисковых операций... с ним я особо не знаком,  но возможно! простой фильтр его не увидит. тут надо покопать чтоб разобраться)
« Последнее редактирование: 24-03-2012 00:58 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #28 : 26-03-2012 08:22 » 

Отредактировал usbstor.inf,для добавления своего фильтра к usb mass storage, в аттаче вид реестра после установки флэшки.
Вроде всё правильно,фильтр присутствует в UpperFilters.но драйвер фильтра не вызывается...
Есть какие-нибудь идеи?

* 2.PNG (151.62 Кб - загружено 1034 раз.)
* 1.PNG (124.15 Кб - загружено 1035 раз.)
« Последнее редактирование: 26-03-2012 12:17 от AlexCasual » Записан
Ochkarik
Модератор

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

« Ответ #29 : 30-03-2012 07:04 » 

не вызывается или не грузится?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #30 : 18-04-2012 19:13 » 

Разобрался с установкой фильтра.

Устанавливаю фильтр на usbhub как LowerFilters,получаю все запросы URB...

Так вот вопрос - при копировании данных с флэшки я не получаю URB (URB_BULK_OR_INTERRUPT_TRANSFER) с данными,в случае записи данных на флэшку я получаю ти данные в URB...

Народ помогите разобраться,кто в теме,уже запарился...
Записан
Ochkarik
Модератор

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

« Ответ #31 : 18-04-2012 19:28 » 

кэш возможно? поищи старые посты тов. resource пару лет назад, по-моему у него что то похожее было... может поможет...
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #32 : 19-04-2012 08:44 » 

Блин,что-то не нашёл я ничего от resource...

Наверное,дело всё же где-то в кэше файловой системы...

Когда я первый раз копирую данные с флэшки,то всё ок - вижу данные,но когда уже затем копирую данные с,то не вижу данных...
Но я не особо силён в фаловых кэшах...
« Последнее редактирование: 19-04-2012 09:36 от AlexCasual » Записан
Ochkarik
Модератор

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

« Ответ #33 : 19-04-2012 09:05 » 

по пользователю надо искать.
но в любом случае... для проверки. в составе утилит от SysInternals были и те, что принудительно скидывают кэш. не мог он в данном случае...?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #34 : 19-04-2012 09:39 » 

А в какой момент происходит сброс кэша и каков механизм этого действа? - Получается,что при повторном копировании данных с флэшки,данные уже находятся на системе и поэтому не копируются повторно? Но как это определяется?
Записан
Ochkarik
Модератор

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

« Ответ #35 : 19-04-2012 10:00 » 

ну... как... тут доку надо читать)
вы поэкспериментируйте)


Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #36 : 28-04-2012 06:14 » 

Вопрос знатокам - при записи файлов на Usb я могу видеть в перехватываемых urb данные файла,но вот ИМЯ файла нигде не светиться...может быть кто-нибудь знает как и на каком этапе происходит создание записи в FAT32 (флэшка отформатированна в FAT32) с именем файла,ведь как-то файл под таким именем создаётся на флэшке?

Владеет кто-нибудь необходимой информацией?

По идее запись с именем файла тоже должна как-то проскакивать в URB при физической записи или как-то нет?
Записан
Ochkarik
Модератор

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

« Ответ #37 : 28-04-2012 07:49 » 

инфа на тему имени - где то в форуме уже проскакивала... поищите. хотя может тогда шла речь не о физической записи...
« Последнее редактирование: 28-04-2012 07:51 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
zubr
Гость
« Ответ #38 : 28-04-2012 08:26 » 

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

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

« Ответ #39 : 28-04-2012 09:31 » 

zubr, а при чем тут оно? и какая связь с URB запросами?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AlexCasual
Помогающий

by
Offline Offline

« Ответ #40 : 28-04-2012 10:01 » 

Как бы понятно,что с разделами FAT32 работает disk.sys,возможно именно он и делает запись,но почему тогда я не вижу это информации в URB или там какие-то свои жёсткие нюансы с монтированием ФС?
Короче ребята,кто в теме?)
Записан
zubr
Гость
« Ответ #41 : 28-04-2012 10:25 » 

Создаем обработчик на  IRP_MJ_CREATE -
Цитата
The I/O Manager sends the IRP_MJ_CREATE request when a new file or directory is being created, or when an existing file, device, directory, or volume is being opened. Normally this IRP is sent on behalf of a user-mode application that has called a Microsoft Win32 function such as CreateFile or on behalf of a kernel-mode component that has called IoCreateFile, IoCreateFileSpecifyDeviceObjectHint, ZwCreateFile, or ZwOpenFile. If the create request is completed successfully, the application or kernel-mode component receives a handle to the file object.


Ну а в нем получаем указатель на файловый объект. Может там и не надо ZwQueryObject. Не помню, возможно в структуре FileObject есть прямой указатель на имя файла.
Записан
Ochkarik
Модератор

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

« Ответ #42 : 28-04-2012 11:03 » 

откуда там объект, если мы находимся ниже usbhub как LowerFilters?

Добавлено через 3 минуты и 6 секунд:
AlexCasual, я не очень в теме... попробуй по разделу IFS посмотреть - что и как там...
« Последнее редактирование: 28-04-2012 11:06 от Ochkarik » Записан

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

ru
Offline Offline

« Ответ #43 : 25-06-2012 14:17 » 

Ребята, НИКАКИХ FileObjects с именами в драйверах нижнего уровня вы не увидите. Запрос файловой системы идет до PartMgr, оттуда в disk.sys,
который дробит запрос на соосветствие границам диска и секторов, формируя SCSI запрос.  Файлы - абстракция ВЕРХНЕГО уровня, с ней работают
FSD и FS Filters, "дрова" нижнего уровня НИЧЕГО о файлах на диске не знают. Туда "летит" уже другой IRP, а первоначальный - "стынет" в очереди.
Этот механизм был описан еще в первых DDK для NT-like OS. Оттуда запрос уходит в USBSTOR, который формирует из него URB-request.
Yet once again - нет на "нижнем" уровне никаких объектов файлов (и, соответственно, их имен - тоже). URB-request от USBSTOR идет в хаб, а оттуда-
в хост-контроллер, как USB_BULK_OR_INTERRUPT_REQUEST
Записан
Страниц: 1 2 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines