Valutazione dei metodi di controllo ACPI in modo sincrono
Un driver di dispositivo può usare le richieste di controllo del dispositivo seguenti per valutare in modo sincrono i metodi di controllo definiti nello spazio dei nomi ACPI di un dispositivo:
-
Questa richiesta valuta un metodo di controllo che è un oggetto figlio immediato nello spazio dei nomi ACPI del dispositivo a cui viene inviata la richiesta.
-
Questa richiesta valuta in modo sincrono un metodo di controllo supportato dal dispositivo o da un oggetto figlio discendente del dispositivo a cui viene inviata la richiesta.
Il driver ACPI di Windows, Acpi.sys, gestisce queste richieste per conto dei dispositivi specificati nelle tabelle di descrizione del sistema nel BIOS ACPI. Queste richieste possono essere usate dai driver di dispositivo in modalità kernel che soddisfano i requisiti di Kernel-Mode Driver Framework (KMDF) o Windows Driver Model (WDM). A partire da Windows 8, i driver di dispositivo in modalità utente conformi ai requisiti di User-Mode Driver Framework (UMDF) possono usare queste richieste.
Ad esempio, un driver WDM esegue la sequenza di operazioni seguente per usare uno di questi IOCTLs:
Chiama IoBuildDeviceIoControlRequest per compilare la richiesta.
Chiama IoCallDriver per inviare la richiesta nello stack di dispositivi.
Attende che il gestore di I/O segnali il driver che i driver di livello inferiore hanno completato la richiesta.
Controlla lo stato della richiesta.
Controlla la validità degli argomenti di output.
Elabora gli argomenti di output restituiti al driver.
Completa la richiesta.
Per compilare una richiesta, un driver chiama IoBuildDeviceIoControlRequest e fornisce i parametri seguenti:
IoControlCode è impostato su IOCTL_ACPI_EVAL_METHOD o IOCTL_ACPI_EVAL_METHOD_EX.
DeviceObject è impostato su un puntatore all'oggetto dispositivo fisico (PDO) del dispositivo.
InputBuffer è impostato su un puntatore a una struttura del buffer di input che dipende dal tipo di argomenti di input da passare al metodo di controllo. Il driver ACPI supporta i metodi che non accettano argomenti di input, che accettano un singolo intero, che accettano una stringa ASCII o che accettano una matrice personalizzata di argomenti di input. Per altre informazioni sulle strutture del buffer di input supportate, vedere Strutture del buffer di input del metodo di controllo.
InputBufferLength è impostato sulle dimensioni, in byte, del buffer di input fornito da InputBuffer.
OutputBufferLength fornisce le dimensioni, in byte, del buffer di output fornito da OutputBuffer.
InternalDeviceIoControl è impostato su FALSE.
L'evento è impostato su un puntatore a un chiamante allocato e inizializzato oggetto evento. Il driver attende fino a quando il gestore I/O segnala questo evento, che indica che i driver di livello inferiore hanno completato la richiesta.
OutputBuffer fornisce un puntatore a una struttura ACPI_EVAL_OUTPUT_BUFFER contenente gli argomenti di output dal metodo di controllo. Gli argomenti di output sono specifici di un determinato metodo di controllo. Per restituire qualsiasi output, un driver deve allocare un buffer sufficiente per contenere tutti gli argomenti di output.
IoStatusBlock è impostato su una struttura IO_STATUS_BLOCK . Restituisce lo stato della richiesta impostata dai driver di livello inferiore.
Per un esempio di codice di come valutare un metodo di controllo che non accetta argomenti di input, vedere Valutazione di un metodo di controllo senza argomenti di input.
Per un esempio di codice di come valutare un metodo di controllo che accetta argomenti di input, vedere Valutazione di un metodo di controllo che accetta argomenti di input.