Самое простое, что можно сделать для того чтобы защитить установочную дискету от копирования - изменить размер секторов на дорожке.
Приведем простую программу FMT256 (листинг 5.1), которая форматирует двадцатую дорожку диска емкостью 1,44 Мбайт в устройстве A:, создавая на ней секторы размером 256 байт.
После форматирования программа записывает в первый сектор нестандартной дорожки строку, введенную с клавиатуры. Затем для контроля содержимое этого сектора считывается и отображается на экране. Обратите внимание на изменения в таблице параметров дискеты - они необходимы для использования нестандартного размера сектора.
Какую информацию можно записать в нестандартный сектор?
Если вы делаете установочную (инсталляционную) дискету, которая рассчитана на ограниченное количество установок, нестандартный сектор - самое подходящее место для хранения счетчика установок. Даже такие программы, как Norton Disk Editor не помогут прочитать или изменить значение этого счетчика. В этот же сектор можно записать и другую информацию, необходимую для правильной установки защищенного программного обеспечения.
// Получаем адрес таблицы параметров дискеты dpt_ptr = get_dpt();
// Сохраняем старые значения из таблицы параметров old_sec_size = dpt_ptr->sec_size; old_fill_char = dpt_ptr->fill_char; old_eot = dpt_ptr->eot;
// Устанавливаем в таблице параметров дискеты // код размера сектора, символ заполнения при // форматировании, количество секторов на дорожке dpt_ptr->sec_size = SEC_SIZE; dpt_ptr->fill_char = 0x77; dpt_ptr->eot = 18;
// Подготавливаем буфер формата для 18 секторов for(i=0, j=1; j<19; i += 4, j++) { diskbuf[i] = TRK; diskbuf[i+1] = 0; diskbuf[i+2] = j; diskbuf[i+3] = SEC_SIZE; }
// Вызываем функцию форматирования дорожки status = _bios_disk (_DISK_FORMAT , &di) >> 8; printf("\nФорматирование завершилось с кодом: %d", status);
// Записываем информацию в нестандартный сектор printf("\nВведите строку для записи " "в нестандартный сектор," "\nдлина строки не должна превышать 80 байтов" "\n->");