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

指定已分配内存的池标记。 驱动程序通常将池标记指定为一到四个 7 位 ASCII 字符的字符串,用单引号(例如,“abcd”)分隔。 此参数是必需的,不能为零。

返回值

如果没有足够的可用池来满足请求,FltAllocatePoolAlignedWithTag 返回 NULL 指针。 否则,FltAllocatePoolAlignedWithTag 返回指向新分配的缓冲区的指针。

言论

FltAllocatePoolAlignedWithTag 分配一个缓冲区,该缓冲区与给定卷的基础设备对齐。 非缓存 I/O 需要此类设备对齐的缓冲区。 (它们还可用于缓存的 I/O。因此,当调用执行非缓存 I/O 的例程(如 FltReadFileFltWriteFile)时,微型筛选器驱动程序应调用 FltAllocatePoolAlignedWithTag 而不是 ExAllocatePoolWithTag

如果调用方为 NumberOfBytes 参数指定零值,FltAllocatePoolAlignedWithTag 分配满足对齐要求的最小内存量。

系统将 Tag 参数指定的池标记与分配的缓冲区相关联。 编程工具(如 Windows 调试器(WinDbg)可以显示与每个分配的缓冲区关联的池标记。 池标记的值通常按反向顺序显示。 例如,如果调用方将“Fred”作为 标记 参数的值传递,则如果转储池或在调试器中跟踪池使用情况时,此值将显示为“derF”。

有关内存管理的详细信息,请参阅 内存管理

不再需要 FltAllocatePoolAlignedWithTag 分配的缓冲区时,调用方负责通过调用 FltFreePoolAlignedWithTag来释放它。

仅当指定 NonPagedXxxPoolType 时,才能在 IRQL DISPATCH_LEVEL运行 FltAllocatePoolAlignedWithTag 的调用方。 否则,调用方必须在 IRQL <= APC_LEVEL 运行。

要求

要求 价值
目标平台 普遍
标头 fltkernel.h (包括 Fltkernel.h)
FltMgr.lib
IRQL <= APC_LEVEL (请参阅“备注”部分)

另请参阅

ExAllocatePoolWithTag

FltFreePoolAlignedWithTag

FltReadFile

FltWriteFile