Операционная система MS DOS (том 2)



         

Защита дискет от копирования - часть 4


gets(buf); strcpy(diskbuf,buf);

di.drive = 0; di.head = 0; di.track = 20; di.sector = 1; di.nsectors = 1; di.buffer = diskbuf;

status = _bios_disk(_DISK_WRITE, &di) >> 8;

if(status) { printf("\nОшибка при записи в нестандартный сектор: %d", status); exit(-1); }

di.drive = 0; di.head = 0; di.track = 20; di.sector = 1; di.nsectors = 1; di.buffer = diskbuf1;

for(i = 0; i < 3; i++) { status = _bios_disk(_DISK_READ, &di) >> 8; if( !status ) break; }

printf("\nПрочитано из нестандартного сектора:\n%s\n", diskbuf1);

// Восстанавливаем старые значения в // таблице параметров дискеты

dpt_ptr->sec_size = old_sec_size; dpt_ptr->fill_char = old_fill_char; dpt_ptr->eot = old_eot;

exit(0); }

Какую информацию можно записать в нестандартный сектор?

Если вы делаете инсталляционную (установочную) дискету, которая рассчитана на ограниченное количество инсталляций, нестандартный сектор - самое подходящее место для хранения счетчика инсталляций. Даже такие программы, как Norton Utilities

или Norton Disk Editor, не помогут прочитать или изменить значение этого счетчика. В этот же сектор можно записать и другую информацию, необходимую для правильной инсталляции защищенного программного обеспечения.

Другой пример - использование нестандартного номера дорожки. Программа форматирует дорожку (стандартным образом) с номером 81. Обычно считается, что дискеты могут содержать 40 или 80 дорожек, соответственно, с номерами 0...39 или 0...79, однако возможно использование и дорожек с большими номерами. Обычные программы копирования будут копировать только 40 или 80 дорожек, "не заметив" нашей лишней дорожки.

Этим мы и воспользуемся, записав на 81-ю дорожку контрольную информацию. Для разнообразия в примере используем функции общего управления вводом/выводом GENERIC IOCTL.

Первая программа предназначена для форматирования 81-й дорожки:

#include <dos.h> #include <stdio.h> #include <malloc.h> #include <errno.h> #include "sysp.h"




Содержание  Назад  Вперед