15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту

Библиотека Системного Программиста. Том 8
Локальные сети персональных компьютеров. Использование протоколов IPX, SPX, NETBIOS

7. Приложение 3. ФУНКЦИИ NETBIOS

7.1. Работа с именами

7.2. Прием и передача датаграмм

7.3. Работа с каналами

7.4. Прием и передача данных через каналы

7.5. Другие команды

7.1. Работа с именами

NB_WAddName (0x30) - добавить имя

Поля NCB на входе Содержимое
Cmd0x30
OurNameДобавляемое имя
PostRoutineДальний указатель на POST-программу или нулевое значение, если POST-программа не используется
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
NetworkNameNumberПрисвоенный номер имени
CCodeПромежуточный код завершения команды
FinalCCodeОкончательный код завершения команды

NB_AddName (0xB0)

Команда аналогична предыдущей, за исключением того, что она выполняется без ожидания и в поле Cmd необходимо записать значение 0xB0.

NB_WAddGroupName (0x36) - добавить групповое имя

Поля NCB на входе Содержимое
Cmd0x36
OurNameДобавляемое групповое имя
PostRoutineДальний указатель на POST-программу или нулевое значение, если POST-программа не используется
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
NetworkNameNumberПрисвоенный номер имени
CCodeПромежуточный код завершения команды
FinalCCodeОкончательный код завершения команды

NB_AddGroupName (0xB6)

Команда аналогична предыдущей, за исключением того, что она выполняется без ожидания и в поле Cmd необходимо записать значение 0xB6.

NB_WDeleteName (0x31) - удалить имя

Поля NCB на входе Содержимое
Cmd0x31
OurNameУдаляемое имя
PostRoutineДальний указатель на POST-программу или нулевое значение, если POST-программа не используется
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
CCodeПромежуточный код завершения команды
FinalCCodeОкончательный код завершения команды

NB_DeleteName (0xB1)

Команда аналогична предыдущей, за исключением того, что она выполняется без ожидания и в поле Cmd необходимо записать значение 0xB1.

7.2. Прием и передача датаграмм

NB_WSendDatagram (0x20) - послать датаграмму

Поля NCB на входе Содержимое
Cmd0x20
NetworkNameNumberНомер, присвоенный при добавлении имени
CallNameИмя станции, которой передаются данные
BufferАдрес буфера, содержащего передаваемые данные
SizeРазмер буфера
PostRoutineДальний указатель на POST-программу или нулевое значение, если POST-программа не используется
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
CCodeПромежуточный код завершения команды
FinalCCodeОкончательный код завершения команды

NB_SendDatagram (0xA0)

Команда аналогична предыдущей, за исключением того, что она выполняется без ожидания и в поле Cmd необходимо записать значение 0xA0.

NB_WSendBroadcastDatagram (0x22) - послать датаграмму одновременно всем станциям

Поля NCB на входе Содержимое
Cmd0x22
NetworkNameNumberНомер, присвоенный при добавлении имени
BufferАдрес буфера, содержащего передаваемые данные
SizeРазмер буфера
PostRoutineДальний указатель на POST-программу или нулевое значение, если POST-программа не используется
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
CCodeПромежуточный код завершения команды
FinalCCodeОкончательный код завершения команды

NB_SendBroadcastDatagram (0xA2)

Команда аналогична предыдущей, за исключением того, что она выполняется без ожидания и в поле Cmd необходимо записать значение 0xA2.

NB_WReceiveDatagram (0x21) - принять датаграмму

Поля NCB на входе Содержимое
Cmd0x21
NetworkNameNumberНомер, присвоенный при добавлении имени или 0xFF
BufferАдрес буфера, содержащего передаваемые данные
SizeРазмер буфера
PostRoutineДальний указатель на POST-программу или нулевое значение, если POST-программа не используется
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
CallNameИмя станции, от которой получена датаграмма
SizeРазмер принятого блока данных
CCodeПромежуточный код завершения команды
FinalCCodeОкончательный код завершения команды

NB_ReceiveDatagram (0xA1)

Команда аналогична предыдущей, за исключением того, что она выполняется без ожидания и в поле Cmd необходимо записать значение 0xA1.

NB_WReceiveBroadcastDatagram (0x23) - принять датаграмму, посланную одновременно всем станциям в сети

Поля NCB на входе Содержимое
Cmd0x23
NetworkNameNumberНомер, присвоенный при добавлении имени или 0xFF
BufferАдрес буфера, содержащего передаваемые данные
SizeРазмер буфера
PostRoutineДальний указатель на POST-программу или нулевое значение, если POST-программа не используется
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
CallNameИмя станции, от которой получена датаграмма
SizeРазмер принятого блока данных
CCodeПромежуточный код завершения команды
FinalCCodeОкончательный код завершения команды

NB_ReceiveBroadcastDatagram (0xA3)

Команда аналогична предыдущей, за исключением того, что она выполняется без ожидания и в поле Cmd необходимо записать значение 0xA3.

7.3. Работа с каналами

NB_WCall (0x10) - создать канал с передающей стороны

Поля NCB на входе Содержимое
Cmd0x10
CallNameИмя, с которым устанавливается канал
OurNameИмя станции, создающей канал
ReceiveTimeoutВремя ожидания приема, в 1/2 с
SendTimeoutВремя ожидания передачи, в 1/2 с
PostRoutineДальний указатель на POST-программу или нулевое значение, если POST-программа не используется
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
LocalSessionNumberПрисвоенный номер канала
CCodeПромежуточный код завершения команды
FinalCCodeОкончательный код завершения команды

NB_Call (0x90)

Команда аналогична предыдущей, за исключением того, что она выполняется без ожидания и в поле Cmd необходимо записать значение 0x90.

NB_WListen (0x11) - создать канал с принимающей стороны

Поля NCB на входе Содержимое
Cmd0x11
CallNameИмя, с которым устанавливается канал. Если в первый байт имени записать символ "*", канал будет установлен с любой вызывающей станцией
OurNameИмя станции, создающей канал с принимающей стороны
ReceiveTimeoutВремя ожидания приема, в 1/2 с
SendTimeoutВремя ожидания передачи, в 1/2 с
PostRoutineДальний указатель на POST-программу или нулевое значение, если POST-программа не используется
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
LocalSessionNumberПрисвоенный номер канала
CallNameВ это поле записывается имя вызвавшей станции, если при установлении канала было указано имя "*"
CCodeПромежуточный код завершения команды
FinalCCodeОкончательный код завершения команды

NB_Listen (0x91)

Команда аналогична предыдущей, за исключением того, что она выполняется без ожидания и в поле Cmd необходимо записать значение 0x91.

NB_WHangUp (0x12) - закрыть канал

Поля NCB на входе Содержимое
Cmd0x12
LocalSessionNumberНомер закрываемого канала
PostRoutineДальний указатель на POST-программу или нулевое значение, если POST-программа не используется
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
CCodeПромежуточный код завершения команды
FinalCCodeОкончательный код завершения команды

NB_HangUp (0x92)

Команда аналогична предыдущей, за исключением того, что она выполняется без ожидания и в поле Cmd необходимо записать значение 0x92.

NB_WSessionStatus (0x34) - получить состояние канала

Название поля Назначение поля
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 на входе Содержимое
Cmd0x34
BufferДальний адрес буфера для приема информации о состоянии каналов
SizeРазмер буфера
OurNamesИмя канала, для которого необходимо получить информацию о состоянии. В качестве имени можно указывать "*"
PostRoutineДальний указатель на POST-программу или нулевое значение, если POST-программа не используется
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
SizeРазмер заполненной части буфера
CCodeПромежуточный код завершения команды
FinalCCodeОкончательный код завершения команды

NB_SessionStatus (0xB4)

Команда аналогична предыдущей, за исключением того, что она выполняется без ожидания и в поле Cmd необходимо записать значение 0xB4.

7.4. Прием и передача данных через каналы

NB_WSend (0x14) - передать данные через канал

Поля NCB на входе Содержимое
Cmd0x14
LocalSessionNumber Номер используемого канала
BufferУказатель на буфер, содержащий передаваемые данные
SizeРазмер буфера
PostRoutineДальний указатель на POST-программу или нулевое значение, если POST-программа не используется
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
CCodeПромежуточный код завершения команды
FinalCCodeОкончательный код завершения команды

NB_Send (0x94)

Команда аналогична предыдущей, за исключением того, что она выполняется без ожидания и в поле Cmd необходимо записать значение 0x94.

NB_WSendNoAck (0x71) - передать данные через канал без подтверждения

Поля NCB на входе Содержимое
Cmd0x71
LocalSessionNumber Номер используемого канала
BufferУказатель на буфер, содержащий передаваемые данные
SizeРазмер буфера
PostRoutineДальний указатель на POST-программу или нулевое значение, если POST-программа не используется
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
CCodeПромежуточный код завершения команды
FinalCCodeОкончательный код завершения команды

NB_SendNoAck (0xF1)

Команда аналогична предыдущей, за исключением того, что она выполняется без ожидания и в поле Cmd необходимо записать значение 0xF1.

NB_WChainSend (0x17) - передать данные через канал, используя сцепленные буферы

Поля NCB на входе Содержимое
Cmd0x17
LocalSessionNumber Номер используемого канала
BufferУказатель на первый буфер, содержащий передаваемые данные
SizeРазмер первого буфера
CallNameПервые два байта содержат размер второго буфера, следующие четыре байта - дальний адрес второго буфера
PostRoutineДальний указатель на POST-программу или нулевое значение, если POST-программа не используется
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
CCodeПромежуточный код завершения команды
FinalCCodeОкончательный код завершения команды

NB_ChainSend (0x97)

Команда аналогична предыдущей, за исключением того, что она выполняется без ожидания и в поле Cmd необходимо записать значение 0x97.

NB_WChainSendNoAck (0x72) - передать данные через канал, используя сцепленные буферы без подтверждения

Поля NCB на входе Содержимое
Cmd0x72
LocalSessionNumber Номер используемого канала
BufferУказатель на первый буфер, содержащий передаваемые данные
SizeРазмер первого буфера
CallNameПервые два байта содержат размер второго буфера, следующие четыре байта - дальний адрес второго буфера
PostRoutineДальний указатель на POST-программу или нулевое значение, если POST-программа не используется
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
CCodeПромежуточный код завершения команды
FinalCCodeОкончательный код завершения команды

NB_ChainSendNoAck (0xF2)

Команда аналогична предыдущей, за исключением того, что она выполняется без ожидания и в поле Cmd необходимо записать значение 0xF2.

NB_WReceive (0x15) - принять данные через канал

Поля NCB на входе Содержимое
Cmd0x15
LocalSessionNumber Номер используемого канала
BufferУказатель на буфер, используемый для записи принятых данных
SizeРазмер буфера
PostRoutineДальний указатель на POST-программу или нулевое значение, если POST-программа не используется
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
SizeКоличество принятых и записанных в буфер байт данных
CCodeПромежуточный код завершения команды
FinalCCodeОкончательный код завершения команды

NB_Receive (0x95)

Команда аналогична предыдущей, за исключением того, что она выполняется без ожидания и в поле Cmd необходимо записать значение 0x95.

NB_WReceiveAny (0x16) - принять данные через канал от любого имени

Поля NCB на входе Содержимое
Cmd0x16
NetworkNameNumber Номер имени или 0xFF
BufferУказатель на буфер, используемый для записи принятых данных
SizeРазмер буфера
PostRoutineДальний указатель на POST-программу или нулевое значение, если POST-программа не используется
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
SizeКоличество принятых и записанных в буфер байт данных
NetworkNameNumber Номер имени станции, от которой пришли данные
CCodeПромежуточный код завершения команды
FinalCCodeОкончательный код завершения команды

NB_ReceiveAny (0x96)

Команда аналогична предыдущей, за исключением того, что она выполняется без ожидания и в поле Cmd необходимо записать значение 0x96.

7.5. Другие команды

NB_WResetAdapter (0x32) - сбросить сетевой адаптер

Поля NCB на входе Содержимое
Cmd0x32
LocalSessionNumber Максимальное количество каналов или 0 для использования значения по умолчанию
NetworkNameNumber Максимальное количество блоков NCB или 0 для использования значения по умолчанию
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
FinalCCodeОкончательный код завершения команды

NB_WCancel (0x35) - отменить команду

Поля NCB на входе Содержимое
Cmd0x35
BufferУказатель на блок NCB, для которого отменяется команда
AdapterNumberНомер адаптера; 0 - первый адаптер, 1 - второй

Поля NCB на выходе Содержимое
FinalCCodeОкончательный код завершения команды