РефератыИнформатика, программированиеКоКонтроль доступу до вибраних файлів з веденням протоколу

Контроль доступу до вибраних файлів з веденням протоколу

Міністерство освіти та науки України


Кіровоградський Державний Технічний університет


Кафедра програмного забезпечення


Курсовий проект


з дисципліни “Програмування на мові ASM-86”


на тему:


“Контроль доступу


до вибраних файлів з веденням протоколу"


Зміст


1. Вступ


2. Постановка задачі


3. Обґрунтування вибору методів розв’язку задачі


4. Алгоритм програми


5. Реалізація програми


6. Системні вимоги


7. Інструкція для користувача


Висновки


Використана література


Додаток


Лістинг програми


1. Вступ

У деяких випадках буває необхідно вести протокол роботи комп’ютера. Наприклад, записувати клавіші, які натискаються, записувати імена файлів, до яких звертається користувач. Описана програма дозволяє задати список розширень файлів і заносити у файл час і дату доступу до них.


2. Постановка задачі

Треба написати програму, яка б дозволяла вести протокол доступу до потрібних файлів на диску, використовуючи мову програмування асемблер.


3. Обґрунтування вибору методів розв’язку задачі

Для того, щоб вести контроль доступу до файлів, необхідно “впіймати" момент, в який відбувається доступ. Системний сервіс MS-DOS (переривання 21h) містить кілька функцій, які викликаються для звертання до файлів. Це функції створення, відкриття, закриття, запису та читання з файлів. Існують функції переміщення позиції та вилучання файлів.


При виклику переривання 21h код функції заноситься в регістр AH, і в інші регістри - інша інформація. Якщо перехопити переривання 21h, то перед обробкою можна перевірити, чи є код в регістрі АН кодом відкриття файла. В цьому випадку перед обробкою файла можна занести в інший файл дату, час та назву файла, до якого звертаються.


Для того, щоб не виникло за циклювання (для запису в протокол теж використовується функція відкриття!), перед викликом запису встановлюється прапорець, який вказує, що іде запис протоколу, і протоколювати цей виклик не треба. По завершенні він скидається.


4. Алгоритм програми

Алгоритм основної частини


1. Перевірити наявність програми у пам’яті.


2. Прочитати з файла filelist. dat список розширень файлів.


3. Перехопити вектор переривання 21h


4. Завершитись і залишитись резидентно.


Алгоритм обробника переривання 21h.


1. Перевірити код функції. Якщо це не код 3dh (відкриття файлу), то передати керування стандартному обробнику.


2. Перевірити розширення файла. Якщо воно не співпадає з жодним з заданих, то передати керування стандартному обробнику.


3. Визначити та сформувати в текстовому вигляді дату і час


4. Відкрити файл, перейти на його останню позицію та записати туди ім’я, час та дату.


5. Закрити файл


6. Передати керування стандартному обробнику.


5. Реалізація програми

Програма написана на мові програмування низького рівня Assembler. Її скомпільовано у вигляді COM-файла.


Після початку роботи, згідно алгоритму, відбувається перевірка наявності програми у пам’яті і перехоплення переривання 21h. Після цього програма починає обробку.


Програма містить декілька процедур:


read_extensions-читання розширень з filelist. dat


check_extension - перевірка співпадання розширень


process_file-запис у файл протоколу інформації


new_21h-новий обробник переривання 21h.


Для доступу до файлів використовуються функції переривання 21h. Для отримання часу використовується функція BIOS 1Ah.


6. Системні вимоги

Операційна система MS-DOS (НЕ Windows)


Процесор80286+


Пам’ять640K+


Жорсткий диск 5M+


7. Інструкція для користувача

Спочатку необхідно задати типи файлів, які треба контролювати. У файл filelist. dat необхідно записати розширення імен файлів, які треба контролювати, наприклад:


exe


com


bat


sys


txt


Після цього необхідно, знаходячись в ДОС, запустити програму filelist. doc. Якщо не виникне помилок, то програма завантажиться у пам’ять. Якщо програму вже завантажено, то вона видасть відповідне повідомлення.


Після цього буде створено (якщо немає) файл з протоколом (по змовчанню c: tempfilelist. log). При спробі відкрити або запустити файл з одним із вказаних розширень у протокол буде занесено ім’я файлу, дату і час події.


Висновки

Отже, за допомогою написаної програми можна записувати у файл імена, дату і час виклику файлів заданого типу. Програма займає мало місця у пам’яті та невибаглива.


Також розглянуто методи побудови резидентних програм і роботу з перериванням 21h.


Використана література

1. П. Абель "Мова асемблера для IBM PC та програмування." М.: Вища школа, 1992.


2. Конспект лекцій з дисципліни “Програмування на мові ASM-86"


Додаток
Лістинг програми

.286


. model tiny


. code


org 100h


start:


jmp begin


old_21h dd 0


flag db 0


log_file db 'c: tempfilelist. log',0


filename db 200 dup (0)


data_str db '00-00-00 00: 00: 00 - '


eoln db 10,13


extensions db 100*3 dup (0)


fileerror db 'FILELIST. DAT Error! ',10,13,'$'


datname db 'filelist. dat',0


a_load db 'Program is in memory already!!! ',10,13,'$'


check_extension proc


mov di,offset filename-1


di_i:


inc di


mov al,byte ptr [di]


cmp al,0


jne di_i


sub di,3


mov ah,byte ptr [di]


mov bh,byte ptr [di+1]


mov ch,byte ptr [di+2]


mov si,offset extensions


new_name:


mov al,byte ptr [si]


mov bl,byte ptr [si+1]


mov cl,byte ptr [si+2]


cmp al,0


je exit_1


cmp bl,0


je exit_1


cmp cl,0


je exit_1


sub al,ah


sub bl,bh


sub cl,ch


add al,bl


add al,cl


cmp al,0


je exit_2


add si,3


jmp new_name


exit_1:


mov al,0


jmp exit_0


exit_2:


mov al,1


exit_0:


ret


check_extension endp


process_file proc


push es


push ds


pusha


push cs


pop es


; copy filename


mov si,dx


mov di,offset filename


mov cx, 200


rep movsb


push cs


pop ds


; check extension


call check_extension


cmp al,0


jne start_wr


jmp error_p


start_wr:


; open file


mov ah,3dh


mov al,1


mov dx,offset log_file


int 21h


jnc no_er


jmp error_p


no_er:


mov si,ax


; seek eof


mov ah,42h


mov al,2


mov bx,si


xor cx,cx


xor dx,dx


int 21h


mov di,offset data_str


mov ah,4


int 1ah


mov al,cl; year


and al,0fh


add al,30h


mov ah,cl


shr ah,4


add ah,30h


mov byte ptr [di],ah


mov byte ptr [di+1],al


mov al,dh; month


and al,0fh


add al,30h


mov ah,dh


shr ah,4


add ah,30h


mov byte ptr [di+3],ah


mov byte ptr [di+4],al


mov al,dl; day


and al,0fh


add al,30h


mov ah,dl


shr ah,4


add ah,30h


mov byte ptr [di+6],ah


mov byte ptr [di+7],al


mov ah,2


int 1ah


mov al,ch; hour


and al,0fh


add al,30h


mov ah,ch


shr ah,4


add ah,30h


mov byte ptr [di+9],ah


mov byte ptr [di+10],al


mov al,cl; min


and al,0fh


add al,30h


mov ah,cl


shr ah,4


add ah,30h


mov byte ptr [di+12],ah


mov byte ptr [di+13],al


mov al,dh; sec


and al,0fh


add al,30h


mov ah,dh


shr ah,4


add ah,30h


mov byte ptr [di+15],ah


mov byte ptr [di+16],al


; date


mov ah,40h


mov bx,si


mov dx,offset data_str


mov cx,22


int 21h


; write file name


xor cx,cx


mov bx,offset filename


lll:


mov al,byte ptr [bx]


cmp al,0


je st_l


inc cx


inc bx


jmp lll


st_l:; get filename length


mov ah,40h


mov bx,si


mov dx,offset filename


int 21h


; write eoln


mov ah,40h


mov bx,si


mov cx,2


mov dx,offset eoln


int 21h


; close file


mov bx,si


mov ah,3eh


int 21h


error_p:


popa


pop ds


pop es


ret


process_file endp


new_21h:


pushf


cmp ah,3dh


jne no_3d


cmp byte ptr cs: [flag],1


je no_3d


mov ah,2


mov dl,7


int 21h


mov byte ptr cs: [flag],1


call process_file


mov byte ptr cs: [flag],0


no_3d:


popf


jmp dword ptr cs: [old_21h]


rez_end:


buf db 1000 dup (0)


read_extensions proc


mov ah,3dh


mov al,0


mov dx,offset datname


int 21h


jnc all_ok


mov ah,9


mov dx,offset fileerror


int 21h


mov ah,4ch


int 21h


all_ok:


mov si,ax


mov ah,3fh


mov bx,si


mov cx,1000


mov dx,offset buf


int 21h


mov bx,si


mov ah,3eh


int 21h


mov di,offset extensions


mov si,dx


xor cx,cx


mm:


mov al,byte ptr [si]


cmp al,0


je stop_mm


cmp al,61h


jb skip_c


cmp al,7ah


ja skip_c


mov byte ptr [di],al


inc di


inc cx


skip_c:


inc si


cmp cx,290


ja stop_mm


jmp mm


stop_mm:


ret


read_extensions endp


begin:


xor ax,ax


mov es,ax


mov al,byte ptr es: [505h]


cmp al,106


je loaded


mov byte ptr es: [505h],106


push cs


pop es


call read_extensions


mov ah,3dh


xor al,al


mov dx,offset log_file


int 21h


jnc ook


mov ah,3ch


xor cx,cx


mov dx,offset log_file


int 21h


ook:


mov bx,ax


mov ah,3eh


int 21h


xor ax,ax


mov ds,ax


mov ax,word ptr ds: [21h*4]


mov word ptr cs: [old_21h],ax


mov ax,word ptr ds: [21h*4+2]


mov word ptr cs: [old_21h+2],ax


mov ax,offset new_21h


mov word ptr ds: [21h*4],ax


push cs


pop ax


mov word ptr ds: [21h*4+2],ax


mov dx,offset rez_end+1


int 27h


loaded:


mov ah,9


mov dx,offset a_load


int 21h


mov ah,4ch


int 21h


end start

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Контроль доступу до вибраних файлів з веденням протоколу

Слов:1298
Символов:12758
Размер:24.92 Кб.