Condividi tramite


EVT_SPB_CONTROLLER_OTHER funzione di callback (spbcx.h)

Una funzione di callback dell'evento EvtSpbControllerIother del driver del controller SPB gestisce le richieste di controllo I/O del dispositivo che non vengono gestite da altre funzioni di callback eventi o dall'estensione del framework SPB (SpbCx).

Sintassi

EVT_SPB_CONTROLLER_OTHER EvtSpbControllerOther;

void EvtSpbControllerOther(
  [in] WDFDEVICE Controller,
  [in] SPBTARGET Target,
  [in] SPBREQUEST Request,
  [in] size_t OutputBufferLength,
  [in] size_t InputBufferLength,
  [in] ULONG IoControlCode
)
{...}

Parametri

[in] Controller

Handle WDFDEVICE per l'oggetto dispositivo framework che rappresenta il controller SPB.

[in] Target

Handle SPBTARGET alla destinazione per questa richiesta di I/O. La destinazione è un dispositivo o una porta periferica collegata al bus. L'estensione del framework SPB (SpbCx) in precedenza ha assegnato questo handle alla destinazione nel callback EvtSpbTargetConnect che ha aperto la connessione alla destinazione.

[in] Request

Handle SPBREQUEST alla richiesta di I/O. Il driver del controller SPB deve completare questa richiesta. Per altre informazioni, vedere la sezione Osservazioni.

[in] OutputBufferLength

Lunghezza, in byte, del buffer di output, se viene fornito un buffer di output con la richiesta.

[in] InputBufferLength

Lunghezza, in byte, del buffer di input, se viene fornito un buffer di input con la richiesta.

[in] IoControlCode

Codice di controllo I/O (IOCTL) per la richiesta. Questo valore è un IOCTL che l'estensione del framework SPB (SpbCx) non riconosce. Per altre informazioni, vedere la sezione Osservazioni.

Valore restituito

nessuno

Osservazioni

SpbCx gestisce la coda di I/O per il controller SPB. Se il driver del controller SPB registra una funzione di callback EvtSpbControllerIother, SpbCx chiama questa funzione quando una richiesta di controllo I/O del dispositivo che SpbCx non supporta arriva nella coda I/O del controller. Il valore del parametro Request è un handle che incapsula questa richiesta. Il driver del controller SPB deve completare questa richiesta eseguendo l'operazione richiesta o restituendo uno stato di errore. Se il driver non supporta L'IOCTL specificato, il driver deve restituire lo stato di errore STATUS_NOT_SUPPORTED. Per un elenco di IOCTLs supportati da SpbCx, vedere Codici di controllo SpbCx I/O.

Il callback EvtSpbControllerIother consente di inviare comandi specifici del bus o specifici del driver al driver del controller SPB come IOCTLs. Ad esempio, i client (driver periferiche) possono usare questi IOCTLs per coordinare operazioni specifiche del bus, ad esempio scambi di dati full-duplex con un dispositivo di destinazione in un bus SPI. Tali IOCTLs sono soggetti allo stesso controllo flusso degli IOCTLs supportati da SpbCx.

La funzione di callback EvtSpbControllerIother è simile a EvtIoDeviceControl e elabora IOCTLs in modo analogo. Per informazioni generali sul modo in cui i driver WDF gestiscono le richieste di I/O, vedere Oggetti richiesta framework.

Un callback EvtSpbControllerIother non restituisce un valore di stato. Il driver del controller SPB indica invece lo stato dell'operazione richiesta nello stato di completamento della richiesta per la richiesta di I/O.

Se non è possibile completare immediatamente una richiesta di I/O, la funzione di callback deve restituire senza attendere che il driver del controller SPB finisca l'elaborazione della richiesta. Il driver del controller SPB può completare la richiesta in modo asincrono.

Una funzione EvtSpbControllerIother deve convalidare i valori dei parametri nelle richieste di controllo I/O ricevute dai client in modalità utente. Per tutte le funzioni di callback EvtSpbXxx diverse da EvtSpbControllerIother, SpbCx convalida i parametri in modalità utente prima di chiamare la funzione.

Per registrare una funzione di callback EvtSpbControllerIother , chiamare il metodo SpbControllerSetIother .

Esempio

Per definire una funzione di callback EvtSpbControllerIother , è prima necessario specificare 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 usando i tipi di funzione callback consente l'analisi del codice per i driver, il verifica driver statico (SDV) e altri strumenti di verifica trovano errori ed è un requisito per la scrittura di driver per il sistema operativo Windows.

Ad esempio, per definire una funzione di callback EvtSpbControllerIother denominata MyEvtSpbControllerIoOther, usare il tipo di funzione EVT_SPB_CONTROLLER_OTHER, come illustrato in questo esempio di codice:

EVT_SPB_CONTROLLER_OTHER  MyEvtSpbControllerIoOther;

Implementare quindi la funzione di callback come indicato di seguito:

_Use_decl_annotations_
VOID
  MyEvtSpbControllerIoOther(
    WDFDEVICE Controller,
    SPBTARGET Target,
    SPBREQUEST Request,
    size_t OutputBufferLength,
    size_t InputBufferLength,
    ULONG IoControlCode
    )
{ ... }

Il tipo di funzione EVT_SPB_CONTROLLER_OTHER è definito nel file di intestazione Spbcx.h. Per identificare in modo più accurato gli errori durante l'esecuzione degli strumenti di analisi del codice, assicurarsi di aggiungere l'annotazione Use_decl_annotations alla definizione della funzione. L'annotazione Use_decl_annotations garantisce che vengano usate le annotazioni applicate al tipo di funzione EVT_SPB_CONTROLLER_OTHER nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite tipi di ruolo per i driver KMDF. Per altre informazioni su 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.

Vedi anche

EvtIoDeviceControl

EvtSpbTargetConnect

SPBREQUEST

SPBTARGET

SpbControllerSetIoOther