共用方式為


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 成員中的相同數位。

使用下列值來指定如何釋放資源:

  • 如果未 0x00 ncb_lsn ,則會釋放與 ncb_lana_num 相關聯的所有資源。
  • 如果 ncb_lsn 0x00,則會釋放與 ncb_lana_num 相關聯的所有資源,並配置新的資源。 ncb_callname[0] 位元組會指定會話數目上限,而 ncb_callname[2] 位元組會指定名稱數目上限。 應用程式使用NAME_NUMBER_1之 ncb_callname[3] 位元組要求的非零值。
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

指定局域網路名稱的數位。 在成功的 NCBADDNAMENCBADDGRNAME 命令之後,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 毫秒為單位。 值為零表示沒有逾時。使用 NCBCALLNCBLISTEN 命令指定 。 影響後續 的 NCBRECV 命令。

ncb_sto

指定會話的傳送作業逾時期間,以 500 毫秒為單位。 值為零表示沒有逾時。使用 NCBCALLNCBLISTEN 命令指定 。 影響後續 的 NCBSENDNCBCHAINSEND 命令。

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

另請參閱

ACTION_HEADER

ADAPTER_STATUS

FIND_NAME_BUFFER

FIND_NAME_HEADER

LANA_ENUM

NAME_BUFFER

NetBIOS 結構

Netbios

SESSION_BUFFER

SESSION_HEADER

NetBIOS 介面概觀