1 Win32應用程序可以使用Network Basic Input/Output System(NetBIOS)接口與網絡中的其他計算機上的應用程序進行通訊。NetBIOS接口包括一系列顯式命令,由一個被稱為網絡控制塊(NCB)的結構提供。應用程序可以對任何支持NetBIOS接口的協議發出NetBIOS命令。
2 netbios 函數用來解釋并執行一個專有的NCB塊結構
UCHAR Netbios(
PNCB pncb // 指向網絡控制塊的指針
);
返回值:
<1>作為同步請求,返回值就是NCB的返回代碼,同時這個返回代碼也包含在NCB的ncb_retcode成員中
<2>作為異步請求有下面幾種情況:
1.如果異步命令在netbios()返回返回他的調用者之前已經完成,情況同<1>
2.與1.相反,返回值就是0
<3>如果pncb指針無效返回值是NRC_BADNCB
<4>如果ncb_length成員的值不正確或者是ncb_buffer區域被寫保護返回值為NRC_BUFLEN
下面講講NCB控制塊的結構:
typedef struct _NCB {
UCHAR ncb_command;
UCHAR ncb_retcode;
UCHAR ncb_lsn;
UCHAR ncb_num;
PUCHAR ncb_buffer;
WORD ncb_length;
UCHAR ncb_callname[NCBNAMSZ];
UCHAR ncb_name[NCBNAMSZ];
UCHAR ncb_rto;
UCHAR ncb_sto;
void (*ncb_post) (struct _NCB *);
UCHAR ncb_lana_num;
UCHAR ncb_cmd_cplt;
UCHAR ncb_reserve[10];
HANDLE ncb_event;
} NCB;
3 ncb_command:指定一個命令碼和一個該NCB是同步還是異步處理的標志,如果ASYNCH常量通過"|"運 算符與命令碼組合的話,那么這個NCB塊將會異步執行。
.NCBACTION:用于 Win NT非標準的Netbios 3.0的標準命令
.NCBADDGRNAME:添加一個組名字到本地名字表,這個名稱不能被網絡上的其他進程作為一個唯一的 名字來使用但是他可以被其他進程作為組名字來添加
.NCBADDNAME:添加一個唯一名字到本地名字表,TDI驅動程序保證這個名字在網絡中的唯一性
.NCBASTAT:返回一個本地或者遠程適配器的狀態,當使用這個命令的時候,ncb_buffer 成員指向一個ADAPTER_STATUS結構后面緊跟著一個NAME_BUFFER結構數組
.NCBCALL:用另外一個名字開啟一個會話
.NCBCANCEL:終止前一個未執行完的命令
.NCBCHAINSEND:發送兩份數據緩沖到指定的會話伙伴
.NCBCHAINSENDNA:發送兩份數據緩沖到指定的會話伙伴,但不等待對方應答就立即返回
.NCBDELNAME:從本地名字表中刪除一個名字
.NCBDGRECV:接收來自寧一個名字的數據包
.NCBDGRECVBC:接收來自寧一個名字的以廣播方式發送的數據包
.NCBDGSEND:發送一個數據包到一個指定的名字(進程)
.NCBDGSENDBC:發送一個數據包到局域網中的每一臺主機
.NCBENUM:用于WinNT,非標準的Netbios3.0的命令
.NCBFINDNAME:定位一個名字在網絡中的位置,此時ncb_buffer指向FIND_NAME_HEADER結構,同時后面緊跟著一個或者多個FIND_NAME_BUFFER結構
.NCBHANGUP:關閉一個指定的會話
.NCBLISTEN:允許一個會話以另外一個名字打開(本地或者遠程的會話都可以)
.NCBRECV:從一個指定的會話伙伴接收數據
.NCBRECVANY:從任何一個其他的以一個指定的名字通信的會話接收數據
.NCBRESET:復位一個網絡適配器,在他接收任何命令(與ncb_lana_num成員有相同的數字)之前必須進行復位操作????
.NCBSEND:發送數據到指定的會話伙伴
.NECBSENDNA:發送數據到指定的會話伙伴后不等待應答立即返回
.NCBSSTAT:返回某個會話的狀態,指定這個命令以后ncb_buffer成員指向一個SESSION_HEADER 結構,后面緊接著一個或多個SESSION_BUFFER 結構
.NCBUNLINK:斷開一個適配器的連接,該命令的設置是處于兼容性的考慮,在Win32中不支持該命令