Перечисление WDF_DEVICE_IO_TYPE (wudfddi_types.h)

[Предупреждение: UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. Новые функции не добавляются в UMDF 1, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2. Дополнительные сведения см. в разделе начало работы с помощью UMDF.]

Перечисление WDF_DEVICE_IO_TYPE используется для указания метода доступа к буферам данных.

Синтаксис

typedef enum _WDF_DEVICE_IO_TYPE {
  WdfDeviceIoUndefined,
  WdfDeviceIoNeither,
  WdfDeviceIoBuffered,
  WdfDeviceIoDirect,
  WdfDeviceIoBufferedOrDirect,
  WdfDeviceIoMaximum
} WDF_DEVICE_IO_TYPE, *PWDF_DEVICE_IO_TYPE;

Константы

 
WdfDeviceIoUndefined
Зарезервировано для системного использования.
WdfDeviceIoNeither
Зарезервировано для системного использования.
WdfDeviceIoBuffered
UMDF и драйвер используют буферный ввод-вывод для доступа к буферам данных.
WdfDeviceIoDirect
UMDF и драйвер используют прямой ввод-вывод для доступа к буферам данных.
WdfDeviceIoBufferedOrDirect
UMDF и драйвер могут использовать буферный ввод-вывод или прямой ввод-вывод для доступа к буферам данных.
WdfDeviceIoMaximum
Зарезервировано для системного использования.

Комментарии

Перечисление WDF_DEVICE_IO_TYPE используется в качестве входных данных для IWDFDeviceInitialize2::SetIoTypePreference и в качестве выходных данных из IWDFIoRequest2::GetEffectiveIoType.

При выборе типа ввода-вывода для драйвера следует следовать следующим рекомендациям:

  • Буферизируемые операции ввода-вывода обеспечивают наилучшую безопасность и надежность, так как приложения и драйверы получают доступ к отдельным копиям данных. Кроме того, буферизация операций ввода-вывода обеспечивает наилучшую производительность, если большая часть передаваемых данных относительно мала (обычно это две страницы памяти или меньше).
  • Прямой ввод-вывод обеспечивает наилучшую производительность, если большинство запросов ввода-вывода передают большие объемы данных. Однако приложения и драйверы получают доступ к одной копии данных. Поэтому драйвер должен скопировать параметры, заданные приложением, в локальную память драйвера, прежде чем проверять параметры, чтобы убедиться, что приложение не изменяет параметры после проверки. Если драйвер должен проверять большие объемы данных приложения, буферизация операций ввода-вывода может быть лучшим выбором, так как драйверу не нужно копировать данные перед их проверкой.
  • Как правило, драйвер фильтра, который может находиться в нескольких стеках драйверов и выполнять небольшую обработку данных приложения, может поддерживать как буферизованные операции ввода-вывода, так и прямой ввод-вывод, поэтому может указывать WdfDeviceIoBufferedOrDirect. Однако если драйвер проверяет параметры, заданные приложением, он должен сначала скопировать их при использовании прямого ввода-вывода.
Дополнительные сведения о доступе к буферам данных запроса ввода-вывода см. в разделе Доступ к буферам данных в UMDF-Based Drivers.

Версию KMDF этого перечисления см. в разделе WDF_DEVICE_IO_TYPE.

Требования

Требование Значение
Минимальная версия UMDF 1,9
Верхняя часть wudfddi_types.h (включая Wudfddi.h)

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

IWDFDeviceInitialize2::SetIoTypePreference

IWDFIoRequest2::GetEffectiveIoType

WDF_DEVICE_IO_BUFFER_RETRIEVAL