NCB 结构 (nb30.h)
[Windows Vista、Windows Server 2008 和操作系统的后续版本不支持 Netbios ]
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 结构的标志。 最有效位包含 标志。 如果使用 OR 运算符) 将 ASYNCH 常量与 (命令代码组合在一起,则以异步方式处理 NCB 结构。 支持以下命令代码。
代码 | 含义 |
---|---|
NCBACTION |
Windows Server 2003、Windows XP、Windows 2000 和 Windows NT:启用传输接口的扩展。 NCBACTION 映射到 TdiAction。 指定此代码时, ncb_buffer 成员指向要用ACTION_HEADER结构填充 的 缓冲区,该结构后跟数据(可选)。 无法使用 NCBCANCEL 取消 NCBACTION 命令。 NCBACTION 不是标准 NetBIOS 3.0 命令。 |
NCBADDGRNAME | 将组名添加到本地名称表。 网络上的其他进程不能将此名称用作唯一名称,但任何人都可以将其添加为组名。 |
NCBADDNAME | 向本地名称表添加唯一名称。 TDI 驱动程序可确保该名称在整个网络中是唯一的。 |
NCBASTAT | 检索本地或远程适配器的状态。 指定此代码时, ncb_buffer 成员指向要用 ADAPTER_STATUS 结构填充的缓冲区,后跟 NAME_BUFFER 结构的数组。 |
NCBCALL | 使用另一个名称打开会话。 |
NCBCANCEL | 取消上一个挂起的命令。 |
NCBCHAINSEND | 将两个数据缓冲区的内容发送到指定的会话伙伴。 |
NCBCHAINSENDNA | 将两个数据缓冲区的内容发送到指定的会话伙伴,并且不等待确认。 |
NCBDELNAME | 从本地名称表中删除名称。 |
NCBDGRECV | 从任何名称接收数据报。 |
NCBDGRECVBC | 从任何名称接收广播数据报。 |
NCBDGSEND | 将数据报发送到指定的名称。 |
NCBDGSENDBC | 将广播数据报发送到局域网上的每个主机 (LAN) 。 |
NCBENUM |
Windows Server 2003、Windows XP、Windows 2000 和 Windows NT: (LANA) 编号枚举 LAN 适配器。 指定此代码时,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:通知用户 LAN 故障持续时间超过一分钟。 |
NCBLISTEN | 允许使用另一个名称打开会话, (本地或远程) 。 |
NCBRECV | 从指定的会话伙伴接收数据。 |
NCBRECVANY | 从与指定名称对应的任何会话接收数据。 |
NCBRESET |
重置 LAN 适配器。 适配器必须先重置,然后才能接受在 ncb_lana_num 成员中指定相同编号的任何其他 NCB 命令。
使用以下值指定如何释放资源:
|
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 没有服务接入点 (SAP) 可用。 |
NRC_NORESOURCES | 请求的资源不可用。 |
NRC_INVADDRESS | NCB 地址无效。 |
NRC_INVDDID |
NCB DDID 无效。
此返回代码不是 IBM NetBIOS 3.0 规范的一部分,也不会在 NCB 结构中返回。 相反,它由 Netbios 函数返回。 |
NRC_LOCKFAIL | 尝试锁定用户区域失败。 |
NRC_OPENERR | 在设备驱动程序执行的打开操作期间出错。 此错误代码不属于 NetBIOS 3.0 规范。 |
NRC_SYSTEM | 发生系统错误。 |
NRC_PENDING | 异步操作尚未完成。 |
ncb_lsn
标识本地会话编号。 此数字唯一标识环境中的会话。 此数字在成功执行 NCBCALL 命令后由 Netbios 函数返回。
ncb_num
指定本地网络名称的编号。 此数字在成功执行 NCBADDNAME 或 NCBADDGRNAME 命令后由 Netbios 返回。 此数字(而不是名称)必须用于所有数据报命令和 NCBRECVANY 命令。
NAME_NUMBER_1的编号始终0x01。 Netbios 函数将0x02范围内的值分配给剩余名称的0xFE。
ncb_buffer
指向消息缓冲区的指针。 缓冲区必须具有写入访问权限。 其用途如下:
Command | 目的 |
---|---|
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
指定 LAN 适配器编号。 此从零开始的数字对应于使用特定 LAN 适配器板的特定传输提供程序。
ncb_cmd_cplt
指定命令完成标志。 此值与 ncb_retcode 成员相同。
ncb_reserve[18]
保留;必须为零。
ncb_reserve数组的长度 X 取决于系统体系结构。 对于 64 位系统,数组包含 18 个元素。 否则,数组包含 10 个元素。
ncb_reserve[10]
保留;必须为零。
ncb_reserve数组的长度 X 取决于系统体系结构。 对于 64 位系统,数组包含 18 个元素。 否则,数组包含 10 个元素。
ncb_event
指定事件对象的句柄,该句柄在接受异步命令时设置为未签名状态,并在异步命令完成时设置为信号状态。 如果 Netbios 函数返回非零值,则会发出事件信号。 仅应将手动重置事件用于同步。 指定的事件不应与多个活动异步命令相关联。
如果ncb_command成员未设置 ASYNCH 标志,或者ncb_post不为零,则ncb_event成员必须为零。 否则, Netbios 将返回 NRC_ILLCMD 错误代码。
注解
与使用 ncb_post 相比,使用 ncb_event 发出异步请求所需的系统资源更少。 此外,当 ncb_event 为非零时,如果线程在处理请求之前终止,则挂起的请求将被取消。 对于使用 ncb_post 发送的异步请求,情况并非如此。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
标头 | nb30.h |
另请参阅