Реферат: Как сделать чтобы запущеный exe сам себя удалил 2
// изменения продукта
Revision := PChar(Copy(buffer, 33, 4));
// двадцать байт, начиная с тридцать седьмого, содержат
// спецификацию производителя
VendorSpec := PChar(Copy(buffer, 37, 20));
end;
end;
end;
Я понимаю, что многим эта процедура покажется неинтересной – я её привёл лишь для того, чтобы показать основы работы со SCSI-устройствами.
Следующие две процедуры, на мой взгляд, заинтересуют большее число пользователей. Уверен, многие из вас постоянно пользуются, или пользовались ранее, программами, управляющими скоростью привода CD-ROM (например, программой CDSlow). Хотите написать подобную программу сами? Позвольте помочь вам кодом, состоящим из двух процедур, одна из которых определяет текущую и максимально поддерживаемую скорость привода, а другая устанавливает необходимую пользователю скорость.
Для этого я воспользовался SCSI-командой MODE SENSE(10). Цифра десять означает, что команда десятибайтная. Это важно, потому что существует такая же шестибайтная команда. В принципе, можно было бы воспользоваться и шестибайтной командой, но поскольку команда MODE SENSE(10) более совершенна, я остановил свой выбор на ней. Итак, для чего же нужна данная команда? Всё просто, она читает значения режимов (Mode Sense), установленных для SCSI-устройства. Существуют так называемые страницы режима (Mode Page), в которых хранится некоторая информация (например, параметры скорости привода, параметры для записи CD-R/RW-дисков и многое другое). Доступ к этим страницам осуществляется по их коду с использованием команды MODE SENSE.
Опишем вспомогательный тип TCDSpeeds.
type TCDSpeeds=record MaxSpeed, // максимальная скорость чтения CurrentSpeed, // текущая скорость чтения MaxWriteSpeed, // максимальная скорость записи CurrentWriteSpeed:integer; // текущая скорость записи end; |
Теперь, я думаю, понятно для чего эта структура нужна.
// какие параметры передавать функции, объяснять, по моему, не надо function GetCDSpeeds(Host,Target,Lun:Byte):TCDSpeeds; var buffer: array [0..29] of Byte; // буфер для принимаемых данных |
Здесь я сделаю небольшое пояснение относительно размера буфера. Данные, возвращаемые при использовании страницы режима CD Capabilities and Mechanical Status Page, имеют размер 20 байт. Но, как вы заметили, я использовал буфер размером 30 байт, и вот почему. Перед самой страницей режима, идут заголовок режима параметров, код страницы и её размер. Размер заголовка при использовании шестибайтной команды MODE SENSE составляет 4 байта, а при использовании команды MODE SENSE(10) – 8 байт.
Продолжим. Код, который уже встречался ранее, приведен без комментариев:
begin hEvent := CreateEvent(nil, true, false, nil); FillChar(buffer,sizeof(buffer),0); К-во Просмотров: 449
Бесплатно скачать Реферат: Как сделать чтобы запущеный exe сам себя удалил 2
|