Сейчас на форуме: (+5 невидимых)

 eXeL@B —› Программирование —› help with this function please
Посл.ответ Сообщение

Ранг: 55.1 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 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;



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 23 октября 2007 21:26
· Личное сообщение · #2

hCD - handle from CreateFile

-----
продавец резиновых утёнков



 eXeL@B —› Программирование —› help with this function please
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати