Criar um driver de cliente de notificação de hardware
Esta seção fornece diretrizes gerais sobre o desenvolvimento de um driver cliente de notificação de hardware que utiliza a extensão de classe KMDF fornecida pela Microsoft.
Crie um arquivo para a implementação do driver cliente que seja vinculado a Mshwnclxstub.lib e inclua os cabeçalhos hwn.h e hwnclx.h.
Defina instâncias das funções de retorno de chamada de extensão de classe de notificação de hardware e KMDF necessárias. Especificamente, você deve implementar e registrar essas funções de retorno de chamada, conforme mostrado no código de exemplo a seguir.
DRIVER_INITIALIZE DriverEntry; EVT_WDF_DRIVER_DEVICE_ADD HwnClientEvtDeviceAdd; HWN_CLIENT_INITIALIZE_DEVICE HwnClientInitializeDevice; HWN_CLIENT_UNINITIALIZE_DEVICE HwnClientUnInitializeDevice; HWN_CLIENT_QUERY_DEVICE_INFORMATION HwnClientQueryDeviceInformation; HWN_CLIENT_START_DEVICE HwnClientStartDevice; HWN_CLIENT_STOP_DEVICE HwnClientStopDevice; HWN_CLIENT_SET_STATE HwnClientSetState; HWN_CLIENT_GET_STATE HwnClientGetState;
Implemente a rotina DriverEntry , que é o ponto de entrada do driver do cliente e responsável pela inicialização. Para o driver do cliente de notificação de hardware, essa função deve lidar com o seguinte:
Chamar WDF_DRIVER_CONFIG_INIT para inicializar a estrutura de WDF_DRIVER_CONFIG do driver.
Chamando WdfDriverCreate para criar um objeto de driver de estrutura para o driver cliente.
Definir o conteúdo do HWN_CLIENT_REGISTRATION_PACKET, incluindo os ponteiros de função de retorno de chamada para uso pela extensão de classe. Para obter mais informações sobre as funções de retorno de chamada necessárias, consulte Referência de notificações de hardware.
Chamar HwNRegisterClient para registrar o driver cliente com a extensão de classe.
Implemente a função EVT_WDF_DRIVER_DEVICE_ADD , que é responsável por executar operações de inicialização de dispositivo quando o gerenciador PnP relata a existência de um dispositivo. Para o driver do cliente de notificação de hardware, essa função deve lidar com o seguinte:
Chamar HwNProcessAddDevicePreDeviceCreate, que fornece os retornos de chamada de preparação/liberação e entrada/saída do dispositivo necessários para o KMDF para fazer a transição do dispositivo para estados diferentes.
Chamar WdfDeviceCreate para criar um objeto de dispositivo de estrutura.
Chamando HwNProcessAddDevicePostDeviceCreate para criar filas de E/S.
Implemente a função de HWN_CLIENT_INITIALIZE_DEVICE definida, que é chamada pela extensão de classe para preparar o controlador de notificação de hardware para uso.
Implemente a função de HWN_CLIENT_UNINITIALIZE_DEVICE definida, que é chamada pela extensão de classe para não inicializar o controlador de notificação de hardware.
Implemente a função de HWN_CLIENT_QUERY_DEVICE_INFORMATION definida, que é chamada pela extensão de classe . Essa função é responsável por recuperar os atributos de um componente de notificação de hardware.
Implemente a função de HWN_CLIENT_START_DEVICE definida, que é chamada pela extensão de classe . Essa função é responsável por iniciar o controlador de notificação de hardware e por alocar recursos de ACPI para o driver cliente.
Implemente a função de HWN_CLIENT_STOP_DEVICE definida, que é chamada pela extensão de classe . Essa função é responsável por interromper o controlador de notificação de hardware e por liberar recursos de ACPI usados pelo driver do cliente.
Implemente a HWN_CLIENT_SET_STATE definida, que é chamada pela extensão de classe . Essa função é responsável por definir os estados do componente de notificação de hardware.
Implemente o HWN_CLIENT_GET_STATE definido, que é chamado pela extensão de classe . Essa função é responsável por obter os valores atuais dos componentes de notificação de hardware. Quando o buffer de entrada é NULL, o que significa que o usuário não especificou o estado de notificação de hardware específico, essa função deve retornar informações de estado para todos os componentes de notificação de hardware.