192 Глава 7

for i := 0 to 1 do {2 поверхности} for j := 1 to NS do begin

{Восстанавливаем содержимое сектора} ah : = 3; {Код операции записи} а1 := 1; {Записываем 1 сектор} ch := k; {Номер дорожки] • с1 := j; {Номер сектора} dh := i; {Номер головки} dl := DSK; {Номер диска} пп := i*NS+pred(j) ;

es := seg(PA[nn*512]) ;

bx := ofs(P"[nn*512]);

Intr($13,R) ;

{Читаем сектор)

ah := 2; /й'од операции чтения}

а1 := 1; {Читаем 1 сектор}

ch := k; {Номер дорожки}

с1 :== j; {Номер сектора}

dh :== i; {Номер головки}

dl := DSK; {Номер диска}

es := seg{P^[nr\*512] ) ;

bx := ofstP^nr^S:!^]) ;

Intr($13,R) ;

if (Flags and FCarry)<>0 then

WriteLn('Дефектный сектор ',(k*2+i)*NS+j) end end end;

SetIntVec($lE,01d) {Восстанавливаем прежнюю ТПД} end.

Недостатком описанного способа защиты являются относительно большие затраты времени на контроль всей дискеты и потеря работоспособности некоторой ее части. От этих недостатков можно избавиться, если на дискете создать программным способом нестандартные для ДОС особенности. Этими особенностями могут быть:

• нестандартная длина секторов на всей дискете или какой-либо одной ее дорожке;

• специальное расположение (фактор чередования) секторов на дорожке;

• нестандартное количество дорожек.

Разумеется, надежность защиты с помощью программно создаваемых особенностей структуры дискеты будет значительно меньше. Тем не менее следует помнить, что в большинстве случаев «взломщик» программы стремится изменить ее код, а не имитировать особый способ копирования дискет, так что несложная защита, связанная с использованием допол—