将 ECP 附加到内核模式驱动程序发起IRP_MJ_CREATE操作

必须按照以下步骤设置 ECP 并将 ECP 附加到对文件的 IRP_MJ_CREATE 操作:

  1. 调用 FltAllocateExtraCreateParameterListFsRtlAllocateExtraCreateParameterListECP_LIST 结构分配内存。 操作系统不会自动释放 ECP_LIST 结构。 相反,微筛选器驱动程序必须最终调用 FltFreeExtraCreateParameterListFsRtlFreeExtraCreateParameterList ,以解除分配为 ECP_LIST分配的内存。

  2. 调用 FltAllocateExtraCreateParameterFsRtlAllocateExtraCreateParameter 为 ECP 上下文结构分配分页内存池,并生成指向该结构的指针。

  3. 调用 FltInsertExtraCreateParameterFsRtlInsertExtraCreateParameter 以将 ECP 上下文结构插入 到 ECP_LIST 结构中。

  4. 调用 IoInitializeDriverCreateContext 以初始化 IO_DRIVER_CREATE_CONTEXT 结构。

  5. 定义 IO_DRIVER_CREATE_CONTEXT 结构。 在此定义中,将 IO_DRIVER_CREATE_CONTEXTExtraCreateParameter 成员指向ECP_LIST结构。

  6. 调用 FltCreateFileEx2IoCreateFileEx ,将 ECP 附加到文件上的 IRP_MJ_CREATE 操作。 在此调用中,将指向 IO_DRIVER_CREATE_CONTEXT 结构的指针传递给 DriverContext 参数。

  7. 调用 FltFreeExtraCreateParameterListFsRtlFreeExtraCreateParameterList 以释放 ECP_LIST 结构。 这些函数还将自动释放任何剩余的 ECP 列表元素。