阅读:1813回复:2
请教关于ToasterFilter的问题
我修改的ToasterFilter
DriverEntry中 DriverObject->MajorFunction[IRP_MJ_SCSI] = FilterScsi; NTSTATUS FilterScsi ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ) { NTSTATUS status; PDEVICE_EXTENSION deviceExtension; PIO_STACK_LOCATION irpStack; PSCSI_REQUEST_BLOCK CurSrb; PCDB pCdb; KEVENT event; deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension; irpStack = IoGetCurrentIrpStackLocation(Irp); status = IoAcquireRemoveLock (&deviceExtension->RemoveLock, Irp); if (!NT_SUCCESS (status)) { Irp->IoStatus.Status = status; IoCompleteRequest (Irp, IO_NO_INCREMENT); return status; } IoCopyCurrentIrpStackLocationToNext(Irp); KeInitializeEvent( &event, NotificationEvent, FALSE ); IoSetCompletionRoutine(Irp, (PIO_COMPLETION_ROUTINE) FilterScsiCompletionRoutine, &event, TRUE, TRUE, TRUE); status = IoCallDriver(deviceExtension->NextLowerDriver, Irp); return status; } NTSTATUS FilterScsiCompletionRoutine( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context ) { PIO_STACK_LOCATION IrpStack; PSCSI_REQUEST_BLOCK CurSrb; PDEVICE_EXTENSION deviceExtension; UCHAR opCode; deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension; IrpStack = IoGetCurrentIrpStackLocation(Irp); CurSrb = IrpStack->Parameters.Scsi.Srb; opCode = CurSrb->Cdb[0]; switch(opCode) { case SCSIOP_READ6: { dprintf("%s FilterScsiCompletionRoutine, SCSIOP_READ6, Type=%d.\n", DRIVERNAME, deviceExtension->Type); } break; case SCSIOP_READ: { dprintf("%s FilterScsiCompletionRoutine, SCSIOP_READ, Type=%d.\n", DRIVERNAME, deviceExtension->Type); } break; default: { dprintf("%s FilterScsiCompletionRoutine, UnKnow = 0x%02X, Type=%d.\n", DRIVERNAME, opCode, deviceExtension->Type); } break; } IoReleaseRemoveLock(&deviceExtension->RemoveLock, Irp); return STATUS_SUCCESS; } 为什么插入U盘的时候没有拦到SCSIOP_READ6和SCSIOP_READ呢,郁闷,也是挂在{36FC9E60-C465-11CF-8056-444553540000}的 请大牛指点下 |
|
|
沙发#
发布于:2008-11-03 16:48
引用第1楼KernelSword于2008-06-07 22:26发表的 : 大侠,后来你的问题解决了吗? |
|
板凳#
发布于:2008-06-07 22:26
立等中。。。。。。。
|
|
|