Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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. |