Создание программ, специально предназначенных для работы в среде Microsoft Windows, не является предметом обсуждения в данной книге. Однако мы сделаем несколько замечаний относительно использования протоколов IPX, SPX и NETBIOS в программах, работающих в среде Microsoft Windows версии 3.1 и Microsoft Windows for Workgroups версии 3.1.
Все резидентные программы, имеющие отношение к сетевой оболочке Novell NetWare, необходимо загружать до запуска Windows. Это относится и к эмулятору протокола NETBIOS. Если вы запустите эти программы из виртуальной машины MS-DOS, работающей в среде WIndows, рано или поздно произойдет аварийное завершение Windows.
Если ваша программа работает в среде MS-DOS с протоколами IPX, SPX или NETBIOS, она без всяких изменений будет работать и на виртуальной машине Windows. Вам только надо проследить, чтобы все резидентные программы и эмулятор NETBIOS загружались до запуска Windows.
Если же вы желаете создать полноценное приложение для Windows, работающее с сетевыми протоколами, вам следует иметь в виду, что для всех этих протоколов необходимо указывать адреса управляющих блоков и буферов, расположенные в первом мегабайте основной оперативной памяти. Кроме того, из приложений Windows, работающих в защищенном режиме, вы не можете непосредственно вызывать драйвер IPX/SPX или прерывание NETBIOS, так как эти интерфейсы рассчитаны на вызов из реального режима.
Вы можете выйти из такого затруднительного положения, если воспользуетесь интерфейсом с защищенным режимом DPMI (DOS Protected Mode Interface), описанным нами в томе "Библиотеки системного программиста", по-священном использованию защищенного режима.
В рамках интерфейса DPMI есть функции, позволяющие из программы, работающей в защищенном режиме, вызывать прерывания или функции, предназначенные для работы в реальном режиме. Кроме того, в API Windows есть функции, с помощью которых вы можете заказать для программы защищенного режима буферы, расположенные в первом мегабайте основной оперативной памяти.
Замечания, сделанные выше, относятся и к Microsoft Windows for Workgroups версии 3.1. Однако эта операционная система может и не поддерживать протоколы IPX/SPX. С помощью приложения Control Panel вы можете подключить или отключить поддержку сети Novell NetWare и протоколов IPX/SPX.
Если поддержка Novell NetWare не используется, вам доступен протокол NETBIOS, который является "родным" протоколом для Windows for Workgroups.
Мы проверили работу NETBIOS через интерфейс прерывания INT 2Ah при работе в виртуальной машине MS-DOS. Сразу после загрузки сетевых драйверов Windows for Workgroups интерфейс NETBIOS недоступен. Однако в среде виртуальной машины MS-DOS этот интерфейс появляется.
Приведем два фрагмента системы "клиент-сервер", проверенной нами при работе в Windows for Workgroups. Вы сможете найти полные исходные тексты на дискете, которая продается вместе с книгой (эти исходные тексты почти полностью повторяют тексты системы "клиент-сервер", работающей с датаграммами).
Первый фрагмент проверяет присутствие интерфейса NETBIOS:
// Проверяем наличие интерфейса NETBIOS regs.h.ah = 0; int86(0x2a, ®s, ®s); errno = 0; if(regs.h.ah == 0) { errno=0xff; }
Второй фрагмент предназначен для вызова NETBIOS через прерывание INT 2Ah:
// Функция для вызова NETBIOS void NetBios(void) { sregs.es = FP_SEG(&ncb); regs.x.bx = FP_OFF(&ncb); regs.h.ah = 0x4; regs.h.al = 0x1; int86x(0x2a, ®s, ®s, &sregs); }