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