Compartilhar via


IOCTL_ACPI_EVAL_METHOD IOCTL (acpiioct.h)

Um driver para um dispositivo pode usar a solicitação de controle de dispositivo IOCTL_ACPI_EVAL_METHOD para avaliar de forma síncrona um método de controle ACPI compatível com o dispositivo. O driver deve chamar IoBuildDeviceIoControlRequest e passar os seguintes parâmetros de entrada e saída para criar essa solicitação.

Código principal

IRP_MJ_DEVICE_CONTROL

Buffer de entrada

Defina os parâmetros de entrada IoBuildDeviceIoControlRequest da seguinte maneira:

  • IoControlCode é definido como IOCTL_ACPI_EVAL_METHOD.
  • DeviceObject é definido como um ponteiro para o PDO (objeto de dispositivo físico) do dispositivo.
  • InputBuffer é definido como um ponteiro para uma estrutura de buffer de entrada que depende do tipo de argumentos de entrada a serem passados para o método de controle. Para obter mais informações sobre o tipo de argumentos de entrada compatíveis com esse IOCTL, consulte a seção Comentários mais adiante neste tópico.
  • InputBufferLength é definido como o tamanho, em bytes, do buffer de entrada fornecido pelo InputBuffer.
  • OutputBufferLength fornece o tamanho, em bytes, do buffer de saída fornecido pelo OutputBuffer.
  • InternalDeviceIoControl é definido como FALSE.
  • O evento é definido como um ponteiro para um objeto de evento alocado pelo chamador e inicializado.

Comprimento do buffer de entrada

InputBufferLength é definido como o tamanho, em bytes, do buffer de entrada fornecido pelo InputBuffer.

Buffer de saída

Defina os parâmetros de saída IoBuildDeviceIoControlRequest da seguinte maneira:

  • OutputBuffer fornece um ponteiro para uma estrutura ACPI_EVAL_OUTPUT_BUFFER que contém os argumentos de saída do método de controle.
  • IoStatusBlock é definido como uma estrutura IO_STATUS_BLOCK .

Comprimento do buffer de saída

OutputBufferLength fornece o tamanho, em bytes, do buffer de saída fornecido pelo OutputBuffer.

Bloco de status

Se a solicitação for bem-sucedida, IoStatusBlock-Status> será definido como STATUS_SUCCESS; caso contrário, o membro Status será definido como um código de erro. Se o buffer de saída não for grande o suficiente para conter o cabeçalho do buffer de saída, o membro Status será definido como STATUS_BUFFER_TOO_SMALL. Se o buffer de saída for grande o suficiente para conter o cabeçalho do buffer de saída, mas não for grande o suficiente para conter todos os argumentos de saída do método de controle, o membro Status será definido como STATUS_BUFFER_OVERFLOW e OutputBuffer-Length> será definido como o comprimento necessário do buffer de saída.

Se a solicitação for bem-sucedida, o membro IoStatusBlock-Information> será definido como o número de bytes retornados no buffer de saída; caso contrário, o membro Informações será definido como zero.

Comentários

Um driver para um dispositivo pode usar IOCTL_ACPI_EVAL_METHOD para avaliar de forma síncrona um método de controle compatível com o dispositivo. Por exemplo, se o dispositivo for chamado de 'ABCD' em um namespace ACPI e o dispositivo 'ABCD' der suporte a um método chamado '_FOO', esse IOCTL poderá ser usado para avaliar o método de controle '_FOO' enviando a solicitação para o dispositivo 'ABCD' e fornecendo o nome do método de controle '_FOO'.

IOCTL_ACPI_EVAL_METHOD dá suporte aos seguintes tipos de estruturas de buffer de entrada:

ACPI_EVAL_INPUT_BUFFER

ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER

ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING

ACPI_EVAL_INPUT_BUFFER_COMPLEX

Os argumentos de saída do método de controle são retornados na estrutura de ACPI_EVAL_OUTPUT_BUFFER de comprimento variável fornecida pelo ponteiro OutBuffer . O ACPI_EVAL_OUTPUT_BUFFER inclui uma matriz de estruturas de ACPI_METHOD_ARGUMENT de comprimento variável, cada uma retornando um argumento de saída.

Para obter mais informações sobre como avaliar de forma síncrona os métodos de controle, consulte Avaliando métodos de controle ACPI de forma síncrona.

A partir do Windows Server 2008 e do Windows Vista, um driver também pode usar uma solicitação IOCTL_ACPI_EVAL_METHOD_EX para avaliar de forma síncrona um método de controle que não é um objeto filho imediato de um dispositivo.

Para obter informações sobre como avaliar um método de controle ACPI de forma assíncrona começando no Windows Server 2008 e no Windows Vista, consulte IOCTL_ACPI_ASYNC_EVAL_METHOD e IOCTL_ACPI_ASYNC_EVAL_METHOD_EX.

IOCTL_ACPI_EVAL_METHOD só podem ser usados em DISPATCH_LEVEL IRQL < .

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 e versões posteriores do Windows.
Cabeçalho acpiioct.h (inclua Acpiioct.h)

Confira também

ACPI_EVAL_INPUT_BUFFER

ACPI_EVAL_INPUT_BUFFER_COMPLEX

ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER

ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING

ACPI_EVAL_OUTPUT_BUFFER

ACPI_METHOD_ARGUMENT

IOCTL_ACPI_ASYNC_EVAL_METHOD

IOCTL_ACPI_ASYNC_EVAL_METHOD_EX

IOCTL_ACPI_EVAL_METHOD_EX