Поделиться через


Синхронная оценка методов управления ACPI

Драйвер устройства может использовать следующие запросы управления устройствами для синхронной оценки методов управления, определенных в пространстве имен ACPI устройства:

  • IOCTL_ACPI_EVAL_METHOD

    Этот запрос оценивает метод управления, который является непосредственным дочерним объектом в пространстве имен ACPI устройства, на котором отправляется запрос.

  • IOCTL_ACPI_EVAL_METHOD_EX

    Этот запрос синхронно оценивает метод управления, поддерживаемый устройством или дочерним объектом устройства, которому отправляется запрос.

Драйвер Windows ACPI, Acpi.sys, обрабатывает эти запросы от имени устройств, указанных в таблицах системного описания в ACPI BIOS. Эти запросы можно использовать драйверами устройств режима ядра, которые соответствуют требованиям Kernel-Mode Driver Framework (KMDF) или Windows Driver Model (WDM). Начиная с Windows 8 драйверы устройств в пользовательском режиме, которые соответствуют требованиям User-Mode Driver Framework (UMDF) могут использовать эти запросы.

Например, драйвер WDM выполняет следующую последовательность операций для использования одного из этих IOCTL.

  1. Вызывает IoBuildDeviceIoControlRequest для создания запроса.

  2. Вызывает IoCallDriver, чтобы отправить запрос вниз стеку устройств.

  3. Ожидает, пока диспетчер ввода-вывода сигнализирует драйверу о том, что драйверы нижнего уровня завершили запрос.

  4. Проверяет состояние запроса.

  5. Проверяет допустимость выходных аргументов.

  6. Обрабатывает выходные аргументы, возвращаемые драйверу.

  7. Завершает запрос.

Чтобы создать запрос, драйвер вызывает IoBuildDeviceIoControlRequest и предоставляет следующие параметры:

  • IoControlCode установлено в IOCTL_ACPI_EVAL_METHOD или IOCTL_ACPI_EVAL_METHOD_EX.

  • DeviceObject устанавливается как указатель на объект физического устройства (PDO) устройства.

  • InputBuffer имеет указатель на структуру входного буфера, которая зависит от типа входных аргументов, передаваемых методу управления. Драйвер ACPI поддерживает методы, которые не принимают входных аргументов, которые принимают одно целое число, которые принимают строку ASCII или принимают пользовательский массив входных аргументов. Дополнительные сведения о поддерживаемых структурах входных буферов см. в разделе структуры входных буферов метода управления.

  • InputBufferLength имеет размер в байтах входного буфера, предоставленного InputBuffer.

  • OutputBufferLength предоставляет размер в байтах выходного буфера, предоставленного OutputBuffer.

  • InternalDeviceIoControl имеет значение FALSE.

  • событие устанавливается как указатель на объект события, выделенный и инициализированный вызывающим. Драйвер ожидает, пока диспетчер ввода-вывода сигнализирует об этом событии, что указывает, что драйверы нижнего уровня завершили запрос.

  • OutputBuffer предоставляет указатель на структуру ACPI_EVAL_OUTPUT_BUFFER, содержащую выходные аргументы из метода управления. Выходные аргументы относятся к заданному методу управления. Чтобы драйвер возвращал все выходные данные, он должен выделить буфер, достаточно большой для хранения всех выходных аргументов.

  • IoStatusBlock имеет IO_STATUS_BLOCK структуру. Это возвращает состояние запроса, заданного драйверами нижнего уровня.

Пример кода оценки метода управления, который не принимает входные аргументы, см. в разделе Оценка метода управления без входных аргументов.

Пример кода оценки метода управления, который принимает входные аргументы, см. в оценке метода управления, который принимает входные аргументы.