Condividi tramite


Valutazione sincrona dei metodi di controllo ACPI

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:

  • IOCTL_ACPI_EVAL_METHOD

    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.

  • IOCTL_ACPI_EVAL_METHOD_EX

    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 conformi ai requisiti di Kernel-Mode Driver Framework (KMDF) o di 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:

  1. Chiama IoBuildDeviceIoControlRequest per compilare la richiesta.

  2. Chiama IoCallDriver per inviare la richiesta nello stack dei dispositivi.

  3. Attende che il gestore di I/O segnali il driver che i driver di livello inferiore hanno completato la richiesta.

  4. Controlla lo stato della richiesta.

  5. Controlla la validità degli argomenti di uscita.

  6. Elabora gli argomenti di output restituiti al driver.

  7. 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 come puntatore al Physical Device Object (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 metodi che non accettano argomenti di input, che accettano un singolo numero intero, che accettano una stringa ASCII o che accettano una matrice personalizzata di argomenti di input. Per altre informazioni sulle strutture di buffer di input supportate, vedere Control Method Input Buffer Structures.For more information about the supported input buffer structures, see Control Method Input Buffer Structures.

  • 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.

  • Evento è impostato su un puntatore a un oggetto evento che è stato allocato e inizializzato dal chiamante. Il driver attende fino a quando il gestore di 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 che contiene gli argomenti di output del metodo di controllo. Gli argomenti di output sono specifici di un determinato metodo di controllo. Affinché un driver restituisca qualsiasi output, deve allocare un buffer di dimensioni sufficienti per contenere tutti gli argomenti di output.

  • IoStatusBlock è impostato su una struttura IO_STATUS_BLOCK . Viene restituito lo stato della richiesta impostata dai driver di livello inferiore.

Per un esempio di codice su 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 su come valutare un metodo di controllo che accetta argomenti di input, vedere Valutazione di un metodo di controllo che accetta argomenti di input.