IOCTL_ACPI_GET_DEVICE_INFORMATION IOCTL (acpiioct.h)
设备的驱动程序可以使用IOCTL_ACPI_GET_DEVICE_INFORMATION设备控制请求来获取有关其设备的精细标识信息。 此 IOCTL 通常由支持设备多个版本或修订版的驱动程序使用,并且需要检查构成设备的 HW ID 字符串的组件部件,以识别确切的设备。 驱动程序应调用 IoBuildDeviceIoControlRequest 并传递以下输入和输出参数来生成此请求。
主要代码
输入缓冲区
按如下所示设置 IoBuildDeviceIoControlRequest 输入参数:
- IoControlCode 设置为 IOCTL_ACPI_GET_DEVICE_INFORMATION。
- DeviceObject 设置为指向物理设备对象的指针, (设备的 PDO) 。
- InputBuffer 设置为指向输入缓冲区结构的指针,该结构取决于要传递给控件方法的输入参数的类型。 有关此 IOCTL 支持的输入参数类型的详细信息,请参阅本主题后面的备注部分。
- InputBufferLength 设置为 InputBuffer 提供的输入缓冲区的大小(以字节为单位)。
- OutputBufferLength 提供 OutputBuffer 提供的输出缓冲区的大小(以字节为单位)。
- InternalDeviceIoControl 设置为 FALSE。
- 事件 设置为 NULL。
输入缓冲区长度
InputBufferLength 设置为 InputBuffer 提供的输入缓冲区的大小(以字节为单位)。
输出缓冲区
按如下所示设置 IoBuildDeviceIoControlRequest 输出参数:
- OutputBuffer 提供指向包含控件方法输出参数 的ACPI_DEVICE_INFORMATION_OUTPUT_BUFFER 结构的指针。
- IoStatusBlock 设置为 IO_STATUS_BLOCK 结构。
输出缓冲区长度
OutputBufferLength 提供 OutputBuffer 提供的输出缓冲区的大小(以字节为单位)。
状态块
如果请求成功,IoStatusBlock-Status> 设置为 STATUS_SUCCESS;否则,Status 成员设置为错误代码。 如果输出缓冲区的大小不足以包含输出缓冲区标头, 则 Status 成员将设置为 STATUS_BUFFER_TOO_SMALL。 如果输出缓冲区足够大,足以包含输出缓冲区标头,但大小不足以包含控制方法中的所有输出参数,则 Status 成员设置为 STATUS_BUFFER_OVERFLOW,OutputBuffer-Length > 设置为输出缓冲区的所需长度。
如果请求成功,IoStatusBlock-Information> 成员将设置为输出缓冲区中返回的字节数;否则,信息成员设置为零。
注解
设备的驱动程序可以使用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 (包括 Acpiioct.h) |