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_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) |