![]() |
|
|
![]()
|
|
| bugmenot1 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 8.5.2008 Репутация: нет Всего: 0 |
Здравствуйте.
Необходимо написать резидент, запрещающий удаление файлов определённого расширения. Программа должна быть написана под DOS 16 бит. Я предполагал это делать так - пишется свой собственный обработчик прерываний 21h, в нём проверяется нужная функция (41h - удаление файлов). Если не наша, уход в старый обработчик. Так вот, почему-то при удалении файла через DOS (cmd.exe, command.com, DosBox, FAR, VC - всё пробовал), файлы всё равно удаляются, а функция 41h не отлавливается. Вот код обработчика, немного недописанный.
Процедура clear - очистка экрана, добавлена для отладки. Теоретически, при удалении файла должна вызываться функция 41h, программа идёт на метку work, очищает экран и работает. Но этого не происходит. Процедура clear точно работоспособна. Обработчик установлен верно. |
|||
|
||||
| iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 4 Всего: 16 |
Дайте код всей программы.
Добавлено @ 12:36 Скорей всего, ошибка в сравнении строк. Вот отдельный пример.
Это сообщение отредактировал(а) iff - 31.5.2011, 12:42 -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
| iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 4 Всего: 16 |
или так. Так даже кода меньше.
Это сообщение отредактировал(а) iff - 31.5.2011, 12:47 -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
| bugmenot1 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 8.5.2008 Репутация: нет Всего: 0 |
Единственная проблема в том, что не срабатывает вот этот участок кода:
Т.е. удаление в DOS строчкой "del e:\test.txt" происходит не посредством функции 41h |
|||
|
||||
| AeroHk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 12.5.2012 Репутация: нет Всего: нет |
Пишу курсач, точно такая же проблема..
|
|||
|
||||
| LeonidPr |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2012 Где: г. Чебоксары Репутация: нет Всего: 1 |
Ну во-первых хорошо бы подготовить окружение, соответствующее "чистой" DOS. Попросту, найдите дистриб DOS 6.22, поставьте куда-нибудь на Bochs или VMWare или любой удобный для вас эмулятор. Или, если уж совсем хочется, сделайте загрузочную дискету и грузаните комп с неё. И вот уже оттуда запускайте свою программу. Только вот еще что, (знатоки DOS, поправьте меня, если не прав) ИМХО, нужно отрубить всякие EMM386, HIMEM и т.п. Вот если и так не заработает, тогда уже разбираться, что к чему?
--------------------
pkunzip.zip |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
Было бы не плохо увидеть код установки хука.
-------------------- |
|||
|
||||
| LeonidPr |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2012 Где: г. Чебоксары Репутация: нет Всего: 1 |
Вот, еще что вспомнил. Когда-то курсач по ОС писал, нужно было переключалку нескольких процессов сделать. Я тогда там то же int 21h перехватывал. Так вот, столкнутся тогда с проблемой, что функция 25h (установка вектора прерывания) не хотела работать для прерывания 21h (если мне память не изменяет, вроде как завис был глухой). Долго бился тогда, в результате сделал нагло через таблицу векторов. Препод тогда мне сказал, что это от того, что DOS нереентерабельна.
--------------------
pkunzip.zip |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
Я не помню точно, но мне кажеться что в дос сессии (в винде имею ввиду) были какие то заморочки с установкой хуков.
-------------------- |
|||
|
||||
| LeonidPr |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2012 Где: г. Чебоксары Репутация: нет Всего: 1 |
500mhz, что вы имеете в виду под "хуком"? Для меня это понятие напрочь связано с хуками самой винды, устанавливаемые SetWindowHookEx. Или вы так называете подмену обработчика прерывания своим?
Я поэтому и говорил, что нужен "чистый" дос, на эмуляторе (только не DosBox) или вживую, неважно. Винда может на 21h прерывание делать шлюз прерывания, через который управление передается куда-то глубоко в систему. Поэтому да, перехват его я думаю будет затруднителен. --------------------
pkunzip.zip |
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |