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.