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


функция WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES (wdfusb.h)

[Применимо к KMDF и UMDF]

Функция WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES инициализирует структуру WDF_USB_DEVICE_SELECT_CONFIG_PARAMS , чтобы драйвер может настроить устройство для использования нескольких интерфейсов.

Синтаксис

void WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES(
  [in, out]      PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params,
  [in, optional] UCHAR                                NumberInterfaces,
  [in, optional] PWDF_USB_INTERFACE_SETTING_PAIR      SettingPairs
);

Параметры

[in, out] Params

Указатель на структуру, выделенную драйвером WDF_USB_DEVICE_SELECT_CONFIG_PARAMS .

[in, optional] NumberInterfaces

Количество элементов в массиве SettingPairs . Если параметр SettingPairs не имеет значение NULL, этот параметр должен быть больше нуля.

[in, optional] SettingPairs

Массив структур WDF_USB_INTERFACE_SETTING_PAIR . Этот параметр является необязательным и может иметь значение NULL.

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

None

Remarks

Драйвер может использовать функцию WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES для выбора конфигурации, если интерфейсы устройства задаются дескрипторами для объектов интерфейса USB.

Драйвер может использовать эту функцию, если устройство имеет один или несколько USB-интерфейсов.

Функция WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES обнуляет структуру WDF_USB_DEVICE_SELECT_CONFIG_PARAMS и задает для элемента Size размер структуры.

Если аргумент numInterfaces или SettingPairs имеет значение NULL, WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES задает для элемента Type значение WdfUsbTargetDeviceSelectConfigTypeMultiInterface. В этом случае платформа определяет количество имеющихся интерфейсов и включает альтернативные параметры для каждого из них. Используйте этот параметр, если вы хотите по умолчанию использовать альтернативный нулевой параметр для всех интерфейсов.

Если параметры numInterfaces и SettingPairs не равны NULL, эта функция задает для элемента Type структуры WDF_USB_DEVICE_SELECT_CONFIG_PARAMS значение WdfUsbTargetDeviceSelectConfigTypeInterfacesPairs. В этом случае можно указать альтернативный параметр в любом из интерфейсов.

Чтобы инициализировать структуру WDF_USB_DEVICE_SELECT_CONFIG_PARAMS , драйвер должен вызвать одну из следующих функций:

Примеры

В следующем примере кода вызывается WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE или WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES в зависимости от количества интерфейсов, поддерживаемых конфигурацией устройства. Затем в примере вызывается WdfUsbTargetDeviceSelectConfig для выбора конфигурации.

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS params;
PWDF_USB_INTERFACE_SETTING_PAIR settingPairs;
UCHAR numInterfaces;

numInterfaces = WdfUsbTargetDeviceGetNumInterfaces(UsbDevice);

if (numInterfaces == 1){
    WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE(&params);
}
else {
    settingPairs = ExAllocatePoolWithTag(
                        PagedPool,
                        sizeof(WDF_USB_INTERFACE_SETTING_PAIR) * numInterfaces,
                        MEM_TAG
                        );
    if (settingPairs == NULL){
        return STATUS_INSUFFICIENT_RESOURCES;
    }

 //
 // Call driver-defined routine to populate the
    // WDF_USB_INTERFACE_SETTING_PAIR structures 
 // that ExAllocatePoolWithTag allocated.
 //
    InitSettingPairs(
                     UsbDevice,
                     settingPairs,
                     numInterfaces
                     );

    WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES(
                    &params,
                    numInterfaces,
                    settingPairs
                    );
}
status = WdfUsbTargetDeviceSelectConfig(
                                        UsbDevice,
                                        NULL,
                                        &params
                                        );
if (!NT_SUCCESS(status)) {
    return status;
}

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Верхняя часть wdfusb.h (включая Wdfusb.h)

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

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_DECONFIG

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_INTERFACES_DESCRIPTORS

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_URB

WDF_USB_INTERFACE_SETTING_PAIR