Изменение скорости привода CD-ROM
Материал из DRKB
Изменение скорости привода CD-ROM[править | править код]
Находим в интернете файл ASPI.pas (еще есть wnaspi32.pas), подключаем его к проекту, пишем следующий код:
function SetCDSpeed(Host, Target: Byte; Speed: Integer): Boolean;
var
dwASPIStatus: DWORD;
hEvent: THandle;
srbExec: SRB_ExecSCSICmd;
begin
if Speed < 176 then
begin
Result := False;
Exit;
end;
hEvent := CreateEvent(nil, True, False, nil);
Fillchar(srbExec,sizeof(SRB_ExecSCSICmd), 0);
srbExec.SRB_Cmd := SC_EXEC_SCSI_CMD;
srbExec.SRB_Flags := SRB_DIR_OUT or SRB_EVENT_NOTIFY;
srbExec.SRB_Target := Target;
srbExec.SRB_HaId := Host;
srbExec.SRB_Lun := 0;
srbExec.SRB_SenseLen := SENSE_LEN;
srbExec.SRB_CDBLen := 12;
srbExec.SRB_PostProc := Pointer(hEvent);
srbExec.CDBByte[0] := $BB; // команда изменения скорости привода
srbExec.CDBByte[2] := Speed shr 8;
srbExec.CDBByte[3] := Speed;
srbExec.CDBByte[4] := $FF;
srbExec.CDBByte[5] := $FF;
ResetEvent(hEvent);
dwASPIStatus := SendASPI32Command(@srbExec);
if dwASPIStatus = SS_PENDING then
begin
WaitForSingleObject(hEvent, INFINITE);
end;
if srbExec.SRB_Status <> SS_COMP then
begin
MessageBox(0, 'Error processing the SRB.', 'Error', MB_OK);
Result := False;
end
else
Result := True;
end;
end;
Какие параметры передавать - написано в том же ASPI.pas
Author: Rouse_
Source: Взято из http://forum.sources.ru
ID: 01411