SCSI комманды. Особенности завершения.

Тема в разделе "WASM.NT.KERNEL", создана пользователем ams007, 30 ноя 2008.

  1. ams007

    ams007 New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2007
    Сообщения:
    86
    Пишу драйвер дискового устройства. Хочу при наступлении определенных условий сделать диск защищенным от записи. Пытаюсь сделать это следующим образом(код переписываю по памяти, на синтаксические ошибки внимание не обращать, главное - смысл):
    Код (Text):
    1. PSCSI_REQUEST_BLOCK Srb;
    2. UCHAR           cCdbCommand;
    3.  
    4. ...
    5.  
    6. switch ( cCdbCommand )
    7. {
    8.     ...
    9.     case SCSIOP_WRITE:
    10.     {
    11.         if( TRUE == fNeedWriteProtected)
    12.         {
    13.             PSENSE_DATA SenseBuffer;
    14.             SenseBuffer = Srb->SenseInfoBuffer;
    15.  
    16.             Srb->SrbStatus  = SRB_STATUS_ERROR;// 0x4
    17.             Srb->ScsiStatus = SCSISTAT_CHECK_CONDITION;//0x2
    18.            
    19.             SenseBuffer->Valid = 1;
    20.             SenseBuffer->ErrorCode = 0x70;
    21.             SenseBuffer->SenseKey = SCSI_SENSE_DATA_PROTECT;
    22.             SenseBuffer->AdditionalSenseLength = 6;
    23.  
    24.             SenseBuffer->AdditionalSenseCode = SCSI_ADSENSE_WRITE_PROTECT;
    25.             SenseBuffer->AdditionalSenseCodeQualifier = SCSI_SENSEQ_CAUSE_NOT_REPORTABLE;
    26.            
    27.             Irp->IoStatus.Status = STATUS_WRITE_PROTECTED;
    28.             Irp->IoStatus.Information = 0;
    29.             break;         
    30.         }
    31.         ...
    32.     }
    33.     ...
    34. }
    Что я делаю неправильно?