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


структура PREFETCH_OPEN_ECP_CONTEXT (ntifs.h)

Структура PREFETCH_OPEN_ECP_CONTEXT сообщает, выполняет ли средство предварительной выборки заданный открытый запрос к файлу.

Синтаксис

typedef struct _PREFETCH_OPEN_ECP_CONTEXT {
  PVOID Context;
} PREFETCH_OPEN_ECP_CONTEXT, *PPREFETCH_OPEN_ECP_CONTEXT;

Члены

Context

Указатель на непрозрачный контекст, связанный с открытым запросом.

Комментарии

Предварительная выборка — это компонент операционной системы, тесно интегрированный с диспетчером кэша и диспетчером памяти для повышения эффективности доступа к диску и, следовательно, повышения производительности. Если другие компоненты мешают предварительной выборке, производительность системы снижается и может быть взаимоблокировка. Таким образом, предварительная выборка присоединяет структуру PREFETCH_OPEN_ECP_CONTEXT к файлу, чтобы сообщить о том, что предварительная выборка выполнила открытый запрос к этому файлу. Предварительная выборка использует guid GUID_ECP_PREFETCH_OPEN в вызове процедуры FltCreateFileEx2 или IoCreateFileEx для присоединения структуры PREFETCH_OPEN_ECP_CONTEXT . Драйвер фильтра файловой системы (фильтр) может вызвать FltFindExtraCreateParameter , чтобы определить, присоединена ли PREFETCH_OPEN_ECP_CONTEXT к файлу, а затем выполнить соответствующие действия. Фильтр должен вызвать подпрограмму FltIsEcpFromUserMode , чтобы определить, возникла ли структура контекста PREFETCH_OPEN_ECP_CONTEXT из режима ядра. Чтобы предотвратить подделку предварительной выборки вредоносными приложениями, фильтр не должен принимать PREFETCH_OPEN_ECP_CONTEXT , если он был создан из пользовательского режима.

После того как предварительная выборка прикрепит структуру PREFETCH_OPEN_ECP_CONTEXT к файлу, все дополнительные действия предварительной выборки для файла включают объект файла, к которому PREFETCH_OPEN_ECP_CONTEXT присоединено. Если фильтр должен идентифицировать запросы файловой системы предварительной выборки, отличные от запросов на создание, фильтр должен поддерживать собственное состояние (например, диспетчер фильтров обрабатывает контексты). Фильтр поддерживает собственное состояние, чтобы определить, является ли конкретный файловый объект объектом предварительной выборки.

Диспетчер памяти может кэшировать объект файла предварительной выборки. Затем диспетчер памяти может использовать объект файла предварительной выборки для других приложений, выполняющих сопоставленные операции ввода-вывода или кэшированные операции ввода-вывода с помощью диспетчера кэша. Таким образом, объект файла предварительной выборки можно использовать для разбиения ввода-вывода по страницам до или после закрытия дескриптора предварительной выборки. Этот ввод-вывод подкачки может включать операции записи по страницам, даже если префикс никогда не записывает данные. Записи подкачки создаются другими приложениями. Диспетчер памяти записывает данные из приложений с помощью кэшированного объекта файла предварительной выборки. Таким образом, фильтр выполняет работу, которая активируется записью на разбиение по страницам. Фильтр должен по-прежнему выполнять такую работу, даже если записи подкачки поступают в объект файла предварительной выборки.

Если фильтр определяет, что в объекте файла предварительной выборки была выполнена операция очистки, фильтр больше не должен учитывать, что этот файловый объект должен быть открыт предварительно.

Ниже приведены распространенные операции, выполняемые предварительной выборкой (однако в этих операциях средство предварительной выборки никогда не изменяет содержимое файла):

  • Открытие и закрытие тома
  • Открытие и закрытие файла
  • Сведения о файле запроса
  • Задать сведения о файле (только для того, чтобы указать файловой системе не обновлять время последнего доступа для этого открытия).
  • Раздел "Создание образа и данных"
  • Выполнение асинхронного ввода-вывода подкачки

Чтобы избежать возникновения возможной взаимоблокировки, фильтр должен:

  • Никогда не блокируйте операции предварительной выборки.
  • Передача операций предварительной выборки без выдачи других запросов файловой системы.

Чтобы любое приложение или драйвер получите доступ к любым предварительно подготовленным данным, оно должно открыть собственный дескриптор для файла или создать раздел или и то, и другое.

Сведения о том, как использовать ecp для связывания дополнительных сведений с операцией IRP_MJ_CREATE в файле, см. в статье Использование дополнительных параметров создания с IRP_MJ_CREATE операцией.

Структура PREFETCH_OPEN_ECP_CONTEXT доступна только для чтения. Его следует использовать для получения сведений только о предварительной выборке открытого ECP. Дополнительные сведения об этой проблеме см. в разделе System-Defined ECP.

Требования

Требование Значение
Минимальная версия клиента Windows Vista
Верхняя часть ntifs.h (включая Ntifs.h)

См. также раздел

FltCreateFileEx2

FltIsEcpFromUserMode

IoCreateFileEx