GPIO_CLIENT_RELEASE_CONTROLLER funzione di callback (gpioclx.h)
La funzione di callback dell'evento CLIENT_ReleaseController esegue operazioni necessarie quando il dispositivo controller di I/O (GPIO) per utilizzo generico non è più accessibile.
Sintassi
GPIO_CLIENT_RELEASE_CONTROLLER GpioClientReleaseController;
NTSTATUS GpioClientReleaseController(
[in] WDFDEVICE Device,
[in] PVOID Context
)
{...}
Parametri
[in] Device
Handle WDFDEVICE per l'oggetto dispositivo framework che rappresenta il controller GPIO.
[in] Context
Puntatore al contesto del dispositivo del controller GPIO.
Valore restituito
La funzione CLIENT_ReleaseController restituisce STATUS_SUCCESS se la chiamata ha esito positivo. In caso contrario, restituisce un codice di errore appropriato.
Commenti
Questa funzione di callback viene implementata dal driver del controller GPIO. L'estensione del framework GPIO (GpioClx) chiama questa funzione dopo che il dispositivo controller GPIO non è più accessibile.
Durante il callback CLIENT_ReleaseController , il driver del controller GPIO deve rilasciare tutte le risorse hardware acquisite come risultato della chiamata precedente alla funzione di callback CLIENT_PrepareController. Nel caso di un dispositivo controller GPIO mappato alla memoria, il driver deve annullare il mapping dell'intervallo di indirizzi di memoria o intervalli assegnati ai registri hardware. Per un controller non mappato alla memoria, il driver deve chiudere la connessione logica aperta in precedenza al controller.
Per registrare la funzione di callback del driver CLIENT_ReleaseController , chiamare il metodo GPIO_CLX_RegisterClient . Questo metodo accetta, come parametro di input, un puntatore a una struttura GPIO_CLIENT_REGISTRATION_PACKET che contiene un puntatore alla funzione CLIENT_ReleaseController .
Anche se la funzione di callback CLIENT_ReleaseController viene chiamata in IRQL = PASSIVE_LEVEL , non è consigliabile rendere questa funzione paginabile. Il callback CLIENT_ReleaseController si trova nel percorso di tempo critico per il ripristino dell'alimentazione ai dispositivi nella piattaforma hardware e, per motivi di prestazioni, non deve essere ritardato da errori di pagina.
Esempio
Per definire una funzione di callback CLIENT_ReleaseController , è 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 CLIENT_ReleaseController denominata MyEvtGpioReleaseController
, usare il tipo di funzione GPIO_CLIENT_RELEASE_CONTROLLER, come illustrato nell'esempio di codice seguente:
GPIO_CLIENT_RELEASE_CONTROLLER MyEvtGpioReleaseController;
Implementare quindi la funzione di callback come indicato di seguito:
_Use_decl_annotations_
NTSTATUS
MyEvtGpioReleaseController(
WDFDEVICE Device,
PVOID Context
)
{ ... }
Il tipo di funzione GPIO_CLIENT_RELEASE_CONTROLLER è definito nel file di intestazione Gpioclx.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 GPIO_CLIENT_RELEASE_CONTROLLER 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 | gpioclx.h |
IRQL | Chiamato in PASSIVE_LEVEL. |