MS-DOS для программиста


Программа FMT256


Самое простое, что можно сделать для того чтобы защитить установочную дискету от копирования - изменить размер секторов на дорожке.

Приведем простую программу FMT256 (листинг 5.1), которая форматирует двадцатую дорожку диска емкостью 1,44 Мбайт в устройстве A:, создавая на ней секторы размером 256 байт.

После форматирования программа записывает в первый сектор нестандартной дорожки строку, введенную с клавиатуры. Затем для контроля содержимое этого сектора считывается и отображается на экране. Обратите внимание на изменения в таблице параметров дискеты - они необходимы для использования нестандартного размера сектора.

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

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

Листинг 5.1. Файл fmt256\fmt256.cpp

#include <stdio.h> #include <conio.h> #include <dos.h> #include <stdlib.h> #include <bios.h> #include <string.h>

typedef struct _DPT _ { unsigned char srt_hut; unsigned char dma_hlt; unsigned char motor_w; unsigned char sec_size; unsigned char eot; unsigned char gap_rw; unsigned char dtl; unsigned char gap_f; unsigned char fill_char; unsigned char hst; unsigned char mot_start; } DPT ;

DPT far *get_dpt(void);

// Номер форматируемой дорожки #define TRK 20

// Код размера сектора - 256 байт #define SEC_SIZE 1

union REGS inregs, outregs; char diskbuf[512]; char diskbuf1[512]; char buf[80];

int main(void) { struct diskinfo_t di; unsigned status; unsigned char old_sec_size, old_fill_char, old_eot; int i, j; DPT far *dpt_ptr;

printf("\nПрограмма уничтожит содержимое" "\n20-й дорожки диска А:." "\nЖелаете продолжить? (Y,N)\n"); i = getch(); if((i != 'y') && (i != 'Y')) return(-1);




Начало  Назад  Вперед



Книжный магазин