Condividi tramite


EVT_SPB_CONTROLLER_LOCK funzione di callback (spbcx.h)

La funzione di callback dell'evento EvtSpbControllerLock di un driver controller SPB blocca il controller SPB per gli accessi di un singolo dispositivo di destinazione nel bus.

Sintassi

EVT_SPB_CONTROLLER_LOCK EvtSpbControllerLock;

void EvtSpbControllerLock(
  [in] WDFDEVICE Controller,
  [in] SPBTARGET Target,
  [in] SPBREQUEST LockRequest
)
{...}

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] LockRequest

Handle SPBREQUEST per una richiesta di controllo di I/O per bloccare il controller. Il driver del controller SPB deve completare questa richiesta eseguendo l'operazione richiesta o restituendo uno stato di errore. Per altre informazioni, vedere 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 EvtSpbControllerLock , SpbCx chiama questa funzione quando un client (driver periferica) del controller invia una richiesta di IOCTL_SPB_LOCK_CONTROLLER a una destinazione sul bus. Il valore del parametro LockRequest è un handle che incapsula questa richiesta.

Le funzioni EvtSpbControllerLock e EvtSpbControllerUnlock eseguono operazioni complementari. Entrambe le funzioni sono facoltative. Se il driver del controller SPB implementa una funzione EvtSpbControllerUnlock , il driver non è necessario per implementare una funzione EvtSpbControllerLock , ma potrebbe farlo. Tuttavia, se il driver del controller SPB implementa una funzione EvtSpbControllerLock , deve implementare anche una funzione EvtSpbControllerUnlock . Per altre informazioni, vedere La sezione Osservazioni in SPB_CONTROLLER_CONFIG.

Mentre il blocco è attivo, il controller non deve consentire l'accesso alle destinazioni sul bus diverse dalla destinazione designata dal parametro LockRequest .

Se il driver del controller SPB deve modificare la modalità del controller per sostituire temporaneamente il normale meccanismo di selezione della destinazione, può farlo durante il callback evtSpbControllerLock . Se questa modifica della modalità comporta un ritardo prolungato o richiede che il driver attenda l'interruzione di un dispositivo, il driver deve avviare la modifica della modalità e quindi tornare dal callback senza ritardi. Successivamente, il driver può completare l'operazione di blocco in un DPC timer o un'interruzione DPC.

Se l'operazione di blocco viene completata in un DPC, il driver del controller SPB deve in precedenza aver allocato tutte le risorse necessarie per l'operazione di blocco.

Un callback EvtSpbControllerLock deve evitare l'esito negativo di una richiesta di blocco. Se Driver Verifier è abilitato, un errore di questo tipo attiverà una trap di verifica, che indicherà al gestore Plug and Play che il controller non è riuscito. SpbCx ignora l'errore di una richiesta di blocco e non tenta di gestire o attenuare l'errore.

La funzione EvtSpbControllerLock non restituisce un valore. Il driver del controller SPB indica invece lo stato dell'operazione di blocco nello stato di completamento della richiesta di I/O identificata dal parametro LockRequest . Impostare lo stato di completamento su STATUS_SUCCESS.

SpbCx chiama la funzione di callback degli eventi EvtSpbControllerUnlock per sbloccare un controller precedentemente bloccato da un callback EvtSpbControllerLock .

Per registrare una funzione di callback EvtSpbControllerLock , chiamare il metodo SpbDeviceInitialize .

Per altre informazioni sulla funzione EvtSpbControllerLock , vedere Handling Client-Implemented Sequences.For more information about the EvtSpbControllerLock function, see Handling Client-Implemented Sequences.

Esempio

Per definire una funzione di callback EvtSpbControllerLock , è innanzitutto necessario 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 EvtSpbControllerLock denominata MyEvtSpbControllerLock, usare il tipo di funzione EVT_SPB_CONTROLLER_LOCK, come illustrato nell'esempio di codice seguente:

EVT_SPB_CONTROLLER_LOCK  MyEvtSpbControllerLock;

Implementare quindi la funzione di callback come indicato di seguito:

_Use_decl_annotations_
VOID
  MyEvtSpbControllerLock(
    WDFDEVICE Controller,
    SPBTARGET Target,
    SPBREQUEST LockRequest
    )
{ ... }

Il tipo di funzione EVT_SPB_CONTROLLER_LOCK è 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_LOCK 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.

Vedi anche