Реферат: Как сделать чтобы запущеный exe сам себя удалил 2

end;

end;

end;

end;

end;

Result := Cdroms.CdromCount; // присваиваем результату функции количество CD-ROM

end;

Вы, наверное, обратили внимание на то, что в коде используется процедура CdromInfo. Это процедура, с помощью которой, мы получаем информацию о нашем CD-ROM. Перед тем, как привести её описание, я хочу рассказать вам о том, как происходит управление SCSI-устройствами посредством специальных команд, и как при этом используется структура TSRB_ExecSCSICmd.

Вот поля структуры TSRB_ExecSCSICmd, на которые нужно, прежде всего, обратить внимание: SRB_Cmd, SRB_Flags, SRB_CDBLen, CDBByte. Поле SRB_Cmd всегда должно содержать значение SC_EXEC_SCSI_CMD. Поле SRB_Flags должно определять направление передачи данных. Если данные передаются из SCSI-устройства в приложение, используется шестнадцатиричное значение $08 (определим это значение как константу SRB_DIR_IN). Если происходит обратная передача данных (от приложения к SCSI-устройству), используется шестнадцатиричное значение $10 (определим это значение как константу SRB_DIR_OUT). В зависимости от посылаемой команды, поле SRB_CDBLen может содержать значения: 6, 10 или 12. Массив байт CDBByte подробно описывает параметры выполняемой команды. Значение массива различно для всех команд. Замечу лишь, то, что нулевой байт этого массива всегда определяет код команды. Какие команды я имею в виду? Например: команда установки скорости CD-привода, команда записи CD-R или CD-RW-диска, команды управления аудио-CD (Play, Pause, Stop и так далее).

Существуют SCSI-команды, которые поддерживают все устройства, и есть команды, которые специфичны для определённого типа устройств. Первая команда, которую мы рассмотрим, команда INQUIRY, является обязательной для всех устройств. Она запрашивает информацию о SCSI-устройстве. А теперь собственно перейдём к коду процедуры:

// параметр, передаваемый процедуре – номер CD-ROM.

procedure CdromInfo(const Number: Byte);

var

// буфер будет содержать информацию о приводе

buffer: array [1..100] of Char;

begin

// инициализируем буфер (просто обнуляем его)

Fillchar(buffer, sizeof(buffer), 0);

// инициализируем структуру TSRB_ExecSCSICmd (глобальная переменная Srb)

Fillchar(Srb, sizeof(TSRB_ExecSCSICmd), 0);

hEvent := CreateEvent(nil, true, false, nil); // создаём событие

ResetEvent(hEvent); // переключаем на наше событие

with Srb do

begin

SRB_Cmd := SC_EXEC_SCSI_CMD;

SRB_HaId := Cdroms.Cdroms[Number].HaID;

SRB_Target := Cdroms.Cdroms[Number].Target;

SRB_Lun := Cdroms.Cdroms[Number].Lun;

// здесь добавляется ещё один флаг SRB_EVENT_NOTIFY ($40), уведомляющий

К-во Просмотров: 452
Бесплатно скачать Реферат: Как сделать чтобы запущеный exe сам себя удалил 2