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