NCB结构描述了网络控制块。指向此结构的指针传递给Netbios的函数。
typedef struct _NCB { // 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_post) (struct _NCB *);
UCHAR ncb_lana_num;
UCHAR ncb_cmd_cplt;
UCHAR ncb_reserve[10];
HANDLE ncb_event;
} NCB;
会员
ncb_command
指定命令代码和指示NCB结构是否异步处理的标志。最高有效位包含该标志。如果ASYNCH常数与命令代码组合(通过使用OR运算符),NCB结构将被异步处理。支持以下命令代码:
码 | 含义 |
NCBACTION | 启用传输接口的扩展。NCBACTION命令映射到TdiAction。当指定此代码时,//监控信息。结构水平成员指向要填充ACTION_HEADER结构的缓冲区,该结构可选地后跟数据。使用NCBCANCEL不能取消NCBACTION命令。 |
NCBADDGRNAME | 将组名添加到本地名称表。 |
NCBADDNAME | 在本地名称表中添加唯一的名称。 |
NCBASTAT | 检索适配器的状态。当指定此代码时,//监控信息。结构水平成员指向要填充ADAPTER_STATUS结构的缓冲区,后跟数组NAME_BUFFER结构。 |
NCBCALL | 打开另一个名字的会话。 |
NCBCANCEL | 取消上一个命令。 |
NCBCHAINSEND | 将两个数据缓冲区的内容发送到指定的会话伙伴。 |
NCBCHAINSENDNA | 将两个数据缓冲区的内容发送到指定的会话伙伴,并且不等待确认。 |
NCBDELNAME | 从本地名称表中删除名称。 |
NCBDGRECV | 从任何名称接收数据报。 |
NCBDGRECVBC | 从任何主机接收广播数据报。 |
NCBDGSEND | 将数据报发送到指定的名称。 |
NCBDGSENDBC | 向局域网(LAN)上的每个主机发送广播数据报。 |
NCBENUM | 枚举LAN适配器(LANA)号码。当指定此代码时,//监控信息。结构水平成员指向要填充LANA_ENUM结构的缓冲区。 |
NCBFINDNAME | 确定网络上名称的位置。当指定此代码时,//监控信息。结构水平成员指向要填充FIND_NAME_HEADER结构的缓冲区,后跟一个或多个FIND_NAME_BUFFER结构。 |
NCBHANGUP | 关闭指定的会话。 |
NCBLANSTALERT | 通知用户LAN持续超过一分钟的故障。 |
NCBLISTEN | 使用另一个名称打开会话。 |
NCBRECV | 从指定的会话伙伴接收数据。 |
NCBRECVANY | 从与指定名称相对应的任何会话接收数据。 |
NCBRESET | 重置LAN适配器。在ncb_lana_num成员中指定相同号码的任何其他NCB命令将被接受之前,必须重置适配器。 |
在IBM的NetBIOS 3.0规范的文档数NCB_RESET NCB的。Win32使用动态链接例程界面实现NCB.RESET。特定值可以在NCB的特定字节中传递,更具体地说: | |
*如果ncb_lsn不是0x00,与ncb_lana_num关联的所有资源都将被释放。 | |
*如果ncb_lsn为0x00,则与ncb_lana_num相关联的所有资源都将被释放,并将分配新的资源。ncb_callname [0]字节指定最大会话数,ncb_callname [2]字节指定最大名称数。ncb_callname [3]字节的非零值请求应用程序使用NAME_NUMBER_1。 | |
NCBSEND | 将数据发送到指定的会话伙伴。 |
NCBSENDNA | 将数据发送到指定的会话伙伴,并且不等待确认。 |
NCBSSTAT | 检索会话的状态。当指定此值时,//监控信息。结构水平成员指向要填充SESSION_HEADER结构的缓冲区,后跟一个或多个SESSION_BUFFER结构。 |
NCBTRACE | 激活或禁用NCB跟踪。en在系统中支持此命令是可选的和特定于系统的。 |
NCBUNLINK | 取消链接适配器。 |
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 | The NCBCANCEL command was not valid; the command was not canceled. |
NRC_DUPENV | 该名称由另一个本地进程定义。 |
NRC_ENVNOTDEF | 环境没有定义。必须发出复位命令。 |
NRC_OSRESNOTAV | 操作系统资源耗尽。应用程序可以稍后重试命令。 |
NRC_MAXAPPS | 超过了最大申请数量。 |
NRC_NOSAPS | 没有服务接入点(SAP)可用于NetBIOS。 |
NRC_NORESOURCES | 所请求的资源不可用。 |
NRC_INVADDRESS | NCB地址无效。 |
此返回代码不是IBM NetBIOS 3.0规范的一部分,不会在NCB结构中返回。而是由Netbios的函数返回。 | |
NRC_INVDDID | 该NCB DDID无效。 |
NRC_LOCKFAIL | 尝试锁定用户区域失败。 |
NRC_OPENERR | 在由设备驱动程序执行的打开操作期间发生错误。此返回码不是IBM NetBIOS 3.0规范的一部分。 |
NRC_SYSTEM | 发生系统错误。 |
NRC_PENDING | 异步操作尚未完成。 |
ncb_lsn
指定本地会话号码。此号码唯一标识环境中的会话。
ncb_num
指定本地网络名称的编号。NCBADDNAME或NCBADDGRNAME命令成功后,该号码由Netbios的返回。这个数字,而不是名称,必须与所有数据报命令和NCBRECVANY命令一起使用。
NAME_NUMBER_1(见NCBRESET)的编号始终为0x01。Netbios的为其余的名称分配0x02到0xFE的值。
//监控信息。结构水平
指向消息缓冲区。
ncb_length
指定消息缓冲区的大小(以字节为单位)。
ncb_callname
指定包含远程名称的字符串。应提供尾随空格字符以使字符串的长度等于NCBNAMSZ。
ncb_name
指定包含本地名称的字符串。应提供尾随空格字符以使字符串的长度等于NCBNAMSZ。
ncb_rto
指定会话的接收超时时间(以500毫秒为单位)。值为零意味着没有超时。用NCBCALL或NCBLISTEN命令指定。影响后续NCBRECV命令。
ncb_sto
指定会话的发送超时时间(以500毫秒为单位)。值为零意味着没有超时。用NCBCALL或NCBLISTEN命令指定。影响后续的NCBSEND和NCBCHAINSEND命令。
ncb_post
指定异步NCB完成时调用的例程的地址。完成例程通过指向完成的网络控制块的指针。
ncb_lana_num
指定LAN适配器号。这个基于零的号码对应于使用特定LAN适配器板的特定传输提供商。
ncb_cmd_cplt
指定完成标志。该值与ncb_retcode成员相同。
ncb_reserve
Reserved; must be zero.
ncb_event
指定异步网络控制块完成时设置为信号状态的Windows事件的句柄。如果Netbios的函数返回非零值,则发出事件。
ncb_event成员必须为零,否则ncb_command成员不设置ASYNCH值,否则ncb_post不为零。否则返回NRC_ILLCMD。
当接受异步NetBIOS命令时,由ncb_event指定的事件由系统设置为非指定状态,并且当异步NetBIOS命令完成时,将其设置为信号状态。
使用ncb_event提交异步请求比使用ncb_post需要更少的系统资源。此外,当ncb_event非零时,如果线程在请求??被处理之前终止,则挂起的请求将被取消。对于使用ncb_post发送的请求不是这样。
Netbios的只能使用手动复位事件。给定事件不应与多个活动的异步NetBIOS命令相关联。
也可以看看
ACTION_HEADER, ADAPTER_STATUS, FIND_NAME_BUFFER, FIND_NAME_HEADER, LANA_ENUM, NAME_BUFFER, Netbios的, SESSION_BUFFER, SESSION_HEADER