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


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

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

Никакой

Замечания

Если вы пишете драйвер с помощью 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 (include Wdf.h)
библиотеки Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <= DISPATCH_LEVEL

См. также

IWDFDeviceInitialize2::SetIoTypePreference

WDF_IO_TYPE_CONFIG

WDF_IO_TYPE_CONFIG_INIT

WdfDeviceGetDeviceStackIoType

WdfDeviceInitSetIoType