Поделиться через


Использование ESP для обработки IRP_MJ_CREATE операций в драйвере фильтра файловой системы

Вы можете использовать дополнительные параметры создания (ECP) в драйвере фильтра файловой системы для обработки IRP_MJ_CREATE операций. Драйвер фильтра файловой системы может вызывать подпрограммы, описанные в следующих разделах, чтобы получить, задать (добавить), подтвердить и удалить ecp для операции IRP_MJ_CREATE . Вы также можете определить пространство операционной системы, из которого исходят ecp.

Получение ESP

Чтобы получить ESP для операции IRP_MJ_CREATE , выполните следующие действия.

  1. Вызовите Метод FltGetEcpListFromCallbackData (или FsRtlGetEcpListFromIrp), чтобы получить указатель на ECP_LIST, связанный с операцией создания.

  2. Выполните одно из следующих операций:

Настройка ESP

Чтобы задать ecp для операции IRP_MJ_CREATE , драйвер фильтра файловой системы:

  • Настройка ESP в существующем ECP_LIST.

  • Настройка ESP в только что созданном ECP_LIST.

Настройка ESP в существующем ECP_LIST

Чтобы задать ESP в существующемECP_LIST, связанном с операцией создания, выполните следующие действия.

  1. Вызовите Метод FltGetEcpListFromCallbackData (или FsRtlGetEcpListFromIrp), чтобы получить указатель на ECP_LIST, связанный с операцией создания.

  2. Вызовите Метод FltAllocateExtraCreateParameter (или FsRtlAllocateExtraCreateParameter), чтобы выделить пул памяти с разбиением на страницы для структуры контекста ECP и создать указатель на нее.

  3. Вызовите Метод FltInsertExtraCreateParameter (или FsRtlInsertExtraCreateParameter), чтобы вставить структуры контекста ECP в структуру ECP_LIST .

Настройка ESP в только что созданном ECP_LIST

Если ECP_LIST в настоящее время не связан с операцией создания, необходимо создать ее, а затем задать в ней ESP:

  1. Вызовите метод FltAllocateExtraCreateParameterList (или FsRtlAllocateExtraCreateParameterList), чтобы выделить память для структуры ECP_LIST .

  2. Вызовите Метод FltAllocateExtraCreateParameter (или FsRtlAllocateExtraCreateParameter), чтобы выделить пул памяти с разбиением на страницы для структуры контекста ECP и создать указатель на нее.

  3. Вызовите Метод FltInsertExtraCreateParameter (или FsRtlInsertExtraCreateParameter), чтобы вставить структуры контекста ECP в ECP_LIST.

  4. Вызовите FltSetEcpListIntoCallbackData (или FsRtlSetEcpListIntoIrp), чтобы присоединить список ECP к операции создания.

Удаление ESP

Чтобы удалить ECP для операции IRP_MJ_CREATE , выполните следующие действия.

  1. Вызовите Метод FltRemoveExtraCreateParameter (или FsRtlRemoveExtraCreateParameter) для поиска в списке ECP контекстной структуры. Если структура контекста ECP найдена, подпрограмма отключает структуру контекста ECP от списка ECP.

  2. Чтобы освободить память для отсоединяемой структуры контекста ECP, вызовите FltFreeExtraCreateParameter (или FsRtlFreeExtraCreateParameter). Эти подпрограммы можно вызвать для освобождения памяти для структуры контекста ECP, если вы выделили память одним из следующих способов:

Маркировка ecp как подтвержденная или определение состояния подтверждения

Вызовите следующие подпрограммы, чтобы пометить ESP как подтвержденные или определить, помечены ли они как признанные:

  • Вызовите fltAcknowledgeEcp (или FsRtlAcknowledgeEcp), чтобы пометить структуру контекста ECP как подтвержденную. EcP можно пометить как просмотр, использование, обработку или любое другое условие ECP.

  • Вызовите FltIsEcpAcknowledged (или FsRtlIsEcpAcknowledged), чтобы определить, помечена ли структура контекста ECP как подтвержденная.

Определение режима происхождения

Вызовите FltIsEcpFromUserMode (или FsRtlIsEcpFromUserMode), чтобы определить, возникла ли структура контекста ECP из пользовательского режима. Драйвер фильтра файловой системы может отказаться принимать структуру контекста ECP, созданную в пользовательском режиме.

Использование списков lookaside для выделения ESP

Вызовите следующие подпрограммы для выделения ESP из списков lookaside и для управления списками lookaside и ESP: