您的位置:首页 > 编程语言 > Delphi

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

2013-01-26 01:06 513 查看
除了TNCB结构之外TLanaENum结构是另外一个比较重要的结构如下所示:(同样位于NB30.pas)

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名字加入本地名字表,那么必须为此付出相应的代价。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: