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.
Lihat bagian Keterangan di USBD_QueryUsbCapability untuk informasi selengkapnya.

[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
STATUS_SUCCESS
Kemampuan USB yang diminta didukung.
STATUS_NOT_IMPLEMENTED
Kemampuan USB yang diminta tidak diketahui dan tidak didukung.
STATUS_NOT_SUPPORTED
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

UcxControllerBuat