Нужно написать драйвер филтр флешки. что б перехватывать запросы чтения, записи только от флеш памяти.
сам фильтр, аппер, и цепляется над usbhub. Пока неполучается нормально его аттачить
вот фрагмент
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");
}
ТАк я делаю? подкажите если что.
Загружаю его лоадером. показывается в 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;
}