将中间驱动程序注册为微型端口驱动程序

中间驱动程序调用 NdisMRegisterMiniportDriver 以导出其 MiniportXxx 函数。 NdisMRegisterMiniportDriver 返回的 NdisMiniportDriverHandle 必须由中间驱动程序保留,并在驱动程序调用 NdisIMInitializeDeviceInstanceEx 时输入到 NDIS

中间驱动程序必须:

  1. 使用 NdisZeroMemoryNDIS_MINIPORT_DRIVER_CHARACTERISTICS结构进行零初始化。

  2. 存储必需 MiniportXxx 函数的地址,以及驱动程序导出的任何可选 MiniportXxx 函数。

支持 NDIS 6.0 功能的中间驱动程序必须注册为版本 6.0 微型端口驱动程序。 有关指定微型端口驱动程序版本号的详细信息,请参阅 NDIS_MINIPORT_DRIVER_CHARACTERISTICS

您必须将 MiniportCharacteristics 中的以下条目设置为有效的 MiniportXxx 函数地址,除非该函数是可选的且未导出。 如果驱动程序不导出函数,请将地址设置为 NULL

SetOptionsHandler
MiniportSetOptions 是一个可选函数。 NDIS 调用 MiniportSetOptions ,以便中间驱动程序可以指定可选处理程序。

InitializeHandlerEx
NDIS 调用 MiniportInitializeEx ,因为中间驱动程序调用 NdisIMInitializeDeviceInstanceEx 来初始化其用于初始化的虚拟微型端口的微型端口适配器操作。

HaltHandlerEx
MiniportHaltEx 是必需函数。 如果禁用或停止中间驱动程序公开的虚拟微型端口设备,或者中间驱动程序调用 NdisIMDeInitializeDeviceInstance 来启动其删除,则 NDIS 调用 MiniportHaltEx

UnloadHandler
MiniportDriverUnload 是必需函数。 NDIS 调用 MiniportDriverUnload 以卸载中间驱动程序。

PauseHandler
MiniportPause 是必需函数。 NDIS 调用 MiniportPause 来停止通过中间驱动程序的指定虚拟微型端口流动网络数据。

RestartHandler
MiniportRestart 是必需函数。 NDIS 调用 MiniportRestart 以通过中间驱动程序的指定虚拟微型端口重启网络数据流。

OidRequestHandler
MiniportOidRequest 接收来自调用 NdisOidRequest 的过度驱动程序或来自 NDIS 的OID_XXX 请求。 中间驱动程序可以处理请求或将其传递给基础微型端口驱动程序。

SendNetBufferListsHandler
MiniportSendNetBufferLists 接收一个或多个指针的数组,指向 NET_BUFFER_LIST 结构,这些结构指定要通过网络传输的网络数据。 每个中间驱动程序都应提供 MiniportSendNetBufferLists 函数。 有关详细信息,请参阅 通过中间驱动程序传输网络数据

ReturnNetBufferListsHandler
MiniportReturnNetBufferLists 接收返回 的NET_BUFFER_LIST 结构,该结构以前通过调用 NdisMIndicateReceiveNetBufferLists 向更高级别的驱动程序指示。 调用 NdisMIndicateReceiveNetBufferLists 放弃对更高级别驱动程序指示的资源的控制。 在更高级别的驱动程序使用每个指示后,中间驱动程序分配NET_BUFFER_LIST结构和它描述的资源将返回到 MiniportReturnNetBufferLists 函数。

CancelSendHandler
MiniportCancelSend 是必需函数。 NDIS 调用 MiniportCancelSend 以取消发送请求。

CheckForHangHandler
中间驱动程序不需要 MiniportCheckForHangEx,因此它们应将此入口点设置为 NULL

ResetHandlerEx
中间驱动程序不需要 MiniportResetEx,因此它们应将此入口点设置为 NULL

DevicePnPEventNotifyHandler
MiniportDevicePnPEventNotify 函数的入口点。

ShutdownHandlerEx
MiniportShutdownEx 是必需函数。 在中间驱动程序的 DriverEntry 例程) 运行之前,MiniportShutdownEx 会将虚拟微型端口还原到其初始状态 (。

CancelOidRequestHandler
MiniportCancelOidRequest 是必需函数。 NDIS 调用 MiniportCancelOidRequest 来取消 OID 请求。

中间驱动程序可能需要其他特定于实现的 MiniportXxx 函数。 有关注册可选内容的信息,请参阅 配置可选的微型端口驱动程序服务

某些微型端口驱动程序处理程序函数永远不会由中间驱动程序提供。 出现这种情况的原因包括:此类驱动程序不管理中断设备,或者此类驱动程序不会在引发的 IRQL 时分配缓冲区。

注意 中间驱动程序必须包括暂停和重启功能。 如果需要,当 NDIS 暂停基础驱动程序堆栈时,包括对虚拟微型端口的暂停和重启的支持。 有关暂停和重启的详细信息,请参阅 驱动程序堆栈管理