NdisMAllocateSharedMemoryAsyncEx 函数 (ndis.h)
谨慎
对于 ARM 和 ARM64 处理器,强烈建议 NDIS 驱动程序编写器使用 WDF DMA 或 WDM DMA 而不是 NDIS 散点/收集 DMA。
有关 WDF DMA 的详细信息,请参阅 处理 KMDF 驱动程序中的 DMA作。
有关 WDM DMA 的详细信息,请参阅 管理驱动程序的输入/输出的 DMA 相关子主题。
微型端口驱动程序调用 NdisMAllocateSharedMemoryAsyncEx 函数,以分配驱动程序与其总线主 DMA NIC 之间共享的额外内存,通常当微型端口驱动程序在可用 NIC 接收缓冲区上运行较低时。
语法
NDIS_STATUS NdisMAllocateSharedMemoryAsyncEx(
[in] NDIS_HANDLE MiniportDmaHandle,
[in] ULONG Length,
[in] BOOLEAN Cached,
[in] PVOID Context
);
参数
[in] MiniportDmaHandle
NDIS 用来管理 DMA 资源的上下文区域的句柄。 调用方通过调用 NdisMRegisterScatterGatherDma 函数。
[in] Length
要分配的字节数。
[in] Cached
忽略此参数(缓存内存始终用于 x86 和 x64 系统)。
[in] Context
指向要传递给 MiniportSharedMemoryAllocateComplete 函数的驱动程序确定上下文的指针。
返回值
NdisMAllocateSharedMemoryAsyncEx 可以返回以下项之一:
返回代码 | 描述 |
---|---|
|
NDIS 将调用 MiniportSharedMemoryAllocateComplete 函数,并提供描述分配的共享内存的信息。 如果尝试分配共享内存失败,NDIS 会调用 MiniportSharedMemoryAllocateComplete 并传递 NULL 指针。 |
|
目前无法分配请求的内存。 如果 NdisMAllocateSharedMemoryAsyncEx 返回此状态,则具有相同参数的后续调用可能会成功,具体取决于系统资源是否可用。 |
言论
此类微型端口驱动程序通常维护一个或多个状态变量,以跟踪可用于传入传输的共享内存缓冲区数。 当可用缓冲区数达到驱动程序确定的低时,微型端口驱动程序会调用 NdisMAllocateSharedMemoryAsyncEx 来分配共享内存中的更多缓冲区空间。 当可用缓冲区数攀升到驱动程序确定的高点时,微型端口驱动程序调用 NdisMFreeSharedMemory 一次或多次释放其前面的动态分配。
通常,此类微型端口驱动程序会保留其 MiniportInitializeEx 函数分配的共享内存块,NdisMAllocateSharedMemory,直到删除 NIC。 删除 NIC 后,NDIS 调用微型端口驱动程序的 MiniportHaltEx 函数。 此分配足以处理通过 NIC 传输的平均需求。
微型端口驱动程序应设置其可分配的共享内存量的限制。 此限制特定于驱动程序,应足够高,以便驱动程序不会耗尽缓冲区。 请勿使用过高的限制,因为这可能会浪费共享内存,从而降低系统性能。
调用 NdisMAllocateSharedMemoryAsyncEx 或 NdisMAllocateSharedMemory 的任何微型端口驱动程序都必须在其 NIC 删除时释放一个或多个调用 NdisMFreeSharedMemory 的所有未完成分配。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | NDIS 6.0 及更高版本中受支持。 |
目标平台 | 普遍 |
标头 | ndis.h (包括 Ndis.h) |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | Irql_Gather_DMA_Function(ndis) |