Compartilhar via


IOCTL_ACPI_EVAL_METHOD_EX IOCTL (acpiioct.h)

Um driver para um dispositivo pode usar a solicitação de controle de dispositivo IOCTL_ACPI_EVAL_METHOD_EX para avaliar de forma síncrona um método de controle ACPI compatível com um dispositivo filho no namespace do 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_EX.
  • 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 os argumentos de entrada de tipo 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 um ponteiro para 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_EX para avaliar de forma síncrona um método de controle compatível com um objeto filho no namespace do dispositivo. O caminho e o nome do método de controle fornecidos por essa solicitação devem ser o caminho totalmente qualificado e o nome do método no namespace ACPI ou o caminho e o nome do método em relação ao dispositivo ao qual a solicitação é enviada. Por exemplo, suponha que um dispositivo chamado 'ABCD' seja um filho imediato da raiz de um namespace ACPI, que o dispositivo 'ABCD' dá suporte a um dispositivo filho chamado 'CHLD', e que o dispositivo 'CHLD' dá suporte a um método chamado '_FOO'. Nesse caso, para avaliar o método '_FOO', um driver envia uma solicitação de avaliação para o dispositivo 'ABCD' e fornece o caminho e o nome '\ABCD. CHLD._FOO', que é o caminho e o nome totalmente qualificados no namespace acpi ou o caminho e o nome 'CHLD._FOO', que é o caminho e o nome relativos ao dispositivo 'ABCD' no namespace ACPI.

IOCTL_ACPI_EVAL_METHOD_EX dá suporte aos seguintes tipos de estruturas de buffer 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

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 das quais retorna 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.

Um driver também pode usar uma solicitação IOCTL_ACPI_EVAL_METHOD para avaliar de forma síncrona um método de controle que é 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_EX só podem ser usados em DISPATCH_LEVEL IRQL < .

Requisitos

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

Confira também

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