反序列化的 NDIS 微型端口驱动程序
所有 NDIS 6.0 及更高版本的驱动程序都会 反序列化。
反序列化的 NDIS 微型端口驱动程序序列化其自己的 MiniportXxx 函数的操作,并在内部对所有发送请求进行排队,而不是依赖于 NDIS 来执行这些函数。 因此,与序列化微型端口驱动程序相比,反序列化的微型端口驱动程序可以实现明显更好的全双工性能。
反序列化的驱动程序模型是 NDIS 微型端口驱动程序的默认模型。 面向连接的微型端口驱动程序以及具有 WDM 下边缘的微型端口驱动程序必须是反序列化的驱动程序。 编写新的 NDIS 微型端口驱动程序时,应编写反序列化的驱动程序。 如果可能,还应将较旧的驱动程序移植到 NDIS 6.0 或更高版本。 有关移植驱动程序的详细信息,请参阅:
反序列化的微型端口驱动程序在与 NDIS 接口时必须满足以下要求:
反序列化的微型端口驱动程序必须在初始化期间将自身标识为 NDIS。
反序列化的微型端口驱动程序必须异步完成所有发送请求。 若要完成发送请求,无连接 NDIS 6.0 及更高版本的微型端口驱动程序调用 NdisMSendNetBufferListsComplete 函数。 面向连接的 NDIS 6.0 及更高版本的微型端口驱动程序调用 NdisMCoSendNetBufferListsComplete 函数。
支持 NDIS 6.0 或更高版本的反序列化微型端口驱动程序设置将传递给 NdisMSendNetBufferListsComplete 的NET_BUFFER_LIST结构的 Status 成员。
如果反序列化的微型端口驱动程序无法立即完成发送请求,则无法将请求返回到 NDIS 进行重新排队。 相反,微型端口驱动程序必须在内部对发送请求进行排队,直到有足够的资源可用于传输数据。
反序列化的微型端口驱动程序不得检查它在接收指示中传递给 NDIS 的结构,直到 NDIS 返回它们。 NDIS 将NET_BUFFER_LIST结构返回到微型端口驱动程序的 MiniportReturnNetBufferLists 函数。
反序列化的微型端口驱动程序必须满足以下驱动程序内部要求:
反序列化的微型端口驱动程序必须使用 旋转锁保护其网络缓冲区队列。 反序列化的微型端口驱动程序还必须保护其共享状态,防止其自己的 MiniportXxx 函数同时访问。
反序列化微型端口驱动程序的 MiniportXxx 函数可以在 IRQL <= DISPATCH_LEVEL 运行。 因此,驱动程序编写器无法假定 MiniportXxx 函数将按照它们处理请求的顺序调用。 一个 MiniportXxx 函数可以抢占另一个以较低 IRQL 运行的 MiniportXxx 函数。
反序列化的微型端口驱动程序负责网络缓冲区队列管理。 当微型端口驱动程序遇到资源问题时,它无法将发送请求返回到 NDIS 以重新排队。 相反,微型端口驱动程序必须在内部将所有发送请求排队,直到有足够的资源可用于发送数据。
反序列化的微型端口驱动程序应按协议确定的顺序完成发送请求。
有关 NDIS 驱动程序的发送和接收要求的详细信息,请参阅 发送和接收操作。
请注意,反序列化的微型端口驱动程序通常按协议确定的顺序完成发送请求。 但是,支持数据包优先级的微型端口驱动程序 (例如 IEEE 802.1p) 可以根据优先级信息对发送请求重新排序。