除了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名字加入本地名字表,那麼必須為此付出相應的代價。