IOCTL_ACPI_ASYNC_EVAL_METHOD_EX IOCTL (acpiioct.h)
Un controlador de un dispositivo puede usar la solicitud de control de dispositivo IOCTL_ACPI_ASYNC_EVAL_METHOD_EX para evaluar de forma asincrónica un método de control ACPI compatible con un dispositivo secundario del dispositivo. El controlador debe llamar a IoBuildDeviceIoControlRequest y pasar los siguientes parámetros de entrada y salida para compilar esta solicitud.
Establezca los parámetros de entrada IoBuildDeviceIoControlRequest de la siguiente manera:
- IoControlCode se establece en IOCTL_ACPI_ASYNC_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 NULL.
InputBufferLength se establece en el tamaño, en bytes, del búfer de entrada proporcionado por InputBuffer.
Establezca los parámetros de salida IoBuildDeviceIoControlRequest de la siguiente manera:
- OutputBuffer proporciona un puntero a una estructura de ACPI_EVAL_OUTPUT_BUFFER que contiene los argumentos de salida del método de control.
- IoStatusBlock se establece en una estructura de IO_STATUS_BLOCK .
OutputBufferLength proporciona el tamaño, en bytes, del búfer de salida proporcionado por OutputBuffer.
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 devueltos en el búfer de salida; de lo contrario, el miembro Information se establece en cero.
Un controlador de un dispositivo puede usar IOCTL_ACPI_ASYNC_EVAL_METHOD_EX para evaluar de forma asincró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 relativo al 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_ASYNC_EVAL_METHOD_EX admite los siguientes tipos de estructuras de búfer de entrada:
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 ACPI_METHOD_ARGUMENT de longitud variable, cada una de las cuales devuelve un argumento de salida.
Para obtener información sobre cómo evaluar un método de control ACPI de forma sincrónica, vea IOCTL_ACPI_EVAL_METHOD, IOCTL_ACPI_EVAL_METHOD_EX y Evaluación de métodos de control ACPI de forma sincrónica.
IOCTL_ACPI_ASYNC_EVAL_METHOD_EX solo se puede usar en IRQL <= DISPATCH_LEVEL.
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista y versiones posteriores de Windows. |
Encabezado | acpiioct.h (include Acpiioct.h) |
ACPI_EVAL_INPUT_BUFFER_COMPLEX_EX
ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_EX