Нужно написать драйвер филтр флешки. что б перехватывать запросы чтения, записи только от флеш памяти.
сам фильтр, аппер, и цепляется над usbhub. Пока неполучается нормально его аттачить
вот фрагмент
ТАк я делаю? подкажите если что.
Загружаю его лоадером. показывается в DeviceTree, что он прицепился. после повторной загрузки пишет что такая служба уже есть и вылетает. а в DeviceTree ничего нет. ЧТо делать?
сам лоадер
int main()
{
cout<<" ------------------- "<<endl;
cout<<"| Loader is running |"<<endl;
cout<<" ------------------- "<<endl;
SC_HANDLE sch = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(sch)
{
SC_HANDLE schServiceUSB = CreateService(sch,"FilterDriver","FilterDriver",SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER,SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,
"C:\\FilterDriver\\sys\\objchk\\i386\\FilterDriver.sys",NULL,NULL,NULL,NULL,NULL);
if(schService)
{
if(StartService(schService,NULL,NULL))
{
cout<<"PAUSE: Press any key to exit pause..."<<endl;
while(!getch());
SERVICE_STATUS ServiceStatus;
if(ControlService(schService,SERVICE_CONTROL_STOP,&ServiceStatus))
{cout<<"ControlService - status ok"<<endl;}
else{cout<<"Error ControlService..."<<endl;ErrorView();}
if(DeleteService(schService))
{cout<<"DeleteService - status ok"<<endl;}
else{cout<<"Error DeleteService..."<<endl;ErrorView();}/**/if(CloseServiceHandle(schService))
{cout<<"CloseServiceHandle - status ok"<<endl;}
else{cout<<"Error CloseServiceHandle..."<<endl;ErrorView();}/**/if(CloseServiceHandle(sch))
{cout<<"CloseServiceHandle - status ok"<<endl;}
else{cout<<"Error CloseServiceHandle..."<<endl;ErrorView();}/**/
/*---------------------------------------------------------------------------------------------------------*/
}else{cout<<"Error StartService..."<<endl;ErrorView();}
}else{cout<<"Error CreateService..."<<endl;ErrorView();}
}else{cout<<"Error OpenSCManager..."<<endl;ErrorView();}
cout<<" ------------------- "<<endl;
cout<<"| Loader is stopped |"<<endl;
cout<<" ------------------- "<<endl;
cout<<"Press any key to exit"<<endl;
while(!getch());
return 0;
}
<Skip>
1. Взять за основу WDM фильтр, потому что то что вы привели это похоже на legacy. Примеров таких пустых заглушек в инете и DDK полно.
2. WDM филтр не загружается по команде StartServer — т.к. он WDM — он автоматически будет включен в USB stack и загружен в момент подключения физического USB устройства.
3. Для того чтобы перехватывать все данные с флешки нужен не upper фильтр для usb-hub, а lower-filter для ubsstor.sys
Здравствуйте, _f_b_i_, Вы писали:
___>Здравствуйте, megamanrsdn, Вы писали:
___><Skip> ___>1. Взять за основу WDM фильтр, потому что то что вы привели это похоже на legacy. Примеров таких пустых заглушек в инете и DDK полно. ___>2. WDM филтр не загружается по команде StartServer — т.к. он WDM — он автоматически будет включен в USB stack и загружен в момент подключения физического USB устройства. ___>3. Для того чтобы перехватывать все данные с флешки нужен не upper фильтр для usb-hub, а lower-filter для ubsstor.sys
Спасибо большое.
Достатчно ли будет для шифрования данных, перехвытывать и шифровать только READ, (WRITE). Как отличить передается ли в них служебная информация или данные?
Здравствуйте, megamanrsdn, Вы писали:
M>Спасибо большое. M>Достатчно ли будет для шифрования данных, перехвытывать и шифровать только READ, (WRITE). Как отличить передается ли в них служебная информация или данные?
Как я понял вы собираетесь шифровать данные которые записываются на флешку?
Тогда прошу учесть следующее:
Для работы с флешкой используются SCSI команды которые формируются, если не ошибаюсь disk.sys драйвером и передаются в usbstor.sys который и формирует URB пакеты(протокол общения между клиентским драйвером и драйвером хост контроллера).
Если вы установите lowerFilter на usbstor.sys то SCSI в чистом виде никогде не увидите — они будет завернуты в URB.
Тут прийдется ставить UpperFiletr на usbstor.sys. Только вот я не помню передаются ли в него данные через READ/WRITE.
Я не эксперт в области работы с файловой системой, но помоему тут будут еще грабли с кеш-менеджером!
Нашел пример фильтра из DDK \src\storage\filters\diskperf
Как я понял он для всех дисковых устройств? в том числе и для флешки? пакеты типа READ... я так понял перехвытывать он должен уметь.
Я поставил его через инф файл.А атачить его нужно через addfilter? Немогу разобратся с \src\storage\filters\addfilter . куда мне нужно его подключить? и как это сделать?
addfilter /device\harddisk1 /add filter
или
addfilter /device\USBPDO-2 /add filter
ПОйдет он вообще для моих целей как основа? просто больше примеров я ненашел....