Handle di oggetto SpbCx

In questo argomento vengono descritti gli handle di oggetto definiti per la libreria spbCx (SPB Framework Extension).

Inoltre, L'interfaccia DDI SerCx2 usa due tipi di handle di oggetto generico, WDFDEVICE e WDFREQUEST, definiti da Kernel-Mode Driver Framework (KMDF). Per altre informazioni sui tipi di handle del framework, vedere Riepilogo degli oggetti framework.

In questo argomento vengono descritti gli handle di oggetto seguenti:

Intestazione: Spbcx.h

Handle di oggetto SPBREQUEST

Un handle di oggetto SPBREQUEST rappresenta una richiesta di I/O inviata a un dispositivo di destinazione nel bus.

DECLARE_HANDLE(SPBREQUEST)

La classe di oggetto SPBREQUEST deriva dalla classe di oggetti WDFREQUEST , che rappresenta una richiesta di I/O inviata dal gestore di I/O. Di conseguenza, i metodi WdfRequestXxx che accettano valori di handle WDFREQUEST come parametri accettano valori di handle SPBREQUEST come valori di parametro validi. Per altre informazioni su questi metodi, vedere Oggetti richiesta framework.

Tuttavia, alcuni metodi SpbCx e funzioni di callback richiedono in modo specifico handle SPBREQUEST come parametri. Per un parametro di questo tipo, la sostituzione di un handle WDFREQUEST che non è anche un handle SPBREQUEST è un errore.

Ad esempio, il metodo SpbRequestGetTransferParameters accetta un handle SPBREQUEST come parametro. Per fornire, per questo parametro, un handle WDFREQUEST che non è anche un handle SPBREQUEST è un errore. Il motivo di questo requisito è che un oggetto SPBREQUEST deve archiviare informazioni aggiuntive sullo stato specifiche di SPB per supportare le sequenze di trasferimento di I/O. La classe dell'oggetto di base WDFREQUEST non fornisce questo supporto.

Durante l'inizializzazione del dispositivo, il driver del controller SPB può assegnare un contesto per richiesta a un handle SPBREQUEST chiamando il metodo SpbControllerSetRequestAttributes .

Handle di oggetto SPBTARGET

Un handle di oggetto SPBTARGET identifica una connessione logica da un client (driver periferico) a una porta indirizzabile o a un dispositivo periferico sul bus.

DECLARE_HANDLE(SPBTARGET)

Per un bus I2C, un handle SPBTARGET corrisponde a un indirizzo dispositivo specifico.
Per un bus SPI, un handle SPBTARGET corrisponde a una linea di selezione del dispositivo.

In genere, esiste un oggetto SPBTARGET dall'inizio del callback dell'evento EvtSpbTargetConnect fino alla fine del callback dell'evento EvtSpbTargetDisconnect corrispondente. Tuttavia, la durata dell'oggetto SPBTARGET potrebbe estendersi oltre il secondo callback se il driver del controller SPB accetta un riferimento aggiuntivo sull'oggetto SPBTARGET per impedire che l'oggetto scompaia in modo imprevisto durante l'elaborazione di una richiesta di I/O per la destinazione.

Il driver del controller SPB esegue tutte le operazioni specifiche dell'hardware per un dispositivo controller SPB. Quando un client invia una richiesta IRP_MJ_CREATE per aprire una connessione a una destinazione nel bus, l'estensione del framework SPB (SpbCx), che gestisce la coda di I/O per il driver del controller, passa questa richiesta al driver del controller SPB chiamando la funzione di callback EvtSpbTargetConnect di questo driver. Questo parametro Target di questa funzione è un handle SPBTARGET . La funzione può usare questo handle per recuperare informazioni sulle risorse specifiche della connessione (ad esempio, l'indirizzo del dispositivo) dal gestore PnP. Quando il client invia una richiesta IRP_MJ_CLOSE per chiudere la connessione, SpbCx passa questa richiesta alla funzione di callback EvtSpbTargetDisconnect del driver del controller SPB, che rilascia queste risorse.

Exclusive-Mode Access

I client hanno la modalità esclusiva per accedere ai dispositivi di destinazione. Solo un client può avere una connessione a un particolare dispositivo di destinazione alla volta. SpbCx garantisce l'esistenza di un solo handle SPBTARGET per un indirizzo del dispositivo di destinazione nel bus. Questa restrizione è necessaria perché SpbCx non supporta l'interfoliazione delle richieste di I/O inviate da due o più client a un dispositivo di destinazione. Se un dispositivo di destinazione deve essere in grado di ricevere richieste da più client, questo dispositivo richiede un driver MUX, separato dal driver controller, in grado di interfoliare correttamente le operazioni richieste.

Interoperabilità con KMDF

I metodi di supporto del driver SerCx2 e le funzioni di callback degli eventi spbCx definiti da SpbCx usano handle SPBTARGET per rappresentare le connessioni aperte ai dispositivi di destinazione nel bus. Tuttavia, un driver controller deve in genere chiamare metodi KMDF che richiedono handle WDFFILEOBJECT, anziché handle SPBTARGET , per designare i dispositivi di destinazione.

Un oggetto SPBTARGET è simile a un oggetto WDFFILEOBJECT. Tuttavia, un oggetto SPBTARGET contiene informazioni aggiuntive specifiche di SPB. Ad esempio, durante l'elaborazione di una richiesta di controllo di I/O IOCTL_SPB_EXECUTE_SEQUENCE , l'oggetto SPBTARGET per il dispositivo di destinazione tiene traccia dello stato dei trasferimenti nella sequenza di trasferimento di I/O.

Per ottenere l'handle WDFFILEOBJECT per una destinazione, il driver del controller SPB chiama il metodo SpbTargetGetFileObject . Questo metodo accetta come parametro di input un handle SPBTARGET per un dispositivo di destinazione aperto e restituisce l'handle WDFFILEOBJECT corrispondente a questa destinazione.

In base alle convenzioni KMDF, il driver del controller SPB può collegare il proprio contesto all'oggetto SPBTARGET per un dispositivo di destinazione e questo contesto può includere le funzioni di callback EvtCleanupCallback ed EvtDestroyCallback associate. Il driver del controller SPB usa questo contesto per tenere traccia delle informazioni specifiche del driver del controller e del dispositivo di destinazione. Inoltre, questo driver può creare oggetti figlio dell'oggetto SPBTARGET , ad esempio timer, DPC o, se necessario, richieste di I/O e code di I/O.