Share via


EVT_SPB_CONTROLLER_UNLOCK funzione di callback (spbcx.h)

La funzione di callback dell'evento EvtSpbControllerUnlock di un driver del controller SPB sblocca il controller SPB, bloccato da una chiamata precedente alla funzione di callback dell'evento EvtSpbControllerLock .

Sintassi

EVT_SPB_CONTROLLER_UNLOCK EvtSpbControllerUnlock;

void EvtSpbControllerUnlock(
  [in] WDFDEVICE Controller,
  [in] SPBTARGET Target,
  [in] SPBREQUEST UnlockRequest
)
{...}

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

Handle SPBREQUEST per una richiesta di controllo di I/O per sbloccare 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. SpbCx chiama questa funzione quando un client (driver periferica) del controller invia una richiesta di IOCTL_SPB_UNLOCK_CONTROLLER a una destinazione sul bus. Il valore del parametro UnlockRequest è 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.

Se il driver del controller SPB deve modificare la modalità del controller per ripristinare la normale selezione di destinazione, può farlo durante il callback EvtSpbControllerUnlock . 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 la richiesta di sblocco in un DPC di interrupt o in un timer DPC.

Un callback EvtSpbControllerUnlock deve evitare l'esito negativo di una richiesta di sblocco. 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 sblocco e non tenta di gestire o attenuare l'errore.

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

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

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

Esempio

Per definire una funzione di callback EvtSpbControllerUnlock , è 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 EvtSpbControllerUnlock denominata MyEvtSpbControllerUnlock, usare il tipo di funzione EVT_SPB_CONTROLLER_UNLOCK, come illustrato nell'esempio di codice seguente:

EVT_SPB_CONTROLLER_UNLOCK  MyEvtSpbControllerUnlock;

Implementare quindi la funzione di callback come indicato di seguito:

_Use_decl_annotations_
VOID
  MyEvtSpbControllerUnlock(
    WDFDEVICE Controller,
    SPBTARGET Target,
    SPBREQUEST UnlockRequest
    )
{ ... }

Il tipo di funzione EVT_SPB_CONTROLLER_UNLOCK è 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_UNLOCK 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