Реферат: Как сделать чтобы запущеный exe сам себя удалил 2
SRB_Flags := SRB_DIR_IN or SRB_EVENT_NOTIFY;
SRB_BufLen := sizeof(buffer); // указываем размер буфера
SRB_BufPointer := @buffer; // определяем указатель на наш буфер
SRB_SenseLen := SENSE_LEN; // определяем длину буфера значения
SRB_CDBLen := 6; // эта команда – шестибайтная
SRB_PostProc := Pointer(hEvent); // процедура постинга – созданное событие
CDBByte[0] := $12; // код команды INQUIRY
// сюда помещаем старший байт длины буфера
CDBByte[3] := HIBYTE(sizeof(buffer));
// а сюда помещаем младший байт длины буфера
CDBByte[4] := LOBYTE(sizeof(buffer));
end;
// после того как заполнили структуру TSRB_ExecSCSICmd, посылаем
// ASPI-команду
dwASPIStatus := SendASPI32Command(@Srb);
if dwASPIStatus=SS_PENDING then
WaitForSingleObject(hEvent, INFINITE); // ждём окончания обработки команды
CloseHandle(hEvent); // закрываем хэндл события
// если команда выполнена без ошибок, заполняем данные об устройстве:
if Srb.SRB_Status=SS_COMP then
begin
with Cdroms.Cdroms[Number] do
begin
// восемь байт буфера, начиная с девятого, содержат
// идентификатор производителя
VendorID := PChar(Copy(buffer, 9, 8));
// шестнадцать байт, начиная с семнадцатого, содержат
// идентификатор продукта
ProductID := PChar(Copy(buffer, 17, 16));