Для работы с NetBios программа должна создать NetWorkControlBlock (NCB), который содержит все необходимое для выполнения операций. Сам NCB не передается. Фактически это набор данных на основе которых формируется команда.
Структура NCB:
Код команды | 1 байт |
Немедленно возвращаемый код | 1 байт |
Номер локальной сессии | 1 байт |
Номер имени | 1 байт |
Адрес буфера данных | 4 (far pointer) байт |
Длина буфера данных | 2 байт |
Имя удаленного компьютера | 16 байт |
Имя вашего компьютера | 16 байт |
Тайм-аут получения | 1 байт |
Тайм-аут посылки | 1 байт |
Адрес POST-процедуры | 4 (far pointer) байт |
Номер адаптера | 1 байт |
Окончательный возвращаемый код | 1 байт |
Зарезервировано | 14 байт |
Код команды определяет команду, которая будет выполняться. Если самый старший бит установлен в единицу, то команда будет выполняться без ожидания.
Код возврата содержит код ошибки возвращаемой NetBios до начала выполняемой картины. Это позволяет не выполнять неизвестные и неправильно сформированные команды.
Номер локальной сессии содержит номер сессии после выполнения команд Listen и Call.
Номер имени записывается после выполнения команд AddName и AddGroupName.
Адрес буфера данных содержит указатель на буфер данных для передачи и приема данных.
Длина буфера данных содержит размер буфера данных.
Тайм-аут получения и тайм-аут посылки содержит интервал времени кратный 0.5 секунд, в течение которых ожидается завершение команд приема или передачи.
Адрес POST-процедуры содержит указатель на процедуру, которая будет выполнена после завершения команды без ожидания.
Окончательно возвращаемый код во время выполнения команды содержит FFh, после выполнения сюда заносится значение кода ошибки. Если нет ошибки заносится 00.
Структура NCB на C:
Struct_ NCB
{
unsigned char Cmd;
unsigned char Ccode;
unsigned char LocalSessionNumber;
unsigned char NetworkNameNumber;
void far *Buffer;
unsigned int Size;
char CallName[16];
char OurName[16];
unsigned char RecieveTimeout;
unsigned char SendTimeout;
void interrupt (*PostRoutine)(void);
unsigned char AdapterNumber;
unsigned char FinalCode;
unsigned char Reserve[14];
}ncb;