当前位置:编程学习 > Delphi >>

delphi技术专题---获取网卡物理地址之TLanaENum结构步骤学习分享

除了TNCB结构之外TLanaENum结构是另外一个比较重要的结构如下所示:(同样位于NB30.pas)
[delphi]  
type  
  // Structure returned to the NCB command NCBENUM.  
  // On a system containing lana's 0, 2 and 3, a structure with  
  // length =3, lana[0]=0, lana[1]=2 and lana[2]=3 will be returned.  
  PLanaEnum = ^TLanaEnum;  
  TLanaEnum = packed record  
    length: Char;         //  Number of valid entries in lana[]  
    lana: array[0..MAX_LANA] of Char;  
  end;  
 
     其中,length成员指出本地机器共有多少个LANA编号;LANA成员代表由实际的LANA编号构成的一个数组。而length值指出LANA数组内有多少个元素会被填充LANA编号。
    另外,需要说明的是,调用Netbios函数时,可以采用两种不同的方式,即同步方式和异步方式。在默认情况下,所有Netbios命令本身均是同步的。换言之,完成命令以前,会一直调用Netbios块。而对一个NCBLISTEN命令来说,当有一个客户机建立了连接,或发生某种类型的错误时,对Netbios的调用才会返回。要想异步调用一个命令,需要让Netbios命令同ASYNCH标志进行一次逻辑OR(或)运算。如指定了ASYNCH标志,那么必须在ncb_post字段中指定一个回调例程( Past Routine),或必须在ncb_event字段中指定一个事件句柄。执行一个异步命令时,从Netbios返回的值是NRC_ GOODRET(OxOO),但NCB_CMD_CPLT字段会设为NRC_PENDING(OxFF)。除此以外,Netbios函数还会将NCB结构的ncb_cmd_cplt一呐字段设为NRC_PENDING,直到命令完成为止。命令完成之后,ncb_retcode字段设为命令的返回值。
   在编写Netbios应用程序时,经常需要进行如下几项操作:
.枚举系统上可用的所有LANA编号。
.重置计划使用的每个LANA编号。
.将名字加入本地名字表。
.将组名加入本地名字表。
.从名字表中删除除一个已经注册的Netbios名字。
.向网络发送数据。
.从网络接收数据。
.获取网络参数。
    Netbios API虽然只有一个函数,但是它可以实现前面列出的所有操作,这是通过设定
TNCB结构的ncb_command字段来实现的。
    要枚举一个指定系统上可用的所有LANA编号。具体步骤如下:
 
(1)申请分配一个TNCB结构。
(2)将该TNCB结构变量初始化成O。
(3)将该TNCB结构变量的ncb_command字段设为NCBENUM。
(4)为ncb_buffer字段分配一个LANA_ENUM结构。
(5)将ncb_lengrh字段设为LANA_ENUM结构的长度。
(6)以该TNCB结构变童为参数调用Netbios函数。
(7)返回常数NRC一GOODRET,表示操作成功。
 
    对一个设计良好的Netbios程序来说,必须重置计划使用的每个LANA编号,否则,对Netbios的其他调用就会返回错误代码52(即NRC_ ENVNOTDEF)。一旦拥有一个LANA_ENUM结构,并有来自LanaEnum的LANA编号,便可针对结构中的每个LANA编号,调用NCBRESET命令来重置它们。具体步骤如下:
 
(1)申请分配一个TNCB结构。
(2)将该TNCB结构变量初始化成0
(3)将该TNCB给构变量的ncb_command字段设为NCBRESET。
(4)将ncb_lana_num字段设为需要重置的LANA编号。
(5)将nb_callname字符字段设为需要要使用的特定Netbios伪坏境参数。
(6)以该TNCB结构变量为参数调用Netbios函数。
(7)返回常数NRC_GOODRET,表示操作成功。
 
  对于前面所说的ncb_callname字段说明以下几点需要补充:
.ncb_callname字段的字符0用于指定可同时进行的最大会话数。通常,操作系统会强制使用一个此最大值的默认值。例如,Windows NT 4.0的最大狱认值为64个并发会话。
.ncb_callname字段的字符2用于指定可为每个LANA增加的最大Netbios名字数量。
    同样,操作系统也会强加一个默认的最大值。
.ncb_callname字段的字符3(用于Netbios客户机)是一个布尔类型的备。通过将此参数设为TRUE,一个客户机便能将机器名作为自己的Netbios进程名使用。因此,那个客户机可与一个服务器建立连接,并在不允许任何其他连接的前提下,向其发送数据。这一选项有效缩短了初始化时间。而假如将一个Netbios名字加入本地名字表,那么必须为此付出相应的代价。
 
补充:软件开发 , Delphi ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,