VOID
NdisRegisterProtocol(
OUT PNDIS_STATUS Status,
OUT PNDIS_HANDLE NdisProtocolHandle,
IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,
IN UINT CharacteristicsLength
);
NdisRegisterProtocol registers an NDIS driver’s ProtocolXxx entry points and name with the NDIS library when the driver initializes.
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
// with any of the following members.
//
RECEIVE_PACKET_HANDLER ReceivePacketHandler;
BIND_HANDLER BindAdapterHandler;
UNBIND_HANDLER UnbindAdapterHandler;
TRANSLATE_HANDLER TranslateHandler;
UNLOAD_PROTOCOL_HANDLER UnloadHandler;
} NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
Specifies the major version of the NDIS library the driver is using. The current value is 0x04, although the NDIS library continues to support existing drivers developed for NDIS V3.0.
This member must be set to 0x04 if the caller if the caller is an NDIS intermediate driver or if the caller sets entry points in any members following Name.
NdisRegisterProtocol converts the supplied string to upper case, so a
protocol driver writer cannot assume that changing the case of an already
registered protocol name creates a unique name for the driver.
The value supplied at CharacteristicsLength must be at least the sizeof(NDISXX_PROTOCOL_CHARACTERISTICS) designated by the supplied MajorNdisVersion in this structure.
For the best possible performance, any protocol that will layer itself above a NIC driver that supports multipacket receives should provide a ProtocolReceivePacket function. Any NIC driver that supports multipacket sends is also likely to indicate multipacket receives. A driver that provides a ProtocolReceivePacket function also must provide a ProtocolReceive function.
After a successful call to NdisRegisterProtocol, a driver cannot alter the set of ProtocolXxx functions it supplied.
A successfully registered driver should save the handle returned at NdisProtocolHandle. It is a required parameter to other NdisXxx functions that the driver calls subsequently.
After a successful call to NdisRegisterProtocol, the driver can call NdisOpenAdapter to set up a binding to the underlying NIC driver or to layer itself above any NDIS driver that registered a set of NDIS upper-edge (MiniportXxx) functions.
Callers of NdisRegisterProtocol run at IRQL PASSIVE_LEVEL.
DriverEntry of NDIS Protocol Drivers, NdisDeregisterProtocol, NdisIMRegisterLayeredMiniport, NdisInitializeString, NdisInitUnicodeString, NdisOpenAdapter, NdisZeroMemory, ProtocolBindAdapter, ProtocolCloseAdapterComplete, ProtocolOpenAdapterComplete, ProtocolReceive, ProtocolReceiveComplete, ProtocolReceivePacket, ProtocolRequestComplete, ProtocolResetComplete, ProtocolSendComplete, ProtocolStatus, ProtocolStatusComplete, ProtocolTransferDataComplete, ProtocolTranslate, ProtocolUnbindAdapter