共用方式為


NdisRegisterProtocol 函式 (ndis.h)

注意 NDIS 5. x 已被取代,且由 NDIS 6 取代。 x。 如需新的 NDIS 驅動程式開發,請參閱 從 Windows Vista 開始的網路驅動程式。 如需移植 NDIS 5 的相關信息。 x 驅動程式至 NDIS 6。 x,請參閱 將 NDIS 5.x 驅動程式移植到 NDIS 6.0

NdisRegisterProtocol 會在驅動程式初始化時,向 NDIS 連結庫註冊 NDIS 驅動程式的 ProtocolXxx 進入點和名稱。

語法

void NdisRegisterProtocol(
  [out] PNDIS_STATUS                   Status,
  [out] PNDIS_HANDLE                   NdisProtocolHandle,
  [in]  PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,
  [in]  UINT                           CharacteristicsLength
);

參數

[out] Status

呼叫端提供的變數指標,可以是下列其中一個值,可從此函式傳回:

  • NDIS_STATUS_SUCCESS
    NDIS 連結庫已將呼叫端註冊為通訊協定驅動程式。

  • NDIS_STATUS_BAD_CHARACTERISTICS
    ProtocolCharacteristics 的緩衝區中指定的 MajorNdisVersion,CharacteristicsLength 太小。

  • NDIS_STATUS_BAD_VERSION
    ProtocolCharacteristics 緩衝區中指定的 MajorNdisVersion 無效。

  • NDIS_STATUS_RESOURCES
    資源不足,可能是記憶體不足,導致 NDIS 連結庫無法註冊呼叫端。

[out] NdisProtocolHandle

呼叫端提供的變數指標,此變數會傳回代表已註冊驅動程式的句柄。

[in] ProtocolCharacteristics

呼叫端所設定之NDIS_PROTOCOL_CHARACTERISTICS結構的指標。 ProtocolCharacteristics 的結構定義如下:

        typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
            UCHAR MajorNdisVersion;
            UCHAR MinorNdisVersion;
            UINT Reserved;
            OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler;
            CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler;
            SEND_COMPLETE_HANDLER SendCompleteHandler;
            TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
            RESET_COMPLETE_HANDLER ResetCompleteHandler;
            REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
            RECEIVE_HANDLER ReceiveHandler;
            RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
            STATUS_HANDLER StatusHandler;
            STATUS_COMPLETE_HANDLER StatusCompleteHandler;
            NDIS_STRING Name;
        //
        // MajorNdisVersion must be set to 0x04 or 0x05
        // with any of the following members.
        //
            RECEIVE_PACKET_HANDLER ReceivePacketHandler;
            BIND_HANDLER BindAdapterHandler;
            UNBIND_HANDLER UnbindAdapterHandler;
            PNP_EVENT_HANDLER PnPEventHandler;
            UNLOAD_PROTOCOL_HANDLER UnloadHandler;
        //
        // MajorNdisVersion must be set to 0x05 
        // with any of the following members.
        //
            CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler;
            CO_STATUS_HANDLER CoStatusHandler;
            CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler;
            CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
        } NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;

驅動程式應該先以零初始化這個結構,再設定下列成員:

  • MajorNdisVersion
    指定驅動程式所使用的 NDIS 連結庫主要版本。 目前的值是0x05,雖然 NDIS 連結庫會繼續支援針對 NDIS V4.0 開發的現有驅動程式。 NDIS 不再支援 V3.0 通訊協定。

  • MinorNdisVersion
    指定次要 NDIS 版本。 目前的值為 0x00。

  • 已保留
    此成員保留供系統使用。

  • OpenAdapterCompleteHandler
    指定呼叫端 ProtocolOpenAdapterComplete 函式的進入點。

  • CloseAdapterCompleteHandler
    指定呼叫端 ProtocolCloseAdapterComplete 函式的進入點。

  • SendCompleteHandler
    指定呼叫端 ProtocolSendComplete 函式的進入點,如果有的話。

  • TransferDataCompleteHandler
    指定呼叫端 ProtocolTransferDataComplete 函式的進入點,如果有的話。

  • ResetCompleteHandler
    指定呼叫端 ProtocolResetComplete 函式的進入點。

  • RequestCompleteHandler
    指定呼叫端 ProtocolRequestComplete 函式的進入點。

  • ReceiveHandler
    指定呼叫端 ProtocolReceive 函式 的進入點,如果有的話。

  • ReceiveCompleteHandler
    指定呼叫端 ProtocolReceiveComplete 函式的進入點。

  • StatusHandler
    指定呼叫端 ProtocolStatus 函式的進入點,如果有的話。

  • StatusCompleteHandler
    指定呼叫端 ProtocolStatusComplete 函式的進入點。

  • 名稱
    在系統預設字元集中,包含呼叫端初始化計數位符串的NDIS_STRING類型,命名驅動程式。 對於 Windows 2000 和更新版本的驅動程式,此字串包含 Unicode 字元。 也就是說,針對 Windows 2000 和更新版本,NDIS 會將NDIS_STRING類型定義為 UNICODE_STRING 類型。 此字串必須符合安裝通訊協定時, 在登錄 (中指定的字串) 。

    NdisRegisterProtocol 會將提供的字串轉換成大寫,因此通訊協定驅動程式寫入器無法假設變更已註冊通訊協定名稱的大小寫會為驅動程式建立唯一的名稱。

  • ReceivePacketHandler
    指定呼叫端 ProtocolReceivePacket 函式的進入點,如果有的話,則為 NULL。 系結至任何支援多套件接收指示之 NIC 驅動程式的通訊協議應該提供 ProtocolReceivePacket 函式來增強其效能。 不過,將本身獨佔系結至連線導向迷你埠的通訊協定也可以將此成員設定為 NULL

  • BindAdapterHandler
    指定呼叫端 ProtocolBindAdapter 函式的進入點。 將 MajorNdisVersion 成員中的值設定為 0x05 或 0x04的呼叫端必須提供 ProtocolBindAdapter 函式,並支援隨插即用。 NDIS 中繼驅動程式也必須提供 ProtocolBindAdapter 函式,這可讓這些中繼驅動程式呼叫 NdisIMRegisterLayeredMiniport ,並延遲完整驅動程式初始化,直到基礎 NIC 驅動程式初始化為止。

  • UnbindAdapterHandler
    指定呼叫端 ProtocolUnbindAdapter 函式的進入點。 提供 ProtocolBindAdapter 函式的 NDIS 驅動程式也必須提供 ProtocolUnbindAdapter 函式。

  • PnPEventHandler
    指定呼叫端 ProtocolPnPEvent 函式的進入點,如果有的話。

  • UnloadHandler
    指定呼叫端 ProtocolUnbind 函式的進入點,如果有的話,則為 NULL

  • CoSendCompleteHandler
    指定呼叫端 ProtocolCoSendComplete 函式的進入點,該函式必須提供連接導向用戶端或呼叫管理員。 如果連線導向用戶端也系結至無連線迷你埠,則提供 ProtocolSendComplete 函式。

  • CoStatusHandlerCoStatusHandler
    指定呼叫端 ProtocolCoStatus 函式的進入點,該函式必須提供連接導向用戶端或呼叫管理員。 如果連線導向用戶端也會將本身系結至無連線的迷你埠,則提供 ProtocolStatus 函式。

  • CoReceivePacketHandler
    指定呼叫端 ProtocolCoReceivePacket 函式的進入點,該函式必須提供連接導向用戶端或呼叫管理員。 連接導向用戶端會提供 ProtocolReceivePacket 函式和/或 ProtocolReceiveProtocolTransferDataComplete 函式,如果它本身也會繫結至無連線的迷你埠。

  • CoAfRegisterNotifyHandler
    指定呼叫端 ProtocolAfRegisterNotify 函式 的進入點,該函式必須提供連接導向用戶端。

[in] CharacteristicsLength

指定 ProtocolCharacteristics 結構位元組的大小。 如果建置指示詞 -DNDIS50=1 或 -DNDIS40=1 是在來源檔案中指定,則 #include Ndis.h 之前,sizeof (NDIS_PROTOCOL_CHARACTERISTICS) 會自動設定為適當的值。 如果未指定任一指示詞,NDIS 會假設正在使用 V3.0 特性結構。

特性結構 之 MajorNdisVersionMinorNdisVersion 成員中設定的值必須與 build 指示詞一致,或者它們必須分別0x03和0x00。

傳回值

備註

通訊協定驅動程式必須指定目前版本) 或0x04 0x05 (MajorNdisVersion 。 NDIS 不再支援 V.30 通訊協定,因此不會載入指定 0x03 MajorNdisVersion 的通訊協定。

所有通訊協議都必須具備隨插即用 (PnP) 功能。 因此,通訊協議必須指定 BindAdapterHandlerUnbindAdapterHandler 的進入點。 NDIS 不會載入指定這些處理程式 NULL 的通訊協定。

為了達到最佳效能,任何將自行分層於支援多套件接收之無連接 NIC 驅動程式的通訊協定都應該提供 ProtocolReceivePacket 函式。 這類通訊協議驅動程式也必須提供 ProtocolReceive 函式 。 任何支援多套件傳送的無連線 NIC 驅動程式也可能表示多套件接收。

用戶端或呼叫管理員的所有連線導向通訊協議都必須註冊 ProtocolCoReceivePacket 函式。 同時系結至無連線 NIC 驅動程式的用戶端通訊協定也會提供 ProtocolReceivePacketProtocolReceive 函式 。 聯機導向通訊協議必須針對用戶端呼叫 NdisClOpenAddressFamily 來向 NDIS 註冊其他連線導向進入點,或從其 ProtocolBindAdapter 函式呼叫管理員的 NdisCmRegisterAddressFamily

成功呼叫 NdisRegisterProtocol 之後,驅動程式就無法改變它所提供的 ProtocolXxx 函式集。

成功註冊的驅動程式應該儲存 在 NdisProtocolHandle 傳回的句柄。 這是驅動程序後續呼叫之其他 NdisXxx 函式的必要參數。

成功呼叫 NdisRegisterProtocol 之後,PnP 感知或連線導向通訊協定的 DriverEntry 函式會傳回控件,因為這類驅動程式的 ProtocolBindAdapter 函式後續會呼叫一或多次,以設定基礎 NIC 的系結 () 。 否則,通訊協定驅動程式可以呼叫 NdisOpenAdapter 來設定基礎 NIC 驅動程式的系結,或將本身分層到註冊一組 NDIS MiniportXxx 函式的任何 NDIS 驅動程式之上。

  • 目標平臺: 通用
  • 版本:Windows Vista 中不支援 NDIS 6.0 驅動程式。 請改用 NdisRegisterProtocolDriver。 Windows Vista 和 Windows XP 中支援 NDIS 5.1 驅動程式。

規格需求

需求
標頭 ndis.h (包括 Ndis.h)
程式庫 Ndis.lib
IRQL PASSIVE_LEVEL

另請參閱