《Windows+网络编程技术(十七)Windows_网络编程技术(十.pdf》由会员分享,可在线阅读,更多相关《Windows+网络编程技术(十七)Windows_网络编程技术(十.pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、下载附录A NetBIOS命令索引本附录陈列并解释了可为 N C B结构的n c b _ c o m m a n d字段选用的有效命令,必须将这个结构传递给N e t b i o s函数。在每个命令说明中,我们都提供了一张表格。表中说明了必须设置的N C B字段,以及优先返回的由 N e t b i o s函数设置的字段。每个表的第二列说明指定的 N C B结构字段是一个输入参数,还是一个输出参数。第三列说明执行 N e t B I O S调用时,是否必须设置这个字段。如果出现一个X,就必须提供一个值。否则,如果这个字段是一个输入参数并且没有X,则可以是任意值。关于N e t b i o s的
2、详情,可参阅第1章。A.1 NCBADDGRNAME这个命令用于在本地名字表添加一个组名。添加的组名必须是独一无二的,但任何人都可把它用作一个组名。组名最常见的用法是用作数据报接收端。它的名字编号在数据报操作的n c b _ n u m字段中返回。字段设置参见表A-1。表A-1字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t c o d e输出Xn c b _ l s nn c b _ n u m输出n c b _ b u ff e rn c b _ l e n g t hn c b _ c a l l n a m en c b _ n a m
3、e输入Xn c b _ r t on c b _ s t on c b _ p o s t输入n c b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n t输入A.2 NCBADDNAME这个命令用于在本地名字表添加一个唯一名中。在整个网络中,唯一名必须是独一无二的,否则,就会返回错误。它的名字编号在数据报操作所用的n c b _ n u m字段中返回。参见表A-2。第四部分附录表A-2字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t c o d e输出n c b _ l
4、s nn c b _ n u m输出n c b _ b u ff e rn c b _ l e n g t hn c b _ c a l l n a m en c b _ n a m e输入Xn c b _ r t on c b _ s t on c b _ p o s t输入n c b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出Xn c b _ e v e n t输入A.3 NCBASTAT这个命令用于取得本地或远程适配器的状态。在调用这个命令时,要把 n c b _ b u ff e r设为一个缓冲区,这个缓冲区中包括一个A D A P T
5、E R _ S TAT U S结构及跟在这个结构后面的一个N A M E _ B U F F E R结构数组。参见表A-3。表A-3字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t c o d e输出n c b _ l s nn c b _ n u mn c b _ b u ff e r输入/输出Xn c b _ l e n g t h输入/输出Xn c b _ c a l l n a m e输入Xn c b _ n a m en c b _ r t on c b _ s t on c b _ p o s t输入n c b _ l a n a _
6、 n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n t输入A.4 NCBCALL这个命令用于建立会话与另一个进程(n c b _ n a m e字段中指明的)的连接。参见表A-4。表A-4字段输入/输出是否要求n c b _ c o m m a n d输入X452计计第四部分附附录下载(续)字段输入/输出是否要求n c b _ r e t c o d e输出n c b _ l s n输出n c b _ n u mn c b _ b u ff e rn c b _ l e n g t hn c b _ c a l l n a m e输入Xn c b
7、 _ n a m e输入Xn c b _ r t o输入n c b _ s t o输入n c b _ p o s t输入n c b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n t输入A.5 NCBCANCEL这个命令用于取消上一次未完成的命令。n c b _ b u ff e r字段指向N C B结构,这个结构中有准备取消的操作。取消N C B S E N D或N C B C H A I N S E N D命令都会中止会话;然而,这两个函数的无确认变体函数都没有取消它们各自的会话。下面的命令是不能被取消的:N C B
8、 A D D G R N A M E、N C B A D D N A M E、N C B C A N C E L、N C B D E L I N A M E、N C B R E S E T、N C B D G S E N D、N C B D G S E N D B C和N C B S S TAT。参见表A-5。表A-5字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t c o d e输出n c b _ l s nn c b _ n u mn c b _ b u ff e r输入Xn c b _ l e n g t hn c b _ c a l l
9、n a m en c b _ n a m en c b _ r t on c b _ s t on c b _ p o s tn c b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n tA.6 NCBCHAINSEND这个命令向指定的接收端发送两个缓冲区的内容。可发送的数据量最大为1 2 8 K B(各个缓冲区的最大值是6 4 K B)。在n c b _ b u ff e r和n c b _ l e n g t h中,指定第一个缓冲区并指定它的长度。利用n c b _ c a l l n a m e的0 1字节指定第二
10、个缓冲区的长度,并用 2 5字节表示它。参见表A-6。附录A计NetBIOS命令索引计计453下载表A-6字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t c o d e输出n c b _ l s n输入Xn c b _ n u mn c b _ b u ff e r输入Xn c b _ l e n g t h输入Xn c b _ c a l l n a m e输入Xn c b _ n a m en c b _ r t on c b _ s t on c b _ p o s t输入n c b _ l a n a _ n u m输入Xn c b _
11、 c m d _ c p l t输出n c b _ e v e n t输入A.7 NCBCHAINSENDNA这个命令向指定的接收端发送两个缓冲区的内容,不等待接收端的收到确认。可发送的数据最大量为1 2 8 K B(各个缓冲区的最大值是 6 4 K B)。分别在n c b _ b u ff e r和n c b _ l e n g t h中指定第一个缓冲区及其长度。利用 n c b _ c a l l n a m e的0 1字节指定第二个缓冲区的长度,并用 2 5字节表示它。参见表A-7。表A-7字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t
12、c o d e输出n c b _ l s n输入Xn c b _ n u mn c b _ b u ff e r输入Xn c b _ l e n g t h输入Xn c b _ c a l l n a m e输入Xn c b _ n a m en c b _ r t on c b _ s t on c b _ p o s t输入n c b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n t输入A.8 NCBDELNAME这个命令从本地名字表中删除一个名字。如果即将删除的名字与活动会话相关,就会返回N R C _ A C
13、T S E S(0 x 0 F)错误。如果活动会话命令尚未完成,就会收到N R C _ N A M E R R(0 x 1 7)错误。参见表A-8。454计计第四部分附附录下载表A-8字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t c o d e输出n c b _ l s nn c b _ n u mn c b _ b u ff e rn c b _ l e n g t hn c b _ c a l l n a m en c b _ n a m e输入Xn c b _ r t on c b _ s t on c b _ p o s t输入n c
14、 b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n t输入A.9 NCBDGRECV这个命令收到一个直接指向本地名的数据报,本地名和 n c b _ n u m值相关。如果n c b _ n u m是0 x F F,该命令就会收到直接指向任何一个本地名的数据报。本地名既可以是一个组名,又可以是一个唯一名。如果发送一个数据报时,没有待决的接收数据报命令,这个数据报就会丢失。如果提供的缓冲区太小,就会出现这条消息“未完成错误”,N R C _ I N C O M P(0 x 0 6),数据就会被截断,以适应缓冲区的长度。参
15、见表 A-9。表A-9字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t c o d e输出n c b _ l s nn c b _ n u m输入Xn c b _ b u ff e r输入Xn c b _ l e n g t h输入/输出Xn c b _ c a l l n a m e输出n c b _ n a m en c b _ r t on c b _ s t on c b _ p o s t输入n c b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n t输入A.1
16、0 NCBDGRECVBC这个命令接收源于执行发送数据报命令的名字的广播数据报。如果提供的缓冲区太小,就会产生“未完成错误”N R C _ I N C O M P(0 x 0 6),为了与缓冲区适应,便截断这个数据。参附录A计NetBIOS命令索引计计455下载见表A-1 0。表A-1 0字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t c o d e输出n c b _ l s nn c b _ n u m输入Xn c b _ b u ff e r输入Xn c b _ l e n g t h输入/输出Xn c b _ c a l l n a m
17、e输出n c b _ n a m en c b _ r t on c b _ s t on c b _ p o s t输入n c b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n t输入A.11 NCBDGSEND这个命令向指定名发送一个数据报。这个名字既可以是一个唯一名,又可以是一个组名。如果一个适配器有一个针对同一个名字的待发接收数据报命令,它就会收到自己的消息。数据报的最大长度与基层协议有关。要想得知数据报的最大长度,执行本地 N C B A S TAT命令即可。从返回的 A D A P T E R _ S TA
18、T U S结构中,便可得知基层传送协议要求的数据报最大长度。参见表A-11。表A-11字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t c o d e输出n c b _ l s nn c b _ n u m输入Xn c b _ b u ff e r输入Xn c b _ l e n g t h输入Xn c b _ c a l l n a m e输入Xn c b _ n a m en c b _ r t on c b _ s t on c b _ p o s t输入n c b _ l a n a _ n u m输入Xn c b _ c m d _ c
19、 p l t输出n c b _ e v e n t输入A.12 NCBDGSENDBC这个命令向L A N上的各台主机发送广播数据报。只有有未完成的接收数据报命令的机器456计计第四部分附附录下载才能收到这条消息。同时,如果本地适配器中有一个待发接收数据报命令,它就会收到它自己的消息。广播数据报和N C B D G S E N D条目中提到的长度限制是一样的。参见表 A-1 2。表A-1 2字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t c o d e输出n c b _ l s nn c b _ n u m输入Xn c b _ b u ff e
20、 r输入Xn c b _ l e n g t h输入Xn c b _ c a l l n a m en c b _ n a m en c b _ r t on c b _ s t on c b _ p o s t输入n c b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n t输入A.13 NCBENUM这个命令列举L A N A编号。在执行这个命令时,要把 n c b _ b u ff e r设为一个L A N A _ E N U M结构。该命令返回时,L A N A _ E N U M的l e n g t h字段会返
21、回本地机器上的 L A N A编号的数目。L A N A _ E N U M的l a n a字段内填入的是L A N A编号。参见表A-1 3。表A-1 3字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t c o d e输出n c b _ l s nn c b _ n u mn c b _ b u ff e r输入Xn c b _ l e n g t h输入Xn c b _ c a l l n a m en c b _ n a m en c b _ r t on c b _ s t on c b _ p o s tn c b _ l a n a
22、_ n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n tA.14 NCBFINDNAME这个命令在网络上查找一个名字的位置(即机器名)。在发出这个命令时,n c b _ b u ff e r中就会填入F I N D _ N A M E _ H E A D E R结构,以及一个或多个F I N D _ N A M E _ B U F F E R结构。这个命附录A计NetBIOS命令索引计计457下载令是Windows NT专有的,尚未获得所有Wi n 3 2平台的支持。参见表A-1 4。表A-1 4字段输入/输出是否要求n c b _ c o m
23、m a n d输入Xn c b _ r e t c o d e输出n c b _ l s nn c b _ n u mn c b _ b u ff e r输入/输出Xn c b _ l e n g t h输入Xn c b _ c a l l n a m e输入Xn c b _ n a m en c b _ r t on c b _ s t on c b _ p o s t输入n c b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n t输入A.15 NCBHANGUP这个命令关闭一个指定的连接会话。这个会话的所有未完成的
24、接收命令都将中断,并返回“会话已关闭”错误 N R C _ S C L O S E D(0 x O A)。如果发送或链式发送命令未完成,挂起命令就会延迟,直到命令结束。不管这些命令是在传输数据,还是等待远程会话方发出接收命令,都会产生这样的延迟。另外,如果同时存在若干个完成的 N C B R E C VA N Y命令,那么在会话已经关闭时,则只能有一个命令返回错误代码。而对其他任何一个接收命令来说,每个未完成的接收命令都会返回错误。参见表 A-1 5。表A-1 5字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t c o d e输出n c b _
25、l s n输入Xn c b _ n u mn c b _ b u ff e rn c b _ l e n g t hn c b _ c a l l n a m en c b _ n a m en c b _ r t on c b _ s t on c b _ p o s t输入n c b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n t输入A.16 NCBLANSTALERT这是一个只适用于Windows NT的命令,它通知用户持续一分钟便会失败的 L A N故障。然458计计第四部分附附录下载而在测试过程中,这个命令
26、通知几个常见的 L A N故障,比如说网络线缆已断开。参见表 A-1 6。表A-1 6字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t c o d e输出n c b _ l s nn c b _ n u mn c b _ b u ff e rn c b _ l e n g t hn c b _ c a l l n a m en c b _ n a m en c b _ r t on c b _ s t on c b _ p o s tn c b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出n c b
27、_ e v e n tA.17 NCBLISTEN这个命令对来自另一个进程(包括本地的或远程的)的连接进行监听。如果 n c b _ c a l l n a m e的第一个字符是星号(*),就会用网络适配器(由它向本地名发出一个 N C B C A L L)来建立一个会话。执行N C B C A L L的名字在n c b _ c a l l n a m e字段中返回。如果指定发送或接收超时,新会话上执行的所有发送和接收调用都将遵循这一超时设置。参见表 A-1 7。表A-1 7字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t c o d e输出n
28、c b _ l s n输出n c b _ n u mn c b _ b u ff e rn c b _ l e n g t hn c b _ c a l l n a m e输入/输出Xn c b _ n a m e输入Xn c b _ r t o输入n c b _ s t o输入n c b _ p o s t输入n c b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n t输入A.18 NCBRECV这个命令接收源于指定会话名的数据。如果此时未完成的接收数据命令有若干个,就是按照下面的顺序对这些命令进行处理:附录A计Ne
29、tBIOS命令索引计计459下载1)接收(N C B B E C V)。2)接收指定名的所有数据(N C B R E C VA N Y)。3)接收任何一个名字的所有数据(N C B R E C E A N Y)。同一个优先级的命令则按照“先进先出”的顺序处理。如果缓冲区容纳不下整个数据,就会返回N R C _ I N C O M P(0 x 0 6)错误。发生这种情况时,就要执行另一个缓冲区较大的接收命令,或者用已经到期的或无确认的超时来执行发送命令这种情况下,会丢失数据。n c b _ l e n g t h字段设为实际上返回的数据量。参见表 A-1 8。表A-1 8字段输入/输出是否要求n
30、 c b _ c o m m a n d输入Xn c b _ r e t c o d e输出n c b _ l s n输入Xn c b _ n u m输入Xn c b _ b u ff e r输入Xn c b _ l e n g t h输入/输出Xn c b _ c a l l n a m en c b _ n a m en c b _ r t on c b _ s t on c b _ p o s t输入n c b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n t输入A.19 NCBRECVANY这个命令接收的数据是
31、与任何一个指定名相对应的会话发出的。另外,通过把 n c b _ n u m字段设为0 x F F的方式,这个命令还可以接收目标地址是本地名的数据。不然的话,将 n c b _ n u m设为网络编号也行,这个网络编号是在本地名字表添加了一个名字之后返回的。然后,该命令把等待指定名的数据捡起。另外,如果同时有若干个未完成的接收命令,就按优先级顺序进行处理。详情参见N C B R E C V。如果一个会话的关闭是一个本地会话关闭命令,或远程会话方关闭会话或一个会话中止命令执行的,指定名所有未完成的 N R C R E C VA N Y命令最终都会返回错误 N R C _ S C L O S E
32、D(0 x 0 A);N C B结构的n c b _ _ l s n字段设为已断开的本地会话编号。如果这个已关闭的会话中,N C B R E C VA N Y命令没有等待指定的名字,却存在任意会话(n c b _ n u m是0 x F F)的未完成的N C B R E C VA N Y命令,那么该命令就会返回 N R C _ S C L O S E D错误,而且n c b _ l s n字段则设为相应的会话编号。参见表A-1 9。表A-1 9字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t c o d e输出n c b _ l s n输出460
33、计计第四部分附附录下载(续)字段输入/输出是否要求n c b _ n u m输入/输出Xn c b _ b u ff e r输入Xn c b _ l e n g t h输入/输出Xn c b _ c a l l n a m en c b _ n a m en c b _ r t on c b _ s t on c b _ p o s t输入n c b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n t输入A.20 NCBRESET这个命令对指定的L A N A编号进行重新设置,并对某些环境资源产生影响。如果n c b _
34、 l s n不是0,与n c b _ l a n a _ n u m相关的所有资源都会被释放。如果n c b _ l s n是0,与n c b _ l a n a _ n u m相关的所有资源都会被释放,并分配新的资源。n c b _ c a l l n a m e 0 字节指定会话最多能够有多少,n c b _ c a l l n a m e 2 字节指定名字最多有多少,n c b _ c a l l n a m e 3 则要求应用程序使用计算机名(其名编号为 1)。参见表A-2 0。表A-2 0字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t
35、 c o d e输出n c b _ l s n输入Xn c b _ n u m输入Xn c b _ b u ff e rn c b _ l e n g t hn c b _ c a l l n a m en c b _ n a m en c b _ r t on c b _ s t on c b _ p o s tn c b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n tA.21 NCBSEND这个命令向指定的对话方发送数据。可传送的数据最多为 65 536(即6 4 K B)。如果远程会话方发出一个挂起命令,所有的
36、未完成的发送命令就会返回“会话已关闭”错误N R C _ S C L O S E D(0 x 0 A)。如果若干个发送命令等待执行,就会按照“先来先出的顺序”进行处理。参见表A-2 1。附录A计NetBIOS命令索引计计461下载表A-2 1字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t c o d e输出n c b _ l s n输入Xn c b _ n u mn c b _ b u ff e r输入Xn c b _ l e n g t h输入Xn c b _ c a l l n a m en c b _ n a m en c b _ r t
37、 on c b _ s t on c b _ p o s t输入n c b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n t输入A.22 NCBSENDNA这个命令向指定会话发送数据,但不等待会话方返回的确认。否则,这个命令的行为就和N C B S E N D的行为一样。参见表A-2 2。表A -2 2字段输入/输出是否要求n c b _ c o m m a n d输入n c b _ r e t c o d e输出n c b _ l s n输入Xn c b _ n u mn c b _ b u ff e r输入Xn c
38、 b _ l e n g t h输入Xn c b _ c a l l n a m en c b _ n a m en c b _ r t on c b _ s t on c b _ p o s t输入n c b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n t输入A.23 NCBSSTAT这个命令取得会话状态。在调用这个命令时,n c b _ b u ff e r被设为一个内存块,将用后跟一个或多个S E S S I O N _ B U F F E R结构的一个 S E S S I O N _ H E A D E R结
39、构来填充这个内存块。如果n c b _ n a m e的第一个字节是一个星号(*),这个命令就可获得与本地名字表中所有名字相关的所有会话的状态。如果提供的缓冲区太小,就返回 N R C _ I N C O M P(0 x 0 6)错误。如果缓冲区的长度小于4,返回的错误就是N R C _ B U F L E N(0 x 0 1)。参见表A-2 3。462计计第四部分附附录下载表A-2 3字段输入/输出是否要求n c b _ c o m m a n d输入Xn c b _ r e t c o d e输出n c b _ l s nn c b _ n u m输出n c b _ b u ff e r输入Xn c b _ l e n g t h输入Xn c b _ c a l l n a m en c b _ n a m e输入Xn c b _ r t on c b _ s t on c b _ p o s t输入n c b _ l a n a _ n u m输入Xn c b _ c m d _ c p l t输出n c b _ e v e n t输入A.24 NCBUNLINK这个命令断开适配器连接,并为 N e t B I O S的前期版本提供兼容能力。该命令不能用于Wi n 3 2平台。附录A计NetBIOS命令索引计计463下载
限制150内