Функция 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 |