EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY Rückruffunktion (ucxcontroller.h)
Die Implementierung des Clienttreibers, um zu bestimmen, 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 bei 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 ausführt, fordert er einen Clear TT-Puffer an, wenn asynchrone Übertragungen mit niedriger Geschwindigkeit/Voller Geschwindigkeit (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 einen Speicherort, der die Adresse des Puffers empfängt. Bestimmte Funktionen müssen UCX in diesem Puffer möglicherweise zusätzliche Informationen bereitstellen.
[out] ResultLength
Ein Speicherort, der bei der Rückgabe die Größe der Informationen in Bytes 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 status Wert zurückgeben, für den NT_SUCCESS(status) gleich TRUE ist. Andernfalls muss ein status Wert zurückgegeben werden, für den NT_SUCCESS(status) gleich FALSE ist.
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 niedriger Geschwindigkeit/Voller Geschwindigkeit (Massen- oder Steuerungsübertragungen) abgebrochen wurden, die an einen TT-Hub gesendet wurden. |
Hinweise
Der UCX-Clienttreiber registriert seine EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY Implementierung bei der USB-Hostcontrollererweiterung (UCX), indem er die UcxControllerCreate-Methode aufruft .
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 | Windows |
KMDF-Mindestversion | 1.0 |
UMDF-Mindestversion | 2.0 |
Kopfzeile | ucxcontroller.h (ucxclass.h einschließen) |
IRQL | PASSIVE_LEVEL |