Сейчас на форуме: (+5 невидимых) |
![]() |
eXeL@B —› Программирование —› help with this function please |
Посл.ответ | Сообщение |
|
Создано: 23 октября 2007 21:12 · Личное сообщение · #1 type PSCSI_PASS_THROUGH_DIRECT = ^SCSI_PASS_THROUGH_DIRECT; SCSI_PASS_THROUGH_DIRECT = record Length : Word; ScsiStatus : Byte; PathId : Byte; TargetId : Byte; Lun : Byte; CdbLength : Byte; SenseInfoLength : Byte; DataIn : Byte; DataTransferLength : ULONG; TimeOutValue : ULONG; DataBuffer : Pointer; SenseInfoOffset : ULONG; Cdb : Array[0..15] of Byte; end; type PSCSI_PASS_THROUGH_DIRECT_WITH_BUFFER = ^SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER; SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER = record Spt : SCSI_PASS_THROUGH_DIRECT; Filler : ULONG; SenseBuf : Array[0..31] of Byte; end; function READ_RAW_SECTOR_FROM_CD( hCD : THandle; HTL : String; var Data : Array of Byte; StartSector : DWord; AnzahlSector : DWord; flags : Byte) : Boolean; const RAW_READ_CMD = $BE; // ATAPI RAW READ PACKET_LEN = 2352; // Sektorlange SCSI_IOCTL_DATA_IN = 1; IOCTL_SCSI_PASS_THROUGH = $04D004; var srb : SCSI_PASS_THROUGH_DIRECT; nb : Cardinal; Begin Result := False; ZeroMemory(@srb, SizeOf(srb)); ZeroMemory(@Data, SizeOf(Data)); if hCD <> INVALID_HANDLE_VALUE then begin srb.Length := sizeof(SCSI_PASS_THROUGH); srb.PathId := StrToInt(HTL[1]); // SCSI controller ID srb.TargetId := StrToInt(HTL[3]); // target device ID srb.Lun := StrToInt(HTL[5]); // logical unit device ID srb.CdbLength := 12; srb.SenseInfoLength := 0; // SenseInfo srb.DataIn := SCSI_IOCTL_DATA_IN; srb.DataTransferLength := PACKET_LEN * AnzahlSector; srb.TimeOutValue := 200; // TimeOut srb.DataBuffer := @Data; srb.SenseInfoOffset := 0; // SenseInfo // CDB srb.Cdb[0] := RAW_READ_CMD; srb.Cdb[1] := $0; // Format Disk srb.Cdb[2] := HIBYTE(HIWORD(StartSector)); srb.Cdb[3] := LOBYTE(HIWORD(StartSector)); srb.Cdb[4] := HIBYTE(LOWORD(StartSector)); srb.Cdb[5] := LOBYTE(LOWORD(StartSector)); srb.Cdb[6] := LOBYTE(HIWORD(AnzahlSector)); srb.Cdb[7] := LOBYTE(LOWORD(AnzahlSector)); srb.Cdb[8] := HIBYTE(LOWORD(AnzahlSector)); srb.Cdb[9] := flags; srb.Cdb[10] := 0; // Sub-Channel Data Bits srb.Cdb[11] := 0; // reserved Result := DeviceIoControl(hCD, IOCTL_SCSI_PASS_THROUGH, @srb, sizeof(srb), @srb, 0, nb, Nil); end; end; procedure TForm1.Button1Click(Sender: TObject); begin READ_RAW_SECTOR_FROM_CD(.........how to use it???? ![]() ![]() ![]() end; ![]() |
|
Создано: 23 октября 2007 21:26 · Личное сообщение · #2 |
![]() |
eXeL@B —› Программирование —› help with this function please |