IOCTL_ACPI_EVAL_METHOD IOCTL (acpiioct.h)
Un controlador de un dispositivo puede usar la solicitud de control de dispositivos IOCTL_ACPI_EVAL_METHOD para evaluar de forma sincrónica un método de control ACPI compatible con el dispositivo. El controlador debe llamar a IoBuildDeviceIoControlRequest y pasar los siguientes parámetros de entrada y salida para compilar esta solicitud.
Código principal
Búfer de entrada
Establezca los parámetros de entrada IoBuildDeviceIoControlRequest de la siguiente manera:
- IoControlCode se establece en IOCTL_ACPI_EVAL_METHOD.
- 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 el tipo de argumentos de entrada 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 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 .
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 devueltos 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 para evaluar de forma sincrónica un método de control que admite el dispositivo. Por ejemplo, si el dispositivo se denomina "ABCD" en un espacio de nombres ACPI y el dispositivo "ABCD" admite un método denominado "_FOO", este IOCTL se puede usar para evaluar el método de control "_FOO" enviando la solicitud al dispositivo "ABCD" y proporcionando el nombre del método de control "_FOO".
IOCTL_ACPI_EVAL_METHOD admite los siguientes tipos de estructuras de búfer de entrada:
ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER
ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING
ACPI_EVAL_INPUT_BUFFER_COMPLEX
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 los métodos de control de forma sincrónica, vea Evaluar los métodos de control ACPI de forma sincrónica.
A partir de Windows Server 2008 y Windows Vista, un controlador también puede usar una solicitud de IOCTL_ACPI_EVAL_METHOD_EX para evaluar de forma sincrónica un método de control que no 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, consulte IOCTL_ACPI_ASYNC_EVAL_METHOD y IOCTL_ACPI_ASYNC_EVAL_METHOD_EX.
IOCTL_ACPI_EVAL_METHOD solo se puede usar en irQL < DISPATCH_LEVEL.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 2000 y versiones posteriores de Windows. |
Encabezado | acpiioct.h (include Acpiioct.h) |
Consulte también
ACPI_EVAL_INPUT_BUFFER_COMPLEX
ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER
ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING