微型端口驱动程序
NDIS 微型端口驱动程序有两个基本功能:
卡 (NIC) 管理网络接口,包括通过 NIC 发送和接收数据。
与更高级别的驱动程序(例如筛选器驱动程序、中间驱动程序和协议驱动程序)交互。
微型端口驱动程序通过 NDIS 库与其 NIC 和更高级别的驱动程序通信。 NDIS 库导出一组完整的函数 (NdisMXxx 和其他 NdisXxx 函数) ,这些函数封装微型端口驱动程序必须调用的所有操作系统函数。 反过来,微型端口驱动程序必须导出一组入口点, (MiniportXxx 函数) NDIS 为其自己的目的或代表更高级别的驱动程序来访问微型端口驱动程序。
注意
有关 NDIS 驱动程序堆栈的详细信息以及显示所有四个 NDIS 驱动程序类型之间的关系的关系图,请参阅 NDIS 驱动程序堆栈。
以下发送和接收操作演示了微型端口驱动程序与 NDIS 和更高级别的驱动程序的交互:
当传输驱动程序具有要传输的数据包时,它会调用由 NDIS 库导出的 NdisXxx 函数。 然后,NDIS 通过调用微型端口驱动程序导出的相应 MiniportXxx 函数,将数据包传递给微型端口驱动程序。 然后,微型端口驱动程序通过调用相应的 NdisXxx 函数将数据包转发到 NIC 进行传输。
当 NIC 收到发自的数据包时,它可以发布由 NDIS 或 NIC 的微型端口驱动程序处理的硬件中断。 NDIS 通过调用相应的 MiniportXxx 函数通知 NIC 的微型端口驱动程序。 微型端口驱动程序设置从 NIC 传输数据,然后通过调用相应的 NdisXxx 函数来指示收到的数据包是否存在到绑定更高级别的驱动程序。
无连接和 Connection-Oriented 微型端口驱动程序
NDIS 支持无连接环境和面向连接的环境的微型端口驱动程序。
无连接微型端口驱动程序 控制无连接网络媒体(如以太网)的 NIC。 无连接微型端口驱动程序进一步分为反序列化驱动程序和序列化驱动程序:
注意 所有 NDIS 6.0 及更高版本的驱动程序都反序列化。
反序列化的驱动程序 序列化其自己的 MiniportXxx 函数的操作,并在内部将所有传入的发送数据包排队。 这可以显著提高全双工性能,前提是驱动程序的关键部分 (一次只能运行单个线程的代码,) 保持较小。
序列化驱动程序 依赖于 NDIS 来序列化对其 MiniportXxx 函数的调用并管理其发送队列。
面向连接的微型端口驱动程序 控制面向连接的网络媒体(如 ISDN)的 NIC。 面向连接的微型端口驱动程序始终反序列化 -- 它们始终序列化其自己的 MiniportXxx 函数的操作,并在内部将所有传入的发送数据包排队。
NDIS 微型端口驱动程序可以具有非 NDIS 下边缘, (请参阅下图) 。
微型端口驱动程序通过其非 NDIS 下边缘使用总线的类接口,例如通用串行总线 (USB) 来控制总线上的设备。 微型端口驱动程序通过将 I/O 请求数据包 (IRP) 发送到总线或直接发送到连接到总线的远程设备来与设备通信。 微型端口驱动程序在其上边缘公开一个标准 NDIS 微型端口驱动程序接口,使微型端口驱动程序能够与过度覆盖的 NDIS 驱动程序通信。