Модуль используется для защиты программ от ¦ нелегального копирования. Мобильный вариант ¦ программы защищается с помощью ключевой ди- ¦ скеты, стационарный вариант - за счет кон- ) троля даты создания ПЗУ. I +—————————————————————————————+;
INTERFACE Procedure ProtCheck(var P1,P2; var Res: Integer);
{Проверяет легальность копии:
PI - адрес процедуры NORMA; P2 - адрес процедуры ALARM;
Res - результат работы:
0^: был вызов NORMA;
1: был вызов ALARM;
2: не вставлена дискета. Любое другое значение может быть только при трассировке программы}
Function SetOnHD: Integer;
(Устанавливает копию на жесткий диск. Возвращает:
-1 - не вставлена дискета;
-2 - не мастер-дискета;
-3 - защита от записи или ошибка записи;
-4 - программа не скопирована на ЖД;
-5 - ошибка доступа к ЖД;
-6 - исчерпан лимит установок;
-7 - программа уже установлена;
>—0 - количество оставшихся установок}
Function RemoveFromHD: Integer;
{Удаляет копию с жесткого диска. Возвращает:
-1 - не вставлена дискета;
-2 - не мастер-дискета;
-3 - защита от записи или ошибка записи ГД;
-4 - программа не скопирована на ЖД;
-5 - ошибка доступа к ЖД;
>=0 - количество оставшихся установок}
IMPLEMENTATION Uses DOS,F_Disk;
type
TDate = array [1..4] of Word;
TKey = record case Byte of
0: (
Hard: Word; (Ключ для шифровки данных} Dat : TDate); {Дата создания ПЗУ}
1:(KeyW: array [1..5] of Word);
end;
const
TRK = 40; (Номер дорожки}
HED =0; {Номер головки}
SEC =1; {Номер сектора}
SIZ = 1; {Код размера секторов}
ETracks - 40; /Эталонное количество дорожек на дискете!
ETrackSiz - 9; {Эталонное количество секторов на дорожке}
Кеу:ТКеу - (KeyW:(О,О,О,О,0)); {Ключ стационарной программы} ;•-——————————;
Procedure TrassBlockl;
{Макрос для борьбы с трассировкой с помощью модификации команды} inline ( {ВО:}
$ОЕ/ {push cs}