NDIS_STATUS
NdisIMRegisterLayeredMiniport(
IN NDIS_HANDLE NdisWrapperHandle,
IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
IN UINT CharacteristicsLength,
OUT PNDIS_HANDLE DriverHandle
);
NdisIMRegisterLayeredMiniport registers an intermediate driver’s MiniportXxx entry points and name with the NDIS library when the driver initializes.
typedef struct _NDIS_MINIPORT_CHARACTERISTICS { UCHAR MajorNdisVersion; UCHAR MinorNdisVersion; UINT Reserved; W_CHECK_FOR_HANG_HANDLER CheckForHangHandler; W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler; W_HALT_HANDLER HaltHandler; W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler; W_INITIALIZE_HANDLER InitializeHandler; W_ISR_HANDLER ISRHandler; W_QUERY_INFORMATION_HANDLER QueryInformationHandler; W_RECONFIGURE_HANDLER ReconfigureHandler; W_RESET_HANDLER ResetHandler; W_SEND_HANDLER SendHandler; W_SET_INFORMATION_HANDLER SetInformationHandler; W_TRANSFER_DATA_HANDLER TransferDataHandler; // // MajorNdisVersion must be set to 0x04 with following members // W_RETURN_PACKET_HANDLER ReturnPacketHandler; W_SEND_PACKETS_HANDLER SendPacketsHandler; W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler; } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
An NDIS intermediate driver should initialize this structure with zeros before setting up any of the following members:
This member must be set to 0x04 if the caller sets entry points in any members
following Name.
If the driver supports multipacket sends or media-specific information, it
sets the SendPacketsHandler member instead and sets this member to
NULL.
If the driver includes the build instruction NDIS40_MINIPORT (or
NDIS30_MINIPORT, as appropriate) in its sources or if the driver writer uses
the -NDIS40_MINIPORT (or ..30..) compiler
switch, this parameter is set when the driver is built.
NdisIMRegisterLayeredMiniport returns NDIS_STATUS_SUCCESS if it registered the caller as a miniport, or it can return one of the following status values:
Any NDIS intermediate driver that exports both MiniportXxx and ProtocolXxx functions usually sets up a characteristics structure and calls NdisIMRegisterLayeredMiniport from its DriverEntry function after DriverEntry calls NdisMInitializeWrapper. This structure is copied in the NdisIMRegisterLayeredMiniport request to the NDIS library’s internal storage. Thus, once it has registered, such a driver cannot change its handler functions.
After such an NDIS intermediate driver has called NdisIMRegisterLayeredMiniport successfully, it must call NdisRegisterProtocol to register its ProtocolXxx functions with the NDIS library. Such a driver usually has both ProtocolBindAdapter and ProtocolUnbindAdapter functions. Its ProtocolBindAdapter function will be called next when the underlying NIC driver has initialized successfully. ProtocolBindAdapter then can establish a binding to that NIC driver with NdisOpenAdapter.
An NDIS intermediate driver should have a MiniportSendPackets function if an underlying NIC driver might support multipacket sends or consume media-specific information, such as packet priorities, sent down in a packet array from a higher-level protocol. An NDIS intermediate driver should have a MiniportReturnPacket function if an underlying NIC driver might support multipacket receive indications or indicate packet arrays containing media-specific information. The NDIS library handles packet arrays transferred between an underlying NIC driver and higher-level protocol that support only single-packet transfers on behalf of such an intermediate driver.
An intermediate driver can call NdisMRegisterMiniport instead of NdisIMRegisterLayeredMiniport if it is prepared for an immediate call to the MiniportInitialize function.
Callers of NdisIMRegisterLayeredMiniport run at IRQL PASSIVE_LEVEL.
DriverEntry of NDIS Miniport Drivers, DriverEntry of NDIS Protocol Drivers, MiniportCheckForHang, MiniportHalt, MiniportInitialize, MiniportQueryInformation, MiniportReset, MiniportReturnPacket, MiniportSend, MiniportSendPackets, MiniportSetInformation, MiniportTransferData, MiniportWanSend, NdisIMInitializeDeviceInstance, NdisMRegisterMiniport, NdisOpenAdapter, NdisRegisterProtocol, NdisZeroMemory, ProtocolBindAdapter, ProtocolReceivePacket, ProtocolUnbindAdapter