NdisRetreatNetBufferDataStart 函数 (ndis/nblapi.h)

调用 NdisRetreatNetBufferDataStart 函数以访问NET_BUFFER结构的 MDL 链中更多使用的数据空间

语法

NDIS_EXPORTED_ROUTINE NDIS_STATUS NdisRetreatNetBufferDataStart(
  [in]           NET_BUFFER              *NetBuffer,
  [in]           ULONG                   DataOffsetDelta,
  [in]           ULONG                   DataBackFill,
  [in, optional] NET_BUFFER_ALLOCATE_MDL *AllocateMdlHandler
);

参数

[in] NetBuffer

指向以前分配的 NET_BUFFER 结构的指针。

[in] DataOffsetDelta

要添加的 已用数据空间 量。 NDIS 相应地调整NET_BUFFER结构的 DataOffset 成员。 如果没有足够的 未使用数据空间 来满足请求,NDIS 将分配额外的内存。

[in] DataBackFill

如果 NDIS 必须分配内存,则此参数指定要分配的数据空间量,以及 DataOffsetDelta 参数的值。

[in, optional] AllocateMdlHandler

NetAllocateMdl 函数的可选入口点。 如果调用方为 NetAllocateMdl 函数指定入口点,则 NDIS 会调用 NetAllocateMdl 来分配 MDL 和内存。

返回值

NdisRetreatNetBufferDataStart 返回下列值之一:

返回代码 说明
NDIS_STATUS_SUCCESS
NdisRetreatNetBufferDataStart 通过使用未使用 的数据空间 或通过分配新存储成功分配 了已用数据空间
NDIS_STATUS_RESOURCES
由于资源不足,NdisRetreatNetBufferDataStart 失败。
NDIS_STATUS_FAILURE
NdisRetreatNetBufferDataStart 因资源不足以外的原因失败。

注解

NdisRetreatNetBufferDataStart 尝试通过减小 NET_BUFFER 结构的 DataOffset 成员的值来满足 请求

如果没有足够的 未使用数据空间,此函数将分配一个新缓冲区和一个 MDL 来描述新缓冲区,并将新 MDL 链接到 MDL 链的开头。 NDIS 调用在 AllocateMdl 中指定的 NetAllocateMdl 函数来分配 MDL 和内存。 NetAllocateMdl 函数可以使用满足驱动程序设计要求的任何分配方法。

调用 NdisAdvanceNetBufferDataStart 函数,用于释放使用 NdisRetreatNetBufferDataStart 添加的已用数据空间

要求

要求
最低受支持的客户端 在 NDIS 6.0 及更高版本中受支持。
目标平台 通用
标头 ndis/nblapi.h (包括 ndis.h)
Library Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 Irql_NetBuffer_Function (ndis)

另请参阅

NET_BUFFER

NdisAdvanceNetBufferDataStart

NetAllocateMdl