IOCTL_ACPI_GET_DEVICE_INFORMATION IOCTL (acpiioct.h)

设备的驱动程序可以使用IOCTL_ACPI_GET_DEVICE_INFORMATION设备控制请求获取有关其设备的精细标识信息。 此 IOCTL 通常由支持设备多个版本或修订的驱动程序使用,并且需要检查构成设备的 HW ID 字符串的组件部件来标识确切的设备。 驱动程序应调用 IoBuildDeviceIoControlRequest,并传递以下输入和输出参数来生成此请求。

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

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

  • IoControlCode 设置为IOCTL_ACPI_GET_DEVICE_INFORMATION。
  • DeviceObject 设置为指向设备的物理设备对象(PDO)的指针。
  • InputBuffer 设置为指向输入缓冲区结构的指针,该结构取决于要传递给控制方法的输入参数的类型。 有关此 IOCTL 支持的输入参数类型的详细信息,请参阅本主题后面的“备注”部分。
  • InputBufferLength 设置为输入缓冲区的大小(以字节为单位)InputBuffer
  • OutputBufferLength 提供 OutputBuffer提供的输出缓冲区的大小(以字节为单位)。
  • InternalDeviceIoControl 设置为 FALSE
  • 事件 设置为 NULL

输入缓冲区长度

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

输出缓冲区

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

输出缓冲区长度

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

状态块

如果请求成功,IoStatusBlock->状态 设置为 STATUS_SUCCESS;否则,状态 成员将设置为错误代码。 如果输出缓冲区不够大以包含输出缓冲区标头,则 状态 成员设置为STATUS_BUFFER_TOO_SMALL。 如果输出缓冲区足够大以包含输出缓冲区标头,但不足以包含控制方法中的所有输出参数,则 状态 成员设置为STATUS_BUFFER_OVERFLOW,OutputBuffer->Length 设置为输出缓冲区的所需长度。

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

言论

设备的驱动程序可以使用IOCTL_ACPI_GET_DEVICE_INFORMATION获取有关其设备的精细标识信息。 此 IOCTL 通常用于支持设备多个硬件版本或修订的驱动程序,并且需要检查构成设备的 HW ID 字符串的组件部件来标识确切的设备。 例如,驱动程序可能支持相同设备的不同修订,其中编程接口的某些方面或设备的行为不同。 驱动程序可以确切地确定它正在运行的修订。

请求的输出参数在 OutBuffer 指针提供的可变长度 ACPI_DEVICE_INFORMATION_OUTPUT_BUFFER 结构中返回。 ACPI_DEVICE_INFORMATION_OUTPUT_BUFFER包括可变长度数组的数组,每个数组分别返回表示子系统 ID 字符串、供应商 ID 字符串和实例 ID 字符串的输出参数。

IOCTL_ACPI_GET_DEVICE_INFORMATION只能在 IRQL <= DISPATCH_LEVEL 中使用。

要求

要求 价值
最低支持的客户端 Windows 8 及更高版本的 Windows。
标头 acpiioct.h (include Acpiioct.h)

另请参阅

ACPI_DEVICE_INFORMATION_OUTPUT_BUFFER