Compartir a través de


IOCTL_ACPI_EVAL_METHOD_EX IOCTL (acpiioct.h)

Un controlador para un dispositivo puede usar la solicitud de control de dispositivo IOCTL_ACPI_EVAL_METHOD_EX para evaluar de forma sincrónica un método de control ACPI compatible con un dispositivo secundario en el espacio de nombres del dispositivo. El controlador debe llamar a IoBuildDeviceIoControlRequest y pasar los siguientes parámetros de entrada y salida para compilar esta solicitud.

Código principal

IRP_MJ_DEVICE_CONTROL

Búfer de entrada

Establezca los parámetros de entrada IoBuildDeviceIoControlRequest de la siguiente manera:

  • IoControlCode se establece en IOCTL_ACPI_EVAL_METHOD_EX.
  • DeviceObject se establece en un puntero al objeto de dispositivo físico (PDO) del dispositivo.
  • InputBuffer se establece en un puntero a una estructura de búfer de entrada que depende del tipo de argumentos de entrada que se van a pasar al método de control. Para obtener más información sobre los argumentos de entrada de tipo que admite este IOCTL, vea la sección Comentarios más adelante en este tema.
  • InputBufferLength se establece en el tamaño, en bytes, del búfer de entrada proporcionado por InputBuffer.
  • OutputBufferLength proporciona el tamaño, en bytes, del búfer de salida proporcionado por OutputBuffer.
  • InternalDeviceIoControl se establece en FALSE.
  • El evento se establece en un puntero a un objeto de evento asignado por el autor de la llamada e inicializado.

Longitud del búfer de entrada

InputBufferLength se establece en el tamaño, en bytes, del búfer de entrada proporcionado por InputBuffer.

Búfer de salida

Establezca los parámetros de salida IoBuildDeviceIoControlRequest de la siguiente manera:

  • OutputBuffer proporciona un puntero a una estructura ACPI_EVAL_OUTPUT_BUFFER que contiene los argumentos de salida del método de control.
  • IoStatusBlock se establece en un puntero a una estructura IO_STATUS_BLOCK .

Longitud del búfer de salida

OutputBufferLength proporciona el tamaño, en bytes, del búfer de salida proporcionado por OutputBuffer.

Bloque de estado

Si la solicitud se realiza correctamente, IoStatusBlock-Status> se establece en STATUS_SUCCESS; de lo contrario, el miembro Status se establece en un código de error. Si el búfer de salida no es lo suficientemente grande como para contener el encabezado del búfer de salida, el miembro Status se establece en STATUS_BUFFER_TOO_SMALL. Si el búfer de salida es lo suficientemente grande como para contener el encabezado del búfer de salida, pero no es lo suficientemente grande como para contener todos los argumentos de salida del método de control, el miembro Status se establece en STATUS_BUFFER_OVERFLOW y OutputBuffer-Length> se establece en la longitud necesaria del búfer de salida.

Si la solicitud se realiza correctamente, el miembro IoStatusBlock-Information> se establece en el número de bytes que se devuelven en el búfer de salida; de lo contrario, el miembro Information se establece en cero.

Comentarios

Un controlador para un dispositivo puede usar IOCTL_ACPI_EVAL_METHOD_EX para evaluar de forma sincrónica un método de control compatible con un objeto secundario en el espacio de nombres del dispositivo. La ruta de acceso y el nombre del método de control proporcionado por esta solicitud deben ser la ruta de acceso completa y el nombre del método en el espacio de nombres ACPI o la ruta de acceso y el nombre del método en relación con el dispositivo al que se envía la solicitud. Por ejemplo, supongamos que un dispositivo denominado "ABCD" es un elemento secundario inmediato de la raíz de un espacio de nombres ACPI, que el dispositivo "ABCD" admite un dispositivo secundario denominado "CHLD" y que el dispositivo "CHLD" admite un método denominado "_FOO". En este caso, para evaluar el método "_FOO", un controlador envía una solicitud de evaluación al dispositivo "ABCD" y proporciona la ruta de acceso y el nombre "\ABCD". CHLD._FOO, que es la ruta de acceso completa y el nombre en el espacio de nombres ACPI, o la ruta de acceso y el nombre "CHLD._FOO", que es la ruta de acceso y el nombre relativos al dispositivo "ABCD" en el espacio de nombres ACPI.

IOCTL_ACPI_EVAL_METHOD_EX admite los siguientes tipos de estructuras de búfer de entrada:

ACPI_EVAL_INPUT_BUFFER_EX

ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_EX

ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING_EX

ACPI_EVAL_INPUT_BUFFER_COMPLEX_EX

Los argumentos de salida del método de control se devuelven en la estructura ACPI_EVAL_OUTPUT_BUFFER de longitud variable proporcionada por el puntero OutBuffer . El ACPI_EVAL_OUTPUT_BUFFER incluye una matriz de estructuras de longitud variable ACPI_METHOD_ARGUMENT , cada una de las cuales devuelve un argumento de salida.

Para obtener más información sobre cómo evaluar de forma sincrónica los métodos de control, vea Evaluar métodos de control ACPI de forma sincrónica.

Un controlador también puede usar una solicitud de IOCTL_ACPI_EVAL_METHOD para evaluar de forma sincrónica un método de control que es un objeto secundario inmediato de un dispositivo.

Para obtener información sobre cómo evaluar un método de control ACPI de forma asincrónica a partir de Windows Server 2008 y Windows Vista, consulta IOCTL_ACPI_ASYNC_EVAL_METHOD y IOCTL_ACPI_ASYNC_EVAL_METHOD_EX.

IOCTL_ACPI_EVAL_METHOD_EX solo se puede usar en irQL < DISPATCH_LEVEL.

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista y versiones posteriores de Windows.
Encabezado acpiioct.h (include Acpiioct.h)

Consulte también

ACPI_EVAL_INPUT_BUFFER_COMPLEX_EX

ACPI_EVAL_INPUT_BUFFER_EX

ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_EX

ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING_EX

ACPI_EVAL_OUTPUT_BUFFER

IOCTL_ACPI_ASYNC_EVAL_METHOD

IOCTL_ACPI_ASYNC_EVAL_METHOD_EX

IOCTL_ACPI_EVAL_METHOD