Розмежування доступу до дискового простору вiнчестера

Страницы работы

Содержание работы

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

«ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ»

Лабораторна робота №6

«Розмежування доступу до дискового простору вiнчестера.»

                                                         Виконав:

 ст групи КІТ-14в

Богачов О. С.

.                

.                                                                                         

ХАРКІВ 2007

Лабораторна робота №6

Тема: Розмежування доступу до дискового простору вiнчестера.

Мета: cтворення  резидентної  програми,  що  обмежує  доступ  до вiнчестера в залежностi вiд пароля, що читається з дискети.

Постановка задачi: необхiдно розробити i налагодити резидентну програму що обмежує доступ до диску залежно від прочитаної мітки з інженерного циліндру.

1.Індивідуальне завдання:

Чергування: 4, 3, 2, 1, 9, 8, 7, 6,  5

Доріжка: 80

Сторона: 0

Розмір сектору: 512

Запис інформації у сектор #2.

2.Алгоритм програми:

1)  Програма при завантаженні з autoexec.bat читає інженерний циліндр дискети;

2)  Якщо прочитана мітка – та що дозволяє читання/запис – то завантажуємо резидент та дозволяємо запис/читання секторів вінчестеру;

3)  Якщо прочитана мітка – та що дозволяє тільки читання – то завантажуємо резидент та дозволяємо читання секторів вінчестеру;

4)  Якщо мітка невірна – то перезавантажуємо комп’ютер;

5)  Якщо програма завантажена з ключем /d – то виконується вивантвження резидента з оперативної пам’яті з відновленням перехоплених векторів.

3.Текст програми:



        .286

        .model  tiny

        .code

        org     100h

start:

        jmp     realistart

; Diskette Parameter Table

DPT     db 0dfh

        db 002h

        db 025h

        db 002h         ; код длины сектора (512)

        db 08h          ; длина дорожки

        db 01bh

        db 0ffh

        db 054h

        db 0f6h

        db 00fh

        db 008h

       DPTofs  dw      ?

       DPTseg  dw      ?

       buf     db      512 dup (?)     ; временный буфер

       PasRead  db 'Rd','$'

       PasRW db  'RdWr','$'

       delkey  db      '/d'           ; ключ для выгрузки программы

       delmsg  db      'Программа выгружена!', 13, 10, '$'

       alrmsg  db      'Программа уже загружена!', 13, 10, '$'

       RWmsg    db      'Вы получили права на чтение/запись', 13,  10, '$'

       Rmsg    db      'Вы получили права на чтение', 13, 10, '$'

       nomsg    db       'Нет прав ни на чтение, ни на запись!',13, 10, '$'

       RW      db      0               ; флаг

       R       db      0               ; флаг

       int13o  dw      ?

       int13s  dw      ?

       int21o  dw      ?

       int21s  dw      ?

       here    dw      0f63ch

        ;------------------------------;

        ; Новая точка входа для int13h ;

        ;------------------------------;

       int13h  label   byte

        ; Проверка на работу с винчестером

        cmp     dl, 80h

        jz      rightsitest

        cmp     dl, 81h

        jnz     old13h

rightsitest:

        ; Проверка прав доступа

        cmp     cs:RW, 1

        jz      old13h

        cmp     cs:R, 1

        jz      writest

ritest:

        ; Проверка на функции чтения

        cmp     ah, 02h

        jz      error13h

        cmp     ah, 42h

        jz      error13h

writest:

        ; Проверка на функции записи

        cmp     ah, 03h                 ; запись

        jz      error13h

        cmp      ah, 43h                 ; расширенная  запись (LBA)

        jz      error13h

old13h:

        ; Вызов "старого" обработчика

        jmp     dword ptr cs:int13o

error13h:

        ; Установка ошибки

        push    bp

        mov     bp, sp

        mov     ax, [bp + 6]

        or      ax, 01h

        mov     [bp + 6], ax

        mov     ah, 03h

        pop     bp

        iret

        ;------------------------------;

        ; Новая точка входа для int21h ;

        ;------------------------------;

int21h  label   byte

        ; Проверка прав доступа

        cmp     cs:RW, 1

        jz      old21h

        cmp     cs:R, 1

        jz      writefitest

readfitest:

        ; Проверки на функции "чтения"

        cmp     ah, 3dh                 ; открыть файл

        jz      error21h

        cmp     ah, 3fh                 ; читать из файла

        jz      error21h

writefitest:

        ; Проверки на функции "записи"

         cmp     ah, 13h                 ; удаление файла через FCB

        jz      error21h

        cmp     ah, 39h                 ; создать каталог

        jz      error21h

        cmp     ah, 3ah                 ; удалить каталог

        jz      error21h

        cmp     ah, 3ch                 ; создать файл

        jz      error21h

Похожие материалы

Информация о работе