Удалить FOSSIL-драйвер из памяти
Данную подфункцию можно использовать для удаления FOSSIL-драйвера из оперативной памяти компьютера. При этом драйвер освобождает телефонную линию, восстанавливает все перехваченные им векторы прерываний и возвращает адрес своего блока MCB. Далее вы можете воспользоваться функцией 49h прерывания INT21h для освобождения этого MCB.
На входе: AH = 0E0h;
AL = 05h.
На выходе: BX = адрес MCB или 0 в случае ошибки.
Приведем пример программы UNINST, удаляющей FOSSIL-драйвер из памяти. Исходный текст этой программы представлен в листинге 6.16.
Листинг 6.16. Файл UNINST.C
int uninstall(void);
//********************************************************
// Функция main
//********************************************************
void main(void) {
int ok;
ok = uninstall();
printf("Удаление FOSSIL-драйвера из памяти %s.",
(ok) ? "прошло успешно" : "невозможно" );
}
//********************************************************
// Функция uninstall
//********************************************************
int uninstall(void) {
int ok = 0;
asm {
// Определяем адрес MCB блока драйвера
mov ax,0E005h
int 14h
// В случае ошибки возвращаем управление
cmp bx,0
je no_uninstall
// es = bx
push bx
pop es
// Освобождаем MCB блок, используемый драйвером
mov ah,49h
int 21h
mov ok,1
}
no_uninstall:
return(ok);
}