EVT_SPB_CONTROLLER_READ 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 è una periferica o una porta collegata al bus. L'estensione del framework SPB (SpbCx) ha assegnato in precedenza 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 la richiesta eseguendo l'operazione richiesta o restituisce uno stato di errore. Per altre informazioni, vedere Note.

[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 periferico) del controller SPB invia una richiesta 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. Ciò significa che la funzione di callback deve avviare l'operazione di lettura richiesta e quindi restituire un valore senza attendere il completamento dell'operazione. Successivamente, il driver del controller SPB completa la richiesta di lettura durante un DPC di interrupt 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 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. Tale operazione di lettura parzialmente completata non può verificarsi in un bus SPI o I2C, ma può verificarsi in un altro tipo di bus.

Se l'operazione di lettura non riesce a causa di un rumore di riga, un errore hardware del controller o un 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 i bus forniscono un meccanismo che consente a un dispositivo di destinazione di 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 prima fornire una dichiarazione di funzione che identifichi 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 usando i tipi di funzione di callback consente a Code Analysis per driver, SDV (Static Driver Verifier) e altri strumenti di verifica di individuare errori ed è un requisito per la scrittura di driver per il sistema operativo Windows.

Ad esempio, per definire una funzione di callback MyEvtSpbControllerIoReadEvtSpbControllerIoRead denominata , 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 segue:

_Use_decl_annotations_
VOID
  MyEvtSpbControllerIoRead(
    WDFDEVICE Controller,
    SPBTARGET Target,
    SPBREQUEST Request,
    size_t Length
    )
{ ... }

Il EVT_SPB_CONTROLLER_READ di funzione è 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 Use_decl_annotations'annotazione assicura che le annotazioni applicate al tipo di funzione EVT_SPB_CONTROLLER_READ nel file di intestazione siano utilizzate. 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 sui Use_decl_annotations, vedere Annotazione del comportamento delle funzioni.

Requisiti

   
Client minimo supportato Supportato a partire da Windows 8.
Piattaforma di destinazione Desktop
Intestazione spbcx.h
IRQL Chiamato in corrispondenza di IRQL <= DISPATCH_LEVEL.

Vedi anche