EVT_SPB_CONTROLLER_READ funzione di callback (spbcx.h)
La funzione di callback dell'evento EvtSpbControllerIoRead di un driver del controller SPB legge i dati dal dispositivo di destinazione specificato nei buffer forniti con la richiesta di lettura.
Sintassi
EVT_SPB_CONTROLLER_READ EvtSpbControllerRead;
void EvtSpbControllerRead(
[in] WDFDEVICE Controller,
[in] SPBTARGET Target,
[in] SPBREQUEST Request,
[in] size_t Length
)
{...}
Parametri
[in] Controller
Handle WDFDEVICE per l'oggetto dispositivo framework che rappresenta il controller SPB.
[in] Target
Handle SPBTARGET per la destinazione per questa richiesta di I/O. La destinazione è un dispositivo periferico o una porta collegata al bus. L'estensione spb framework (SpbCx) assegnata in precedenza a questo handle alla destinazione nel callback EvtSpbTargetConnect che ha aperto la connessione alla destinazione.
[in] Request
Handle SPBREQUEST per la richiesta di I/O. Il driver del controller SPB deve completare questa richiesta eseguendo l'operazione richiesta o restituendo uno stato di errore. Per altre informazioni, vedere Osservazioni.
[in] Length
Numero di byte da leggere dal dispositivo di destinazione.
Valore restituito
nessuno
Osservazioni
SpbCx gestisce la coda di I/O per il controller SPB. SpbCx chiama la funzione di callback EvtSpbControllerIoRead del driver del controller SPB quando un client (driver periferica) del controller SPB invia una richiesta di IRP_MJ_READ a un dispositivo di destinazione collegato al bus. Il valore del parametro Request è un handle che incapsula questa richiesta.
Un callback EvtSpbControllerIoRead non restituisce un valore di stato. Il driver del controller SPB indica invece lo stato dell'operazione di lettura nello stato di completamento per la richiesta di I/O.
Un callback EvtSpbControllerIoRead è asincrono. Ovvero, la funzione di callback deve avviare l'operazione di lettura richiesta e quindi restituire senza attendere il completamento dell'operazione. Successivamente, il driver del controller SPB completa la richiesta di lettura durante un'interruzione DPC o un DPC timer.
Se l'operazione di lettura viene completata completamente, il driver del controller SPB deve impostare lo stato di completamento su STATUS_SUCCESS. Se il dispositivo di destinazione indica che può fornire alcuni dati ma non tutti i dati richiesti, il driver del controller SPB deve recuperare la quantità di dati disponibile, specificare il numero di byte di dati recuperati e impostare lo stato di completamento nella richiesta di I/O su STATUS_SUCCESS. Un'operazione di lettura parzialmente completata non può verificarsi su un bus SPI o I2C, ma potrebbe verificarsi su un altro tipo di bus.
Se l'operazione di lettura non riesce a causa di disturbo della riga, errore hardware del controller o errore del driver, il driver del controller SPB deve impostare lo stato di completamento nella richiesta di I/O su un codice di errore appropriato. Non tutti gli autobus forniscono un meccanismo per un dispositivo di destinazione per segnalare un errore di trasporto o un trasferimento parzialmente completato e non tutti i controller possono rilevare queste condizioni.
Per registrare una funzione di callback EvtSpbControllerIoRead , chiamare il metodo SpbDeviceInitialize .
Esempio
Per definire una funzione di callback EvtSpbControllerIoRead , è necessario innanzitutto fornire una dichiarazione di funzione che identifica il tipo di funzione di callback che si sta definendo. Windows fornisce un set di tipi di funzione di callback per i driver. La dichiarazione di una funzione tramite i tipi di funzione di callback consente di analizzare il codice per i driver, l'SDV ( Static Driver Verifier ) e altri strumenti di verifica di trovare errori ed è un requisito per la scrittura di driver per il sistema operativo Windows.
Ad esempio, per definire una funzione di callback EvtSpbControllerIoRead denominata MyEvtSpbControllerIoRead
, usare il tipo di funzione EVT_SPB_CONTROLLER_READ, come illustrato nell'esempio di codice seguente:
EVT_SPB_CONTROLLER_READ MyEvtSpbControllerIoRead;
Implementare quindi la funzione di callback come indicato di seguito:
_Use_decl_annotations_
VOID
MyEvtSpbControllerIoRead(
WDFDEVICE Controller,
SPBTARGET Target,
SPBREQUEST Request,
size_t Length
)
{ ... }
Il tipo di funzione EVT_SPB_CONTROLLER_READ è definito nel file di intestazione Spbcx.h. Per identificare in modo più accurato gli errori quando si eseguono gli strumenti di analisi del codice, assicurarsi di aggiungere l'annotazione Use_decl_annotations alla definizione della funzione. L'annotazione Use_decl_annotations assicura che vengano utilizzate le annotazioni applicate al tipo di funzione EVT_SPB_CONTROLLER_READ nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite tipi di ruolo di funzione per i driver KMDF. Per altre informazioni sulle Use_decl_annotations, vedere Annotazione del comportamento della funzione.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Supportato a partire da Windows 8. |
Piattaforma di destinazione | Desktop |
Intestazione | spbcx.h |
IRQL | Chiamato in IRQL <= DISPATCH_LEVEL. |