fltAllocatePoolAlignedWithTag 函数 (fltkernel.h)
FltAllocatePoolAlignedWithTag 分配与设备对齐的缓冲区,以便在非缓存 I/O 操作中使用。
语法
PVOID FLTAPI FltAllocatePoolAlignedWithTag(
[in] PFLT_INSTANCE Instance,
[in] POOL_TYPE PoolType,
[in] SIZE_T NumberOfBytes,
[in] ULONG Tag
);
参数
[in] Instance
附加到卷的调用方拥有的微筛选器驱动程序实例的不透明实例指针。 此参数是必需的,不能为 NULL。
[in] PoolType
要分配的池的类型。 下列类型作之一:
NonPagedPool
PagedPool
NonPagedPoolCacheAligned
PagedPoolCacheAligned
有关可用池内存类型的说明,请参阅 POOL_TYPE 。
[in] NumberOfBytes
要分配的字节数。 此参数是必需的,可以为零。
[in] Tag
指定已分配内存的池标记。 驱动程序通常将池标记指定为包含 1 到 4 个 7 位 ASCII 字符的字符串,由单引号分隔 (例如“abcd”) 。 此参数是必需的,不能为零。
返回值
如果没有足够的可用池来满足请求, FltAllocatePoolAlignedWithTag 将返回 NULL 指针。 否则, FltAllocatePoolAlignedWithTag 返回指向新分配的缓冲区的指针。
注解
FltAllocatePoolAlignedWithTag 分配一个缓冲区,该缓冲区根据给定卷的基础设备对齐。 非缓存 I/O 需要此类设备对齐的缓冲区。 (它们还可用于缓存的 I/O.) 因此,在调用执行非缓存 I/O 的例程(如 FltReadFile 和 FltWriteFile)时,微筛选器驱动程序应调用 FltAllocatePoolAlignedWithTag ,而不是 ExAllocatePoolWithTag。
如果调用方为 NumberOfBytes 参数指定值零, 则 FltAllocatePoolAlignedWithTag 将分配满足对齐要求的最小内存量。
系统将 Tag 参数指定的池标记与分配的缓冲区相关联。 编程工具(如 Windows 调试器 (WinDbg) )可以显示与每个分配的缓冲区关联的池标记。 池标记的值通常以相反的顺序显示。 例如,如果调用方传递“Fred”作为 Tag 参数的值,则如果转储池或在调试器中跟踪池使用情况,此值将显示为“derF”。
有关内存管理的详细信息,请参阅 内存管理。
不再需要 FltAllocatePoolAlignedWithTag 分配的缓冲区时,调用方负责通过调用 FltFreePoolAlignedWithTag 来释放该缓冲区。
仅当指定 NonPagedXxxPoolType 时,FltAllocatePoolAlignedWithTag 的调用方才能在 IRQL DISPATCH_LEVEL运行。 否则,调用方必须在 IRQL <= APC_LEVEL 运行。
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
标头 | fltkernel.h (包括 Fltkernel.h) |
Library | FltMgr.lib |
IRQL | <= APC_LEVEL (请参阅备注部分) |