EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY fungsi panggilan balik (ucxcontroller.h)
Implementasi driver klien untuk menentukan apakah pengontrol mendukung kemampuan tertentu.
Sintaks
EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY EvtUcxControllerQueryUsbCapability;
NTSTATUS EvtUcxControllerQueryUsbCapability(
[in] UCXCONTROLLER UcxController,
[in] PGUID CapabilityType,
[in] ULONG OutputBufferLength,
[out, optional] PVOID OutputBuffer,
[out] PULONG ResultLength
)
{...}
Parameter
[in] UcxController
Handel ke pengontrol UCX yang diterima driver klien dalam panggilan sebelumnya ke metode UcxControllerCreate .
[in] CapabilityType
Penunjuk ke GUID yang menentukan kemampuan yang diminta. Kemungkinan nilai PGUID adalah sebagai berikut:
- GUID_USB_CAPABILITY_CHAINED_MDLS
- GUID_USB_CAPABILITY_STATIC_STREAMS
- GUID_USB_CAPABILITY_SELECTIVE_SUSPEND
- GUID_USB_CAPABILITY_FUNCTION_SUSPEND
- GUID_USB_CAPABILITY_DEVICE_CONNECTION_HIGH_SPEED_COMPATIBLE
- GUID_USB_CAPABILITY_DEVICE_CONNECTION_SUPER_SPEED_COMPATIBLE
- GUID_USB_CAPABILITY_CLEAR_TT_BUFFER_ON_ASYNC_TRANSFER_CANCEL
- Untuk pengontrol host umum, kueri harus gagal (STATUS_NOT_SUPPORTED). Jika pengontrol berhasil dengan kemampuan ini, pengontrol meminta Clear TT Buffer saat membatalkan transfer asinkron Kecepatan Rendah/Kecepatan Penuh (Massal atau Kontrol) yang telah dikirim ke hub TT.
[in] OutputBufferLength
Panjangnya, dalam byte, dari buffer output permintaan, jika buffer output tersedia.
[out, optional] OutputBuffer
Penunjuk ke lokasi yang menerima alamat buffer. Kemampuan tertentu mungkin perlu memberikan informasi tambahan kepada UCX dalam buffer ini.
[out] ResultLength
Lokasi yang, saat dikembalikan, berisi ukuran, dalam byte, dari informasi yang disimpan fungsi panggilan balik di OutputBuffer.
Nilai kembali
Jika operasi berhasil, fungsi panggilan balik harus mengembalikan STATUS_SUCCESS, atau nilai status lain yang NT_SUCCESS(status) sama dengan TRUE. Jika tidak, nilai status harus dikembalikan yang NT_SUCCESS(statusnya) sama dengan FALSE.
Menampilkan kode | Deskripsi |
---|---|
|
Kemampuan USB yang diminta didukung. |
|
Kemampuan USB yang diminta tidak diketahui dan tidak didukung. |
|
Pengontrol tidak mendukung kemampuan USB yang diminta.
Untuk GUID_USB_CAPABILITY_CLEAR_TT_BUFFER_ON_ASYNC_TRANSFER_CANCEL, pengontrol tidak meminta Clear TT Buffer saat membatalkan transfer asinkron Kecepatan Rendah/Kecepatan Penuh (Massal atau Kontrol) yang dikirim ke hub TT. |
Keterangan
Driver klien UCX mendaftarkan implementasi EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY dengan ekstensi pengontrol host USB (UCX) dengan memanggil metode UcxControllerCreate .
Contoh
NTSTATUS
Controller_EvtControllerQueryUsbCapability(
UCXCONTROLLER UcxController,
PGUID CapabilityType,
ULONG OutputBufferLength,
PVOID OutputBuffer,
PULONG ResultLength
)
{
NTSTATUS status;
UNREFERENCED_PARAMETER(UcxController);
UNREFERENCED_PARAMETER(OutputBufferLength);
UNREFERENCED_PARAMETER(OutputBuffer);
*ResultLength = 0;
if (RtlCompareMemory(CapabilityType,
&GUID_USB_CAPABILITY_CHAINED_MDLS,
sizeof(GUID)) == sizeof(GUID)) {
//
// TODO: Is GUID_USB_CAPABILITY_CHAINED_MDLS supported?
//
DbgTrace(TL_INFO, Controller, "GUID_USB_CAPABILITY_CHAINED_MDLS not supported");
status = STATUS_NOT_SUPPORTED;
}
else if (RtlCompareMemory(CapabilityType,
&GUID_USB_CAPABILITY_STATIC_STREAMS,
sizeof(GUID)) == sizeof(GUID)) {
//
// TODO: Is GUID_USB_CAPABILITY_STATIC_STREAMS supported?
//
DbgTrace(TL_INFO, Controller, "GUID_USB_CAPABILITY_STATIC_STREAMS supported");
status = STATUS_NOT_SUPPORTED;
}
else if (RtlCompareMemory(CapabilityType,
&GUID_USB_CAPABILITY_FUNCTION_SUSPEND,
sizeof(GUID)) == sizeof(GUID)) {
//
// TODO: Is GUID_USB_CAPABILITY_FUNCTION_SUSPEND supported?
//
DbgTrace(TL_INFO, Controller, "GUID_USB_CAPABILITY_FUNCTION_SUSPEND not supported");
status = STATUS_NOT_SUPPORTED;
}
else if (RtlCompareMemory(CapabilityType,
&GUID_USB_CAPABILITY_SELECTIVE_SUSPEND,
sizeof(GUID)) == sizeof(GUID)) {
DbgTrace(TL_INFO, Controller, "GUID_USB_CAPABILITY_SELECTIVE_SUSPEND supported");
status = STATUS_SUCCESS;
}
else if (RtlCompareMemory(CapabilityType,
&GUID_USB_CAPABILITY_CLEAR_TT_BUFFER_ON_ASYNC_TRANSFER_CANCEL,
sizeof(GUID)) == sizeof(GUID)) {
//
// TODO: Is GUID_USB_CAPABILITY_CLEAR_TT_BUFFER_ON_ASYNC_TRANSFER_CANCEL supported?
//
DbgTrace(TL_INFO, Controller, "GUID_USB_CAPABILITY_CLEAR_TT_BUFFER_ON_ASYNC_TRANSFER_CANCEL not supported");
status = STATUS_NOT_SUPPORTED;
}
else {
DbgTrace(TL_INFO, Controller, "Unhandled USB capability");
status = STATUS_NOT_IMPLEMENTED;
}
return status;
}
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Windows |
Versi KMDF minimum | 1,0 |
Versi UMDF minimum | 2.0 |
Header | ucxcontroller.h (termasuk Ucxclass.h) |
IRQL | PASSIVE_LEVEL |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk