Fungsi WdfUsbTargetDeviceSelectConfig (wdfusb.h)
[Berlaku untuk KMDF dan UMDF]
Metode WdfUsbTargetDeviceSelectConfig memilih konfigurasi USB untuk perangkat, atau mendekonfigurasi perangkat.
Sintaks
NTSTATUS WdfUsbTargetDeviceSelectConfig(
[in] WDFUSBDEVICE UsbDevice,
[in, optional] PWDF_OBJECT_ATTRIBUTES PipeAttributes,
[in, out] PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params
);
Parameter
[in] UsbDevice
Handel ke objek perangkat USB yang diperoleh dari panggilan sebelumnya ke WdfUsbTargetDeviceCreateWithParameters.
[in, optional] PipeAttributes
Penunjuk ke struktur WDF_OBJECT_ATTRIBUTES yang dialokasikan penelepon yang berisi atribut untuk objek pipa USB kerangka kerja baru yang dibuat kerangka kerja untuk antarmuka perangkat. Untuk driver KMDF, parameter ini bersifat opsional dan dapat WDF_NO_OBJECT_ATTRIBUTES. Driver UMDF harus mengatur parameter ini ke NULL.
[in, out] Params
Penunjuk ke struktur WDF_USB_DEVICE_SELECT_CONFIG_PARAMS yang dialokasikan pemanggil dan kerangka kerja untuk menentukan parameter konfigurasi.
Nilai kembali
WdfUsbTargetDeviceSelectConfig mengembalikan nilai status penyelesaian target I/O jika operasi berhasil. Jika tidak, metode ini dapat mengembalikan salah satu nilai berikut:
Menampilkan kode | Deskripsi |
---|---|
|
Parameter yang tidak valid terdeteksi. |
|
Anggota Ukuran struktur WDF_USB_DEVICE_SELECT_CONFIG_PARAMS yang dipandang Params salah. |
|
Buffer memori tidak dapat dialokasikan. |
|
Kerangka kerja mengembalikan nilai ini jika driver UMDF memanggil WdfUsbTargetDeviceSelectConfig denganJenisParams-> yang diatur ke salah satu hal berikut:
|
Metode ini juga mungkin mengembalikan nilai NTSTATUS lainnya.
Pemeriksaan bug terjadi jika driver menyediakan handel objek yang tidak valid.
Keterangan
Driver Anda dapat memilih konfigurasi perangkat dengan menggunakan struktur WDF_USB_DEVICE_SELECT_CONFIG_PARAMS untuk menentukan deskriptor USB, URB, atau handel ke objek antarmuka USB kerangka kerja.
Kerangka kerja membuat objek pipa USB kerangka kerja untuk setiap pipa yang terkait dengan setiap antarmuka dalam konfigurasi, setelah menghapus objek pipa apa pun yang mungkin telah dibuat kerangka kerja sebelumnya untuk konfigurasi. Kerangka kerja menggunakan pengaturan alternatif nol untuk setiap antarmuka, kecuali driver menentukan pengaturan alternatif yang berbeda.
Untuk mendapatkan informasi tentang objek pipa antarmuka, driver dapat memanggil WdfUsbInterfaceGetNumConfiguredPipes dan WdfUsbInterfaceGetConfiguredPipe.
Untuk informasi selengkapnya tentang metode WdfUsbTargetDeviceSelectConfig dan target I/O USB, lihat Target I/O USB.
Anda dapat menggunakan WdfUsbTargetDeviceSelectConfig untuk memilih hanya konfigurasi USB pertama yang tercantum dalam daftar deskriptor, tetapi Anda dapat memilih beberapa antarmuka dalam konfigurasi tunggal ini.
Contoh
Contoh kode berikut memilih konfigurasi dengan satu antarmuka yang ditentukan.
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS configParams;
NTSTATUS status;
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE(&configParams);
status = WdfUsbTargetDeviceSelectConfig(
UsbDevice,
WDF_NO_OBJECT_ATTRIBUTES,
&configParams
);
Contoh kode berikut memilih konfigurasi dengan beberapa antarmuka, menggunakan pengaturan alternatif nol pada semua antarmuka. Contoh ini hanya berlaku untuk driver KMDF.
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS configParams;
PWDF_USB_INTERFACE_SETTING_PAIR settingPairs;
UCHAR numInterfaces;
NTSTATUS status;
numInterfaces = WdfUsbTargetDeviceGetNumInterfaces(UsbDevice);
settingPairs = ExAllocatePoolWithTag(
PagedPool,
sizeof(WDF_USB_INTERFACE_SETTING_PAIR) * numInterfaces,
MY_DRIVER_TAG
);
if (settingPairs == NULL){
return STATUS_INSUFFICIENT_RESOURCES;
}
for (interfaceIndex = 0; interfaceIndex < numInterfaces; interfaceIndex++) {
settingPairs[interfaceIndex].UsbInterface =
WdfUsbTargetDeviceGetInterface(
UsbDevice,
interfaceIndex);
// Select alternate setting zero on all interfaces.
settingPairs[interfaceIndex].SettingIndex = 0;
}
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES(
&configParams,
numInterfaces,
settingPairs
);
status = WdfUsbTargetDeviceSelectConfig(
UsbDevice,
NULL,
&configParams
);
if (!NT_SUCCESS(status)) {
ExFreePoolWithTag(
settingPairs,
MY_DRIVER_TAG
);
return status;
}
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Universal |
Versi KMDF minimum | 1,0 |
Versi UMDF minimum | 2.0 |
Header | wdfusb.h (termasuk Wdfusb.h) |
Pustaka | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
Aturan kepatuhan DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf) |
Lihat juga
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE
WdfUsbInterfaceGetConfiguredPipe