| 
			| 
					
						| Евгений 
								Гость
 | 
								|  | «  : 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 ... |  |  | 
	|  |