Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2012, 16:55   #1
Satsuki
Новичок
Джуниор
 
Регистрация: 22.05.2012
Сообщений: 2
По умолчанию Запрет на удаление файлов определенного разрешения. Ассемблер

Здравствуйте. Написала код TSR программы, которая выводит меню, в меню выбираем тип файла, который не может быть удален.
Возникла проблема с тем, что файлы все равно удаляются спокойненько.
Перехватываю как 41h так и 13h из 21го прерывания.
Помогите, пожалуйста, разобраться.

Вот фрагмент кода, отвечающий за перехват и удаление.
Код:
new_21h proc far                  ;новый обработчик прерывания 21h


cmp AH, 41h                        ;если это функция удаления файла
je check_of_extension             ;то проверяем расширение файла,                                   ; не совпадает ли оно с запрещенным
cmp AX, 7141h           ;функция удаления файла с длинным именем
je check_of_extension 
cmp AH, 13h
je check_of_extension


jmp old21h                        ;если нет, то уходим в стандартный обработчик
 
check_of_extension:               ;проверка расширения
     push DI                      ;сохранение регистров
     push SI
     push AX
     push BX
     push CX
     push ES
     push CS
 
     mov SI,DX                    ;копируем DX в SI, теперь в DS:SI содержится
                                  ;адрес ASCIIZ-строки с именем файла
     nextsymbol:                  ;ищем конец имени удаляемого файла
          inc SI
          mov AL,DS:SI
          cmp AL,0                ;это нулевой байт 
          jne nextsymbol          ;если нет, то переходим к следующему символу
     dec SI                       ;теперь в DS:SI содержит адрес последнего 
                                  ;символа расширения файла
    
     pop ES                       ;ищем в строке расширений то, которое
                                  ;соответствует запрещенному для удаления
     xor AX,AX 
     mov AL,ES:position           
     mov BL, 3
     mul BL
     add AL, 2
     add AX, offset string
     mov DI, AX                    ;теперь ES:DI содержит адрес конца требуемого 
                                   ;расширения
     mov CX,3
     std                           ;установим флаг направления DF=1
     repe cmpsb                    ;сравниваем расширения
     jnz delete_file               ;расширения не совпадают,флаг ZF=0
 
not_delete_file:                   ;расширения совпали, файл нельзя удалить
     pop es                        ;восстанавливаем регистры
     pop cx                  
     pop bx
     pop ax 
     pop si
     pop di
     push ax
     cli                      
     mov AL,20h                    
     out 20h,AL                   ;end of interrupt
     pop ax
	 mov al, 0ffh	
     iret
 
delete_file:
     pop es
     pop cx
     pop bx
     pop ax
     pop si                       ;восстановление регистров
     pop di
 
old21h:    
	 ;mov al, 0ffh					;возвращаемся в старый обработчик
     jmp cs:old_21h
iret
 
new_21h endp

Последний раз редактировалось Stilet; 22.05.2012 в 22:04.
Satsuki вне форума Ответить с цитированием
Старый 24.05.2012, 17:01   #2
Satsuki
Новичок
Джуниор
 
Регистрация: 22.05.2012
Сообщений: 2
По умолчанию Решение.

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление определенного количества символов из компонента label Sandysman Мультимедиа в Delphi 4 22.03.2012 14:46
Удаление строки до определенного символа glebast Помощь студентам 25 02.03.2012 01:30
Триггер на запрет удаление MrBobyara SQL, базы данных 5 30.10.2011 23:48
Запрет на удаление из TOpenDialog. m007kuzya Компоненты Delphi 2 19.02.2010 12:14
Запрет на удаление строк и столбцов Shavminator Microsoft Office Excel 2 12.01.2008 13:36