IOCTL_ACPI_GET_DEVICE_INFORMATION IOCTL (acpiioct.h)
Драйвер для устройства может использовать запрос IOCTL_ACPI_GET_DEVICE_INFORMATION управления устройствами для получения подробных сведений об идентификации устройства. Обычно это IOCTL используется драйверами, поддерживающими несколько версий или редакций устройства, и необходимо изучить компоненты, составляющие строку идентификатора HW устройства, чтобы определить точное устройство. Драйвер должен вызывать IoBuildDeviceIoControlRequest и передавать следующие входные и выходные параметры для сборки этого запроса.
Основной код
Входной буфер
Задайте входные параметры IoBuildDeviceIoControlReque st следующим образом:
- 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 имеет значение STATUS_BUFFER_OVERFLOW, а OutputBuffer—>Длина задана для требуемой длины выходного буфера.
Если запрос выполнен успешно, IoStatusBlock— элементсведений> задано число байтов, возвращаемых в выходном буфере; в противном случае элемент Information имеет значение нулю.
Замечания
Драйвер устройства может использовать IOCTL_ACPI_GET_DEVICE_INFORMATION для получения подробных сведений об идентификации устройства. Этот IOCTL обычно используется с драйверами, поддерживающими несколько аппаратных версий или редакций устройства, и необходимо проверить компоненты, составляющие строку идентификатора HW устройства, чтобы определить точное устройство. Например, драйвер может поддерживать различные редакции одного устройства, в которых некоторые аспекты интерфейса программирования или поведение устройства отличается. Драйвер может определить, какая редакция выполняется.
Выходные аргументы запроса возвращаются в структуре ACPI_DEVICE_INFORMATION_OUTPUT_BUFFER переменной длины, предоставленной указателем OutBuffer. ACPI_DEVICE_INFORMATION_OUTPUT_BUFFER включает массив массивов переменной длины, каждый из которых возвращает выходной аргумент, представляющий строку идентификатора подсистемы, строку идентификатора поставщика и строку идентификатора экземпляра соответственно.
IOCTL_ACPI_GET_DEVICE_INFORMATION можно использовать только в IRQL <= DISPATCH_LEVEL.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 8 и более поздних версий Windows. |
заголовка | acpiioct.h (include Acpiioct.h) |