다음을 통해 공유


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 배열의 요소 수입니다. SettingPairsNULL이 아닌 경우 이 매개 변수는 0보다 커야 합니다.

[in, optional] SettingPairs

WDF_USB_INTERFACE_SETTING_PAIR 구조체의 배열입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.

반환 값

없음

설명

usb 인터페이스 개체에 대한 핸들로 디바이스 인터페이스를 지정하는 경우 드라이버는 WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES 함수를 사용하여 구성을 선택할 수 있습니다.

디바이스에 하나 이상의 USB 인터페이스가 있는 경우 드라이버에서 이 함수를 사용할 수 있습니다.

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES 함수는 WDF_USB_DEVICE_SELECT_CONFIG_PARAMS 구조체를 0으로 설정하고 Size 멤버를 구조체의 크기로 설정합니다.

numInterfaces 또는 SettingPairsNULL인 경우 WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACESType 멤버를 WdfUsbTargetDeviceSelectConfigTypeMultiInterface로 설정합니다. 이 경우 프레임워크는 사용 중인 인터페이스 수를 결정하고 각각에 대해 0을 대체 설정하도록 설정합니다. 모든 인터페이스에서 기본값으로 대체 설정 0으로 설정하려면 이 설정을 사용합니다.

numInterfaces 매개 변수와 SettingPairs 매개 변수가 모두 NULL이 아닌 경우 이 함수는 WDF_USB_DEVICE_SELECT_CONFIG_PARAMS 구조체의 Type 멤버를 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