Локальные сети персональных компьютеров. Использование протоколов IPX, SPX, NETBIOS
© Александр Фролов, Григорий Фролов
Том 4, М.: Диалог-МИФИ, 1993, 160 стр.
Перед выполнением команды ее код должен быть
записан в поле Cmd блока NCB. Каждая команда NETBIOS
реализована в двух вариантах - с ожиданием и без
ожидания.
Если вашей программе нечего делать до тех пор,
пока выполнение команды NETBIOS не будет полностью
завершено, вы можете выбрать вариант с ожиданием.
В этом случае после вызова NETBIOS программа вновь
получит управление только после завершения
выполнения команды. При использовании
протоколов IPX/SPX ваша программа должна была сама
дожидаться выполнения
вызванной функции, выполняя в цикле опрос поля
InUse блока ECB. Однако учтите, что, если по каким-либо
причинам выполнение команды не может быть
завершено, ваша программа "зависнет".
Вариант без ожидания похож на вариант
использования функций IPX/SPX с программой ESR,
вызываемой после завершения операции. Программа,
вызвавшая команду NETBIOS без ожидания, получает
управление немедленно. Команда будет
выполняться в фоновом режиме параллельно с
работой вызвавшей ее программы. После того как
выполнение команды будет завершено, управление
будет передано функции, адрес которой необходимо
указать в поле PostRoutine блока NCB. Можно также
дожидаться окончания выполнения команды,
опрашивая в цикле поле FinalCCode, которое будет
содержать значение 0xFF до тех пор, пока команда не
будет выполнена.
Все команды NETBIOS можно разделить на несколько
групп:
для работы с именами;
- для приема и передачи датаграмм;
- для работы с каналами;
- для приема и передачи данных через каналы;
- другие команды.
Так как большинство команд NETBIOS реализованы в
двух вариантах
(с ожиданием и без ожидания), для обозначения
варианта с ожиданием мы будем в названии команды
после префикса NB_ (от слова NETBIOS) добавлять букву W
(от слова wait - ожидание). Например, команда NB_AddName
выполняется без ожидания, а команда NB_WAddName - с
ожиданием.
У команд без ожидания старший бит кода команды
установлен в единицу.
4.3.1. Работа с именами
В этой группе есть команды, позволяющие
добавлять обычное или групповое имя, удалять имя.
Все эти команды могут работать в двух вариантах -
с ожиданием и без ожидания.
NB_WAddName (0x30)
Команда добавляет указанное в поле OurName имя в
таблицу имен, расположенную на рабочей станции.
Имя должно быть уникальным в сети. Оно не может
использоваться на других станциях ни как
обычное, ни как групповое.
Если длина имени меньше 16 байт, оно должно быть
дополнено справа символами пробела. Можно
закрыть имя двоичным нулем для совместимости со
строками языка Си. Нуль должен находиться в
последней позиции имени.
После успешного выполнения команды NETBIOS
присваивает имени номер и возвращает его в поле
LocalSessionNumber блока NCB. Номер имени может
потребоваться вам для работы с датаграммами.
В процессе добавления имени NETBIOS посылает по
сети запрос. Если такое имя уже используется на
какой-либо станции, эта станция пришлет ответ.
В этом случае команда завершиться с ошибкой и имя
добавлено не будет.
Процедура добавления имени занимает
достаточно много времени. Это связано с
необходимостью выполнить опрос всех станций
сети. Поэтому вы должны добавлять имена один раз
в самом начале работы программы.
Поля NCB на входе |
Содержимое |
Cmd |
0x30 |
OurName |
Добавляемое имя |
PostRoutine |
Дальний указатель на POST-программу или
нулевое значение, если POST-программа не
используется |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
NetworkNameNumber |
Присвоенный номер имени |
CCode |
Промежуточный код завершения команды |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля CCode
на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x09 |
Нет доступных ресурсов |
0x0D |
Указанное команде имя уже используется
на этой станции |
0x0E |
Переполнение таблицы имен |
0x15 |
Неправильное имя |
0x16 |
Имя уже используется на одной из рабочих
станций в сети |
0x19 |
Конфликт имен (внутренняя ошибка NETBIOS) |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
NB_AddName (0xB0)
Команда аналогична предыдущей, за исключением
того, что она выполняется без ожидания и в поле Cmd
необходимо записать значение 0xB0.
NB_WAddGroupName (0x36)
Команда добавляет указанное в поле OurName
групповое имя в таблицу имен, расположенную на
рабочей станции.
Имя не должно использоваться другими станциями
в сети как обычное. Однако несколько станций
могут использовать одно и тоже имя как групповое.
Если длина имени меньше 16 байт, оно должно быть
дополнено справа символами пробела. Можно
закрыть имя двоичным нулем для совместимости со
строками языка Си. Нуль должен находиться в
последней позиции имени.
После успешного выполнения команды NETBIOS
присваивает имени номер и возвращает его в поле
LocalSessionNumber блока NCB. Номер имени нужен для работы с
датаграммами.
Поля NCB на входе |
Содержимое |
Cmd |
0x36 |
OurName |
Добавляемое групповое имя |
PostRoutine |
Дальний указатель на POST-программу или
нулевое значение, если POST-программа не
используется |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
NetworkNameNumber |
Присвоенный номер имени |
CCode |
Промежуточный код завершения команды |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля CCode
на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x09 |
Нет доступных ресурсов |
0x0D |
Указанное команде имя уже используется
на этой станции |
0x0E |
Переполнение таблицы имен |
0x15 |
Неправильное имя |
0x16 |
Имя уже используется на одной из рабочих
станций
в сети |
0x19 |
Конфликт имен (внутренняя ошибка NETBIOS) |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
NB_AddGroupName (0xB6)
Команда аналогична предыдущей, за исключением
того, что она выполняется без ожидания и в поле Cmd
необходимо записать значение 0xB6.
NB_WDeleteName (0x31)
Команда удаляет имя из таблицы имен рабочей
станции, если оно не используется каким-либо
каналом. Если же имя используется каналом, то оно
помечается как назначенное для удаления и
удаляется после закрытия канала.
Если вы попытаетесь удалить имя, которое
используется каналом, команда завершится с кодом
ошибки 0xF. В этом случае перед удалением имени
необходимо закрыть канал (см. дальше описание
команд для работы с каналами). Как только канал
будет закрыт, связанное с ним имя будет
автоматически удалено, если перед закрытием
канала выполнялась попытка удалить имя.
Если имя используется несколькими каналами,
его можно удалить только после закрытия всех
связанных с ним каналов.
Поля NCB на входе |
Содержимое |
Cmd |
0x31 |
OurName |
Удаляемое имя |
PostRoutine |
Дальний указатель на POST-программу или
нулевое значение, если POST-программа не
используется |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
CCode |
Промежуточный код завершения команды |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля CCode
на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x0F |
Имя используется каналом. Немедленное
удаление имени невозможно, однако оно отмечено
как назначенное для удаления и будет удалено
после закрытия канала |
0x15 |
Неправильное имя |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
NB_DeleteName (0xB1)
Команда аналогична предыдущей, за исключением
того, что она выполняется без ожидания и в поле Cmd
необходимо записать значение 0xB1.
4.3.2. Прием и передача
датаграмм
С помощью команд приема и передачи датаграмм вы
можете передавать и принимать пакеты без
подтверждения, аналогично тому, как это
выполняет протокол IPX.
Есть команды для передачи и приема датаграмм по
обычному или групповому имени, а также для
передачи и приема датаграмм, адресованных
одновременно всем станциям в сети.
В отличие от протокола IPX протокол NETBIOS
использует разные команды для приема обычных
датаграмм и датаграмм, адресованных всем
станциям в сети.
Протокол IPX не позволяет вам передавать пакет
группе станций в сети. Вы можете передать пакет
либо какой-либо одной станции, либо всем станциям
сразу. С помощью NETBIOS вы можете организовать
передачу данных так, что пакеты будут
приниматься только одной группой станций в сети
по ее групповому имени.
Длина сообщений, передаваемых при помощи
команд данной группы, ограничена 512 байтами.
Через каналы вы можете передавать блоки данных
существенно большего размера.
NB_WSendDatagram (0x20)
Команда предназначена для передачи блока
данных размером от 1 до 512 байт в виде датаграммы
(без подтверждения приема). Датаграмма может быть
послана на обычное или групповое имя.
Для передачи датаграммы вам не надо создавать
канал с принимающей станцией.
Поля NCB на входе |
Содержимое |
Cmd |
0x20 |
NetworkNameNumber |
Номер, присвоенный при добавлении имени |
CallName |
Имя станции, которой передаются данные |
Buffer |
Адрес буфера, содержащего передаваемые
данные |
Size |
Размер буфера |
PostRoutine |
Дальний указатель на POST-программу или
нулевое значение, если POST-программа не
используется |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
CCode |
Промежуточный код завершения команды |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля CCode
на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x01 |
Неправильная длина буфера |
0x03 |
Неправильный код команды |
0x13 |
Неправильный номер имени |
0x19 |
Конфликт имен (внутренняя ошибка NETBIOS) |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
NB_SendDatagram (0xA0)
Команда аналогична предыдущей, за исключением
того, что она выполняется без ожидания и в поле Cmd
необходимо записать значение 0xA0.
NB_WSendBroadcastDatagram (0x22)
Команда посылает датаграмму, которую примут
все станции, выдавшие команду NB_ReceiveBroadcastDatagram (в
том числе и передающая станция, если она тоже
выдала команду NB_ReceiveBroadcastDatagram).
Если на одной станции команда NB_ReceiveBroadcastDatagram
выдана несколько раз, все буферы после приема
данных будут содержать одну и ту же информацию.
Заметим, что датаграммы, посылаемые этой
командой одновременно всем станциям, могут быть
приняты только теми станциями, которые выдали
команду NB_ReceiveBroadcastDatagram. Поэтому если станция
желает принимать датаграммы, передаваемые в
"широковещательном" режиме, она должна
специально к этому подготовиться. В протоколе IPX
(в отличие от протокола NETBIOS) существует одна
универсальная функция, которая может принимать и
обычные, и "широковещательные" датаграммы.
Поля NCB на входе |
Содержимое |
Cmd |
0x22 |
NetworkNameNumber |
Номер, присвоенный при добавлении имени |
Buffer |
Адрес буфера, содержащего передаваемые
данные |
Size |
Размер буфера |
PostRoutine |
Дальний указатель на POST-программу или
нулевое значение, если POST-программа не
используется |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
CCode |
Промежуточный код завершения команды |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля CCode
на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x01 |
Неправильная длина буфера |
0x03 |
Неправильный код команды |
0x13 |
Неправильный номер имени |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
NB_SendBroadcastDatagram (0xA2)
Команда аналогична предыдущей, за исключением
того, что она выполняется без ожидания и в поле Cmd
необходимо записать значение 0xA2.
NB_WReceiveDatagram (0x21)
Команда предназначена для приема датаграмм,
переданных командой NB_SendDatagram. Она не может
принимать датаграммы, переданные в
"широковещательном" режиме командой
NB_SendBroadcastDatagram. Однако эта команда может принимать
датаграммы, посланные на групповое имя.
Если перед вызовом команды в поле NetworkNameNumber
блока NCB записать значение 0xFF, команда сможет
принимать датаграммы от любой станции для любого
имени.
Если длина принятой датаграммы превышает
значение, указанное в поле Size, принятый блок
данных будет обрезан.
Поля NCB на входе |
Содержимое |
Cmd |
0x21 |
NetworkNameNumber |
Номер, присвоенный при добавлении имени
или 0xFF |
Buffer |
Адрес буфера, содержащего передаваемые
данные |
Size |
Размер буфера |
PostRoutine |
Дальний указатель на POST-программу или
нулевое значение, если POST-программа не
используется |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
CallName |
Имя станции, от которой получена
датаграмма |
Size |
Размер принятого блока данных |
CCode |
Промежуточный код завершения команды |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля CCode
на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x01 |
Неправильная длина буфера |
0x03 |
Неправильный код команды |
0x06 |
Размер буфера слишком мал для того,
чтобы разместить в нем принятые данные |
0x0B |
Команда отменена |
0x13 |
Неправильный номер имени |
0x17 |
Имя удалено |
0x19 |
Конфликт имен (внутренняя ошибка NETBIOS) |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
NB_ReceiveDatagram (0xA1)
Команда аналогична предыдущей, за исключением
того, что она выполняется без ожидания и в поле Cmd
необходимо записать значение 0xA1.
NB_WReceiveBroadcastDatagram (0x23)
Команда предназначена для приема датаграмм,
переданных командой NB_SendBroadcastDatagram. Она не может
принимать датаграммы, переданные командой
NB_SendDatagram.
Если перед вызовом команды в поле NetworkNameNumber
блока NCB записать значение 0xFF, команда сможет
принимать датаграммы от любой станции для любого
имени.
Если длина принятой датаграммы превышает
значение, указанное в поле Size, принятый блок
данных будет обрезан.
Поля NCB на входе |
Содержимое |
Cmd |
0x23 |
NetworkNameNumber |
Номер, присвоенный при добавлении имени
или 0xFF |
Buffer |
Адрес буфера, содержащего передаваемые
данные |
Size |
Размер буфера |
PostRoutine |
Дальний указатель на POST-программу или
нулевое значение, если POST-программа не
используется |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
CallName |
Имя станции, от которой получена
датаграмма |
Size |
Размер принятого блока данных |
CCode |
Промежуточный код завершения команды |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля CCode
на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x01 |
Неправильная длина буфера |
0x03 |
Неправильный код команды |
0x06 |
Размер буфера слишком мал для того,
чтобы разместить в нем принятые данные |
0x0B |
Команда отменена |
0x13 |
Неправильный номер имени |
0x17 |
Имя удалено |
0x19 |
Конфликт имен (внутренняя ошибка NETBIOS) |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
NB_ReceiveBroadcastDatagram (0xA3)
Команда аналогична предыдущей, за исключением
того, что она выполняется без ожидания и в поле Cmd
необходимо записать значение 0xA3.
4.3.3. Работа с каналами
В группе команд, предназначенных для работы с
каналами, есть команды для создания канала,
команды для удаления канала, а также команда для
определения состояния канала.
Канал создается одновременно двумя станциями,
одна из которых при этом находится в режиме
приема запроса на создание канала, а другая
передает такой запрос.
Вы можете создать канал между любыми двумя
именами в сети. При работе с каналами имена
используются только для создания каналов.
Впоследствии, когда каналы уже будут созданы, для
передачи данных используются номера каналов, а
не имена или номера имен.
Можно создать канал с самим собой, если при
создании канала указать в качестве имени
партнера свое имя.
NB_WCall (0x10)
Команда устанавливает канал между двумя
именами, заданными в блоке NCB. Эти имена могут
относиться к программам, работающим на разных
станциях или на одной станции. В поле OurName
указывается имя станции, которая устанавливает
канал, в поле CallName - имя станции, с которой
устанавливается канал.
Для успешного создания канала принимающая
сторона должна выдать команду NB_Listen, которая
будет описана ниже.
Можно установить канал не только с обычным, но и
с групповым именем. Для этого придется выдать
команду NB_WCall несколько раз, так как за один вызов
создается только один канал.
Команда NB_WCall делает несколько попыток создать
канал и в случае
неудачи возвращает код ошибки.
При создании канала указывается время
тайм-аута для операций приема и передачи данных.
Если команды приема или передачи данных через
каналы не будут выполнены в течение времени
тайм-аута, они (команды) будут прерваны. При этом
считается, что канал неработоспособен.
После создания канала поле LocalSessionNumber будет
содержать присвоенный номер канала. Сохраните
его для использования в процессе приема и
передачи данных по каналу.
Поля NCB на входе |
Содержимое |
Cmd |
0x10 |
CallName |
Имя, с которым устанавливается канал |
OurName |
Имя станции, создающей канал |
ReceiveTimeout |
Время ожидания приема, в 1/2 с |
SendTimeout |
Время ожидания передачи, в 1/2 с |
PostRoutine |
Дальний указатель на POST-программу или
нулевое значение, если POST-программа не
используется |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
LocalSessionNumber |
Присвоенный номер канала |
CCode |
Промежуточный код завершения команды |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля CCode
на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x09 |
Нет доступных ресурсов |
0x15 |
Неправильное имя |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x05 |
Истекло время ожидания |
0x09 |
Нет доступных ресурсов |
0x0B |
Команда отменена |
0x11 |
Переполнилась таблица каналов |
0x12 |
Создание канала отвергнуто |
0x14 |
Нет ответа от станции с указанным именем
или в сети нет такого имени |
0x15 |
Неправильное имя |
0x18 |
Ненормальное закрытие канала |
0x19 |
Конфликт имен (внутренняя ошибка NETBIOS) |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
NB_Call (0x90)
Команда аналогична предыдущей, за исключением
того, что она выполняется без ожидания и в поле Cmd
необходимо записать значение 0x90.
NB_WListen (0x11)
Команда работает в паре с предыдущей командой и
предназначена для организации канала с
вызываемой стороны.
В поле CallName блока NCB необходимо указать имя, с
которым устанавливается канал. Если в первый
байт имени записать символ "*", канал будет
установлен с любой вызывающей станцией.
Программа может выдать несколько команд NB_Listen
для создания одно-
временно нескольких каналов.
В случае успешного завершения команда запишет
в поле LocalSessionNumber номер созданного канала.
При создании канала необходимо указать время
тайм-аута для операций приема и передачи данных
через канал. Сама команда NB_WListen не использует
тайм-аут. Программа, выдавшая эту команду, будет
находиться в состоянии ожидания до тех пор, пока
какая-либо станция не пожелает создать с ней
канал. Для исключения состояния "зависания"
программы лучше использовать вариант NB_Listen этой
команды (без ожидания).
Поля NCB на входе |
Содержимое |
Cmd |
0x11 |
CallName |
Имя, с которым устанавливается канал.
Если в первый байт имени записать символ "*",
канал будет установлен с любой вызывающей
станцией |
OurName |
Имя станции, создающей канал с
принимающей стороны |
ReceiveTimeout |
Время ожидания приема, в 1/2 с |
SendTimeout |
Время ожидания передачи, в 1/2 с |
PostRoutine |
Дальний указатель на POST-программу или
нулевое значение, если POST-программа не
используется |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
LocalSessionNumber |
Присвоенный номер канала |
CallName |
В это поле записывается имя вызвавшей
станции, если при установлении канала было
указано имя "*" |
CCode |
Промежуточный код завершения команды |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля CCode
на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x09 |
Нет доступных ресурсов |
0x15 |
Неправильное имя |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x09 |
Нет доступных ресурсов |
0x0B |
Команда отменена |
0x11 |
Переполнилась таблица каналов |
0x15 |
Неправильное имя |
0x17 |
Указанное имя было удалено |
0x18 |
Ненормальное закрытие канала |
0x19 |
Конфликт имен (внутренняя ошибка NETBIOS) |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
NB_Listen (0x91)
Команда аналогична предыдущей, за исключением
того, что она выполняется без ожидания и в поле Cmd
необходимо записать значение 0x91.
NB_WHangUp (0x12)
Команда предназначена для закрытия канала,
номер которого указан в поле LocalSessionNumber блока NCB.
Она должна быть выполнена с обеих сторон канала
после завершения работы.
Если для закрываемого с помощью этой команды
канала на других станциях выдана команда NB_WReceive,
она завершается с кодом ощибки 0x0A. Выданная для
закрываемого канала команда NB_WSend также
завершается с кодом 0x0A, но через 20 секунд, которые
отводятся ей для завершения своей работы. Если
команда NB_WSend не успела завершить передачу за 20
секунд, команда NB_WHangUp завершается с кодом 0x05.
Аналогично с кодом 0x0A завершает свою работу и
команда NB_WReceiveAny, выданная для закрываемого
канала.
Другие команды, выданные для закрываемого
канала, завершаются с кодом 0x18.
Если программа пытается закрыть канал, который
был уже закрыт или не существовал, такая ситуация
не считается ошибочной и в поле кода ошибки
проставляется нулевое значение.
Поля NCB на входе |
Содержимое |
Cmd |
0x12 |
LocalSessionNumber |
Номер закрываемого канала |
PostRoutine |
Дальний указатель на POST-программу или
нулевое значение, если POST-программа не
используется |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
CCode |
Промежуточный код завершения команды |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля CCode
на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x05 |
Истекло время ожидания |
0x08 |
Неправильный номер канала |
0x0A |
Канал уже закрыт |
0x0B |
Команда отменена |
0x18 |
Ненормальное закрытие канала |
0x19 |
Конфликт имен (внутренняя ошибка NETBIOS) |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
NB_HangUp (0x92)
Команда аналогична предыдущей, за исключением
того, что она выполняется без ожидания и в поле Cmd
необходимо записать значение 0x92.
NB_WSessionStatus (0x34)
Команда возвращает программе состояние канала,
имя которого указано в поле OurName блока NCB. В
качестве имени можно указать символ "*", в
этом случае программа получит информацию о
каналах, относящихся ко всем именам станций,
имеющихся в локальной таблице имен на вызывающей
команду станции.
Информация о состоянии каналов возвращается в
буфер, адрес которого программа должна записать
в поле Buffer блока NCB. Размер буфера должен быть
указан в поле Size блока NCB.
Формат буфера можно описать следующей
структурой:
struct _SESSION_STATUS {
unsigned char NameNumber;
unsigned char SessionCount;
unsigned char DatagramsOutstanding;
unsigned char ReceiveAnyoutstanding;
struct _SESSION {
unsigned char LocalSessionNumber;
unsigned char State;
char LocalName[16];
char RemoteName[16];
unsigned char ReceiveCount;
unsigned char SendCount;
} Session[40];
};
Приведем список полей буфера:
Название поля |
Назначение поля |
NameNumber |
Номер имени канала |
SessionCount |
Количество каналов |
DatagramsOutstanding |
Количество выданных команд на прием
датаграмм |
ReceiveAnyoutstanding |
Количество выданных команд на прием
командой NB_ReceiveAny |
Session |
Массив структур, описывающих каждый
канал в отдельности |
LocalSessionNumber |
Номер канала |
State |
Состояние канала:
1 - ожидание завершения команды NB_Listen;
2 - ожидание завершения команды NB_Call;
3 - канал установлен;
4 - ожидание завершения команды NB_HangUp;
5 - команда NB_HangUp завершила свое вы- полнение;
6 - канал закрыт с ошибкой. |
LocalName |
Имя локальной станции |
RemoteName |
Имя удаленной станции |
ReceiveCount |
Количество ожидающих завершение команд
NB_Receive |
SendCount |
Количество ожидающих завершения команд
NB_Send |
Поля NCB на входе |
Содержимое |
Cmd |
0x34 |
Buffer |
Дальний адрес буфера для приема
информации
о состоянии каналов |
Size |
Размер буфера |
OurNames |
Имя канала, для которого необходимо
получить информацию о состоянии. В качестве
имени можно указывать "*" |
PostRoutine |
Дальний указатель на POST-программу или
нулевое значение, если POST-программа не
используется |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
Size |
Размер заполненной части буфера |
CCode |
Промежуточный код завершения команды |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля CCode
на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x15 |
Неправильное имя |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x01 |
Неправильная длина буфера |
0x03 |
Неправильный код команды |
0x06 |
Слишком мал размер выделенного буфера |
0x19 |
Конфликт имен (внутренняя ошибка NETBIOS) |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
NB_SessionStatus (0xB4)
Команда аналогична предыдущей, за исключением
того, что она выполняется без ожидания и в поле Cmd
необходимо записать значение 0xB4.
4.3.4. Прием и передача данных
через каналы
NB_WSend (0x14)
С помощью этой команды программа может
передать блок данных размером от 1 до 65535 байт по
созданному ранее каналу. Перед вызовом команды
программа должна записать номер канала, по
которому будет выполняться передача, в поле
LocalSessionNumber блока NCB. Адрес передаваемого блока
данных и его длина должны быть записаны в поля
Buffer и Size.
Для приема данных, передаваемых командой NB_WSend,
необходимо использовать команду NB_WReceive (или
NB_Receive).
Механизм передачи данных с использованием
каналов гарантирует не только доставку блоков
данных, но и правильную последовательность, в
которой эти блоки будут приняты.
Если истекло время тайм-аута, заданного при
создании канала, команда завершается с ошибкой.
Поля NCB на входе |
Содержимое |
Cmd |
0x14 |
LocalSessionNumber |
Номер используемого канала |
Buffer |
Указатель на буфер, содержащий
передаваемые данные |
Size |
Размер буфера |
PostRoutine |
Дальний указатель на POST-программу или
нулевое значение, если POST-программа не
используется |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
CCode |
Промежуточный код завершения команды |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля CCode
на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x05 |
Истекло время ожидания |
0x08 |
Неправильный номер канала |
0x0A |
Канал закрыт |
0x0B |
Команда отменена |
0x18 |
Ненормальное закрытие канала |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
NB_Send (0x94)
Команда аналогична предыдущей, за исключением
того, что она выполняется без ожидания и в поле Cmd
необходимо записать значение 0x94.
NB_WSendNoAck (0x71)
По своему назначению команда полностью
аналогична предыдущей, однако в отличие от нее не
выполняет проверку доставки блока данных
принимающей стороне. За счет этого она работает
немного быстрее.
Поля NCB на входе |
Содержимое |
Cmd |
0x71 |
LocalSessionNumber |
Номер используемого канала |
Buffer |
Указатель на буфер, содержащий
передаваемые данные |
Size |
Размер буфера |
PostRoutine |
Дальний указатель на POST-программу или
нулевое значение, если POST-программа не
используется |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
CCode |
Промежуточный код завершения команды |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля CCode
на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x05 |
Истекло время ожидания |
0x08 |
Неправильный номер канала |
0x0A |
Канал закрыт |
0x0B |
Команда отменена |
0x18 |
Ненормальное закрытие канала |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
NB_SendNoAck (0xF1)
Команда аналогична предыдущей, за исключением
того, что она выполняется без ожидания и в поле Cmd
необходимо записать значение 0xF1.
NB_WChainSend (0x17)
Команда работает аналогично команде NB_WSend,
однако с ее помощью можно передать сразу два
блока данных. Данные передаются как один блок.
Общий размер передаваемых с помощью этой команды
данных может достигать 131070 байт.
Первый буфер задается, как и для команды NB_WSend,
через поля Buffer и Size. Размер второго буфера должен
быть записан в первые два байта поля CallName блока
ECB, а его адрес занимает следующие четыре байта
этого поля.
Поля NCB на входе |
Содержимое |
Cmd |
0x17 |
LocalSessionNumber |
Номер используемого канала |
Buffer |
Указатель на первый буфер, содержащий
передаваемые данные |
Size |
Размер первого буфера |
CallName |
Первые два байта содержат размер
второго буфера, следующие четыре байта - дальний
адрес второго буфера |
PostRoutine |
Дальний указатель на POST-программу или
нулевое значение, если POST-программа не
используется |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
CCode |
Промежуточный код завершения команды |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля CCode
на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x05 |
Истекло время ожидания |
0x08 |
Неправильный номер канала |
0x0A |
Канал закрыт |
0x0B |
Команда отменена |
0x18 |
Ненормальное закрытие канала |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
NB_ChainSend (0x97)
Команда аналогична предыдущей, за исключением
того, что она выполняется без ожидания и в поле Cmd
необходимо записать значение 0x97.
NB_WChainSendNoAck (0x72)
Команда аналогична команде NB_WCainSend, однако в
отличие от нее не выполняет проверку доставки
блока данных принимающей стороне. За счет этого
она работает немного быстрее.
Поля NCB на входе |
Содержимое |
Cmd |
0x72 |
LocalSessionNumber |
Номер используемого канала |
Buffer |
Указатель на первый буфер, содержащий
передаваемые данные |
Size |
Размер первого буфера |
CallName |
Первые два байта содержат размер
второго буфера, следующие четыре байта - дальний
адрес второго буфера |
PostRoutine |
Дальний указатель на POST-программу или
нулевое значение, если POST-программа не
используется |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
CCode |
Промежуточный код завершения команды |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля CCode
на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x05 |
Истекло время ожидания |
0x08 |
Неправильный номер канала |
0x0A |
Канал закрыт |
0x0B |
Команда отменена |
0x18 |
Ненормальное закрытие канала |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
NB_ChainSendNoAck (0xF2)
Команда аналогична предыдущей, за исключением
того, что она выполняется без ожидания и в поле Cmd
необходимо записать значение 0xF2.
NB_WReceive (0x15)
Команда принимает данные, посланные командами
NB_WSend или NB_WChainSend.
Если размер буфера недостаточен для записи
принятых данных, команда возвращает код ошибки
0x06; в этом случае вы можете вызвать команду еще
раз для того, чтобы прочесть данные, не
поместившиеся в буфере при предыдущем вызове
команды.
Поля NCB на входе |
Содержимое |
Cmd |
0x15 |
LocalSessionNumber |
Номер используемого канала |
Buffer |
Указатель на буфер, используемый для
записи принятых данных |
Size |
Размер буфера |
PostRoutine |
Дальний указатель на POST-программу или
нулевое значение, если POST-программа не
используется |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
Size |
Количество принятых и записанных в
буфер байт данных |
CCode |
Промежуточный код завершения команды |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля CCode
на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x05 |
Истекло время ожидания |
0x06 |
Размер буфера недостаточен для записи
принятых данных |
0x08 |
Неправильный номер канала |
0x0A |
Канал закрыт |
0x0B |
Команда отменена |
0x18 |
Ненормальное закрытие канала |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
NB_Receive (0x95)
Команда аналогична предыдущей, за исключением
того, что она выполняется без ожидания и в поле Cmd
необходимо записать значение 0x95.
NB_WReceiveAny (0x16)
Команда принимает данные от всех партнеров. Для
этой команды вместо номера канала необходимо
указать номер имени, полученный вашей программой
при добавлении имени. Если в поле NetworkNameNumber
проставить значение 0xFF, эта команда будет
принимать данные от любых партнеров для любых
каналов, созданных на вашей станции.
Если размер буфера недостаточен для записи
принятых данных, команда возвращает код ошибки
0x06; в этом случае вы можете вызвать команду еще
раз для того, чтобы прочесть данные, не
поместившиеся в буфере при предыдущем вызове
команды.
Поля NCB на входе |
Содержимое |
Cmd |
0x16 |
NetworkNameNumber |
Номер имени или 0xFF |
Buffer |
Указатель на буфер, используемый для
записи принятых данных |
Size |
Размер буфера |
PostRoutine |
Дальний указатель на POST-программу или
нулевое значение, если POST-программа не
используется |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
Size |
Количество принятых и записанных в
буфер байт данных |
NetworkNameNumber |
Номер имени станции, от которой пришли
данные |
CCode |
Промежуточный код завершения команды |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля CCode
на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x06 |
Размер буфера недостаточен для записи
принятых данных |
0x08 |
Неправильный номер канала |
0x0A |
Канал закрыт |
0x0B |
Команда отменена |
0x13 |
Неправильный номер имени |
0x17 |
Указанное имя было удалено |
0x18 |
Ненормальное закрытие канала |
0x19 |
Конфликт имен (внутренняя ошибка NETBIOS) |
0x21 |
Интерфейс занят |
0x22 |
Выдано слишком много команд |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
NB_ReceiveAny (0x96)
Команда аналогична предыдущей, за исключением
того, что она выполняется без ожидания и в поле Cmd
необходимо записать значение 0x96.
4.3.5. Другие команды
В этом разделе мы опишем команды NETBIOS,
позволяющие сбросить драйвер NETBIOS в исходное
состояние, отменить выданную ранее команду.
NB_WResetAdapter (0x32)
Команда сбрасывает NETBIOS в исходное состояние,
удаляет все имеющиеся каналы и имена (кроме
постоянного имени, которое нельзя удалить, не
вытащив сетевой адаптер из компьютера). С помощью
этой команды можно также изменить максимальное
количество доступных программе каналов и
используемых одновременно блоков NCB. По
умолчанию доступны шесть каналов и 12 блоков NCB.
Поля NCB на входе |
Содержимое |
Cmd |
0x32 |
LocalSessionNumber |
Максимальное количество каналов или 0
для использования значения по умолчанию |
NetworkNameNumber |
Максимальное количество блоков NCB или 0
для использования значения по умолчанию |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля CCode на выходе |
Не используется |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
NB_WCancel (0x35)
Команда используется для отмены других
запущенных команд. Адрес NCB для отменяемой
команды должен быть записан в поле Buffer.
С помощью этой команды нельзя отменить
следующие команды: NB_AddName, NB_AddGroupName, NB_DeleteName,
NB_SendDatagramm, NB_SendBroadcastDatagramm, NB_ResetAdapter, NB_SessionStatus, NB_Cancel,
NB_Unlink.
Поля NCB на входе |
Содержимое |
Cmd |
0x35 |
Buffer |
Указатель на блок NCB, для которого
отменяется команда |
AdapterNumber |
Номер адаптера; 0 - первый адаптер, 1 -
второй |
Поля NCB на выходе |
Содержимое |
FinalCCode |
Окончательный код завершения команды |
Содержимое поля
CCode на выходе |
Не используется |
Содержимое поля
FinalCCode на выходе |
Значение |
0x00 |
Нет ошибок |
0x03 |
Неправильный код команды |
0x23 |
Неправильное значение в поле номера
адаптера AdapterNumber |
0x24 |
Команда уже начала выполняться, когда
пришел запрос на ее отмену |
0x26 |
Данную команду нельзя отменить |
0x40 - 0x4F |
Необычное состояние сети (Unusual network condition)
|
0x50 - 0xFE |
Сбой сетевого адаптера или другого
сетевого аппаратного обеспечения |
|