Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Резидентная программа

17K
28 мая 2006 года
Cman
8 / / 28.05.2006
Здравствуйте.
Решил написать програмку под DOS, которая бы перехватывала удаление файлов из системы(т.е. чтобы эта функция не срабатывала).
Отследить удаление файлов мне удается, но вот как удаление запретить не могу понять.
Кто знает подскажите что делать надо, а то ни как не могу разобраться.

Код:
#include <dos.h>

#define INTR  0x21
 
#pragma check_stack( off )
#pragma check_pointer( off )
void interrupt far ( *oldint)(...);
void interrupt far newint(...)
{
 if(_AH == 0x41)
 {
   //Что здесь должно быть??
 
 }

 _chain_intr( oldint );
}

int main(void);
 int main(void)
{
   unsigned size;
   char _far *newstack;
   char _far *tsrbottm;

   _asm mov  WORD PTR newstack[0], sp
   _asm mov  WORD PTR newstack[2], ss
   FP_SEG(tsrbottm) = _psp;
   FP_OFF(tsrbottm) = 0;
   size = ((newstack - tsrbottm) >> 4) + 1;
   oldint = getvect(INTR);
   setvect(INTR, newint);
   keep(0, size);

   return 0;
}
17K
30 мая 2006 года
Cman
8 / / 28.05.2006
Ну, что никто не знает??:(
472
03 июня 2006 года
Vovka
139 / / 10.02.2005
переименуй файл или сделай копию, а потом по таймеру верни обратно.
1.8K
03 июня 2006 года
k3Eahn
365 / / 19.12.2005
Если я правильно понял вопрос, то :
Почему бы просто не вернуть ошибку(FLAGS.CF=1 и в ax код ошибки(что-то вроде access denied)).
1.9K
04 июня 2006 года
Nigger
71 / / 09.04.2005
[QUOTE=Cman]Здравствуйте.
Решил написать програмку под DOS, которая бы перехватывала удаление файлов из системы(т.е. чтобы эта функция не срабатывала).
Отследить удаление файлов мне удается, но вот как удаление запретить не могу понять.
Кто знает подскажите что делать надо, а то ни как не могу разобраться.
[/QUOTE]

Зубков. "Ассемблер для DOS, WINDOWS и UNIX"
Цитата:

5.9.1. Пассивная резидентная программа
В качестве первой резидентной программы рассмотрим именно пассивный резидент, который будет активироваться при попытке программ вызывать INT 21h и запрещать удаление файлов с указанного диска.

17K
09 июня 2006 года
Cman
8 / / 28.05.2006
Спасибо разобрался. У меня теперь другой вопрос возник: как можно отследить,что удаляется файл, ну скажем расположенный по адрессу C:\filename.txt(т.е. я хочу сделать, чтобы только при попытке удалить этот файл срабатывал мой обработчик)
16K
10 июня 2006 года
Deeoni$
21 / / 09.06.2006
если пишешь под DOS, как ты сказал, то можно перехватывать прерывание и смотреть какой файл удаляется. Ну а если под win32, то есть такая штука как ивенты
17K
10 июня 2006 года
Cman
8 / / 28.05.2006
[QUOTE=Deeoni$]если пишешь под DOS, как ты сказал, то можно перехватывать прерывание и смотреть какой файл удаляется.[/QUOTE]

в том-то все и дело, что незнаю где смотреть и как оно будет выглядеть(мне бы примерчик)
1.8K
10 июня 2006 года
k3Eahn
365 / / 19.12.2005
INT 21 - DOS 2+ - "UNLINK" - DELETE FILE
AH = 41h
[color=red]DS : DX -> ASCIZ filename (no wildcards)[/color]
CL = attribute mask for deletion (server call only, see notes)
Return: CF clear if successful
AX destroyed (DOS 3.3) AL seems to be drive of deleted file
CF set on error
AX = error code (02h,03h,05h)
17K
10 июня 2006 года
Cman
8 / / 28.05.2006
что-то я не понимаю в чем тут прикол... делаю вот так:
Код:
char near *filename="C:\\file.txt";
int s;
-------------------------------------
void interrupt far newint(...)
{
  if(_AH == 0x41)
  {
       _asm mov dx,filename
       if(_DX==(unsigned)filename)
    {
          ++s;
    }
    else
        _chain_intr(oldint);

  }
  else
  _chain_intr(oldhandler);
}

естественно никакой файл не удаляется
а когда я убираю строку <asm mov dx,filename>, то ,как мне кажется, всё должно работать так как надо, но файл всеравно удаляется.
В чем тут может быть дело??
17K
10 июня 2006 года
DemonomeD
9 / / 10.06.2006
Cman - пришли мне пожалуйста исходник простого рабочего резидента например чтоб через каждые 3 минуты выполнял MessageBeep(MB_ICONERROR); в заголовке письма не забудь пожалуйста написать РЕЗИДЕНТ
[email]snaiper8787@mail.ru[/email] or [email]sn-2@mail.ru[/email]
16K
11 июня 2006 года
Deeoni$
21 / / 09.06.2006
[QUOTE=Cman]
естественно никакой файл не удаляется
а когда я убираю строку <asm mov dx,filename>, то ,как мне кажется, всё должно работать так как надо, но файл всеравно удаляется.
В чем тут может быть дело??[/QUOTE]
ну так отдебаж и посмотри... ты то хоть адрес прерывания на свой меняешь?

Кстати что за компилятор такой что такие конструкции понимает? это уже даже не очень и ассемблер
17K
11 июня 2006 года
Cman
8 / / 28.05.2006
[QUOTE=Deeoni$] ты то хоть адрес прерывания на свой меняешь?[/QUOTE]
без коментариев...
[QUOTE=Deeoni$]
Кстати что за компилятор такой что такие конструкции понимает? это уже даже не очень и ассемблер
[/QUOTE]
уже исправил, дело не в этом это просто опечатка
Вопрос остается открытым
1.8K
11 июня 2006 года
k3Eahn
365 / / 19.12.2005
Продизасмь код обработчика и выложи его здесь, может что-нибудь и проясниться.
16K
12 июня 2006 года
Deeoni$
21 / / 09.06.2006
[QUOTE=Cman]Вопрос остается открытым[/QUOTE]
ну отдебаж код, если не вызываешь реальное прерывание, то ничего происходить не должно
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог