Avaliando métodos de controle ACPI de forma síncrona
Artigo
Um driver de dispositivo pode usar as seguintes solicitações de controle de dispositivo para avaliar de forma síncrona os métodos de controle definidos no namespace ACPI de um dispositivo:
Essa solicitação avalia de forma síncrona um método de controle compatível com o dispositivo ou um objeto filho descendente do dispositivo para o qual a solicitação é enviada.
Chama IoCallDriver para enviar a solicitação para baixo na pilha do dispositivo.
Aguarda o gerente de E/S sinalizar ao driver que os drivers de nível inferior concluíram a solicitação.
Verifica o status da solicitação.
Verifica a validade dos argumentos de saída.
Processa os argumentos de saída que são retornados para o driver.
Conclui a solicitação.
Para criar uma solicitação, um driver chama IoBuildDeviceIoControlRequest e fornece os seguintes parâmetros:
IoControlCode é definido como IOCTL_ACPI_EVAL_METHOD ou 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. O driver ACPI dá suporte a métodos que não têm argumentos de entrada, que levam um único inteiro, que levam uma cadeia de caracteres ASCII ou que têm uma matriz personalizada de argumentos de entrada. Para obter mais informações sobre as estruturas de buffer de entrada com suporte, consulte Estruturas de buffer de entrada do método control.
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. O driver aguarda até que o gerente de E/S sinalize esse evento, o que indica que os drivers de nível inferior concluíram a solicitação.
OutputBuffer fornece um ponteiro para uma estrutura ACPI_EVAL_OUTPUT_BUFFER que contém os argumentos de saída do método de controle. Os argumentos de saída são específicos para um determinado método de controle. Para que um driver retorne qualquer saída, ele deve alocar um buffer grande o suficiente para manter todos os argumentos de saída.
IoStatusBlock é definido como uma estrutura IO_STATUS_BLOCK . Isso retorna o status da solicitação que foi definida pelos drivers de nível inferior.
Este módulo explica como usar CIM e WMI para fazer alterações usando os métodos. Os métodos disponíveis variam de acordo com o tipo de objeto. Descobrir e entender esses métodos é uma etapa importante na consulta e na manipulação das informações do repositório.