Re[5]: usb фильтр
От: Sergey Storozhevykh Россия  
Дата: 23.11.06 10:10
Оценка: 4 (1)
Здравствуйте, Sergey Storozhevykh, Вы писали:

SS>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, Sergey Storozhevykh, Вы писали:


SS>>>Какая задача у вас стоит?

А>>мне нужно уметь по отдельности запрещать/разрешать чтение и запись, причем делать это без ребута.
А>>поэтому вариант с обработкой IRP_MN_START_DEVICE, если вы его имели в виду, не подходит

SS>Рассматриваются только USB Mass Storage устройства?


Вот, кстати, попутно на глаза попалось. Может интересно будет

Windows XP Service Pack 2 (SP2) introduces a new registry subkey that lets you mark USB-based storage devices such as memory sticks as read-only devices. This is a useful security capability that can prevent users from copying data from their systems and taking that data offsite via a USB device. To enable the USB write protection, perform the following steps:

Start the registry editor (regedit.exe).
Navigate to the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies subkey. (Create the StorageDevicePolicies subkey if it doesn't already exist.)
From the Edit menu, select New, DWORD Value.
Type the name WriteProtect and press Enter.
Double-click the new value and set it to 1. Click OK.
Close the registry editor.
Restart the computer.
To disable this change, you can either set WriteProtect to 0 or delete it.

Re[2]: usb фильтр
От: Zavialov  
Дата: 30.11.06 10:10
Оценка: 1 (1)
А> А где же чтение данных ?

Universal Serial Bus Specification ( http://www.usb.org/ )

5.8.2 Bulk Transfer Direction

A bulk pipe is a stream pipe and, therefore, always has communication flowing either into or out of the host
for a given pipe. If a device requires bi-directional bulk communication flow, two bulk pipes must be used,
one in each direction.

Terms and Abbreviations

Endpoint Address — The combination of an endpoint number and an endpoint direction on a USB
device. Each endpoint address supports data transfer in one direction.

Endpoint Direction — The direction of data transfer on the USB. The direction can be either IN or
OUT. IN refers to transfers to the host; OUT refers to transfers from the host.


А то, что написано в DDK, надо засунуть, человеку это писAвшему, в то место, которым он это писАл. PipeHandle знает об этом
usb фильтр
От: Аноним  
Дата: 07.11.06 14:37
Оценка:
Мне нужно написать прогу которая блокирует возможность чтения-записи для любого устройства, подключаемого к usb порту. Насколько я понял это должен быть драйвер-фильтр. Но не могу понять на какой девайс этот фильтр должен быть подключен ? Посмотрел диспетчер устройств, там такое:

Контроллеры универсальной последовательной шины
расширенный хост-контроллер
универсальный хост-контроллер
корневой usb-концентратор

Посмотрел DeviceTree там есть два драйиера usbhub и usbuhci. Кто из них мне нужен ? И что что это вообще такое и как функционирует или где про это можно почитать ?
Заранее спасибо.
Re: usb фильтр
От: .h  
Дата: 08.11.06 07:47
Оценка:
Многие программы, позволяющие контролировать доступ пользователей к внешним устройствам — DeviceLock и т.п., не используют фильтры, а просто изменяют security descriptor устройства, к которому хочется ограничить доступ.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: usb фильтр
От: Sergey Storozhevykh Россия  
Дата: 08.11.06 07:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Мне нужно написать прогу которая блокирует возможность чтения-записи для любого устройства, подключаемого к usb порту. Насколько я понял это должен быть драйвер-фильтр. Но не могу понять на какой девайс этот фильтр должен быть подключен ?


Если речь о том, чтобы полностью блокировать функционирование USB-стека, то решение в данном случае — это class-wide upper filter для USB.

Class = USB
ClassGuid = {36fc9e60-c465-11cf-8056-444553540000}
This class includes USB host controllers and USB hubs


См. Installing a Class Filter Driver в DDK. В качестве примера можно взять ..\WinDDK\5600\src\general\toaster\filter.

Вы должны санкционировать AddDevice и затем отклонить start device irp (IRP_MN_START_DEVICE). Касательно IRP_MN_START_DEVICE, то сначала вы должны пропустиь его вниз и объявить о неудачном старте вашего устройства уже на пути наверх, т.е. после того как устройсва ниже по стеку обработают этот запрос от PnP Manager.
Re[2]: usb фильтр
От: Sergey Storozhevykh Россия  
Дата: 08.11.06 10:04
Оценка:
Здравствуйте, .h, Вы писали:

.h>Многие программы, позволяющие контролировать доступ пользователей к внешним устройствам — DeviceLock и т.п., не используют фильтры, а просто изменяют security descriptor устройства, к которому хочется ограничить доступ.


Не думаю, что все так просто — на низком уровне контекст пользователя, инициировавшего операцию, может быть недоступен.
Re[3]: usb фильтр
От: Злость Россия  
Дата: 08.11.06 10:18
Оценка:
Здравствуйте, Sergey Storozhevykh, Вы писали:

SS>Здравствуйте, .h, Вы писали:


.h>>Многие программы, позволяющие контролировать доступ пользователей к внешним устройствам — DeviceLock и т.п., не используют фильтры, а просто изменяют security descriptor устройства, к которому хочется ограничить доступ.


SS>Не думаю, что все так просто — на низком уровне контекст пользователя, инициировавшего операцию, может быть недоступен.


Да у них там два драйвера DeviceLockDriver0 и DeviceLockDriverHlp. Помню перехватывают NtCreateKey, NtDeleteKey, NtDeleteValueKey, NtOpenProcess, NtOpenThread, NtSetValueKey, NtTerminateProcess, NtTerminateThread.
Пусто
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Re[2]: usb фильтр
От: Аноним  
Дата: 08.11.06 17:41
Оценка:
Здравствуйте, Sergey Storozhevykh, Вы писали:

SS>Если речь о том, чтобы полностью блокировать функционирование USB-стека, то решение в данном случае — это class-wide upper filter для USB.


SS>

SS>Class = USB
SS>ClassGuid = {36fc9e60-c465-11cf-8056-444553540000}
SS>This class includes USB host controllers and USB hubs


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


SS>См. Installing a Class Filter Driver в DDK. В качестве примера можно взять ..\WinDDK\5600\src\general\toaster\filter.


в этой папке лежат подпапки buslower(upper), classlower(upper), devlower(upper). все компиляется из одного файла, только с разными именами драйвера (или я что то не заметил ?). а в чем тогда заключается разница между всеми ними ? в способе инсталяции самого драйвера ? а как кстати его в систему добавить ?

SS>Вы должны санкционировать AddDevice и затем отклонить start device irp (IRP_MN_START_DEVICE). Касательно IRP_MN_START_DEVICE, то сначала вы должны пропустиь его вниз и объявить о неудачном старте вашего устройства уже на пути наверх, т.е. после того как устройсва ниже по стеку обработают этот запрос от PnP Manager.


а можно дать девайсу стартануть и потом отслеживать IRP_MJ_WRITE и IRP_MJ_READ ? они пойдут через фильтр ? чтобы можно было налету убрать/добавить запрет
Re[3]: usb фильтр
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 09.11.06 02:29
Оценка:
SS>>См. Installing a Class Filter Driver в DDK. В качестве примера можно взять ..\WinDDK\5600\src\general\toaster\filter.

А>в этой папке лежат подпапки buslower(upper), classlower(upper), devlower(upper). все компиляется из одного файла, только с разными именами драйвера (или я что то не заметил ?). а в чем тогда заключается разница между всеми ними ? в способе инсталяции самого драйвера ? а как кстати его в систему добавить ?


Re: Смешная строчка в sources.
Автор: Valery A. Boronin
Дата: 22.06.06


можете еще поискать по ключевым словам по этому форуму, поверьте — кое-что да найдется. для затравки вот Вам ссылка по теме: Re: HDD и Windows (2K\XP)
Автор: Valery A. Boronin
Дата: 20.02.06
... << RSDN@Home 1.2.0 alpha rev. 653>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[4]: usb фильтр
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 09.11.06 02:29
Оценка:
Здравствуйте, Злость, Вы писали:

.h>>>Многие программы, позволяющие контролировать доступ пользователей к внешним устройствам — DeviceLock и т.п., не используют фильтры, а просто изменяют security descriptor устройства, к которому хочется ограничить доступ.

все не так просто, далеко не так просто. хотя DACL действительно бывает нужно под рукой иметь, чтобы куда надо подсунуть если попросят или самому где надо проверить security context для своих целей

SS>>Не думаю, что все так просто — на низком уровне контекст пользователя, инициировавшего операцию, может быть недоступен.

естественно. одна из больших проблем в security продуктах. И тут вообще особенно много проблем появляется когда в системе много пользователей да всякие терминальные-удаленные товарищи еще путаются и у всех разные права.

З>Да у них там два драйвера DeviceLockDriver0 и DeviceLockDriverHlp. Помню перехватывают NtCreateKey, NtDeleteKey, NtDeleteValueKey, NtOpenProcess, NtOpenThread, NtSetValueKey, NtTerminateProcess, NtTerminateThread.

жаль по понятным причинам не могу говорить о нашем решении
Автор: Valery A. Boronin
Дата: 29.10.06
но лишь замечу что DeviceLock (опять же про какую версию речь) ИМХО не есть идеальное решение для подобных вещей (несколько раз приходилось сталкиваться с их весьма ..кгхм.. нетривиальными решениями принятыми в процессе реализации "наших" фич).

Конкурентами, впрочем, нашими считаются И не самыми последними, вообще говоря.
... << RSDN@Home 1.2.0 alpha rev. 653>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[4]: usb фильтр
От: .h  
Дата: 10.11.06 09:48
Оценка:
Здравствуйте, Злость, Вы писали:

З>Да у них там два драйвера DeviceLockDriver0 и DeviceLockDriverHlp. Помню перехватывают NtCreateKey, NtDeleteKey, NtDeleteValueKey, NtOpenProcess, NtOpenThread, NtSetValueKey, NtTerminateProcess, NtTerminateThread.


Да, действительно, посмотрел — devicelock перехватывает все IRP_MJ_XXX функции драйверов, правда там, кроме контроля доступа, и аудит, и контроль над format/eject, и еще куча всего.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: usb фильтр
От: .h  
Дата: 10.11.06 09:48
Оценка:
Здравствуйте, Sergey Storozhevykh, Вы писали:

SS>Не думаю, что все так просто — на низком уровне контекст пользователя, инициировавшего операцию, может быть недоступен.

Если есть задача: запретить доступ всем, то такой вариант можно рассмотреть.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: usb фильтр
От: Злость Россия  
Дата: 10.11.06 10:00
Оценка:
Здравствуйте, .h, Вы писали:

.h>Здравствуйте, Sergey Storozhevykh, Вы писали:


SS>>Не думаю, что все так просто — на низком уровне контекст пользователя, инициировавшего операцию, может быть недоступен.

.h>Если есть задача: запретить доступ всем, то такой вариант можно рассмотреть.

Помню есть такой финт — что-бы заблокировать usb — надо соравать загрузку стека устройств . Способов куча — один из них указать в список UpperFilters или LowerFilters (несуществующей драйвер) и контролировать рееестр — что-бы не удалили его
Пусто
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Re[5]: usb фильтр
От: .h  
Дата: 13.11.06 10:33
Оценка:
Здравствуйте, Злость, Вы писали:

З>Помню есть такой финт — что-бы заблокировать usb — надо соравать загрузку стека устройств . Способов куча — один из них указать в список UpperFilters или LowerFilters (несуществующей драйвер) и контролировать рееестр — что-бы не удалили его


Где-то в MSDN была статья на эту тему и там предлагали изменять NTFS permission у inf-файла
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: usb фильтр
От: Аноним  
Дата: 14.11.06 10:11
Оценка:
Еще пара вопросов
1. Есть ли способ установить фильтр не используя inf файл ?
2. Можно ли использовать один драйвер в качестве фильтра для нескольких классов одновременно ?
Re[2]: usb фильтр
От: Геннадий Майко США  
Дата: 14.11.06 10:52
Оценка:
Здравствуйте, Аноним,

А>Еще пара вопросов

А>1. Есть ли способ установить фильтр не используя inf файл ?
--
В приницпе да.

Нужно самостоятельно внести всю информацию в registry — прописать сервис для драйвера-фильтра и добавить строку с именем сервиса в нужную UpperFilters для фильтруемого устройства/класса устройств.
Затем нужно перегрузить это (эти) устройства с помощью функций SetupDiXXX (см. пример из devcon); вполне возможно, что придется сделать reboot.




А>2. Можно ли использовать один драйвер в качестве фильтра для нескольких классов одновременно ?

--
В приницпе да.

Можно попробовать объединить функциональные особенности драйвера фильтра для нескольких классов в один бинарный файл и зарегистрировать несколько разных сервисов (для всех нужных классов) с одним этим бинарным файлом. При этом в DriverEntry различать классы устройств по второму параметру.

C уважением,
Геннадий Майко.
Re: usb фильтр
От: Аноним  
Дата: 15.11.06 10:34
Оценка:
Остался один глобальный вопрос. Что за девайсы usbhub и usbuhci ?
И можно где нибудь найти инфу про организацию работы usb устройств в windows ?
Re[2]: usb фильтр
От: .h  
Дата: 15.11.06 11:37
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Остался один глобальный вопрос. Что за девайсы usbhub и usbuhci ?

А>И можно где нибудь найти инфу про организацию работы usb устройств в windows ?
USB Driver Stack for Windows XP and Later
USB Device Stack for Windows XP and Later
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: usb фильтр
От: Аноним  
Дата: 22.11.06 15:30
Оценка:
Продолжаю изучать фильтры.
Взял toaster filter из ddk. Инсталировал его как апер фильтр для класса usb.
Функция PassFilter в виде:
NTSTATUS
FilterPass (
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp)
{
    PIO_STACK_LOCATION irpStack = IoGetCurrentIrpStackLocation(Irp);
    PDEVICE_EXTENSION deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;

    NTSTATUS status = IoAcquireRemoveLock(&deviceExtension->RemoveLock, Irp);
    if (!NT_SUCCESS(status))
    {
        Irp->IoStatus.Status = status;
        IoCompleteRequest(Irp, IO_NO_INCREMENT);
        return status;
    }

    switch (irpStack->MajorFunction)
    {
        case IRP_MJ_READ:
            status = STATUS_ACCESS_DENIED;
            break;

        case IRP_MJ_WRITE:
            status = STATUS_ACCESS_DENIED;
            break;
    }

    if (!NT_SUCCESS(status))
    {
        Irp->IoStatus.Status = status;
        Irp->IoStatus.Information = 0;
        IoReleaseRemoveLock(&deviceExtension->RemoveLock, Irp); 
        IoCompleteRequest(Irp, IO_NO_INCREMENT);
    }
    else
    {
        IoSkipCurrentIrpStackLocation(Irp);
        status = IoCallDriver(deviceExtension->NextLowerDriver, Irp);
        IoReleaseRemoveLock(&deviceExtension->RemoveLock, Irp); 
    }

    return status;
}

Расчитывал, что читать/писать данные на usb диск теперь нельзя. Но читает и пишет.
Что неправильно ? Куда копать ?
AddDevice вызвалось для PDO драйверов PCI и usbuhci
Re[2]: usb фильтр
От: Sergey Storozhevykh Россия  
Дата: 23.11.06 07:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Расчитывал, что читать/писать данные на usb диск теперь нельзя. Но читает и пишет.

А>Что неправильно ? Куда копать ?
А>AddDevice вызвалось для PDO драйверов PCI и usbuhci

Какая задача у вас стоит? Полностью запретить взаимодействие с этим устройсвом, или разграничивать доступ на чтение/запись? На первый вопрос выше по ветке есть ответы, а со вторым не все так просто.

По крайней мере обработка только IRP_MJ_READ/WRITE не спасет.

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.

Re[3]: usb фильтр
От: Аноним  
Дата: 23.11.06 09:19
Оценка:
Здравствуйте, Sergey Storozhevykh, Вы писали:

SS>Какая задача у вас стоит?

мне нужно уметь по отдельности запрещать/разрешать чтение и запись, причем делать это без ребута.
поэтому вариант с обработкой IRP_MN_START_DEVICE, если вы его имели в виду, не подходит

SS>По крайней мере обработка только IRP_MJ_READ/WRITE не спасет.


SS>

SS>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.

существует в природе описание используемых irp ? может кто ссылку подскажет ?
Re[4]: usb фильтр
От: Sergey Storozhevykh Россия  
Дата: 23.11.06 10:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Sergey Storozhevykh, Вы писали:


SS>>Какая задача у вас стоит?

А>мне нужно уметь по отдельности запрещать/разрешать чтение и запись, причем делать это без ребута.
А>поэтому вариант с обработкой IRP_MN_START_DEVICE, если вы его имели в виду, не подходит

Рассматриваются только USB Mass Storage устройства?

SS>>По крайней мере обработка только IRP_MJ_READ/WRITE не спасет.


SS>>

SS>>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.

А>существует в природе описание используемых irp ? может кто ссылку подскажет ?

Есть, в документации к DDK
Re[6]: usb фильтр
От: Аноним  
Дата: 23.11.06 11:13
Оценка:
Здравствуйте, Sergey Storozhevykh, Вы писали:

SS>>Рассматриваются только USB Mass Storage устройства?

нет, любое подключаемое через usb

SS>Вот, кстати, попутно на глаза попалось. Может интересно будет

спасибо, это я в курсе
Re: usb фильтр
От: Аноним  
Дата: 23.11.06 17:06
Оценка:
Чем дальше в лес тем непонятнее ((
Использовал devicetree и irptracker.
Тренировался на кошках, в смысле флешках. После того как втыкаю флешку грузится usbstor у которого два девайса
0000004е к которому прицеплен \device\harddisk1\dr2 к которому unnamed device PartMgr
0000004d к которому прицеплен девайс моего фильтра
причем 0000004d прицеплен к появившемуся после втыкаеия флешки девайсу usbpdo-1 драйвера usbhub.
Что это за девайсы ?

При чтении записи файлов с флешки вижу, что на \device\harddisk1\dr2 идут в основном IRP с mjrfun = DEVICE_CONTROL, READ и WRITE не вижу. Почему ? И как мне отловить read/write запросы ? в ддк не нашел ничего ( ткните носом плиз
Re[2]: usb фильтр
От: Sergey Storozhevykh Россия  
Дата: 24.11.06 10:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Чем дальше в лес тем непонятнее ((

А>Использовал devicetree и irptracker.
А>Тренировался на кошках, в смысле флешках. После того как втыкаю флешку грузится usbstor у которого два девайса
А>0000004е к которому прицеплен \device\harddisk1\dr2 к которому unnamed device PartMgr
А>0000004d к которому прицеплен девайс моего фильтра
А>причем 0000004d прицеплен к появившемуся после втыкаеия флешки девайсу usbpdo-1 драйвера usbhub.
А>Что это за девайсы ?

См. Device Object Example for a USB Mass Storage Device

А>При чтении записи файлов с флешки вижу, что на \device\harddisk1\dr2 идут в основном IRP с mjrfun = DEVICE_CONTROL, READ и WRITE не вижу. Почему ? И как мне отловить read/write запросы ? в ддк не нашел ничего ( ткните носом плиз


Есть там READ/WRITE. Драйвер класса диска (который и создает функциональное устройство — в вашем случае \device\harddisk1\dr2) преобразует READ/WRITE запросы в SRB (SCSI Request Block) и посылает их нижележащей паре storage порт/минипорт.
Re[3]: usb фильтр
От: Аноним  
Дата: 24.11.06 11:23
Оценка:
Здравствуйте, Sergey Storozhevykh, Вы писали:

SS>См. Device Object Example for a USB Mass Storage Device


Большое спасибо за ссылку и ответы.
Re: usb фильтр
От: Аноним  
Дата: 28.11.06 15:10
Оценка:
добавил в драйвер обработчик
DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = DispatchInternalIOCTL;
но DispatchInternalIOCTL управление не получает.
в ддк написано

IOCTL_INTERNAL_USB_SUBMIT_URB
Operation
Drivers can use this request to submit an URB to the bus driver.

значит ли это, что для того чтобы получить IOCTL_INTERNAL_USB_SUBMIT_URB мой драйвер должен быть lower level class filter ? у меня upper.
Re[2]: usb фильтр
От: Sergey Storozhevykh Россия  
Дата: 28.11.06 15:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>добавил в драйвер обработчик

А> DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = DispatchInternalIOCTL;
А>но DispatchInternalIOCTL управление не получает.
А>в ддк написано

А>IOCTL_INTERNAL_USB_SUBMIT_URB

А>Operation
А>Drivers can use this request to submit an URB to the bus driver.

А>значит ли это, что для того чтобы получить IOCTL_INTERNAL_USB_SUBMIT_URB мой драйвер должен быть lower level class filter ? у меня upper.


Да
Re[3]: usb фильтр
От: Аноним  
Дата: 28.11.06 15:42
Оценка:
Здравствуйте, Sergey Storozhevykh, Вы писали:
SS>Да

уже попробовал, действительно ф-я стала вызываться
Re: usb фильтр
От: Аноним  
Дата: 29.11.06 13:21
Оценка:
При подключении флешки получаю кучу пакетов URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER,
причем у всех сброшен флаг USBD_TRANSFER_DIRECTION_IN.
Судя по ддк
USBD_TRANSFER_DIRECTION_IN
Is set to request data from a device. To transfer data to a device, this flag must be clear. The flag must be set if the pipe is an interrupt transfer pipe.
это должно значить, что идет передача данных на устройство.
А где же чтение данных ? Открываю саму флешку, открываю файл на ней и все равно вижу только URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER со сброшенным USBD_TRANSFER_DIRECTION_IN. Как оно работает на самом деле ?
Re[3]: usb фильтр
От: Аноним  
Дата: 30.11.06 13:55
Оценка:
Здравствуйте, Zavialov, Вы писали:

а как отличить исходящий пакет от входящего и данные от команд ?
Re[4]: usb фильтр
От: Zavialov  
Дата: 30.11.06 21:41
Оценка:
А>а как отличить исходящий пакет от входящего и данные от команд ?

Насчёт "отличить данные от команд" не понял, а направление блоковых трансферов определяется Endpoint Direction. При пролетании мимо Вашего фильтра URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER Вы видите PipeHandle, который и определяет, с какой именно точкой происходит трансфер. Вам нужно сопоставить PipeHandle с Endpoint Direction. Это можно сделать только если ловить URB_FUNCTION_SELECT_CONFIGURATION и последующие возможные URB_FUNCTION_SELECT_INTERFACE. В них содержится кучка USBD_PIPE_INFORMATION, где есть всё необходимое. Нужно это всё запомнить и PipeHandle -> EndpointAddress -> Endpoint Direction.
Re[5]: usb фильтр
От: Аноним  
Дата: 01.12.06 07:58
Оценка:
Здравствуйте, Zavialov, Вы писали:

Z>Насчёт "отличить данные от команд" не понял


выразился наверное не точно
на флешку можно писать данные (файл), а можно передавать запрос на чтение определенного файла.
в обоих случаях на флешку передается информация — в первом случае она сохраняется на флешке, во втором это запрос, соответственно не сохраняется. можно как то различить эти посылки ? это нужно для того, чтобы можно было предоставлять доступ в режиме только чтение.
Re[6]: usb фильтр
От: Аноним  
Дата: 01.12.06 09:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>выразился наверное не точно

А>на флешку можно писать данные (файл), а можно передавать запрос на чтение определенного файла.
А>в обоих случаях на флешку передается информация — в первом случае она сохраняется на флешке, во втором это запрос, соответственно не сохраняется. можно как то различить эти посылки ? это нужно для того, чтобы можно было предоставлять доступ в режиме только чтение.

Читайте спецификацию USB Storage (www.usb.org, www.microsoft.com), там расписаны все команды.
Но imho подход к проблеме у Вас неправильный, проще было бы делать volume storage filter.
Re[7]: usb фильтр
От: Аноним  
Дата: 01.12.06 10:13
Оценка:
А>Читайте спецификацию USB Storage (www.usb.org, www.microsoft.com), там расписаны все команды.
А>Но imho подход к проблеме у Вас неправильный, проще было бы делать volume storage filter.

файловый фильтр не дает возможности заблокировать запись на устройства не имеющие файловой системы
Re[8]: usb фильтр
От: Аноним  
Дата: 01.12.06 10:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>файловый фильтр не дает возможности заблокировать запись на устройства не имеющие файловой системы

А что мешает использовать два фильтра?
С тонкостями реализации usb storage разобраться тяжелее, чем написать storage filter.
Re[9]: usb фильтр
От: Аноним  
Дата: 01.12.06 11:10
Оценка:
А>>файловый фильтр не дает возможности заблокировать запись на устройства не имеющие файловой системы
А>А что мешает использовать два фильтра?
А>С тонкостями реализации usb storage разобраться тяжелее, чем написать storage filter.

а как тогда разрешить флешки и запретить "не флешки" ?
Re[10]: usb фильтр
От: Аноним  
Дата: 01.12.06 12:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а как тогда разрешить флешки и запретить "не флешки" ?

Прочитать дескриптор usb устройства. Если устройство не является storage, доступом к нему будет управлять usb фильтр, а если является — storage фильтр.
Re[11]: usb фильтр
От: Аноним  
Дата: 01.12.06 12:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>>а как тогда разрешить флешки и запретить "не флешки" ?

А>Прочитать дескриптор usb устройства. Если устройство не является storage, доступом к нему будет управлять usb фильтр, а если является — storage фильтр.

спасибо, попробую
а как прочитать дескриптор ?
Re[12]: usb фильтр
От: Аноним  
Дата: 04.12.06 08:34
Оценка:
А>а как прочитать дескриптор ?
с чтением дескриптора разобрался, остался вопрос как получить соответствии между значением bDeviceSubClass и названием класса ?
Re[13]: usb фильтр
От: Аноним  
Дата: 04.12.06 09:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>а как прочитать дескриптор ?

А>с чтением дескриптора разобрался, остался вопрос как получить соответствии между значением bDeviceSubClass и названием класса ?
Эти константы определены в спецификации USB (www.usb.org).
Re[14]: usb фильтр
От: Аноним  
Дата: 04.12.06 10:46
Оценка:
А>Эти константы определены в спецификации USB (www.usb.org).

на сайте найти не сумел, нашел в ддк в usb100.h
там есть такие:

#define USB_DEVICE_CLASS_RESERVED 0x00
#define USB_DEVICE_CLASS_AUDIO 0x01
#define USB_DEVICE_CLASS_COMMUNICATIONS 0x02
#define USB_DEVICE_CLASS_HUMAN_INTERFACE 0x03
#define USB_DEVICE_CLASS_MONITOR 0x04
#define USB_DEVICE_CLASS_PHYSICAL_INTERFACE 0x05
#define USB_DEVICE_CLASS_POWER 0x06
#define USB_DEVICE_CLASS_PRINTER 0x07
#define USB_DEVICE_CLASS_STORAGE 0x08
#define USB_DEVICE_CLASS_HUB 0x09
#define USB_DEVICE_CLASS_VENDOR_SPECIFIC 0xFF

а сканеры и видеокамеры подключаемые через usb к какому классу относятся ?
Re[3]: usb фильтр
От: Аноним  
Дата: 15.03.07 14:25
Оценка:
Здравствуйте, Геннадий Майко, Вы писали:

А>>2. Можно ли использовать один драйвер в качестве фильтра для нескольких классов одновременно ?

ГМ>--
ГМ>В приницпе да.

ГМ>Можно попробовать объединить функциональные особенности драйвера фильтра для нескольких классов в один бинарный файл и зарегистрировать несколько разных сервисов (для всех нужных классов) с одним этим бинарным файлом. При этом в DriverEntry различать классы устройств по второму параметру.


Зачем регистрировать разные сервисы для разных классов ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.