fltAllocateCallbackData 函数 (fltkernel.h)

FltAllocateCallbackData 分配微筛选器驱动程序可用于启动 I/O 请求的回调数据结构。

语法

NTSTATUS FLTAPI FltAllocateCallbackData(
  [in]           PFLT_INSTANCE      Instance,
  [in, optional] PFILE_OBJECT       FileObject,
  [out]          PFLT_CALLBACK_DATA *RetNewCallbackData
);

参数

[in] Instance

启动 I/O 操作的微筛选器驱动程序实例的不透明实例指针。 此参数是必需的,不能为 NULL

[in, optional] FileObject

要用于 I/O 操作的文件对象指针。 此参数是可选的,可以为 NULL

[out] RetNewCallbackData

指向调用方分配的变量的指针,该变量接收新分配的回调数据的地址 (FLT_CALLBACK_DATA) 结构。

返回值

FltAllocateCallbackData 返回STATUS_SUCCESS或相应的 NTSTATUS 值,如下所示:

返回代码 说明
STATUS_INSUFFICIENT_RESOURCES

尝试分配回调数据结构时,FltAllocateCallbackData 遇到池分配失败。 这是错误代码。

注解

微筛选器驱动程序可以调用 FltAllocateCallbackData ,为微筛选器驱动程序启动的 I/O 操作分配回调数据 (FLT_CALLBACK_DATA) 结构。

注意FltAllocateCallbackData 例程不会分配后续 I/O 请求可能需要的所有内存。 如果 I/O 请求(如 FltPerformSynchronousIoFltPerformAsynchronousIo)需要为某些结构添加内存,则请求可能会遇到内存分配。 FltAllocateCallbackDataEx 例程可用于避免此潜在问题,方法是为要用于 I/O 请求的其他结构预分配内存。 如果 RetNewCallbackData 结构或其他必需结构存在内存分配问题,可以在回调数据分配时处理该问题。
 
回调数据结构是从非分页池分配的。

初始化 FltAllocateCallbackData 返回的回调数据结构的参数后,调用方通过将结构传递给 FltPerformSynchronousIoFltPerformAsynchronousIo 来启动 I/O 操作。 这些例程仅将 I/O 操作发送到在 实例 参数 () 中指定的启动实例下面附加的微筛选器驱动程序实例,并发送到文件系统。 附加到指定实例上方的微筛选器驱动程序不会接收 I/O 操作。

微筛选器驱动程序只能启动基于 IRP 的 I/O 操作。 它们无法启动快速 I/O 或文件系统筛选器 (FSFilter) 回调操作。

微型筛选器驱动程序应仅将 FltAllocateCallbackDataFltPerformAsynchronousIoFltPerformSynchronousIo 用于无法使用以下例程的 I/O 操作:

FltClose

FltCreateFile

FltQueryVolumeInformation

FltReadFile

FltSetVolumeInformation

FltTagFile

FltUntagFile

FltWriteFile

不再需要 FltAllocateCallbackData 分配的回调数据结构时,调用方负责通过调用 FltFreeCallbackData 来释放它。

要求

要求
目标平台 通用
标头 fltkernel.h (包括 Fltkernel.h)
Library FltMgr.lib
IRQL <= APC_LEVEL

另请参阅

FLT_CALLBACK_DATA

FltClose

FltCreateFile

FltFreeCallbackData

FltPerformAsynchronousIo

FltPerformSynchronousIo

FltQueryVolumeInformation

FltReadFile

FltReissueSynchronousIo

FltReuseCallbackData

FltSetVolumeInformation

FltTagFile

FltUntagFile

FltWriteFile