使用 ECP 处理文件系统筛选器驱动程序中的IRP_MJ_CREATE操作

可以在文件系统筛选器驱动程序中使用额外的创建参数 (ECP) 来处理 IRP_MJ_CREATE 操作。 文件系统筛选器驱动程序可以调用以下部分中的例程来检索、设置 (为 IRP_MJ_CREATE操作添加) 、确认和删除 ECP。 还可以确定 ECP 源自的操作系统空间。

检索 ECP

检索 IRP_MJ_CREATE 操作的 ECP:

  1. 调用 FltGetEcpListFromCallbackData (或 FsRtlGetEcpListFromIrp) 检索指向与创建操作关联的 ECP_LIST 的指针。

  2. 执行以下操作之一:

设置 ECP

若要为 IRP_MJ_CREATE 操作设置 ECP,文件系统筛选器驱动程序将执行以下操作之一:

  • 在现有 ECP_LIST中设置 ECP。

  • 在新创建的 ECP_LIST中设置 ECP。

在现有ECP_LIST中设置 ECP

若要在与创建操作关联的 现有ECP_LIST 中设置 ECP,请执行以下命令:

  1. 调用 FltGetEcpListFromCallbackData (或 FsRtlGetEcpListFromIrp) 检索指向与创建操作关联的 ECP_LIST 的指针。

  2. 调用 FltAllocateExtraCreateParameter (或 FsRtlAllocateExtraCreateParameter) 为 ECP 上下文结构分配分页内存池并生成指向该结构的指针。

  3. 调用 FltInsertExtraCreateParameter (或 FsRtlInsertExtraCreateParameter) 将 ECP 上下文结构插入 到 ECP_LIST 结构中。

在新创建的ECP_LIST中设置 ECP

如果 ECP_LIST 当前未与创建操作关联,则需要创建一个,然后在其中设置 ECP:

  1. 调用 FltAllocateExtraCreateParameterList (或 FsRtlAllocateExtraCreateParameterList) 为 ECP_LIST 结构分配内存。

  2. 调用 FltAllocateExtraCreateParameter (或 FsRtlAllocateExtraCreateParameter) 为 ECP 上下文结构分配分页内存池并生成指向该结构的指针。

  3. 调用 FltInsertExtraCreateParameter (或 FsRtlInsertExtraCreateParameter) 将 ECP 上下文结构插入 ECP_LIST

  4. 调用 FltSetEcpListIntoCallbackData (或 FsRtlSetEcpListIntoIrp) 将 ECP 列表附加到创建操作。

删除 ECP

若要删除 IRP_MJ_CREATE 操作的 ECP,请执行以下命令:

  1. 调用 FltRemoveExtraCreateParameter (或 FsRtlRemoveExtraCreateParameter) 以在 ECP 列表中搜索 ECP 上下文结构。 如果找到 ECP 上下文结构,则例程将从 ECP 列表中分离 ECP 上下文结构。

  2. 若要释放分离 ECP 上下文结构的内存,请调用 FltFreeExtraCreateParameter (或 FsRtlFreeExtraCreateParameter) 。 如果通过以下方式之一分配了内存,则可以调用这些例程来释放 ECP 上下文结构的内存:

将 ECP 标记为已确认,或确定确认状态

调用以下例程以将 ECP 标记为已确认,或确定是否将 ECP 标记为已确认:

确定发起模式

调用 FltIsEcpFromUserMode (或 FsRtlIsEcpFromUserMode) 以确定 ECP 上下文结构是否源自用户模式。 文件系统筛选器驱动程序可以拒绝接受源自用户模式的 ECP 上下文结构。

使用旁视列表分配 ECP

调用以下例程以从 旁观列表 分配 ECP 并管理旁视列表和 ECP: