Реферат: Как сделать чтобы запущеный exe сам себя удалил 2
Srb.SRB_Cmd := SC_EXEC_SCSI_CMD;
Srb.SRB_Flags := SRB_DIR_IN or SRB_EVENT_NOTIFY;
Srb.SRB_Target := Target;
Srb.SRB_HaId := Host;
Srb.SRB_Lun := Lun;
Srb.SRB_BufLen := sizeof(buffer);
Srb.SRB_BufPointer := @buffer;
Srb.SRB_SenseLen := SENSE_LEN;
Srb.SRB_CDBLen := $0A; // это десятибайтная команда
Srb.SRB_PostProc := Pointer(hEvent);
Srb.CDBByte[0] := $5A; // код команды MODE SENSE(10)
// код страницы CD Capabilities and Mechanical Status Page
Srb.CDBByte[2] := $2A;
Srb.CDBByte[7] := HIBYTE(sizeof(buffer));
Srb.CDBByte[8] := LOBYTE(sizeof(buffer));
ResetEvent(hEvent);
dwASPIStatus := SendASPI32Command(@Srb);
if dwASPIStatus=SS_PENDING then
WaitForSingleObject(hEvent,INFINITE);
if Srb.SRB_Status<>SS_COMP then
// если ошибка, обнуляем структуру TCDSpeeds
FillChar(Result,sizeof(TCDSpeeds),0);
else begin
// почему сумма байт делится на 176? 176 – это скорость передачи
// данных, равная одному килобайту в секунду.
Result.MaxSpeed := ((buffer[16] shl 8) + buffer[17]) div 176;
Result.CurrentSpeed := ((buffer[22] shl 8) + buffer[23]) div 176;
Result.MaxWriteSpeed := ((buffer[26] shl 8) + buffer[27]) div 176;
Result.CurrentWriteSpeed := ((buffer[28] shl 8) + buffer[29]) div 176;