Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Дополнительные параметры создания (ECPs) можно использовать в драйвере фильтра файловой системы для обработки IRP_MJ_CREATE операций. Драйвер фильтра файловой системы может вызывать подпрограммы в следующих разделах, чтобы получить, задать (добавить), подтвердить и удалить ECP для операции IRP_MJ_CREATE. Вы также можете определить пространство операционной системы, из которого были созданы ECPs.
Получение ECP
Чтобы получить ECPs для операции IRP_MJ_CREATE, выполните следующие действия.
Вызовите FltGetEcpListFromCallbackData (или FsRtlGetEcpListFromIrp), чтобы получить указатель на ECP_LIST, связанный с операцией создания.
Выполните одно из следующих операций:
- Вызовите FltGetNextExtraCreateParameter (или FsRtlGetNextExtraCreateParameter), чтобы получить указатель на следующую (или первую) структуру контекста ECP в списке ECP.
- Вызовите FltFindExtraCreateParameter (или FsRtlFindExtraCreateParameter) для поиска структуры контекста ECP заданного типа в списке ECP. Любая подпрограмма возвращает указатель на структуру контекста ECP, если найдена структура.
Настройка ECP
Чтобы задать ECPs для операции IRP_MJ_CREATE, драйвер фильтра файловой системы будет либо:
Задайте ЕЦП в существующем ECP_LIST.
Задайте ЕЦП в только что созданном ECP_LIST.
Настройка ECP в существующем списке ECP_LIST
Чтобы задать ECPs в существующейECP_LIST, связанной с операцией создания:
Вызовите FltGetEcpListFromCallbackData (или FsRtlGetEcpListFromIrp), чтобы получить указатель на ECP_LIST, связанный с операцией создания.
Вызовите FltAllocateExtraCreateParameter (или FsRtlAllocateExtraCreateParameter) для выделения пула памяти страниц для структуры контекста ECP и создания указателя на нее.
Вызовите FltInsertExtraCreateParameter (или FsRtlInsertExtraCreateParameter) для вставки структур контекста ECP в структуру ECP_LIST.
Настройка ECP в только что созданном ECP_LIST
Если в настоящее время ECP_LIST не связана с операцией создания, необходимо создать ее, а затем задать в ней ecPs:
Вызовите FltAllocateExtraCreateParameterList (или FsRtlAllocateExtraCreateParameterList) для выделения памяти для структуры ECP_LIST.
Вызовите FltAllocateExtraCreateParameter (или FsRtlAllocateExtraCreateParameter) для выделения пула памяти страниц для структуры контекста ECP и создания указателя на нее.
Вызовите FltInsertExtraCreateParameter (или FsRtlInsertExtraCreateParameter), чтобы добавить структуры контекста ECP в ECP_LIST.
Вызовите FltSetEcpListIntoCallbackData (или FsRtlSetEcpListIntoIrp), чтобы присоединить список ECP к операции создания.
Удаление ECP
Чтобы удалить ECPs для операции IRP_MJ_CREATE, выполните следующие действия.
Вызовите FltRemoveExtraCreateParameter (или FsRtlRemoveExtraCreateParameter), чтобы найти структуру контекста ECP в списке ECP. Если найдена структура контекста ECP, подпрограмма отсоединяет структуру контекста ECP от списка ECP.
Чтобы освободить память для отсоединяемой структуры контекста ECP, вызовите FltFreeExtraCreateParameter (или FsRtlFreeExtraCreateParameter). Эти подпрограммы можно вызвать для освобождения памяти для структуры контекста ECP, если вы выделили память одним из следующих способов:
- Вы вызвали FltAllocateExtraCreateParameter (или FsRtlAllocateExtraCreateParameter) для выделения пула памяти страниц
- Вы назвали FltAllocateExtraCreateParameterFromLookasideList (или FsRtlAllocateExtraCreateParameterFromLookasideList) для выделения пула памяти из списка lookaside
Маркировка ЕЦП как подтвержденная или определение состояния подтверждения
Вызовите следующие подпрограммы, чтобы пометить ЕЦП как подтвержденные или определить, помечены ли ECP как подтвержденные:
Вызовите FltAcknowledgeEcp (или FsRtlAcknowledgeEcp), чтобы пометить структуру контекста ECP как подтвержденную. ECP можно пометить как просмотр, использование, обработку или любое другое условие ECP.
Вызов FltIsEcpAcknowledged (или FsRtlIsEcpAcknowledged) для определения, помечена ли структура контекста ECP как подтверждённая.
Определение режима происхождения
Вызовите FltIsEcpFromUserMode (или FsRtlIsEcpFromUserMode), чтобы определить, исходит ли структура контекста ECP из пользовательского режима. Драйвер фильтра файловой системы может отказаться от принятия структуры контекста ECP, созданной в пользовательском режиме.
Использование списков lookaside для выделения ECP
Вызовите следующие подпрограммы, чтобы выделить ECPs из списков ожидания и и управлять списками ожидания и ECPs.
Вызовите FltInitExtraCreateParameterLookasideList (или FsRtlInitExtraCreateParameterLookasideList), чтобы инициализировать список подстановки переходного или неподстраиваемого пула, который используется для выделения одной или нескольких структур контекста ECP фиксированного размера.
Вызовите FltDeleteExtraCreateParameterLookasideList (или FsRtlDeleteExtraCreateParameterLookasideList), чтобы освободить список lookaside.
Вызов FltAllocateExtraCreateParameterFromLookasideList (или FsRtlAllocateExtraCreateParameterFromLookasideList) используется для выделения пула памяти из списка lookaside для структуры контекста ECP и создания указателя на эту структуру.
Вызовите FltFreeExtraCreateParameter (или FsRtlFreeExtraCreateParameter), чтобы освободить память для структур контекста ECP.