使用 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

调用以下例程,从 lookaside 列表 分配 ECP 并管理 lookaside 列表和 ECP: