Handle di oggetti SpbCx

In questo argomento vengono descritti gli handle di oggetto definiti per la libreria spb framework extension (SpbCx).

Inoltre, SerCx2 DDI usa due dei tipi di handle di oggetto generici, 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 dell'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 oggetti SPBREQUEST è derivata dalla classe di oggetti WDFREQUEST , che rappresenta una richiesta di I/O inviata dal gestore di I/O. Pertanto, i metodi WdfRequestXxx che accettano i valori WDFREQUEST come parametri accettano i valori dell'handle SPBREQUEST come valori di parametro validi. Per altre informazioni su questi metodi, vedere Framework Request Objects.For more information about these methods, see Framework Request Objects.

Tuttavia, alcuni metodi SpbCx e le funzioni di callback richiedono specificamente handle SPBREQUEST come parametri. Per tale parametro, sostituire un handle WDFREQUEST che non è anche un handle SPBREQUEST è un errore.

Ad esempio, il metodo SpbRequestGetTransferParameters accetta un handle SPBREQUEST come parametro. Per specificare, 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 di oggetti 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 dell'oggetto SPBTARGET

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

DECLARE_HANDLE(SPBTARGET)

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

In genere, un oggetto SPBTARGET esiste 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 di IRP_MJ_CREATE per aprire una connessione a una destinazione sul bus, l'estensione spb framework (SpbCx), che gestisce la coda di I/O per il driver 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 di 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.

accesso Exclusive-Mode

I client hanno la modalità esclusiva per accedere ai dispositivi di destinazione. Un solo client può avere una connessione a un determinato dispositivo di destinazione alla volta. SpbCx garantisce che esista un solo handle SPBTARGET per un indirizzo del dispositivo di destinazione nel bus. Questa restrizione è necessaria perché SpbCx non supporta l'interleaving 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, che può interleavere 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 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 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 in 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 conformità 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 e EvtDestroyCallback associate. Il driver del controller SPB usa questo contesto per tenere traccia delle informazioni specifiche del driver 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.