EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD funzione di callback (ucxusbdevice.h)
Implementazione del driver client che UCX chiama per aggiungere un nuovo endpoint predefinito per un dispositivo USB.
Sintassi
EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD EvtUcxUsbdeviceDefaultEndpointAdd;
NTSTATUS EvtUcxUsbdeviceDefaultEndpointAdd(
[in] UCXCONTROLLER UcxController,
[in] UCXUSBDEVICE UcxUsbDevice,
[in] ULONG MaxPacketSize,
[in] PUCXENDPOINT_INIT UcxEndpointInit
)
{...}
Parametri
[in] UcxController
Handle al controller UCX ricevuto dal driver client in una chiamata precedente al metodo UcxControllerCreate .
[in] UcxUsbDevice
Handle a un oggetto UCX che rappresenta il dispositivo USB.
[in] MaxPacketSize
Dimensioni massime dei pacchetti per i trasferimenti in questo endpoint.
[in] UcxEndpointInit
Puntatore a una struttura opaca contenente informazioni di inizializzazione. I callback per l'oggetto endpoint sono associati a questa struttura. Questa struttura è gestita da UCX.
Valore restituito
Se l'operazione ha esito positivo, la funzione di callback deve restituire STATUS_SUCCESS o un altro valore di stato per cui NT_SUCCESS(stato) equivale a TRUE. In caso contrario, deve restituire un valore di stato per il quale NT_SUCCESS(stato) equivale a FALSE.
Commenti
Il driver client UCX registra questa funzione di callback con l'estensione del controller host USB (UCX) chiamando il metodo UcxUsbDeviceCreate .
La funzione di callback chiama UcxEndpointCreate per creare un nuovo oggetto endpoint predefinito e registrare le funzioni di callback dell'oggetto endpoint predefinite.
La funzione di callback crea in genere una coda WDF associata all'oggetto endpoint. La coda non riceve richieste fino all'avvio dell'estensione della classe.
Esempio
NTSTATUS
Endpoint_EvtUcxUsbDeviceDefaultEndpointAdd(
UCXCONTROLLER UcxController,
UCXUSBDEVICE UcxUsbDevice,
ULONG MaxPacketSize,
PUCXENDPOINT_INIT EndpointInit
)
{
NTSTATUS status = STATUS_SUCCESS;
UCX_DEFAULT_ENDPOINT_EVENT_CALLBACKS ucxDefaultEndpointEventCallbacks;
WDF_OBJECT_ATTRIBUTES objectAttributes;
PUCX_CONTROLLER_CONTEXT ucxControllerContext;
UCXENDPOINT ucxEndpoint;
PUCX_ENDPOINT_CONTEXT ucxEndpointContext;
WDF_IO_QUEUE_CONFIG queueConfig;
WDFQUEUE wdfQueue;
UCX_DEFAULT_ENDPOINT_EVENT_CALLBACKS_INIT(&ucxDefaultEndpointEventCallbacks,
Endpoint_EvtUcxEndpointPurge,
Endpoint_EvtUcxEndpointStart,
Endpoint_EvtUcxEndpointAbort,
Endpoint_EvtUcxEndpointOkToCancelTransfers,
Endpoint_EvtUcxDefaultEndpointUpdate);
UcxDefaultEndpointInitSetEventCallbacks(EndpointInit, &ucxDefaultEndpointEventCallbacks);
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&objectAttributes, UCX_ENDPOINT_CONTEXT);
ucxControllerContext = GetUcxControllerContext(UcxController);
status = UcxEndpointCreate(UcxUsbDevice,
&EndpointInit,
&objectAttributes,
&ucxEndpoint);
if (!NT_SUCCESS(status)) {
DbgTrace(TL_ERROR, Endpoint, "UcxEndpoint Failed %!STATUS!", status);
goto EvtUsbDeviceDefaultEndpointAddEnd;
}
DbgTrace(TL_INFO, Endpoint, "UcxEndpoint created");
ucxEndpointContext = GetUcxEndpointContext(ucxEndpoint);
ucxEndpointContext->IsDefault = TRUE;
ucxEndpointContext->MaxPacketSize = MaxPacketSize;
WDF_IO_QUEUE_CONFIG_INIT(&queueConfig, WdfIoQueueDispatchManual);
status = WdfIoQueueCreate(ucxControllerContext->WdfDevice,
&queueConfig,
WDF_NO_OBJECT_ATTRIBUTES,
&wdfQueue);
if (!NT_SUCCESS(status)) {
DbgTrace(TL_ERROR, Endpoint, "WdfIoQueueCreate Failed %!STATUS!", status);
goto EvtUsbDeviceDefaultEndpointAddEnd;
}
UcxEndpointSetWdfIoQueue(ucxEndpoint, wdfQueue);
EvtUsbDeviceDefaultEndpointAddEnd:
return status;
}
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Windows |
Versione KMDF minima | 1,0 |
Versione UMDF minima | 2,0 |
Intestazione | ucxusbdevice.h (include Ucxclass.h) |
IRQL | PASSIVE_LEVEL |