宝马娱乐在线112222 > 网络应用 > delphi技术专题宝马娱乐在线---获取网卡物理地址

原标题:delphi技术专题宝马娱乐在线---获取网卡物理地址

浏览次数:122 时间:2019-11-13

先贴代码:

除了TNCB结构之外TLanaENum结构是另外一个比较重要的结构如下所示:(同样位于NB30.pas)

[delphi]  

[delphi]  

{----------------------------------------------------------------------------- 

type  

作者:sushengmiyan 2013.01.26 

  // Structure returned to the NCB command NCBENUM.  

参数:Alana: Integer = 0 

  // On a system containing lana's 0, 2 and 3, a structure with  

返回:string 

  // length =3, lana[0]=0, lana[1]=2 and lana[2]=3 will be returned.  

功能:通过LANA号获取Mac物理地址 (内存方式获取),整体步骤如下: 

  PLanaEnum = ^TLanaEnum;  

    一、枚举系统上可用的所有LANA编号 

  TLanaEnum = packed record  

    二、重置计划使用的每个LANA编号 

    length: Char;         //  Number of valid entries in lana[]  

    三、适配器命令获取网卡地址 

    lana: array[0..MAX_LANA] of Char;  

-----------------------------------------------------------------------------}  

  end;  

  

 

function MemGetNetCardName(Alana: Integer = 0): string;  

     其中,length成员指出本地机器共有多少个LANA编号;LANA成员代表由实际的LANA编号构成的一个数组。而length值指出LANA数组内有多少个元素会被填充LANA编号。

var  

    另外,需要说明的是,调用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字段设为命令的返回值。

  NCB: TNCB;//Netbios控制块  

   在编写Netbios应用程序时,经常需要进行如下几项操作:

  AdapterStatus: TAdapterStatus;//取网卡状态  

.枚举系统上可用的所有LANA编号。

  LanaEnum: TLanaEnum; //LANA枚举值  

.重置计划使用的每个LANA编号。

  I: Integer;  

.将名字加入本地名字表。

  CRC: Char;//netBios返回值  

.将组名加入本地名字表。

begin  

.从名字表中删除除一个已经注册的Netbios名字。

  Result := '';  

.向网络发送数据。

  Try  

宝马娱乐在线,.从网络接收数据。

  { http://blog.csdn.net/sushengmiyan/article/details/8543811 

.获取网络参数。

    一、枚举LANA值 

    Netbios API虽然只有一个函数,但是它可以实现前面列出的所有操作,这是通过设定

      ①.申请分配一个TNCB结构           NCB: TNCB; 

TNCB结构的ncb_command字段来实现的。

      ②.将TNCB结构变量初始化成O        ZeroMemory(@NCB , SizeOf(NCB)); 

    要枚举一个指定系统上可用的所有LANA编号。具体步骤如下:

      ③.置命令为NCBENUM                NCB.ncb_Command := chr(NCBENUM); 

 

      ④.为ncb_buffer分配LANA_ENUM      NCB.ncb_buffer := @LANAENUM; 

(1)申请分配一个TNCB结构。

      ⑤.为NCB_length制定长度           NCB.NCB_length := Sizeof(LANAENUM); 

(2)将该TNCB结构变量初始化成O。

      ⑥.调用Netbios函数获取Netbios     CRC := NetBios(@NCB); 

(3)将该TNCB结构变量的ncb_command字段设为NCBENUM。

      ⑦.返回值NRC_GOODRET表示成功      NCB.ncb_retcode = Chr(NRC_GOODRET) 

(4)为ncb_buffer字段分配一个LANA_ENUM结构。

    }  

(5)将ncb_lengrh字段设为LANA_ENUM结构的长度。

    ZeroMemory(@NCB , SizeOf(NCB));  

(6)以该TNCB结构变童为参数调用Netbios函数。

    NCB.ncb_Command := Chr(NCBENUM);  

(7)返回常数NRC一GOODRET,表示操作成功。

    NCB.ncb_buffer := @LANAENUM;  

 

    NCB.NCB_length := Sizeof(LANAENUM);  

    对一个设计良好的Netbios程序来说,必须重置计划使用的每个LANA编号,否则,对Netbios的其他调用就会返回错误代码52(即NRC_ ENVNOTDEF)。一旦拥有一个LANA_ENUM结构,并有来自LanaEnum的LANA编号,便可针对结构中的每个LANA编号,调用NCBRESET命令来重置它们。具体步骤如下:

    CRC := NetBios(@NCB);  

 

    if not (NCB.ncb_retcode = Chr(NRC_GOODRET)) then Exit;  

(1)申请分配一个TNCB结构。

  

(2)将该TNCB结构变量初始化成0

  

(3)将该TNCB给构变量的ncb_command字段设为NCBRESET。

  { http://blog.csdn.net/sushengmiyan/article/details/8543811 

(4)将ncb_lana_num字段设为需要重置的LANA编号。

    二、重置计划使用的每个LANA编号 

(5)将nb_callname字符字段设为需要要使用的特定Netbios伪坏境参数。

      ①.申请分配一个TNCB结构           NCB: TNCB; 

(6)以该TNCB结构变量为参数调用Netbios函数。

      ②.将TNCB结构变量初始化成O        ZeroMemory(@NCB , SizeOf(NCB)); 

(7)返回常数NRC_GOODRET,表示操作成功。

      ③.置命令为NCBRESET               NCB.ncb_Command := chr(NCBRESET); 

 

      ④.给命令设置LANA编号             NCB.ncb_lana_num := LanaEnum.lana[Alana]; 

  对于前面所说的ncb_callname字段说明以下几点需要补充:

      ⑤.调用Netbios函数获取Netbios     CRC := NetBios(@NCB); 

.ncb_callname字段的字符0用于指定可同时进行的最大会话数。通常,操作系统会强制使用一个此最大值的默认值。例如,Windows NT 4.0的最大狱认值为64个并发会话。

      ⑥.返回值NRC_GOODRET表示成功      NCB.ncb_retcode = Chr(NRC_GOODRET) 

.ncb_callname字段的字符2用于指定可为每个LANA增加的最大Netbios名字数量。

本文由宝马娱乐在线112222发布于网络应用,转载请注明出处:delphi技术专题宝马娱乐在线---获取网卡物理地址

关键词:

上一篇:Linux软件RAID实验宝马娱乐在线112222

下一篇:对深拷贝及浅拷贝的理解,拷贝理解