IOCTL_ACPI_ENUM_CHILDREN IOCTL (acpiioct.h)

La IOCTL_ACPI_ENUM_CHILDREN demande de contrôle d’appareil peut être utilisée pour énumérer le chemin et le nom des appareils ou des objets enfants nommés dans l’espace de noms ACPI de l’appareil auquel cette demande est envoyée. Un pilote doit appeler IoBuildDeviceIoControlRequest et passer les paramètres d’entrée et de sortie suivants pour générer cette requête.

Code principal

IRP_MJ_DEVICE_CONTROL

Mémoire tampon d'entrée

Définissez les paramètres d’entrée IoBuildDeviceIoControlRequest comme suit :

  • IoControlCode est défini sur IOCTL_ACPI_ENUM_CHILDREN.
  • DeviceObject est défini sur un pointeur vers l’objet d’appareil physique (PDO) de l’appareil.
  • InputBuffer est défini sur un pointeur vers une structure de ACPI_ENUM_CHILDREN_INPUT_BUFFER de longueur variable.
  • InputBufferLength est défini sur la taille, en octets, de la mémoire tampon d’entrée fournie par InputBuffer.
  • OutputBufferLength fournit la taille, en octets, de la mémoire tampon de sortie fournie par OutputBuffer.
  • InternalDeviceIoControl a la valeur FALSE.
  • L’événement est défini sur un pointeur vers un objet d’événement alloué et initialisé par l’appelant.

Longueur de la mémoire tampon d’entrée

InputBufferLength est défini sur la taille, en octets, de la mémoire tampon d’entrée fournie par InputBuffer.

Mémoire tampon de sortie

Définissez les paramètres de sortie IoBuildDeviceIoControlRequest comme suit :

  • OutputBuffer fournit un pointeur vers une structure ACPI_ENUM_CHILDREN_OUTPUT_BUFFER de longueur variable dans laquelle le pilote ACPI retourne le chemin et le nom des appareils enfants énumérés.
  • IoStatusBlock est défini sur une structure IO_STATUS_BLOCK .

Longueur de la mémoire tampon de sortie

OutputBufferLength fournit la taille, en octets, de la mémoire tampon de sortie fournie par OutputBuffer.

Bloc d’état

Si la demande réussit, IoStatusBlock-Status> est défini sur STATUS_SUCCESS ; sinon, le membre Status est défini sur un code d’erreur. Si la mémoire tampon de sortie n’est pas assez grande pour contenir l’en-tête de mémoire tampon, le membre Status est défini sur STATUS_BUFFER_TOO_SMALL. Si la mémoire tampon de sortie est suffisamment grande pour contenir l’en-tête de mémoire tampon de sortie, mais n’est pas assez grande pour contenir les chemins d’accès et les noms de tous les objets enfants énumérés, le membre Status est défini sur STATUS_BUFFER_OVERFLOW et OutputBuffer-NumberOfChildren> est défini sur la longueur requise de la mémoire tampon de sortie.

Si la requête réussit, le membre IoStatusBlock-Information> est défini sur le nombre d’octets retournés dans la mémoire tampon de sortie ; sinon, le membre Information est défini sur zéro.

Remarques

IOCTL_ACPI_ENUM_CHILDREN retourne une structure de longueur variable ACPI_ENUM_CHILDREN_OUTPUT_BUFFER qui contient un tableau de structures ACPI_ENUM_CHILD de longueur variable, chacune d’elles retourne le chemin complet et le nom d’un objet dans l’espace de noms ACPI de l’appareil auquel la demande a été envoyée. Les objets énumérés par cette requête dépendent du paramètre du membre Flags de la structure d’entrée fournie ACPI_ENUM_CHILDREN_INPUT_BUFFER, comme suit :

Si la mémoire tampon de sortie allouée par le pilote n’est pas assez grande pour renvoyer tous les noms enfants demandés, le pilote ACPI ne retourne aucun nom enfant et définit le membre Status du IO_STATUS_BLOCK pour la demande de STATUS_BUFFER_OVERFLOW. Dans ce cas, si la taille, en octets, du tampon de sortie est au moins sizeof(ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE), le pilote ACPI définit également NumberOfChildren sur la taille, en octets, requise pour récupérer les chemins et les noms demandés.

Un pilote utilise généralement une séquence de deux requêtes IOCTL_ACPI_ENUM_CHILDREN pour énumérer les objets enfants d’intérêt. Le pilote envoie la première requête pour obtenir la taille de la mémoire tampon de sortie requise pour contenir le chemin et le nom de tous les objets demandés. Le pilote envoie la deuxième requête pour retourner le chemin et le nom des objets dans la mémoire tampon de sortie.

Pour plus d’informations sur la façon d’énumérer les appareils enfants d’un appareil, consultez Énumération d’appareils enfants et méthodes de contrôle.

IOCTL_ACPI_ENUM_CHILDREN ne peut être utilisé qu’à l’DISPATCH_LEVEL IRQL< .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista et versions ultérieures de Windows.
En-tête acpiioct.h (inclure Acpiioct.h)

Voir aussi

ACPI_ENUM_CHILD

ACPI_ENUM_CHILDREN_INPUT_BUFFER

ACPI_ENUM_CHILDREN_OUTPUT_BUFFER