Структура NCB (nb30.h)
[Netbios не поддерживается в Windows Vista, Windows Server 2008 и последующих версиях операционной системы]
Структура NCB представляет блок управления сетью. Он содержит сведения о выполняемой команде, необязательную подпрограмму post, необязательный дескриптор событий и указатель на буфер, используемый для сообщений или других данных. Указатель на эту структуру передается в функцию Netbios .
Синтаксис
typedef struct _NCB {
UCHAR ncb_command;
UCHAR ncb_retcode;
UCHAR ncb_lsn;
UCHAR ncb_num;
PUCHAR ncb_buffer;
WORD ncb_length;
UCHAR ncb_callname[NCBNAMSZ];
UCHAR ncb_name[NCBNAMSZ];
UCHAR ncb_rto;
UCHAR ncb_sto;
void()(_NCB *) * ncb_post;
UCHAR ncb_lana_num;
UCHAR ncb_cmd_cplt;
#if ...
UCHAR ncb_reserve[18];
#else
UCHAR ncb_reserve[10];
#endif
HANDLE ncb_event;
} NCB, *PNCB;
Члены
ncb_command
Указывает код команды и флаг, указывающий, обрабатывается ли структура NCB асинхронно. Самый значимый бит содержит флаг . Если константа ASYNCH объединяется с командным кодом (с помощью оператора OR), структура NCB обрабатывается асинхронно. Поддерживаются следующие коды команд.
Код | Значение |
---|---|
NCBACTION |
Windows Server 2003, Windows XP, Windows 2000 и Windows NT: включает расширения для транспортного интерфейса. NCBACTION сопоставляется с TdiAction. Если указан этот код, элемент ncb_buffer указывает на буфер, заполняемый ACTION_HEADER структурой, за которой при необходимости следуют данные. Команды NCBACTION нельзя отменить с помощью NCBCANCEL. NCBACTION не является стандартной командой NetBIOS 3.0. |
NCBADDGRNAME | Добавляет имя группы в локальную таблицу имен. Это имя не может использоваться другим процессом в сети в качестве уникального имени, но его может добавить любой пользователь в качестве имени группы. |
NCBADDNAME | Добавляет уникальное имя в локальную таблицу имен. Драйвер TDI гарантирует уникальность имени в сети. |
NCBASTAT | Извлекает состояние локального или удаленного адаптера. При указании этого кода элемент ncb_buffer указывает на буфер, заполняемый ADAPTER_STATUS структурой, за которой следует массив NAME_BUFFER структур. |
NCBCALL | Открывает сеанс с другим именем. |
NCBCANCEL | Отменяет предыдущую ожидающие команды. |
NCBCHAINSEND | Отправляет содержимое двух буферов данных указанному партнеру по сеансу. |
NCBCHAINSENDNA | Отправляет содержимое двух буферов данных указанному партнеру по сеансу и не ожидает подтверждения. |
NCBDELNAME | Удаляет имя из локальной таблицы имен. |
NCBDGRECV | Получает датаграмму из любого имени. |
NCBDGRECVBC | Получает широковещательную датаграмму из любого имени. |
NCBDGSEND | Отправляет датаграмму на указанное имя. |
NCBDGSENDBC | Отправляет широковещательную датаграмму на каждый узел в локальной сети . |
NCBENUM |
Windows Server 2003, Windows XP, Windows 2000 и Windows NT: перечисление номеров адаптера LAN (LANA). Если указан этот код, элемент ncb_buffer указывает на буфер, заполняемый LANA_ENUM структурой. NCBENUM не является стандартной командой NetBIOS 3.0. |
NCBFINDNAME | Определяет расположение имени в сети. При указании этого кода элемент ncb_buffer указывает на буфер, заполняемый FIND_NAME_HEADER структурой, за которой следует одна или несколько FIND_NAME_BUFFER структур. |
NCBHANGUP | Закрывает указанный сеанс. |
NCBLANSTALERT |
Windows Server 2003, Windows XP, Windows 2000 и Windows NT. Уведомляет пользователя о сбоях локальной сети, которые длятся более одной минуты. |
NCBLISTEN | Позволяет открывать сеанс с другим именем (локальным или удаленным). |
NCBRECV | Получает данные от указанного партнера по сеансу. |
NCBRECVANY | Получает данные из любого сеанса, соответствующего указанному имени. |
NCBRESET |
Сбрасывает адаптер локальной сети. Адаптер должен быть сброшен, прежде чем он сможет принять любую другую команду NCB, которая указывает то же число в элементе ncb_lana_num .
Используйте следующие значения, чтобы указать способ освобождения ресурсов:
|
NCBSEND | Отправляет данные указанному партнеру по сеансу. |
NCBSENDNA | Отправляет данные указанному партнеру по сеансу и не ожидает подтверждения. |
NCBSSTAT | Извлекает состояние сеанса. При указании этого значения элемент ncb_buffer указывает на буфер, заполняемый SESSION_HEADER структурой, за которой следует одна или несколько SESSION_BUFFER структур. |
NCBTRACE |
Активирует или отключает трассировку NCB.
Эта команда не поддерживается. |
NCBUNLINK |
Отменяет связь адаптера.
Эта команда предоставляется для совместимости с более ранними версиями NetBIOS. Он не действует в Windows. |
ncb_retcode
Указывает код возврата. Это значение равно NRC_PENDING во время выполнения асинхронной операции. Система возвращает одно из следующих значений:
Значение | Значение |
---|---|
NRC_GOODRET | Операция успешно выполнена. |
NRC_BUFLEN | Указана недопустимая длина буфера. |
NRC_ILLCMD | Была передана недопустимая команда. |
NRC_CMDTMO | Истекло время ожидания команды. |
NRC_INCOMP | Сообщение было неполным. Приложение выполняет другую команду. |
NRC_BADDR | Адрес буфера был незаконным. |
NRC_SNUMOUT | Номер сеанса вышел за пределы диапазона. |
NRC_NORES | Ресурс недоступен. |
NRC_SCLOSED | Сеанс был закрыт. |
NRC_CMDCAN | Команда была отменена. |
NRC_DUPNAME | В локальной таблице имен существует повторяющееся имя. |
NRC_NAMTFUL | Таблица имен заполнена. |
NRC_ACTSES | Команда завершена; имя содержит активные сеансы и больше не зарегистрировано. |
NRC_LOCTFUL | Таблица локальных сеансов заполнена. |
NRC_REMTFUL | Таблица удаленных сеансов заполнена. Запрос на открытие сеанса был отклонен. |
NRC_ILLNN | Указан недопустимый номер имени. |
NRC_NOCALL | Система не обнаружила имя, которое было вызвано. |
NRC_NOWILD | Подстановочные знаки не допускаются в элементе ncb_name . |
NRC_INUSE | Имя уже использовалось на удаленном адаптере. |
NRC_NAMERR | Имя удалено. |
NRC_SABORT | Сеанс завершился ненормально. |
NRC_NAMCONF | Обнаружен конфликт имен. |
NRC_IFBUSY | Интерфейс был занят. |
NRC_TOOMANY | Слишком много команд было невыполненным; приложение может повторить команду позже. |
NRC_BRIDGE | Член ncb_lana_num не указал допустимый номер сети. |
NRC_CANOCCR | Команда завершена во время выполнения операции отмены. |
NRC_CANCEL | Недопустимая команда NCBCANCEL; команда не была отменена. |
NRC_DUPENV | Имя было определено другим локальным процессом. |
NRC_ENVNOTDEF | Среда не определена. Должна быть выдана команда сброса. |
NRC_OSRESNOTAV | Ресурсы операционной системы исчерпаны. Приложение может повторить команду позже. |
NRC_MAXAPPS | Превышено максимальное число приложений. |
NRC_NOSAPS | Для NetBIOS не были доступны точки доступа к службам .NetBIOS. |
NRC_NORESOURCES | Запрошенные ресурсы были недоступны. |
NRC_INVADDRESS | Недопустимый адрес NCB. |
NRC_INVDDID |
Недопустимый идентификатор DDID NCB.
Этот код возврата не является частью спецификации IBM NetBIOS 3.0 и не возвращается в структуре NCB . Вместо этого он возвращается функцией Netbios . |
NRC_LOCKFAIL | Попытка заблокировать область пользователя завершилась сбоем. |
NRC_OPENERR | Ошибка во время операции открытия, выполняемой драйвером устройства. Этот код ошибки не входит в спецификацию NetBIOS 3.0. |
NRC_SYSTEM | Произошла системная ошибка. |
NRC_PENDING | Асинхронная операция еще не завершена. |
ncb_lsn
Определяет номер локального сеанса. Это число однозначно идентифицирует сеанс в среде. Это число возвращается функцией Netbios после успешной команды NCBCALL.
ncb_num
Указывает номер имени локальной сети. Это число возвращается Netbios после успешного выполнения команды NCBADDNAME или NCBADDGRNAME . Это число, а не имя, должно использоваться со всеми командами datagram и для команд NCBRECVANY .
Число для NAME_NUMBER_1 всегда 0x01. Функция Netbios назначает значения в диапазоне 0x02 0xFE оставшимся именам.
ncb_buffer
Указатель на буфер сообщений. Буфер должен иметь доступ на запись. Его использование выглядит следующим образом:
Get-Help | Назначение |
---|---|
NCBSEND | Содержит сообщение для отправки. |
NCBRECV | Получает сообщение. |
NCBSSTAT | Получает запрошенные сведения о состоянии. |
ncb_length
Указывает размер (в байтах) буфера сообщений. Для команд получения этот элемент задается функцией Netbios , чтобы указать количество полученных байтов.
Если длина буфера неверна, функция Netbios возвращает код ошибки NRC_BUFLEN .
ncb_callname[NCBNAMSZ]
Указывает имя удаленного приложения. Следует указать символы пробела в конце, чтобы длина строки была равна NCBNAMSZ.
ncb_name[NCBNAMSZ]
Указывает имя, по которому известно приложение. Следует указать символы пробела в конце, чтобы длина строки была равна NCBNAMSZ.
ncb_rto
Указывает время ожидания для операций получения в 500 миллисекундах для сеанса. Значение, равное нулю, не подразумевает истечения времени ожидания. Укажите с помощью команды NCBCALL или NCBLISTEN . Влияет на последующие команды NCBRECV .
ncb_sto
Указывает время ожидания для операций отправки в 500 миллисекундах для сеанса. Значение, равное нулю, не подразумевает истечения времени ожидания. Укажите с помощью команды NCBCALL или NCBLISTEN . Влияет на последующие команды NCBSEND и NCBCHAINSEND .
ncb_post
Указывает адрес подпрограммы post, вызываемой при выполнении асинхронной команды. Подпрограмма post определяется следующим образом:
NCB_POST PostRoutine( PNCB pncb );
где параметр pncb является указателем на завершенную структуру NCB .
ncb_lana_num
Указывает номер адаптера локальной сети. Это отсчитываемое от нуля число соответствует конкретному поставщику транспорта, использующим определенную плату адаптера локальной сети.
ncb_cmd_cplt
Указывает флаг завершения команды. Это значение совпадает с ncb_retcode элементом.
ncb_reserve[18]
Защищены; значение должно быть равно нулю.
Длина X массива ncb_reserve зависит от архитектуры системы. Для 64-разрядных систем массив содержит 18 элементов. В противном случае массив содержит 10 элементов.
ncb_reserve[10]
Защищены; значение должно быть равно нулю.
Длина X массива ncb_reserve зависит от архитектуры системы. Для 64-разрядных систем массив содержит 18 элементов. В противном случае массив содержит 10 элементов.
ncb_event
Задает дескриптор для объекта события, которому присваивается состояние без знака при принятии асинхронной команды, и при завершении асинхронной команды устанавливается состояние сигнала. Событие получает сигнал, если функция Netbios возвращает ненулевое значение. Для синхронизации следует использовать только события сброса вручную. Указанное событие не должно быть связано с несколькими активными асинхронными командами.
Элемент ncb_event должен быть равен нулю, если для ncb_command элемента не установлен флаг ASYNCH или если ncb_post не равно нулю. В противном случае Netbios возвращает код ошибки NRC_ILLCMD .
Комментарии
Использование ncb_event для выполнения асинхронных запросов требует меньше системных ресурсов, чем использование ncb_post. Кроме того, если ncb_event не равно нулю, ожидающий запрос отменяется, если поток завершается до обработки запроса. Это не относится к асинхронным запросам, отправляемых с помощью ncb_post.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Верхняя часть | nb30.h |
См. также раздел