NCB 結構 (nb30.h)
[Windows Vista、Windows Server 2008 和後續版本的操作系統不支援 Netbios ]
NCB 結構代表網路控制區塊。 其中包含要執行的命令、選擇性的後置例程、選擇性事件句柄,以及用於訊息或其他數據的緩衝區指標。 這個結構的指標會傳遞至 Netbios 函式。
語法
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 *) * ncb_post;
UCHAR ncb_lana_num;
UCHAR ncb_cmd_cplt;
#if ...
UCHAR ncb_reserve[18];
#else
UCHAR ncb_reserve[10];
#endif
HANDLE ncb_event;
} NCB, *PNCB;
成員
ncb_command
指定命令程式代碼和旗標,指出 NCB 結構是否以異步方式處理。 最重要的位包含旗標。 如果使用 OR 運算子) ,將 ASYNCH 常數與命令程式代碼結合 (, 則 NCB 結構會以異步方式處理。 支援下列命令代碼。
程式碼 | 意義 |
---|---|
NCBACTION |
Windows Server 2003、Windows XP、Windows 2000 和 Windows NT:啟用傳輸介面的延伸模組。 NCBACTION 會對應至 TdiAction。 指定此程式代碼時, ncb_buffer 成員會指向要填入 ACTION_HEADER 結構的緩衝區,而該結構會選擇性地接著數據。 無法使用 NCBCANCEL 取消 NCBACTION 命令。 NCBACTION 不是標準 NetBIOS 3.0 命令。 |
NCBADDGRNAME | 將組名新增至本機名稱數據表。 網路上的另一個進程無法使用此名稱作為唯一名稱,但任何人都可以將其新增為組名。 |
NCBADDNAME | 將唯一名稱新增至本機名稱數據表。 TDI 驅動程式可確保名稱在網路上是唯一的。 |
NCBASTAT | 擷取本機或遠端配接器的狀態。 指定此程式代碼時, ncb_buffer 成員會指向要填入 ADAPTER_STATUS 結構的緩衝區,後面接著 NAME_BUFFER 結構的陣列。 |
NCBCALL | 以另一個名稱開啟會話。 |
NCBCANCEL | 取消先前擱置的命令。 |
NCBCHAINSEND | 將兩個數據緩衝區的內容傳送至指定的會話夥伴。 |
NCBCHAINSENDNA | 將兩個數據緩衝區的內容傳送至指定的會話夥伴,且不會等候通知。 |
NCBDELNAME | 從本機名稱數據表中刪除名稱。 |
NCBDGRECV | 從任何名稱接收數據報。 |
NCBDGRECVBC | 從任何名稱接收廣播數據報。 |
NCBDGSEND | 將數據報傳送至指定的名稱。 |
NCBDGSENDBC | 將廣播數據報傳送至局域網路上的每部主機, (LAN) 。 |
NCBENUM |
Windows Server 2003、Windows XP、Windows 2000 和 Windows NT:列舉 LANA () 號碼的 LAN 配接器。 指定此程式代碼時,ncb_buffer成員會指向要填入LANA_ENUM結構的緩衝區。 NCBENUM 不是標準 NetBIOS 3.0 命令。 |
NCBFINDNAME | 決定網路上名稱的位置。 指定此程式代碼時, ncb_buffer 成員會指向要填入 FIND_NAME_HEADER 結構的緩衝區,後面接著一或多個 FIND_NAME_BUFFER 結構。 |
NCBHANGUP | 關閉指定的工作階段。 |
NCBLANSTALERT |
Windows Server 2003、Windows XP、Windows 2000 和 Windows NT:通知使用者持續超過一分鐘的 LAN 失敗。 |
NCBLISTEN | 讓會話以另一個名稱開啟, (本機或遠端) 。 |
NCBRECV | 從指定的工作階段夥伴接收數據。 |
NCBRECVANY | 從對應至指定名稱的任何工作階段接收資料。 |
NCBRESET |
重設 LAN 配接器。 配接器必須先重設,才能接受任何其他 NCB 命令,以指定 ncb_lana_num 成員中的相同數位。
使用下列值來指定如何釋放資源:
|
NCBSEND | 將數據傳送至指定的工作階段夥伴。 |
NCBSENDNA | 將數據傳送至指定的會話夥伴,且不會等候通知。 |
NCBSSTAT | 擷取會話的狀態。 指定這個值時, ncb_buffer 成員會指向要填入 SESSION_HEADER 結構的緩衝區,後面接著一或多個 SESSION_BUFFER 結構。 |
NCBTRACE |
啟動或停用 NCB 追蹤。
不支援此命令。 |
NCBUNLINK |
取消連結配接器。
此命令可供與舊版 NetBIOS 相容。 它在 Windows 中沒有任何作用。 |
ncb_retcode
指定傳回碼。 這個值會在異步操作進行時設定為NRC_PENDING。 系統會傳回下列其中一個值:
值 | 意義 |
---|---|
NRC_GOODRET | 作業成功。 |
NRC_BUFLEN | 提供了不合法的緩衝區長度。 |
NRC_ILLCMD | 已提供不合法的命令。 |
NRC_CMDTMO | 命令逾時。 |
NRC_INCOMP | 訊息不完整。 應用程式是發出另一個命令。 |
NRC_BADDR | 緩衝區位址不合法。 |
NRC_SNUMOUT | 會話號碼超出範圍。 |
NRC_NORES | 沒有可用的資源。 |
NRC_SCLOSED | 工作階段已關閉。 |
NRC_CMDCAN | 命令已取消。 |
NRC_DUPNAME | 本機名稱數據表中存在重複的名稱。 |
NRC_NAMTFUL | 名稱數據表已滿。 |
NRC_ACTSES | 命令已完成;名稱具有作用中的會話,且不再註冊。 |
NRC_LOCTFUL | 本機會話數據表已滿。 |
NRC_REMTFUL | 遠程會話數據表已滿。 開啟會話的要求遭到拒絕。 |
NRC_ILLNN | 指定了不合法的名稱號碼。 |
NRC_NOCALL | 系統找不到呼叫的名稱。 |
NRC_NOWILD | ncb_name 成員中 不允許通配符。 |
NRC_INUSE | 名稱已在遠端配接器上使用。 |
NRC_NAMERR | 已刪除名稱。 |
NRC_SABORT | 會話異常結束。 |
NRC_NAMCONF | 偵測到名稱衝突。 |
NRC_IFBUSY | 介面忙碌中。 |
NRC_TOOMANY | 未處理太多命令;應用程式稍後可以重試命令。 |
NRC_BRIDGE | ncb_lana_num成員未指定有效的網路號碼。 |
NRC_CANOCCR | 命令在取消作業發生時完成。 |
NRC_CANCEL | NCBCANCEL 命令無效;命令未取消。 |
NRC_DUPENV | 名稱是由另一個本機進程所定義。 |
NRC_ENVNOTDEF | 未定義環境。 必須發出重設命令。 |
NRC_OSRESNOTAV | 操作系統資源已用盡。 應用程式稍後可以重試命令。 |
NRC_MAXAPPS | 超過應用程式數目上限。 |
NRC_NOSAPS | NetBIOS 沒有服務存取點 (SAP) 。 |
NRC_NORESOURCES | 要求的資源無法使用。 |
NRC_INVADDRESS | NCB 通訊址無效。 |
NRC_INVDDID |
NCB DDID 無效。
此傳回碼不是IBM NetBIOS 3.0 規格的一部分,而且不會在 NCB 結構中傳回。 而是 由 Netbios 函式傳回。 |
NRC_LOCKFAIL | 嘗試鎖定用戶區域失敗。 |
NRC_OPENERR | 裝置驅動程式執行開啟作業期間發生錯誤。 此錯誤碼不是 NetBIOS 3.0 規格的一部分。 |
NRC_SYSTEM | 發生系統錯誤。 |
NRC_PENDING | 異步操作尚未完成。 |
ncb_lsn
識別本機會話編號。 這個數位可唯一識別環境中的會話。 成功 NCBCALL 命令之後, Netbios 函式會傳回此數位。
ncb_num
指定局域網路名稱的數位。 在成功的 NCBADDNAME 或 NCBADDGRNAME 命令之後,Netbios 會傳回此數位。 這個數位不是名稱,必須搭配所有數據報命令和 NCBRECVANY 命令使用。
NAME_NUMBER_1的數位一律0x01。 Netbios 函式會將範圍中的值指派給其餘名稱0x02 0xFE。
ncb_buffer
訊息緩衝區的指標。 緩衝區必須具有寫入許可權。 其用途如下:
Command | 目的 |
---|---|
NCBSEND | 包含要傳送的訊息。 |
NCBRECV | 接收訊息。 |
NCBSSTAT | 接收要求的狀態資訊。 |
ncb_length
指定訊息緩衝區的大小,以位元組為單位。 對於接收命令,此成員是由 Netbios 函式設定,以指出收到的位元元組數目。
如果緩衝區長度不正確, Netbios 函式會傳回 NRC_BUFLEN 錯誤碼。
ncb_callname[NCBNAMSZ]
指定遠端應用程式的名稱。 應該提供尾端空格符,使字串的長度等於 NCBNAMSZ。
ncb_name[NCBNAMSZ]
指定已知應用程式的名稱。 應該提供尾端空格符,使字串的長度等於 NCBNAMSZ。
ncb_rto
指定會話的接收作業逾時期間,以 500 毫秒為單位。 值為零表示沒有逾時。使用 NCBCALL 或 NCBLISTEN 命令指定 。 影響後續 的 NCBRECV 命令。
ncb_sto
指定會話的傳送作業逾時期間,以 500 毫秒為單位。 值為零表示沒有逾時。使用 NCBCALL 或 NCBLISTEN 命令指定 。 影響後續 的 NCBSEND 和 NCBCHAINSEND 命令。
ncb_post
指定要在異步命令完成時呼叫之後例程的位址。 後置例程定義為:
NCB_POST PostRoutine ( PNCB pncb ) ;
其中 pncb 參數是已完成 NCB 結構的指標。
ncb_lana_num
指定 LAN 配接器號碼。 這個以零起始的數位會對應至使用特定 LAN 適配卡板的特定傳輸提供者。
ncb_cmd_cplt
指定命令完成旗標。 這個值與 ncb_retcode 成員相同。
ncb_reserve[18]
保留;必須是零。
ncb_reserve數位的長度 X 取決於系統架構。 若為64位系統,數位系統,數位包含18個元素。 否則,陣列會包含10個專案。
ncb_reserve[10]
保留;必須是零。
ncb_reserve數位的長度 X 取決於系統架構。 若為64位系統,數位系統,數位包含18個元素。 否則,陣列會包含10個專案。
ncb_event
指定事件物件的句柄,這個物件會在接受異步命令時設定為非ignaled 狀態,並在異步命令完成時設定為已發出訊號的狀態。 如果 Netbios 函式傳回非零值,就會發出事件訊號。 只應該使用手動重設事件來進行同步處理。 指定的事件不應與一個以上的使用中異步命令相關聯。
如果ncb_command成員未設定 ASYNCH 旗標,或ncb_post為非零,則ncb_event成員必須為零。 否則, Netbios 會傳回 NRC_ILLCMD 錯誤碼。
備註
使用 ncb_event 發出異步要求需要比使用 ncb_post少的系統資源。 此外,當 ncb_event 為非零時,如果線程在處理要求之前終止,就會取消擱置要求。 這不適用於使用 ncb_post 傳送的異步要求。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
標頭 | nb30.h |
另請參閱