структура 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 присоединен. Если фильтр должен определять запросы файловой системы предварительного набора, отличные от создания запросов, фильтр должен поддерживать собственное состояние (например, диспетчер фильтров обрабатывает контексты). Фильтр сохраняет собственное состояние, чтобы определить, является ли конкретный объект файла объектом предварительного набора.
Диспетчер памяти может кэшировать объект файла prefetcher. Затем диспетчер памяти может использовать объект файла prefetcher для других приложений, которые выполняют сопоставленные операции ввода-вывода или кэшированные операции ввода-вывода с помощью диспетчера кэша. Поэтому объект файла prefetcher можно использовать для разбиения на страницах ввода-вывода до или после закрытия префетчера. Это разбиение операций ввода-вывода может включать записи на разбиение по страницам, даже если префетчер никогда не записывает данные. Записи по страницам создаются другими приложениями. Диспетчер памяти записывает данные из приложений с помощью кэшированного объекта файла prefetcher. Поэтому фильтр выполняет работу, которая активируется путем разбиения на страницах записи, фильтр должен по-прежнему выполнять такую работу, даже если записи на разбиение по страницам приходят на объект файла предварительного набора.
Когда фильтр определяет, что операция очистки произошла в объекте файла prefetcher, фильтр больше не должен учитывать, что объект файла должен быть открыт предварительно.
Ниже приведены распространенные операции, выполняемые префетчером (однако в этих операциях префетчер никогда не изменяет содержимое файла):
- Открытие и закрытие тома
- Открытие и закрытие файла
- Запрос сведений о файле
- Задайте сведения о файле (только чтобы указать файловой системе не обновлять время последнего доступа для этого открытия)
- Создание раздела изображений и данных
- Выполнение асинхронного разбиения по страницам ввода-вывода
Чтобы избежать возникновения возможной ситуации взаимоблокировки, фильтр должен:
- Никогда не блокируйте любые операции предварительного набора.
- Передайте операции предварительного набора без выдачи других запросов файловой системы.
Для доступа к любому приложению или драйверу любого из предварительно подготовленных данных он должен открыть собственный дескриптор файла или создать раздел или оба.
Сведения об использовании ECP для связывания дополнительных сведений с операцией IRP_MJ_CREATE в файле см. в разделе Использование дополнительных параметров создания с IRP_MJ_CREATE операцией.
Структура PREFETCH_OPEN_ECP_CONTEXT доступна только для чтения. Его следует использовать для получения сведений только о предварительном выборе открытого ECP. Дополнительные сведения об этой проблеме см. в System-DefinedECP.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows Vista |
заголовка | ntifs.h (include Ntifs.h) |