KernelSword
驱动牛犊
驱动牛犊
  • 注册日期2007-07-13
  • 最后登录2014-02-20
  • 粉丝5
  • 关注0
  • 积分322分
  • 威望161点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
阅读:1705回复:2

请教关于ToasterFilter的问题

楼主#
更多 发布于:2008-06-07 22:25
我修改的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}的

请大牛指点下
QQ:606140 www.kernelsword.com
KernelSword
驱动牛犊
驱动牛犊
  • 注册日期2007-07-13
  • 最后登录2014-02-20
  • 粉丝5
  • 关注0
  • 积分322分
  • 威望161点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-06-07 22:26
立等中。。。。。。。
QQ:606140 www.kernelsword.com
zhou_gz8888
驱动牛犊
驱动牛犊
  • 注册日期2003-01-22
  • 最后登录2014-08-05
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望247点
  • 贡献值1点
  • 好评度28点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-11-03 16:48
引用第1楼KernelSword于2008-06-07 22:26发表的  :
立等中。。。。。。。


大侠,后来你的问题解决了吗?
游客

返回顶部