Первое, что должна сделать программа, желающая воспользоваться протоколом NETBIOS, - проверить наличие в системе интерфейса NETBIOS.
Ниже приведена программа, которая определяет, установлен ли драйвер NETBIOS.
С помощью функции getvect() программа получает указатель на обработчик прерывания INT 5Ch. Это прерывание используется для вызова NETBIOS. Если сегментная компонента адреса равна нулю или F000h, обработчик прерывания не установлен или установлена заглушка, расположенная в BIOS. В этом случае программа считает, что NETBIOS отсутствует.
// =================================================== // Листинг 16. Проверка присутствия NETBIOS // // Файл nbver.cpp // // (C) A. Frolov, 1993 // ===================================================
#include <stdio.h> #include <stdlib.h> #include <dos.h> #include <conio.h> #include <mem.h> #include <string.h>
void main(void) { void interrupt ( *int5C)(...);
printf("Check if NETBIOS is installed\n"); int5C = getvect(0x5c); if(FP_SEG(int5C) == 0x0000 FP_SEG(int5C) == 0xF000) { printf("NETBIOS NOT installed.\n"); } else printf("NETBIOS is installed!\n");
}
Другой способ проверки наличия интерфейса NETBIOS заключается в вызове прерывания INT 2Ah. Загрузите в регистр AH нулевое значение и вызовите прерывание INT 2Ah. Если после возврата из прерывания в регистре AH
попрежнему находится нуль, драйвер NETBIOS не установлен.
Данный способ проверки будет работать на виртуальной машине DOS, запущенной в среде Windows for Workgroups версии 3.1 (если Windows работает в расширенном режиме).
Приведенная ниже программа определяет присутствие NETBIOS с помощью вызова прерывания INT 2Ah (листинг 17):
// =================================================== // Листинг 17. Проверка присутствия NETBIOS // с использованием интерфейса INT 2Ah // // Файл 2atest.cpp // // (C) A. Frolov, 1993 // ===================================================
#include <stdio.h> #include <stdlib.h> #include <dos.h> #include <conio.h> #include <mem.h> #include <string.h>
void main(void) {
union REGS regs;
printf("Check if NETBIOS is installed\n");
regs.h.ah = 0; int86(0x2a, ®s, ®s);
if(regs.h.ah == 0) { printf("NETBIOS NOT installed.\n"); } else printf("NETBIOS is installed!\n");
}
Прерывание INT 2Ah используется в сетях фирм Microsoft и Lantastic. Эмулятор протокола NETBIOS, поставляющийся фирмой Novell вместе с операционной системой Novell NetWare, поддерживает как интерфейс прерывания INT 5Ch, так и интерфейс INT 2Ah.