注释 NDIS 5。 x 已被弃用,并被 NDIS 6 取代。 x。 有关新的 NDIS 驱动程序开发,请参阅从 Windows Vista 开始网络驱动程序。 有关移植 NDIS 5 的信息。 将 x 驱动程序 到 NDIS 6。 x,请参阅 将 NDIS 5.x 驱动程序移植到 NDIS 6.0。
NdisIMRegisterLayeredMiniport 在驱动程序初始化时使用 NDIS 库注册中间驱动程序的 MiniportXxx 入口点和名称。
语法
NDIS_STATUS NdisIMRegisterLayeredMiniport(
[in] NDIS_HANDLE NdisWrapperHandle,
[in] PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
[in] UINT CharacteristicsLength,
[out] PNDIS_HANDLE DriverHandle
);
参数
[in] NdisWrapperHandle
指定 NdisMInitializeWrapper返回的句柄。
[in] MiniportCharacteristics
指向调用方设置的 NDIS XX_MINIPORT_CHARACTERISTICS 结构的指针。 MiniportCharacteristics 的结构定义如下:
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;
//
// Version used is V4.0 or V5.0
// with following members
//
W_RETURN_PACKET_HANDLER ReturnPacketHandler;
W_SEND_PACKETS_HANDLER SendPacketsHandler;
W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
//
// Version used is V5.0 with the following members
//
W_CO_CREATE_VC_HANDLER CoCreateVcHandler;
W_CO_DELETE_VC_HANDLER CoDeleteVcHandler;
W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler;
W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler;
W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler;
W_CO_REQUEST_HANDLER CoRequestHandler;
//
// Version used is V5.1 with the following members
//
W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler;
W_MINIPORT_PNPEVENTNOTIFY_HANDLER PnPEventNotifyHandler;
W_MINIPORT_SHUTDOWN_HANDLER AdapterShutdownHandler;
} NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
在设置以下任何成员之前,NDIS 中间驱动程序应使用零初始化此结构:
MajorNdisVersion
指定驱动程序正在使用的 NDIS 库的主版本。 当前值为0x05,尽管 NDIS 库继续支持为 NDIS 4.0 开发的现有微型端口驱动程序。MinorNdisVersion
指定驱动程序使用的 NDIS 库的次要版本。 虽然 NDIS 继续支持现有驱动程序,但当前值0x00。保留
此成员保留供系统使用。CheckForHangHandler
指定调用方 MiniportCheckForHang 函数的入口点(如果有)或 NULL。DisableInterruptHandler
指定 NULL。EnableInterruptHandler
指定 NULL。HaltHandler
指定调用方 MiniportHalt 函数的入口点。HandleInterruptHandler
指定 NULL。InitializeHandler
指定调用方 MiniportInitialize 函数的入口点。ISRHandler
指定 NULL。QueryInformationHandler
指定调用方 MiniportQueryInformation 函数的入口点。ReconfigureHandler
指定 NULL。ResetHandler
指定调用方 MiniportReset 函数的入口点。SendHandler
指定调用方 MiniportSend 函数、MiniportWanSend 函数的入口点;如果调用方提供 MiniportSendPackets 函数,则指定 NULL。如果驱动程序支持多包发送或特定于媒体的信息,则会改为设置 SendPacketsHandler 成员,并将此成员设置为 NULL。
SetInformationHandler 指定调用方 MiniportSetInformation 函数的入口点。
TransferDataHandler
指定调用方 MiniportTransferData 函数的入口点(如果有)或 NULL。 此微型端口驱动程序函数是必需的,除非调用方是 WAN NIC 的驱动程序,否则调用方支持多包接收,因此,在 returnPacketHandler 提供其 MiniportReturnPacket 函数的入口点。ReturnPacketHandler
指定调用方 MiniportReturnPacket 函数的入口点(如果有)或 NULL。SendPacketsHandler
指定调用方 MiniportSendPackets 的入口点 函数(如果有)或 NULL。AllocateCompleteHandler
指定 NULL。CoCreateVcHandler
指定 NULL。CoDeleteVcHandler
指定 NULL。CoActivateVcHandler
指定 NULL。CoDeactivateVcHandler
指定 NULL。CoSendPacketsHandler
指定 NULL。CoRequestHandler
指定 NULL。CancelSendPacketsHandler
指定调用方 MiniportCancelSendPackets 函数的入口点(如果有)或 NULL。 队列发送数据包超过一秒的中间驱动程序应注册 MiniportCancelSendPackets 函数。PnPEventNotifyHandler
指定调用方 MiniportPnPEventNotify 函数的入口点。 NDIS 5.1 微型端口驱动程序必须注册 MiniportPnPEventNotify 函数。 具有 WDM 下边缘的微型端口驱动程序应注册 MiniportPnPEventNotify 函数。AdapterShutdownHandler
指定调用方 MiniportShutdown 函数的入口点(如果有)或 NULL。 NDIS 5.1 中间驱动程序必须注册 MiniportShutdown 函数。 NDIS 5.1 中间驱动程序应通过调用 NdisIMRegisterLayeredMiniport(而不是通过调用 NdisMRegisterAdapterShutdownHandler来注册 MiniportShutdown 函数。
[in] CharacteristicsLength
指定调用方提供的特征缓冲区的长度(以字节为单位)。 如果驱动程序提供NDIS50_MINIPORT_CHARACTERISTICS结构,则此参数必须是 sizeof(NDIS50_MINIPORT_CHARACTERISTICS),如果驱动程序 NDIS40_MINIPORT_CHARACTERISTICS提供NDIS50_MINIPORT_CHARACTERISTICS结构,则此参数必须为 sizeof(NDIS40_MINIPORT_CHARACTERISTICS)。
如果驱动程序在其源中包含生成指令NDIS50_MINIPORT(或NDIS40_MINIPORT),或者驱动程序编写器使用 -NDIS50_MINIPORT(或 .)。40..) 编译器开关,在生成驱动程序时设置此参数。
[out] DriverHandle
指向 NdisIMRegisterLayeredMiniport(如果此调用成功)的变量的指针,将返回调用方应保存的句柄。 调用方随后必须将此句柄传递给 NdisIMInitializeDeviceInstance,通常来自其 ProtocolBindAdapter 函数。
返回值
NdisIMRegisterLayeredMiniport 在将调用方注册为微型端口驱动程序时返回NDIS_STATUS_SUCCESS,也可以返回以下状态值之一:
返回代码 | 描述 |
---|---|
NDIS_STATUS_BAD_CHARACTERISTICS | CharacteristicsLength 对于在 MiniportCharacteristics的缓冲区中指定的 MajorNdisVersion 来说太小。 |
NDIS_STATUS_BAD_VERSION | 特征结构中指定的 MajorNdisVersion 或 MajorNdisVersion 无效。 |
NDIS_STATUS_RESOURCES | 资源短缺(可能是内存)阻止了 NDIS 库将调用方注册为微型端口驱动程序。 |
NDIS_STATUS_FAILURE | 这是默认错误状态,当上述任何错误都导致注册失败时返回。 例如,如果 NDIS 库无法加载驱动程序的映像并将其锁定到系统内存中,则返回此错误。 |
言论
导出 MiniportXxx 和 ProtocolXxx 函数的任何 NDIS 中间驱动程序都设置了特征结构,并在 DriverEntry 调用 NdisMInitializeWrapper后,从其 DriverEntry 函数调用 NdisIMRegisterLayeredMiniport。 此结构在 NdisIMRegisterLayeredMiniport 请求复制到 NDIS 库的内部存储中。 因此,注册后,此类驱动程序无法更改其处理程序函数。
在这样一个 NDIS 中间驱动程序成功调用 NdisIMRegisterLayeredMiniport 后,它必须调用 NdisRegisterProtocol,以便将其 ProtocolXxx 函数注册到 NDIS 库。 此类驱动程序通常同时 ProtocolBindAdapter 和 ProtocolUnbindAdapter 函数。 其 ProtocolBindAdapter 函数将在基础 NIC 驱动程序成功初始化后调用。 然后,ProtocolBindAdapter 可以使用 NdisOpenAdapter建立与该 NIC 驱动程序的绑定。
如果基础 NIC 驱动程序可能支持多包发送或使用媒体特定的信息(例如数据包优先级)从更高级别协议中发送数据包数组,则 NDIS 中间驱动程序应具有 MiniportSendPackets 函数。 如果基础 NIC 驱动程序可能支持多包接收指示或指示包含媒体特定信息的数据包数组,则 NDIS 中间驱动程序应具有 MiniportReturnPacket 函数。 NDIS 库处理在基础 NIC 驱动程序与高级协议之间传输的数据包阵列,该协议仅支持代表此类中间驱动程序进行单数据包传输。
- 目标平台:通用
- 版本:Windows Vista 中不支持 NDIS 6.0 驱动程序。 请改用 NdisMRegisterMiniportDriver。 在 Windows Vista 和 Windows XP 中支持 NDIS 5.1 驱动程序。
要求
要求 | 价值 |
---|---|
标头 | ndis.h (包括 Ndis.h) |
库 | Ndis.lib |
IRQL | PASSIVE_LEVEL |
另请参阅
- NDIS 微型端口驱动程序的 DriverEntry
- NDIS 协议驱动程序的 DriverEntry
- MiniportCheckForHang
- MiniportHalt
- MiniportInitialize
- MiniportQueryInformation
- MiniportReset
- MiniportReturnPacket
- MiniportSend
- MiniportSendPackets
- MiniportSetInformation
- MiniportTransferData
- MiniportWanSend
- NdisIMInitializeDeviceInstance
- NdisMRegisterAdapterShutdownHandler
- NdisMRegisterMiniport
- NdisOpenAdapter
- NdisRegisterProtocol
- NdisZeroMemory
- ProtocolBindAdapter
- ProtocolReceivePacket
- ProtocolUnbindAdapter