Condividi tramite


Enumerazione di dispositivi figlio e metodi di controllo

In uno spazio dei nomi ACPI un oggetto che è un dispositivo, ad esempio un dispositivo denominato "ABCD", può avere oggetti figlio del dispositivo o metodi di controllo supportati dal dispositivo. Qualsiasi oggetto figlio che è un dispositivo figlio di un dispositivo padre può, a sua volta, avere oggetti figlio che sono dispositivi figlio o metodi di controllo.

Ad esempio, nello spazio dei nomi ACPI semplificato seguente la radice dello spazio dei nomi ACPI è designato da '\' e l'oggetto 'ABCD' è un dispositivo figlio immediato della radice dello spazio dei nomi ACPI. Inoltre, il dispositivo 'ABCD' ha due dispositivi figlio immediati denominati 'CHL1' e 'CHL2' e un oggetto figlio che è un metodo di controllo denominato '_FOO'. Inoltre, il dispositivo figlio 'CHL2' ha un dispositivo figlio denominato 'CHL3' e dispositivo "CHL3" ha un oggetto figlio denominato '_FOO'.

\     root of ACPI namespace
 ABCD            parent device 
    CHL1         child device of ABCD
    CHL2         child device of ABCD
       CHL3      child device of CHL2
          _FOO   control method
 _FOO            control method

Per usare IOCTL_ACPI_EVAL_METHOD_EX o IOCTL_ACPI_ASYNC_EVAL_METHOD_EX, un driver per un dispositivo fornisce il percorso e il nome del metodo di controllo in uno spazio dei nomi ACPI. Per ottenere il percorso e il nome di un dispositivo e oggetti figlio di un dispositivo, Windows supporta la richiesta di IOCTL_ACPI_ENUM_CHILDREN . Facendo riferimento allo spazio dei nomi ACPI semplificato fornito in questa sezione come esempio, un driver nello stack di dispositivi "ABCD" può usare questa richiesta per eseguire le operazioni seguenti:

  • Enumera il dispositivo 'ABCD' e i dispositivi figlio immediati di 'ABCD'. Ad esempio, la richiesta può essere usata per restituire '\ABCD', '\ABCD. CHL1 e '\ABCD. CHL2.

  • Enumera in modo ricorsivo tutti i dispositivi nello spazio dei nomi "ABCD". Ad esempio, la richiesta può essere usata per restituire '\ABCD', '\ABCD. CHL1, '\ABCD. CHL2 e '\ABCD. CHL2. CHL3.'

  • Enumera in modo ricorsivo tutti gli oggetti figlio discendenti di "ABCD" di un nome specificato. Il nome specificato funge da filtro in modo che solo gli oggetti figlio con lo stesso nome siano enumerati. Ad esempio, per un nome specificato '_FOO', la richiesta può essere usata per restituire '\ABCD._FOO' e '\ABCD. CHL2. CHL3._FOO.'

Dopo che un driver ottiene il percorso e il nome di un metodo di controllo, può specificare il percorso e il nome come input per IOCTL_ACPI_EVAL_METHOD_EX o IOCTL_ACPI_ASYNC_EVAL_METHOD_EX, come descritto in Valutazione dei metodi di controllo ACPI in modo sincrono.

Una richiesta di IOCTL_ACPI_ENUM_CHILDREN accetta come input una struttura di lunghezza variabile allocata dal driver ACPI_ENUM_CHILDREN_INPUT_BUFFER che contiene i membri seguenti:

Signature

Firma del buffer di input, che deve essere impostata su ACPI_ENUM_CHILDREN_INPUT_BUFFER_SIGNATURE.

Flags

Flag che determina quali oggetti nello spazio dei nomi ACPI di un dispositivo enumera il driver ACPI. Il driver ACPI restituisce il percorso completo e il nome dell'oggetto enumerato a partire dalla radice dello spazio dei nomi ACPI. Il flag deve essere impostato su uno dei valori seguenti:

Flag Descrizione
ENUM_CHILDREN_IMMEDIATE_ONLY Enumera il dispositivo ed enumera i dispositivi figlio immediati del dispositivo.
ENUM_CHILDREN_MULTILEVEL Enumera il dispositivo ed enumera in modo ricorsivo tutti i dispositivi figlio del dispositivo.
ENUM_CHILDREN_NAME_IS_FILTER Un OR bit per bit di ENUM_CHILDREN e ENUM_CHILDREN_NAME_IS_FILTER enumera gli oggetti figlio del dispositivo il cui nome è identico a quello fornito dal membro Name .

NameLength

Numero di caratteri ASCII contenuti nella matrice Name .

Name

Matrice ASCII con terminazione NULL con quattro caratteri contenente il nome di un oggetto figlio usato dal driver ACPI per limitare l'enumerazione di oggetti figlio a tali oggetti che hanno lo stesso nome.

La richiesta IOCTL_ACPI_ENUM_CHILDREN restituisce il percorso e il nome degli oggetti figlio in una ACPI_ENUM_CHILDREN_OUTPUT_BUFFER a lunghezza variabile allocata da driver che contiene i membri seguenti:

Signature

Firma del buffer di output, che deve essere impostato su ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE.

NumberOfChildren

Numero di elementi di tipo ACPI_ENUM_CHILD nella matrice Children .

Children

Matrice di elementi di tipo ACPI_ENUM_CHILD. Il membro Name di una struttura ACPI_ENUM_CHILD contiene il percorso e il nome dell'oggetto figlio e il membro Flags indica se l'oggetto figlio ha oggetti figlio.

Se il buffer di output allocato dal driver non è sufficiente per restituire tutti i nomi figlio enumerati, il driver ACPI non restituisce nomi figlio e imposta il membro Status del IO_STATUS_BLOCK per la richiesta di STATUS_BUFFER_OVERFLOW. In questo caso, se le dimensioni, in byte, del buffer di output sono almeno sizeof(ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE), il driver ACPI imposta anche NumberOfChildren sulle dimensioni, in byte, che è necessario recuperare i percorsi e i nomi richiesti.

Vedi anche

Invio di una richiesta di IOCTL_ACPI_ENUM_CHILDREN.