Заключение.
Защита информации от несанкционированного доступа
Password, Password1: string; {переменные для работы с паролями}. Русифицированная функция формирования сообщения. St + '" Неверный код системного обработчика файла" ',. WriteLn ('Система защиты данных от НСД. Версия 1.0 beta.'+. Validate, Views, Memory, StdDlg, Editors, {Модули Turbo Vision, далее — TV}. Procedure FileOpen (WildCard: PathStr); {окно для работы с файлами}. Процедура инициализации… Читать ещё >
Заключение. Защита информации от несанкционированного доступа (реферат, курсовая, диплом, контрольная)
В заключении проведем анализ некоторых систем защиты от копирования. Следует отметить, что этот анализ не является исчерпывающим, так как эти системы постоянно развиваются, а также не всегда можно получить исчерпывающее описание алгоритмов — разработчики не стремятся раскрывать принципы их построения.
RANK — пакет защиты от НСД. Этот пакет реализует функцию контроля доступа к EXEи COM-файлам. Следует отметить, что анализ разграничения доступа к программам ставит под серьезное сомнение возможность реализации такой функции без дополнительных мероприятий.
LATCH — комплекс программ защиты ПЭВМ от НСД. Этот комплекс обеспечивает безопасность данных, хранящихся на винчестере. При несанкционированном доступе происходит «зависание» ПЭВМ или не обнаруживается НЖМД.
Тезис о невозможности обнаружения НЖМД вызывает серьезные сомнения: например, для контроллеров SCSI не требуется определение типа НЖМД в памяти CMOS, так как параметры винчестера могут быть считаны с помощью команды контроллера.
Приложение 1
Листинг программы.
Program Sub_Rosa;
Uses.
App, Dialogs, Drivers, Menus, MsgBox, Objects,.
Validate, Views, Memory, StdDlg, Editors, {Модули Turbo Vision, далее — TV}.
CRT, DOS, {Стандартные модули}.
SetConf; {Модуль функции привязки к BIOS}.
Var.
MyRes: TResourceFile; {Переменная файла ресурсов, TV}.
FName, MainDir, DName: string; {Переменные работы с файлами и каталогами}.
MainPass, Pass: string; {Переменные паролей}.
Pos: string[3];
FilePass: file of char; {Переменная файла паролей}.
OptFile, OptInd: word; {Переменные опций}.
Int09_Save: pointer; {Переменная адреса 09h прерывания}.
Const {Константы кодов команд, TV}.
cmAboutBox = 700; {Окно «О Программе» }.
cmCode = 1001; {Кодировать файл}.
cmDeCode = 1002; {Декодировать файл}.
cmSetPass = 1005; {Установить пароль на вход в систему}.
cmLockDisk = 1006; {Запретить доступ к винчестеру}.
cmOptions = 1007; {Опции криптографии}.
cmKeyDisk = 1008; {Ключевая дискета}.
cmPasswords = 1009; {Пароль на исполняемый файл}.
cmChangePass= 1010; {Сменить пароль на вход в систему}.
SetPass = 'passw.com';
KeyDisk = 'keydisk.com';
RMenuBar: TStreamRec = ({Запись для работы с потоком, TV}.
ObjType: 2000;
VmtLink: Ofs (TypeOf (TMenuBar)^);
Load: @TMenuBar.Load;
Store: @TMenuBar.Store);
Type.
{Установка опций криптографии}.
POptions = ^TOptions;
TOptions = object (TDialog).
constructor Init;
end;
{Объект для работы с текстом}.
PMyStaticText = ^TMyStaticText;
TMyStaticText = object (TStaticText).
function GetPalette: PPalette; virtual; {Переопределение палитры}.
end;
{Объекты для работы с файлами и каталогами}.
PMyFDialog = ^TMyFDialog;
TMyFDialog = object (TFileDialog).
function GetPalette: PPalette; virtual;
end;
PMyFileDialog = ^TMyFileDialog;
TMyFileDialog = object (TMyFDialog).
constructor Init (AWildCard: tWildStr; const ATitle,.
InputName: string; AOptions: Word; HistoryId: Byte);
end;
PDirDialog = ^TDirDialog;
TDirDialog = object (TChDirDialog).
function GetPalette: PPalette; virtual;
end;
PMyChDirDialog = ^TMyChDirDialog;
TMyChDirDialog = object (TDirDialog).
constructor Init (AOptions: Word; HistoryId: Word);
procedure SetUpDialog;
function Valid (Command: Word): Boolean; virtual;
end;
{Установка основного фона программы}.
PMyBackground = ^TMyBackground;
TMyBackground = object (TBackground).
Text: TTitleStr;
constructor Init (var Bounds: TRect; AText: TTitleStr);
procedure Draw; virtual;
end;
PMyDesktop = ^TMyDesktop;
TMyDesktop = object (TDesktop).
procedure InitBackground; virtual;
end;
{Объект «О Программе» }.
PAboutBox = ^TAboutBox;
TAboutBox = object (TDialog).
constructor Init;
end;
{Основной объект}.
PMyApp = ^TMyApp;
TMyApp = object (TApplication).
constructor Init; {инициализация}.
destructor Done; virtual; {завершение работы}.
procedure HandleEvent (var Event: TEvent); virtual; {обработка событий}.
procedure InitMenuBar; virtual; {инициализация меню}.
procedure InitDeskTop; virtual; {инициализация рабочего поля}.
procedure InitStatusLine; virtual; {инициализация строки состояния}.
procedure FileOpen (WildCard: PathStr); {окно для работы с файлами}.
function GetPalette: PPalette; virtual; {изменение стандартной палитры}.
end;
{ Русифицированная функция формирования сообщения }.
function MyMessageBoxRect (var R: TRect;
const Msg: string; Params: pointer;
AOptions: word): word;
const.
ButtonName: array[0.3] of string[6] = ('Ага', 'Нека', 'Ага', 'Нека');
Commands: array[0.3] of Word = (cmYes, cmNo, cmOK, cmCancel);
Titles: array[0.3] of string[11] =.
('Предупреждение', 'Ошибка', 'Информация', 'Подтверждение');
var.
I, X: integer;
Dialog: PDialog;
Control: PView;
S: string;
begin.
Dialog:= New (PDialog, Init (R, Titles[AOptions and $ 3]));
with Dialog^ do.
begin.
Options:= Options or ofCentered;
R.Assign (3, 2, Size. X — 2, Size. Y — 3);
FormatStr (S, Msg, Params^);
Insert (New (PStaticText, Init (R, S)));
X:= -2;
R.Assign (0, 0, 10, 2);
for I:= 0 to 3 do.
if AOptions and ($ 0100 shl I) 0 then.
Inc (X, R.B.X — R.A.X + 2);
X:= (Size.X — X) shr 1;
for I:= 0 to 3 do.
if AOptions and ($ 0100 shl I) 0 then.
begin.
Control:= New (PButton, Init (.
R, ButtonName[I], Commands[i], bfNormal));
Insert (Control);
Control^.MoveTo (X, Size. Y — 3);
Inc (X, Control^.Size.X + 2);
end;
SelectNext (False);
end;
if AOptions and mfInsertInApp = 0 then.
MyMessageBoxRect:= DeskTop^.ExecView (Dialog).
else.
MyMessageBoxRect:= Application^.ExecView (Dialog);
Dispose (Dialog, Done);
end;
{ Русифицированная функция формирования сообщения.
стандартного размера }.
function MyMessageBox (const Msg: String;
Params: Pointer; AOptions: Word): Word;
var.
R: TRect;
begin.
R.Assign (0, 0, 40, 9);
MyMessageBox:= MyMessageBoxRect (R, Msg, Params, AOptions);
end;
function GetCurDir: DirStr;
var.
CurDir: DirStr;
begin.
GetDir (0, CurDir);
if Length (CurDir) > 3 then.
begin.
Inc (CurDir[0]);
CurDir[Length (CurDir)]: = ';
end;
GetCurDir:= CurDir;
end;
{Процедура инициализации окна работы с файлами}.
procedure TMyApp. FileOpen (WildCard: PathStr);
var.
FileName: FNameStr;
begin.
FileName:= '*.*';
if ExecuteDialog (New (PMyFileDialog, Init (.
WildCard, 'Открыть файл', 'Имя', fdOpenButton,.
100)), @FileName) cmCancel then FName:=FileName;
{открыть файл, потом…}.
end;
{****************************************************************************}.
{*—————============= К Р И П Т О Г Р, А Ф И Я ================—————*}.
{****************************************************************************}.
{Шифрование файлов}.
procedure Shifr (InputFileName: string);
const.
A = 5; {Константы для}.
C = 27; {генератора}.
M = 65 536; {псевдослучайных чисел, далее — ПСЧ}.
var.
TempFile: file of byte;
InpF, OutF: file of word; {файлы на входе и выходе}.
Password, Password1: string; {переменные для работы с паролями}.
OutputFileName, Exten: string; {переменные имен файлов}.
I, J, K, tmp: byte; {переменные кодирования}.
Temp, SCode, TByte, Code: word;
Position: LongInt; {переменные данных о процессе}.
NowPos: real;
TPassword: array [1.255] of word;
MasByte, Mas, MasEnd, PS: array [1.64] of word; {массивы перестановок}.
T: array [0.64] of word;
DirInfo, DirInfo1: SearchRec; {данные о файле}.
begin.
if length (FName) > 3 then {Файл выбран?}.
begin.
{Получить пароль}.
Password := '';
Password1 := '';
InputBox ('П, А Р О Л Ь', ' Введите пароль:', Password, 255);
InputBox ('П, А Р О Л Ь', 'Введите пароль еще раз:', Password1, 255);
if (Password = Password1) and (length (Password)0) then.
begin.
{Преобразовать файл}.
FindFirst (InputFileName, AnyFile, DirInfo);
if DOSError = 0 then.
begin.
if DirInfo. Size mod 2 = 1 then.
begin.
assign (TempFile, InputFileName);
reset (TempFile);
while not EOF (TempFile) do read (TempFile, tmp);
tmp := 255;
write (TempFile, tmp);
close (TempFile);
end;
{Преобразовать имя файла}.
Position := 0;
assign (InpF, InputFileName);
reset (InpF);
for i := length (InputFileName) downto 1 do.
if InputFileName[i] = '.' then.
begin.
OutputFileName := copy (InputFileName, 1, i) + 'M&A';
break;
end;
assign (OutF, OutputFileName);
rewrite (OutF);
for i:= 0 to length (InputFileName) do.
if InputFileName[length (InputFileName) — i] = '.' then.
case i of.
0: Exten := chr (0) + chr (0) + chr (0);
1: Exten := copy (FName, length (FName)-2, i) + chr (0) + chr (0);
2: Exten := copy (FName, length (FName)-2, i) + chr (0).
else Exten := copy (FName, length (FName)-2, 3).
end;
for i := 1 to 3 do.
begin.
Temp := ord (Exten[i]);
Write (OutF, Temp);
end;
{Начать шифрование}.
k := 1;
repeat.
begin.
{Считать из исходного файла блок размером 64*word}.
for i:=1 to 64 do.
If EOF (InpF) then MasByte[i] := 0 else Read (InpF, MasByte[i]);
Mas := MasByte;
T[0] := ord (Password[k]);
if k < length (Password) then inc (k) else k := 1;
for i:= 1 to 64 do.
begin.
{Получить текущую позицию процесса}.
NowPos := 100*Position/DirInfo.Size;
inc (Position, 2);
if NowPos > 100 then NowPos := 100;
Str (Round (NowPos):3, Pos);
if OptInd = 0 then.
begin.
GoToXY (77, 1);
Write (Pos + '%');
end;
{Шифровать с помощью ПСЧ}.
Code:=Mas[i];
T[i] := (A * T[i-1] + C) mod M;
Code:=T[i] xor Code;
Mas[i] := Code;
end;
for i:=1 to 8 do { Конечная перестановка }.
for j:=1 to 8 do.
case i of.
1: MasEnd[8*(j-1)+i] := Mas[41-j];
2: MasEnd[8*(j-1)+i] := Mas[09-j];
3: MasEnd[8*(j-1)+i] := Mas[49-j];
4: MasEnd[8*(j-1)+i] := Mas[17-j];
5: MasEnd[8*(j-1)+i] := Mas[57-j];
6: MasEnd[8*(j-1)+i] := Mas[25-j];
7: MasEnd[8*(j-1)+i] := Mas[65-j];
8: MasEnd[8*(j-1)+i] := Mas[33-j].
end;
for i:= 1 to 64 do Write (OutF, MasEnd[i]);
end;
until eof (InpF);
MyMessageBox ('Файл '+ InputFileName + ' зашифрован с именем ' +.
OutputFileName, nil, mfInformation+mfOkButton);
Close (InpF);
if OptFile = 1 then Erase (InpF);
Close (OutF);
end.
else MyMessageBox ('Файл '+ InputFileName + ' не существует!',.
nil, mfInformation+mfOkButton);
end.
else MyMessageBox (' Ошибка ввода пароля!!!', nil,.
mfError+mfOkButton);
end.
else MyMessageBox (' Файл не выбран!!!', nil, mfError+mfOkButton);
end;
procedure DeShifr (InputFileName: String);
const.
A = 5;
C = 27;
M = 65 536;
var.
InpF, OutF: file of word;
Password, OutputFileName: string;
Password1: string;
Exten: string[3];
SCode, Temp, Ext, TByte, Code: word;
I, J, K: byte;
Position: LongInt;
NowPos: real;
TPassword: array [1.255] of word;
MasByte, Mas, MasEnd, PS: array [1.64] of word;
T: array [0.64] of word;
DirInfo: SearchRec;
begin.
if (length (InputFileName) > 3) and.
(copy (InputFileName, length (InputFileName)-2, 3) = 'M&A') then.
begin.
Password := '';
Password1 := '';
InputBox ('П, А Р О Л Ь', ' Введите пароль:', Password, 255);
InputBox ('П, А Р О Л Ь', 'Введите пароль еще раз:', Password1, 255);
if (Password = Password1) and (length (Password)0) then.
begin.
FindFirst (InputFileName, AnyFile, DirInfo);
if DOSError = 0 then.
begin.
Assign (InpF, InputFileName);
Reset (InpF);
Position := 0;
Exten := '';
for i:= 1 to 3 do.
begin.
Read (InpF, Temp);
Exten := Exten + chr (Temp);
end;
for i := length (InputFileName) downto 1 do.
if InputFileName[i] = '.' then.
begin.
OutputFileName := copy (InputFileName, 1, i) + Exten;
break;
end;
Assign (OutF, OutputFileName);
Rewrite (OutF);
for i := 1 to length (Password) do TPassword[i]: =ord (Password[i]);
k := 1;
repeat.
begin.
for i:=1 to 64 do Read (InpF, MasByte[i]);
for i:=1 to 8 do { начальная перестановка }.
for j:=1 to 8 do.
case i of.
1: Mas[8*(i-1)+j]: =MasByte[66−8*j];
2: Mas[8*(i-1)+j]: =MasByte[68−8*j];
3: Mas[8*(i-1)+j]: =MasByte[70−8*j];
4: Mas[8*(i-1)+j]: =MasByte[72−8*j];
5: Mas[8*(i-1)+j]: =MasByte[65−8*j];
6: Mas[8*(i-1)+j]: =MasByte[67−8*j];
7: Mas[8*(i-1)+j]: =MasByte[69−8*j];
8: Mas[8*(i-1)+j]: =MasByte[71−8*j].
end;
T[0] := ord (Password[k]);
if k < length (Password) then inc (k) else k := 1;
for i:= 1 to 64 do.
begin.
NowPos := 100*Position/DirInfo.Size;
inc (Position, 2);
If NowPos > 100 then NowPos := 100;
Str (Round (NowPos):3, Pos);
if OptInd = 0 then.
begin.
GoToXY (77, 1);
Write (Pos + '%');
end;
T[i] := (A * T[i-1] + C) mod M;
Code:=Mas[i];
Code:=T[i] xor Code;
Mas[i] := Code;
end;
MasEnd := Mas;
for i := 1 to 64 do Write (OutF, MasEnd[i]);
end;
until eof (InpF);
GotoXY (77, 1);
write ('100%');
MyMessageBox ('Файл '+ InputFileName + ' расшифрован в ' +.
OutputFileName, nil, mfInformation+mfOkButton);
Close (InpF);
if OptFile = 1 then Erase (InpF);
Close (OutF);
end.
else MyMessageBox ('Файл '+ InputFileName + ' не существует!',.
nil, mfInformation+mfOkButton);
end.
else MyMessageBox (' Ошибка ввода пароля!!!', nil,.
mfError+mfOkButton);
end.
else MyMessageBox (' Файл не выбран!!!', nil,.
mfError+mfOkButton);
end;
{Опции криптографии}.
constructor TOptions. Init;
var.
R: TRect;
Q, Q1: PView;
Butt: TRadioButtons;
begin.
R.Assign (0, 0, 60, 11);
inherited Init (R, 'Криптография');
Options := Options or ofCentered;
R.Assign (10, 8, 20, 10);
Insert (New (PButton, Init (R, '~А~га', cmOK, bfDefault)));
R.Assign (40, 8, 50, 10);
Insert (New (PButton, Init (R, '~Н~ека', cmCancel, bfNormal)));
R.Assign (2, 2, 25, 3);
Insert (New (PLabel, Init (R, 'Исходный файл:', Q)));
R.Assign (5, 4, 21, 6);
Q:=New (PRadioButtons, Init (R,.
NewSItem ('~Н~е удалять',.
NewSItem ('~У~далять', nil))));
Insert (Q);
R.Assign (27, 2, 45, 3);
Insert (New (PLabel, Init (R, 'Индикатор:', Q1)));
R.Assign (30, 4, 50, 6);
Q1:=New (PRadioButtons, Init (R,.
NewSItem ('~В~ысвечивать',.
NewSItem ('~Н~е высвечивать', nil))));
Insert (Q1);
end;
{Изменение пароля на вход в систему}.
procedure Passwords;
var.
Ps, Ps1: string;
I: byte;
tmp: char;
begin.
Ps := '';
Ps1 := '';
InputBox ('П, А Р О Л Ь', 'Введите пароль:', Ps, 255);
for i:= 1 to length (Ps) do Ps[i] :=chr (ord (Ps[i]) xor 27);
if Ps Pass then.
begin.
MyMessageBox (' Неверный пароль!!!', nil, mfError+mfOkButton);
ClrScr;
writeln ('Несанкционированный доступ!');
Halt;
end;
InputBox ('И З М Е Н Е Н И Е П, А Р О Л Я',.
'Введите новый пароль:', Ps, 255);
InputBox ('И З М Е Н Е Н И Е П, А Р О Л Я',.
' Повторите ввод:', Ps1, 255);
if (Ps = Ps1) and (Ps '') then.
begin.
Assign (FilePass, 'system.res');
Rewrite (FilePass);
for i := 1 to length (PS) do.
begin.
tmp := chr (ord (Ps[i]) xor 27);
Write (FilePass, tmp);
end;
Close (FilePass);
end.
else MyMessageBox (' Ошибка ввода пароля!!!', nil, mfError+mfOkButton);
end;
{Обработка ошибок}.
procedure CheckExec;
var.
St: string;
begin.
Str (DOSError, St);
case DOSError of.
2: MyMessageBox (' Ошибка DOS № ' +.
St + ' «Файл не найден» ',.
nil, mfError + mfOkButton);
3: MyMessageBox (' Ошибка DOS № ' +.
St + ' «Путь не найден» ',.
nil, mfError + mfOkButton);
5: MyMessageBox (' Ошибка DOS № ' +.
St + '" Неверный код доступа к файлу" ',.
nil, mfError + mfOkButton);
6: MyMessageBox (' Ошибка DOS № ' +.
St + '" Неверный код системного обработчика файла" ',.
nil, mfError + mfOkButton);
8: MyMessageBox (' Ошибка DOS № ' +.
St + ' «Недостаточно памяти» ',.
nil, mfError + mfOkButton);
10: MyMessageBox (' Ошибка DOS № ' +.
St + ' «Неверная среда» ',.
nil, mfError + mfOkButton);
11: MyMessageBox (' Ошибка DOS № ' +.
St + ' «Неправильный формат» ',.
nil, mfError + mfOkButton);
18: MyMessageBox (' Ошибка DOS № ' +.
St + '" Нет свободных обработчиков для файлов" ',.
nil, mfError + mfOkButton);
end;
end;
procedure MakeComFile (k: byte);
const.
S: array [1.4] of string = ('c:sub_rosaplus.', 'c:sub_rosapassw.',.
'c:sub_rosalock.', 'c:sub_rosakeydisk.');
Size: array [1.4] of word = (1068, 204, 617, 2118);
Inden: array [1.4, 1.3] of byte = ((ord ('ы'), 26, ord ('Р')),.
(ord ('ы'), 39, ord ('Р')),.
(ord ('щ'), ord ('Й'), ord ('_')),.
(ord ('щ'), ord ('А'), ord ('_')));
var.
I, Tmp: byte;
F: array [1.4, 1.2] of file ;
M: array [1.2200] of byte ;
NumRead, NumWritten: Word;
begin.
assign (F[k, 1], S[k]); reset (F[k, 1], 1);
assign (F[k, 2], S[k]+'com'); rewrite (F[k, 2], 1);
for i := 1 to 3 do.
begin.
BlockRead (F[k, 1], tmp, 1, NumRead);
BlockWrite (F[k, 2], Inden[k, i], 1, NumWritten);
end;
BlockRead (F[k, 1], M, Size[k]-3, NumRead);
BlockWrite (F[k, 2], M, Size[k]-3, NumWritten);
close (F[k, 1]); close (F[k, 2]);
end;
procedure DelComFile (k: byte);
const.
{ S: array [1.4] of string =.
('plus.com', 'passw.com', 'block.com', 'keydisk.com');}.
S: array [1.4] of string = ('c:sub_rosaplus.com',.
'c:sub_rosapassw.com',.
NewStatusDef (0, $FFFF,.
NewStatusKey ('~F1~ О программе', kbF1, cmAboutBox,.
NewStatusKey ('~F3~ Файл', kbF3, cmOpen,.
NewStatusKey ('~F5~ Пароль', kbF10, cmMenu,.
NewStatusKey ('~F9~ Настройки', kbF9, cmOptions,.
NewStatusKey ('~F10~ Меню', kbF10, cmMenu,.
NewStatusKey ('~Alt-X~ Выход', kbAltX, cmQuit,.
nil)))))),.
nil)));
end;
{Изменить основную палитру}.
function TMyApp. GetPalette: PPalette;
const.
P: Array [apColor.apMonochrome] of string[Length (CAppColor)] =.
(CAppColor, CAppBlackWhite, CAppMonochrome);
begin.
P[apColor, 50] := #$ 11; {1F}.
P[apColor, 51] := #$ 11; {2F}.
P[apColor, 1] := #$ 21; {71}.
GetPalette := @P[AppPalette];
end;
{Изменить палитру окна выбора файлов}.
function TMyFDialog. GetPalette: PPalette;
const.
{Синяя палитра}.
CMyCluster = #64#65#66#67#68#69#70#71#72#73#74#75#76#77#78#79#80#81#82+.
#83#84#85#86#87#88#89#90#91#92#93#94#95;
P: string [32] = CMyCluster;
begin.
GetPalette := @P;
end;
{Инициализировать окно выбора файлов}.
constructor TMyFileDialog. Init (AWildCard: tWildStr;
const ATitle, InputName: string;
AOptions: Word; HistoryId: Byte);
var.
ScrollBar: PScrollBar;
R: TRect;
begin.
{ Создание окна диалога }.
R.Assign (15, 1, 64, 20);
TDialog.Init (R, ATitle);
Options:= Options or ofCentered;
WildCard:= AWildCard;
{ Строка ввода имени файла }.
R.Assign (3, 3, 31, 4);
FileName:= New (PFileInputLine, Init (R, 79));
FileName^.Data^:= WildCard;
Insert (FileName);
R.Assign (2, 2, 6, 3);
Insert (New (PLabel, Init (R, InputName, FileName)));
R.Assign (31, 3, 34, 4);
Insert (New (PHistory, Init (R, FileName, HistoryId)));
{ Линейка скроллинга и список файлов }.
R.Assign (3, 14, 34, 15);
ScrollBar:= New (PScrollBar, Init®);
Insert (ScrollBar);
R.Assign (3, 6, 34, 14);
FileList:= New (PFileList, Init (R, ScrollBar));
Insert (FileList);
R.Assign (2, 5, 8, 6);
Insert (New (PLabel, Init (R, 'Файлы', FileList)));
{ Задание кнопок }.
R.Assign (35, 3, 46, 5);
if AOptions and fdOpenButton 0 then.
begin.
Insert (New (PButton, Init (.
R, 'Открыть', cmFileOpen, bfDefault)));
Inc (R.A.Y, 3); Inc (R.B.Y, 3);
end;
if AOptions and fdOkButton 0 then.
begin.
Insert (New (PButton, Init (.
R, 'Ага', cmFileOpen, bfNormal)));
Inc (R.A.Y, 3); Inc (R.B.Y, 3);
end;
if AOptions and fdReplaceButton 0 then.
begin.
Insert (New (PButton, Init (.
R, 'Замена', cmFileReplace, bfNormal)));
Inc (R.A.Y, 3); Inc (R.B.Y, 3);
end;
if AOptions and fdClearButton 0 then.
begin.
Insert (New (PButton, Init (.
R, 'Удал.', cmFileClear, bfNormal)));
Inc (R.A.Y, 3); Inc (R.B.Y, 3);
end;
Insert (New (PButton, Init (.
R, 'Нека', cmCancel, bfNormal)));
{ Информационная панель с параметрами файла }.
R.Assign (1, 16, 48, 18);
Insert (New (PFileInfoPane, Init®));
SelectNext (False);
{ Загрузка каталога }.
if AOptions and fdNoLoadDir = 0 then.
begin.
FileList^.ReadDirectory (WildCard);
Directory:= NewStr (GetCurDir);
end;
end;
Var.
MyApp: TMyApp; {Переменная основного объекта}.
Begin.
WriteLn ('Система защиты данных от НСД. Версия 1.0 beta.'+.
+' 1996 МГВРК Еганов М. Ю., Юзефович А. Г.');
GetIntVec ($ 09,Int09_Save);
MyApp.Init;
MyApp.Run;
MyApp.Done;
SetIntVec ($ 09, Int09_Save);
End.