Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отловить usb-flash, device_object 
:(
    Опции темы
shara
Дата 16.6.2010, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 29.6.2004
Где: печенье?

Репутация: нет
Всего: 2




в драйвер-филтре хочу определения 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 посланного файловой системе)

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


--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
bra1ny
Дата 16.6.2010, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



мой метод) 
http://www.everfall.com/paste/id.php?5zbl1101qkp3
недокументированно.

 
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
shara
Дата 16.6.2010, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 29.6.2004
Где: печенье?

Репутация: нет
Всего: 2



bra1ny, 

Код

NTSTATUS  MyAddDevice ( IN PDRIVER_OBJECT DriverObject , IN PDEVICE_OBJECT DeviceObject );

NTSTATUS DriverEntry( ) 
{
...

    RtlInitUnicodeString( &usDriverName , L"\\Driver\\usbstor" );
    ns = ObReferenceObjectByName( &usDriverName ,
                                  OBJ_CASE_INSENSITIVE ,
                                  NULL ,
                                  0 ,
                                  IoDriverObjectType ,
                                  KernelMode ,
                                  0 ,
                                  &pDisk
                                );

    //
    // hook AddDevice routine of \\Driver\\usbstor
    //
    InterlockedExchange( (PLONG)&pDisk->DriverExtension->AddDevice , (LONG)MyAddDevice );
....
}



NTSTATUS MyAddDevice( IN PDRIVER_OBJECT DriverObject , IN PDEVICE_OBJECT DeviceObject )
{
    NTSTATUS ns;
    WCHAR Vendor[1024];
    ULONG Ret;

    RtlZeroMemory( Vendor , 1024 );

    KdPrint(("in my handler!\n"));

    ns = IoGetDeviceProperty( DeviceObject , DevicePropertyHardwareID  , 1024 , &Vendor , &Ret );

    if( !NT_SUCCESS(ns) )
    {
        KdPrint(("IogetDeviceProperty failed with status : %08X\n" , ns ));
        goto __end;
    }

    KdPrint(("Vendor : %ws\n" , Vendor ));

    if( wcscmp( _FLASH_ , Vendor ) )
    {
        MsgBox( L"You have no rights to use this device!" );
        return STATUS_ACCESS_DENIED;
    }
__end:
    return OldAddDevice( DriverObject , DeviceObject );
}


  smile  smile  smile  smile 

можешь объяснить как это работает? точнее по какому принципу оно должно работать
.. я покаместь код боюсь набирать... уж сильно ээ... нереально он выглядит  smile  

Это сообщение отредактировал(а) shara - 16.6.2010, 22:13


--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
bra1ny
Дата 16.6.2010, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата

ИЛИ вообще хоть как-то определить наличие подключенный флешки к компу

код отлавливает подключение юсб накопителя.Просто я его вырезал из проекта старого , где надо разрешать использование накопителей только с определенными номерами( типа zlock).


Это сообщение отредактировал(а) bra1ny - 16.6.2010, 22:40
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
shara
Дата 16.6.2010, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 29.6.2004
Где: печенье?

Репутация: нет
Всего: 2



Цитата(bra1ny @  16.6.2010,  21:39 Найти цитируемый пост)
вырезал из проекта старого , где надо разрешать использование накопителей только с определенными номерами

я это понял...  не могу понять по какому принципу оно работает  smile 

Цитата

The InterlockedExchange routine sets an integer variable to a given value as an atomic operation.
  

или там еще чего-то не хватает?

ну не может функция MyAddDevice вызваться при подключении USB-девайсов только потому что ее адрес был передан на пометку как Атомарная Операция  smile 


--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
bra1ny
Дата 16.6.2010, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата(shara @ 16.6.2010,  22:44)
Цитата(bra1ny @  16.6.2010,  21:39 Найти цитируемый пост)
вырезал из проекта старого , где надо разрешать использование накопителей только с определенными номерами

я это понял...  не могу понять по какому принципу оно работает  smile 

Цитата

The InterlockedExchange routine sets an integer variable to a given value as an atomic operation.


или там еще чего-то не хватает?

ну не может функция MyAddDevice вызваться при подключении USB-девайсов только потому что ее адрес был передан на пометку как Атомарная Операция  smile

так я перехватываю AddDevice usbstor.sys =)) 


Это сообщение отредактировал(а) bra1ny - 16.6.2010, 22:50
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
shara
Дата 16.6.2010, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 29.6.2004
Где: печенье?

Репутация: нет
Всего: 2



кажися начал въезжать
 
Код

    RtlInitUnicodeString( &usDriverName , L"\\Driver\\usbstor" );
    ns = ObReferenceObjectByName( &usDriverName ,
                                  OBJ_CASE_INSENSITIVE ,
                                  NULL ,
                                  0 ,
                                  IoDriverObjectType ,
                                  KernelMode ,
                                  0 ,
                                  &pDisk
                                );


тоесть это мы называемся его именем и делал как-бы  ссылку на себя..  

надо будет завтра попробовать. а то у меня проц перегрелся уже  smile 


--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
bra1ny
Дата 16.6.2010, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата(shara @ 16.6.2010,  22:54)
кажися начал въезжать
 
Код

    RtlInitUnicodeString( &usDriverName , L"\\Driver\\usbstor" );
    ns = ObReferenceObjectByName( &usDriverName ,
                                  OBJ_CASE_INSENSITIVE ,
                                  NULL ,
                                  0 ,
                                  IoDriverObjectType ,
                                  KernelMode ,
                                  0 ,
                                  &pDisk
                                );


тоесть это мы называемся его именем и делал как-бы  ссылку на себя..  

надо будет завтра попробовать. а то у меня проц перегрелся уже  smile

просто получаем DRIVER_OBJECT его и меняем адресс AddDevice на наш хэндлер.

для наглядности .
Код

lkd> !drvobj usbstor
Driver object (8a1786a0) is for:
 \Driver\usbstor
Driver Extension List: (id , addr)

Device Object list:
8a07cea0  8a08b030  
lkd> dt _DRIVER_OBJECT 8a1786a0
nt!_DRIVER_OBJECT
   +0x000 Type             : 4
   +0x002 Size             : 168
   +0x004 DeviceObject     : 0x8a07cea0 _DEVICE_OBJECT
   +0x008 Flags            : 0x12
   +0x00c DriverStart      : 0xf77a7000 
   +0x010 DriverSize       : 0x6780
   +0x014 DriverSection    : 0x8a136e90 
   +0x018 DriverExtension  : 0x8a178748 _DRIVER_EXTENSION
   +0x01c DriverName       : _UNICODE_STRING "\Driver\usbstor"
   +0x024 HardwareDatabase : 0x80699210 _UNICODE_STRING "\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM"
   +0x028 FastIoDispatch   : (null) 
   +0x02c DriverInit       : 0xf77ac805     long  +fffffffff77ac805
   +0x030 DriverStartIo    : 0xf77a8f26     void  +fffffffff77a8f26
   +0x034 DriverUnload     : 0xf751badc     void  +fffffffff751badc
   +0x038 MajorFunction    : [28] 0x8a0861f8     long  +ffffffff8a0861f8
lkd> _DRIVER_EXTENSION 0x8a178748
     ^ Syntax error in '_DRIVER_EXTENSION 0x8a178748'
lkd> dt _DRIVER_EXTENSION 0x8a178748
nt!_DRIVER_EXTENSION
   +0x000 DriverObject     : 0x8a1786a0 _DRIVER_OBJECT
 +0x004 AddDevice        : 0xf77ab16c     long  +fffffffff77ab16c        <=====================
   +0x008 Count            : 0
   +0x00c ServiceKeyName   : _UNICODE_STRING "usbstor"
   +0x014 ClientDriverExtension : (null) 
   +0x018 FsFilterCallbacks : (null) 



Это сообщение отредактировал(а) bra1ny - 16.6.2010, 23:00
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
EvilsInterrupt
Дата 18.6.2010, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 1
Всего: 9



bra1ny, 
>>lkd> dt _DRIVER_OBJECT 8a1786a0
как вижу это не  i386kd.exe , а тулза Руссиновича livekd.exe. Поясни пожалуйста, как ты умудряешься с помощью нее смотреть реальные данные? А то пока у меня получается смотреть структуру, командой dt , к примеру dt nt!_nt_tib . А для полного анализа юзаю WinDBG\VirtualKD + WMware , однако хотелось бы частности смотреть с помощью livekd
PM MAIL WWW ICQ Jabber   Вверх
bra1ny
Дата 18.6.2010, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Код

dt _struct addr

например 
Код

dt _DRIVER_OBJECT 8a1786a0


Это сообщение отредактировал(а) bra1ny - 18.6.2010, 21:43
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
EvilsInterrupt
Дата 19.6.2010, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 1
Всего: 9



Странно, но у меня не пашуд в livekd команды !object , !driver (
PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.3515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.