EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY Rückruffunktion (ucxcontroller.h)
Die Implementierung des Clienttreibers, um festzustellen, ob der Controller eine bestimmte Funktion unterstützt.
Syntax
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
Ein Handle für den UCX-Controller, den der Clienttreiber in einem vorherigen Aufruf der UcxControllerCreate-Methode empfangen hat.
[in] CapabilityType
Zeiger auf eine GUID, die die angeforderte Funktion angibt. Die möglichen PGUID- Werte sind wie folgt:
- 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
- Bei typischen Hostcontrollern muss die Abfrage fehlschlagen (STATUS_NOT_SUPPORTED). Wenn der Controller diese Funktion erfolgreich ausgeführt hat, fordert er einen Clear TT-Puffer an, wenn Asynchrone Übertragungen mit geringer Geschwindigkeit/Vollgeschwindigkeit (Massen- oder Steuerungsübertragungen) abgebrochen werden, die an einen TT-Hub gesendet wurden.
[in] OutputBufferLength
Die Länge des Ausgabepuffers der Anforderung in Bytes, wenn ein Ausgabepuffer verfügbar ist.
[out, optional] OutputBuffer
Ein Zeiger auf eine Position, die die Adresse des Puffers empfängt. Bestimmte Funktionen müssen in diesem Puffer möglicherweise zusätzliche Informationen für UCX bereitstellen.
[out] ResultLength
Ein Speicherort, der im Gegenzug die Größe der Informationen enthält, die die Rückruffunktion in OutputBuffer gespeichert hat.
Rückgabewert
Wenn der Vorgang erfolgreich ist, muss die Rückruffunktion STATUS_SUCCESS oder einen anderen Statuswert zurückgeben, für den NT_SUCCESS(Status) WAHR ist. Andernfalls muss ein Statuswert zurückgegeben werden, für den NT_SUCCESS(Status) FALSE entspricht.
Rückgabecode | Beschreibung |
---|---|
|
Die angeforderte USB-Funktion wird unterstützt. |
|
Die angeforderte USB-Funktion ist unbekannt und wird nicht unterstützt. |
|
Der Controller unterstützt die angeforderte USB-Funktion nicht.
Für GUID_USB_CAPABILITY_CLEAR_TT_BUFFER_ON_ASYNC_TRANSFER_CANCEL hat der Controller keinen Clear TT-Puffer angefordert, wenn Asynchrone Übertragungen mit geringer Geschwindigkeit/Vollgeschwindigkeit (Massen- oder Steuerelementübertragungen) abgebrochen wurden, die an einen TT-Hub gesendet wurden. |
Bemerkungen
Der UCX-Clienttreiber registriert seine EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY Implementierung mit der USB-Hostcontrollererweiterung (UCX), indem die UcxControllerCreate-Methode aufgerufen wird.
Beispiele
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;
}
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Fenster |
Minimale KMDF-Version | 1.0 |
Mindest-UMDF-Version | 2.0 |
Header- | ucxcontroller.h (include Ucxclass.h) |
IRQL- | PASSIVE_LEVEL |