czcty
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2006-11-08
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:1434回复:0

u盘只读驱动,郁闷中...出了什么问题,请看下

楼主#
更多 发布于:2005-06-07 16:21
//u盘只读过滤驱动程序 qq:41701315 msn:cztianyu@hotmail.com
NTSTATUS
FilterSCSI( PDEVICE_OBJECT Device_Object, PIRP irp   )
{
ULONG ioControlCode;
int opCode;
PSCSI_REQUEST_BLOCK CurSrb;
PCDB cdb;
PMODE_PARAMETER_HEADER modeData;//mode sense
PIO_STACK_LOCATION  irpStack;
ULONG i;
PDEVICE_EXTENSION   deviceExtension;
KEVENT event;
ULONG length;
DbgPrint(\"IRP_MJ_SCSI\");
irpStack = IoGetCurrentIrpStackLocation(irp);
    //Handle opCode of SCSI
CurSrb=irpStack->Parameters.Scsi.Srb;//Get Current Scsi SRB, Analysis SCSI Command here!
cdb=(PCDB)CurSrb->Cdb;
opCode=cdb->CDB6GENERIC.OperationCode;
DbgPrint(\"opCode  (%d) 0x(%x) CtlFlag(%d)\",opCode,opCode=cdb->CDB6GENERIC.OperationCode,CtlFlag);
//按照道理,opCode的值应该是1a ,但是始终等于不了1a,郁闷中...
if(opCode==SCSIOP_MODE_SENSE)
{
DbgPrint(\"SCSIOP_MODE_SENSE\");
        IoCopyCurrentIrpStackLocationToNext(irp);
        IoSetCompletionRoutine(irp,
                               (PIO_COMPLETION_ROUTINE) FilterModeSenseCompletionRoutine,
                               &event,
                               TRUE,
                               TRUE,
                               TRUE);
deviceExtension = (PDEVICE_EXTENSION) Device_Object->DeviceExtension;
        return IoCallDriver (deviceExtension->topDevObj, irp);
}
if(opCode==SCSIOP_WRITE||opCode==SCSIOP_WRITE6)//这两个参数也始终等于不了
{
DbgPrint(\"SCSI_WRITE\");

DbgPrint(\"Write Device Here,BLOCK\");
irp->IoStatus.Status = STATUS_MEDIA_WRITE_PROTECTED;//STATUS_ACCESS_DENIED;
irp->IoStatus.Information = 0;
CurSrb->SrbStatus=SRB_STATUS_ERROR;
IoCompleteRequest(irp, IO_NO_INCREMENT);
return STATUS_MEDIA_WRITE_PROTECTED;//ACCESS_DENIED;
}
return FilterPass(Device_Object,irp);
}
游客

返回顶部