Евгений
Гость
|
|
« : 02-04-2008 06:32 » |
|
Какой именно пример из DDK, пойдет для основы драйвер-фильтра флешки. что там их по моемму немало
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #1 : 02-04-2008 08:00 » |
|
Евгений, а список описаний примеров DDK3790.1830\srcindex.htm - прочитать не судьба? src\storage\filters - для любого устройства
|
|
« Последнее редактирование: 02-04-2008 08:02 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Евгений
Гость
|
|
« Ответ #2 : 07-04-2008 20:28 » |
|
Подскажите. Реально ли перехватывать запросы на запись файла, кодировать его(неважно как), а при чтении декодировать. теретически это реально? то есть что бы на флешке хранились закодированые данные, и только.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #3 : 08-04-2008 08:46 » |
|
реально) тем более теоретически. да и практически не должно быть больших сложностей.
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Евгений
Гость
|
|
« Ответ #4 : 08-04-2008 09:23 » |
|
То есть как я понял вставить мне го нужно между usbhub.sys и под usbstore.sys перхватывать только IRP на чтение и запись, остальные я пропускаю...?
|
|
|
Записан
|
|
|
|
Евгений
Гость
|
|
« Ответ #5 : 08-04-2008 09:39 » |
|
И еше вопрос, что бы сделать это под висту..... Это вообще можно реализовать? что юля этого нужно?
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #6 : 08-04-2008 10:56 » |
|
у меня KMDF 1.0 включающий DDK 3790.1830. вроде под вистой работает... хотя сам KMDF не использую. новее наверное есть, но искать надо.. посмотрите на майкрософте, может они выложили. если нет - из ослика качать... а может на форуме была ссылка - не помню точно. http://www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx
|
|
« Последнее редактирование: 08-04-2008 11:00 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Евгений
Гость
|
|
« Ответ #7 : 13-04-2008 13:34 » |
|
В примере фильтра ДДК есть пример сомого фильтра и приложения для его добавления... этот addfilter для всх одиноковый? или как? еще подскажите где именно указывать, где этот фильтр должен расположится? где это все почитать на русском? ато в коментариях сложно разобратся.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #8 : 14-04-2008 12:15 » |
|
1. все таки слово "самого" - пишется через а.... а так же "одинАковый"... и "комМентариях"... и "разобратЬся"...
2. DDK3790.1830\src\storage\filters\addfilter\addfiltr.htm пункт 2. 3 поиск по этому разделу. на слово "книги".
|
|
« Последнее редактирование: 14-04-2008 12:17 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Евгений
Гость
|
|
« Ответ #9 : 30-04-2008 10:47 » |
|
Правильно ли будет, если установить фильтр с помощью только инф файла, при этом только поменять в нем [Version] Signature = "$Windows NT$" Class = DiskDrive
поменять на Class = USB
я так сделал, установил, система работает, должен ли я его видеть Диспетчер устройств - свойства USB - Сведения - фильтры устройства(шины)....
Без отладчика я как могу посмотреть что он работает?
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #10 : 30-04-2008 10:55 » |
|
Евгений, конечно правильно!
а что за файл, откуда взялся... - совершенно не важно) берете inf от танка и прописываете слово самолет! - должен взлететь)
PS какой вопрос - такой ответ)
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Евгений
Гость
|
|
« Ответ #11 : 30-04-2008 11:01 » |
|
Ну мы же разговориваем про пример драйвера фильтра filters\diskperf от DDK и там есть инф файл...
PS: Прошу не издевайтесь с меня, просто очень нужно разобратся... Очень нужна помошь
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #12 : 30-04-2008 13:27 » |
|
угу... должен подойти. впрочем менять там ничего не надо. то, что вы указали - название ветки дерева устройств в свойствах системы. влияет только на отображение, если не ошибаюсь, и на то, к какому классу устройство относится(при ручном выборе драйвера, при установке).
Далее... этот пример драйвера-фильтр, как я говорил подходит для любого дискового устройства. не только для USB.
вопрос... а вы вообще разобрались как этот драйвер работает?
PS что вы! я с вас не издеваюсь...
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Евгений
Гость
|
|
« Ответ #13 : 03-05-2008 13:46 » |
|
Ну как я понял, фильтр вешается на любое дисковое устройство, и фиксирует обращения к нему. То есть то, что мне нужно. Как я говорил, я поставил его без AddFilter, а просто через inf файл. В w2k_svc показывает что в системе он есть. Но где именно? И для чего тогда нужна AddFilter? Можно ли переписать инф. Что б он ставился туда куда нужно? То есть вешался на флешку.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #14 : 04-05-2008 09:32 » |
|
1. DDK3790.1830\tools\devicetree\x86\devicetree.exe 2. DDK3790.1830\src\storage\filters\addfilter\addfiltr.htm 3. наверное... покопаться надо...навскидку - не скажу.
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Евгений
Гость
|
|
« Ответ #15 : 04-05-2008 11:06 » |
|
1. да спасибо помогло. 3. как я пнонял инфом одним неотделаешся, вот тут нашел PDEVICE_OBJECT pdDevObjTarg; - глобальная переменная для хранения указателя на устройство находящееся ниже фильтра.
PFILE_OBJECT FileObj = NULL; - переменная для хранения указателя на объект-файл, для выгрузки нижележащего драйвера.
То есть это описивается в драйвере.
Вот как это делается для бипера RtlInitUnicodeString(&devName,L"\\Device\\Beep"); а если флешка, то что нужно usbhub или usbstore.... что идет зачем?
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #16 : 04-05-2008 11:54 » |
|
вопрос не понял)
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Евгений
Гость
|
|
« Ответ #17 : 05-05-2008 08:50 » |
|
ПОлучилось подключить его к флешке после запуска лоадера в devicetree показывает что он приконектился к устройству. Но DebugView молчит(может я с ним что то не так делаю?) Когда лоадер заканчивает работу по идеи его выгружает фильтр. Но когда я его запускаю еше раз то пишет что такая служба уже есть. Фрагмент NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath) { NTSTATUS status; UNICODE_STRING devName; PDEVICE_OBJECT fdo; int i;
DbgPrint("DriverEntry...");
for(i=0; i<IRP_MJ_MAXIMUM_FUNCTION; i++) { DriverObject->MajorFunction[i] = DispatchPass; }
DriverObject->DriverUnload = FilterDriverUnload; status = IoCreateDevice(DriverObject,sizeof(PDEVICE_OBJECT),NULL,FILE_DEVICE_MASS_STORAGE,0,FALSE,&fdo); if(!NT_SUCCESS(status))return status; fdo->Flags |= 0x3040;
RtlInitUnicodeString(&devName,L"\\Device\\USBPDO-2");
status = IoGetDeviceObjectPointer(&devName,STANDARD_RIGHTS_ALL,&FileObj,&pdDevObjTarg); if(!NT_SUCCESS(status))return status; DbgPrint("IoGetDeviceObjectPointer -ok-");
IoAttachDeviceToDeviceStack(fdo,pdDevObjTarg); if(!NT_SUCCESS(status))return status; DbgPrint("IoAttachDeviceToDeviceStack -ok-");
return STATUS_SUCCESS; }
VOID FilterDriverUnload(IN PDRIVER_OBJECT fdo) { IoDetachDevice(pdDevObjTarg); ObDereferenceObject(FileObj); IoDeleteDevice(fdo->DeviceObject);
DbgPrint("FilterDriverUnload");
}
лоадер #include <windows.h> #include <iostream> #include <conio.h>
using namespace std; void ErrorView();
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; }
void ErrorView()/*Функция вывода сообщений об ошибках...*/ { LPVOID lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(), MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPTSTR)&lpMsgBuf,0,NULL);CharToOem((LPTSTR)lpMsgBuf,(LPTSTR)lpMsgBuf); cout<<(LPCTSTR)lpMsgBuf<<endl; LocalFree(lpMsgBuf); }
|
|
« Последнее редактирование: 05-05-2008 14:59 от Евгений »
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #18 : 05-05-2008 15:57 » |
|
DebugView показывает отладочные собщения только для debug версии драйвера - проверьте как вы его собирали. кроме того при компиляции надо дефенишены соответствующие определить - типа _DBG, _DEBUG может еще какие, не помню на вскидку.
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Евгений
Гость
|
|
« Ответ #19 : 05-05-2008 20:50 » |
|
ТАк вот после того как повторно гружу лоадер то пишет что служба уже запущена(ребут не помагает), А в DviceTree фильтра возле флешки нет...... что делать? что это может быть?
ЗЫ: Если нужно могу прикрепить файлы.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #20 : 06-05-2008 08:07 » |
|
fdo->Flags |= 0x3040; что за флаги? IoCreateDevice - проходит? IoGetDeviceObjectPointer - выполняется? IoAttachDeviceToDeviceStack - где проверка статуса? какой результат? вы уверены что сервис должен быть SERVICE_AUTO_START а не "по требованию"?
в main - не вижу обработки ошибок - вообще. опять же, это не есть хорошо. после ошибки в вызове любой функции всетаки сделайте все положенные обратные процедуры. вывод сообщения об ошибке - это не обработка.
по поводу загрузки - покажите список сообщений от драйвера и от приложения. желательно вперемешку. что за чем следует.
да не уверен что надо атачится к \\Device\\USBPDO-2...
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Евгений
Гость
|
|
« Ответ #21 : 08-05-2008 11:21 » |
|
Мне тут подсказали что лучше взять за основу WDM фильтр, а не легаси. WDM филтр не загружается по команде StartServer — т.к. он WDM — он автоматически будет включен в USB stack и загружен в момент подключения физического USB устройства.То есть лоадер ненужен? Для того чтобы перехватывать все данные с флешки нужен не upper фильтр для usb-hub, а lower-filter для ubsstor.sysЧто то я никак непойму как они вооше расположены, где находится ЮСБхаб, где ЮСБстор.......
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #22 : 12-05-2008 08:32 » |
|
DeviceTree.exe посмотрите ветку ( Driver\USBSTOR. или там же по устройствам (PDO - кнопка P) Root\ACPI_HAL\PNP0000\ и т.д.
по поводу стeка у Они можно почитать или в Соломоне-Руссиновиче, там в общем виде все есть. на сайте тут тоже наверняка выложено.
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Евгений
Гость
|
|
« Ответ #23 : 15-05-2008 08:56 » |
|
Наконец то разобрался с примером из DDK, получилось его установить. Но установился он на все дисковые устройства, то есть и на винт, и на USB(когда он есть).
функця DiskPerfReadWrite срабатывает... Но я недолжен перехватывать ReadWrite от винчестера, или перехватывать и отпускать дальше. Как я могу понять от чего пришло это IRP?
Что я вооше могу вытянуть и IRP READ и WRITE?
И еще вопрос. в IRP READ , WRITE в буфере передается только данные? или бывает и служебная информация? Кодировать можно все READ WRITE? или какие-то отсекать?
|
|
« Последнее редактирование: 16-05-2008 11:25 от Евгений »
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #24 : 16-05-2008 12:58 » |
|
не помню точно, кто то уже задавался здесь таким вопросом.... в итоге имя файла в IRP нашел. насколько я помню) остальное - не знаю) надо доку читать...
|
|
« Последнее редактирование: 16-05-2008 13:00 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
|