Функция WdfDeviceInitSetIoTypeEx (wdfdevice.h)

[Относится к KMDF и UMDF]

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

Синтаксис

void WdfDeviceInitSetIoTypeEx(
  [in] PWDFDEVICE_INIT     DeviceInit,
  [in] PWDF_IO_TYPE_CONFIG IoTypeConfig
);

Параметры

[in] DeviceInit

Указатель на структуру WDFDEVICE_INIT .

[in] IoTypeConfig

Указатель на WDF_IO_TYPE_CONFIG структуру , инициализированную с помощью макроса WDF_IO_TYPE_CONFIG_INIT.

Возвращаемое значение

None

Remarks

Если вы пишете драйвер с помощью KMDF версии 1.11 или более ранней, необходимо использовать WdfDeviceInitSetIoType.

KMDF Драйвер KMDF вызывает WdfDeviceInitSetIoTypeEx , чтобы задать метод доступа к буферу для запросов на чтение и запись. Для запросов элементов управления вводом-выводом устройств платформа использует тип буфера, закодированный в коде элемента управления ввода-вывода (IOCTL).

UMDF Драйвер UMDF вызывает WdfDeviceInitSetIoTypeEx для регистрации параметров запросов на чтение и запись, а также запросов на управление вводом-выводом устройства. Значения, которые драйвер UMDF предоставляет WdfDeviceInitSetIoTypeEx , являются только предпочтениями и не гарантируются для использования платформой. Драйвер может вызывать WdfDeviceGetDeviceStackIoType , чтобы определить методы доступа к буферу, назначенные UMDF запросам на чтение и запись устройства и запросам управления вводом-выводом. Для запросов управления вводом-выводом метод доступа, который использует платформа, может отличаться от метода доступа, указанного в IOCTL, и метода доступа, запрошенного драйвером.

Если драйвер вызывает WdfDeviceInitSetIoTypeEx, он должен сделать это перед вызовом WdfDeviceCreate.

Если драйвер не вызывает WdfDeviceInitSetIoTypeEx, платформа присваивает методу доступа к буферу драйвера значение WdfDeviceIoBuffered для указанного устройства.

Вызов WdfDeviceInitSetIoTypeEx из драйвера фильтра KMDF не оказывает никакого влияния. Для драйверов фильтров KMDF платформа использует тип ввода-вывода, который указывает следующий драйвер в стеке драйверов.

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

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

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

Этот метод является эквивалентом UMDF 2.0 IWDFDeviceInitialize2::SetIoTypePreference.

Примеры

В следующем примере кода инициализируется структура WDF_IO_TYPE_CONFIG , задаются параметры буферного доступа драйвера для прямого ввода-вывода, указывается, что при передаче меньше 32 КБ должны использоваться буферизированные операции ввода-вывода, и вызывается WdfDeviceInitSetIoTypeEx.

WDF_IO_TYPE_CONFIG ioConfig;
WDF_IO_TYPE_CONFIG_INIT(&ioConfig);
ioConfig.ReadWriteIoType = WdfDeviceIoDirect;
ioConfig.DeviceControlIoType = WdfDeviceIoDirect;
ioConfig.DirectTransferThreshold = 32;

WdfDeviceInitSetIoTypeEx(DeviceInit, &ioConfig);
}

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1.13
Минимальная версия UMDF 2,0
Верхняя часть wdfdevice.h (включая Wdf.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <= DISPATCH_LEVEL

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

IWDFDeviceInitialize2::SetIoTypePreference

WDF_IO_TYPE_CONFIG

WDF_IO_TYPE_CONFIG_INIT

WdfDeviceGetDeviceStackIoType

WdfDeviceInitSetIoType