IOCTL_ACPI_ENUM_CHILDREN IOCTL (acpiioct.h)

IOCTL_ACPI_ENUM_CHILDREN设备控制请求可用于枚举此请求发送到的设备 ACPI 命名空间中的设备或命名子对象的路径和名称。 驱动程序应调用 IoBuildDeviceIoControlRequest 并传递以下输入和输出参数来生成此请求。

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

按如下所示设置 IoBuildDeviceIoControlRequest 输入参数:

  • IoControlCode 设置为 IOCTL_ACPI_ENUM_CHILDREN。
  • DeviceObject 设置为指向物理设备对象的指针, (设备的 PDO) 。
  • InputBuffer 设置为指向可变长度 ACPI_ENUM_CHILDREN_INPUT_BUFFER 结构的指针。
  • InputBufferLength 设置为 InputBuffer 提供的输入缓冲区的大小(以字节为单位)。
  • OutputBufferLength 提供 OutputBuffer 提供的输出缓冲区的大小(以字节为单位)。
  • InternalDeviceIoControl 设置为 FALSE
  • 事件 设置为指向调用方分配和初始化的事件对象的指针。

输入缓冲区长度

InputBufferLength 设置为 InputBuffer 提供的输入缓冲区的大小(以字节为单位)。

输出缓冲区

按如下所示设置 IoBuildDeviceIoControlRequest 输出参数:

输出缓冲区长度

OutputBufferLength 提供 OutputBuffer 提供的输出缓冲区的大小(以字节为单位)。

状态块

如果请求成功,则 IoStatusBlock-Status> 设置为 STATUS_SUCCESS;否则,Status 成员设置为错误代码。 如果输出缓冲区的大小不足以包含缓冲区标头,则 Status 成员设置为 STATUS_BUFFER_TOO_SMALL。 如果输出缓冲区足够大,足以包含输出缓冲区标头,但不足以包含所有枚举子对象的路径和名称,则 Status 成员设置为 STATUS_BUFFER_OVERFLOW,OutputBuffer-NumberOfChildren> 设置为输出缓冲区的所需长度。

如果请求成功,IoStatusBlock-Information> 成员将设置为输出缓冲区中返回的字节数;否则,信息成员设置为零。

注解

IOCTL_ACPI_ENUM_CHILDREN返回一个可变长度ACPI_ENUM_CHILDREN_OUTPUT_BUFFER结构,该结构包含可变长度 ACPI_ENUM_CHILD 结构的数组,其中每个结构返回请求发送到的设备的 ACPI 命名空间中的对象的完全限定路径和名称。 此请求枚举的对象取决于提供的输入结构ACPI_ENUM_CHILDREN_INPUT_BUFFER的 Flags 成员的设置,如下所示:

如果驱动程序分配的输出缓冲区不够大,无法返回所有请求的子名称,则 ACPI 驱动程序不会返回任何子名称,并将请求IO_STATUS_BLOCK 的 Status 成员设置为STATUS_BUFFER_OVERFLOW。 在这种情况下,如果输出缓冲区 的大小(以 字节为单位)至少为 (ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE) ,则 ACPI 驱动程序还会将 NumberOfChildren 设置为检索请求的路径和名称所需的大小(以字节为单位)。

驱动程序通常使用两个IOCTL_ACPI_ENUM_CHILDREN请求的序列来枚举感兴趣的子对象。 驱动程序发送第一个请求以获取包含所有请求对象的路径和名称所需的输出缓冲区的大小。 驱动程序发送第二个请求,以返回输出缓冲区中对象的路径和名称。

有关如何枚举设备的子设备的详细信息,请参阅 枚举子设备和控制方法

IOCTL_ACPI_ENUM_CHILDREN只能在 IRQL< DISPATCH_LEVEL中使用。

要求

要求
最低受支持的客户端 Windows Vista 和更高版本的 Windows。
标头 acpiioct.h (包括 Acpiioct.h)

另请参阅

ACPI_ENUM_CHILD

ACPI_ENUM_CHILDREN_INPUT_BUFFER

ACPI_ENUM_CHILDREN_OUTPUT_BUFFER