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