1 Win32应用程序可以使用Network Basic Input/Output System(NetBIOS)接口与网络中的其他计算机上的应用程序进行通讯。NetBIOS接口包括一系列显式命令,由一个被称为网络控制块(NCB)的结构提供。应用程序可以对任何支持NetBIOS接口的协议发出NetBIOS命令。
2 netbios 函数用来解释并执行一个专有的NCB块结构
UCHAR Netbios(
PNCB pncb // 指向网络控制块的指针
);
返回值:
<1>作为同步请求,返回值就是NCB的返回代码,同时这个返回代码也包含在NCB的ncb_retcode成员中
<2>作为异步请求有下面几种情况:
1.如果异步命令在netbios()返回返回他的调用者之前已经完成,情况同<1>
2.与1.相反,返回值就是0
<3>如果pncb指针无效返回值是NRC_BADNCB
<4>如果ncb_length成员的值不正确或者是ncb_buffer区域被写保护返回值为NRC_BUFLEN
下面讲讲NCB控制块的结构:
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_post) (struct _NCB *);
UCHAR ncb_lana_num;
UCHAR ncb_cmd_cplt;
UCHAR ncb_reserve[10];
HANDLE ncb_event;
} NCB;
3 ncb_command:指定一个命令码和一个该NCB是同步还是异步处理的标志,如果ASYNCH常量通过"|"运 算符与命令码组合的话,那么这个NCB块将会异步执行。
.NCBACTION:用于 Win NT非标准的Netbios 3.0的标准命令
.NCBADDGRNAME:添加一个组名字到本地名字表,这个名称不能被网络上的其他进程作为一个唯一的 名字来使用但是他可以被其他进程作为组名字来添加
.NCBADDNAME:添加一个唯一名字到本地名字表,TDI驱动程序保证这个名字在网络中的唯一性
.NCBASTAT:返回一个本地或者远程适配器的状态,当使用这个命令的时候,ncb_buffer 成员指向一个ADAPTER_STATUS结构后面紧跟着一个NAME_BUFFER结构数组
.NCBCALL:用另外一个名字开启一个会话
.NCBCANCEL:终止前一个未执行完的命令
.NCBCHAINSEND:发送两份数据缓冲到指定的会话伙伴
.NCBCHAINSENDNA:发送两份数据缓冲到指定的会话伙伴,但不等待对方应答就立即返回
.NCBDELNAME:从本地名字表中删除一个名字
.NCBDGRECV:接收来自宁一个名字的数据包
.NCBDGRECVBC:接收来自宁一个名字的以广播方式发送的数据包
.NCBDGSEND:发送一个数据包到一个指定的名字(进程)
.NCBDGSENDBC:发送一个数据包到局域网中的每一台主机
.NCBENUM:用于WinNT,非标准的Netbios3.0的命令
.NCBFINDNAME:定位一个名字在网络中的位置,此时ncb_buffer指向FIND_NAME_HEADER结构,同时后面紧跟着一个或者多个FIND_NAME_BUFFER结构
.NCBHANGUP:关闭一个指定的会话
.NCBLISTEN:允许一个会话以另外一个名字打开(本地或者远程的会话都可以)
.NCBRECV:从一个指定的会话伙伴接收数据
.NCBRECVANY:从任何一个其他的以一个指定的名字通信的会话接收数据
.NCBRESET:复位一个网络适配器,在他接收任何命令(与ncb_lana_num成员有相同的数字)之前必须进行复位操作????
.NCBSEND:发送数据到指定的会话伙伴
.NECBSENDNA:发送数据到指定的会话伙伴后不等待应答立即返回
.NCBSSTAT:返回某个会话的状态,指定这个命令以后ncb_buffer成员指向一个SESSION_HEADER 结构,后面紧接着一个或多个SESSION_BUFFER 结构
.NCBUNLINK:断开一个适配器的连接,该命令的设置是处于兼容性的考虑,在Win32中不支持该命令