Localizando e mapeando recursos de hardware

Este tópico descreve como um driver KMDF (Kernel-Mode Driver Framework) ou um driver UMDF (User-Mode Driver Framework) começando na versão 2 mapeia um recurso de memória traduzido (CmResourceTypeMemory) que ele recebe em sua função de retorno de chamada EvtDevicePrepareHardware .

Um driver UMDF 1.x também pode receber esse tipo de recurso em seu método IPnpCallbackHardware2::OnPrepareHardware . Para obter mais informações, consulte Localizando e mapeando recursos de hardware em drivers UMDF 1.x.

O driver recebe versões brutas e traduzidas de recursos de hardware na lista de recursos do dispositivo em sua função de retorno de chamada EvtDevicePrepareHardware . O driver pode salvar a lista de recursos, que é válida até que a estrutura chame a função de retorno de chamada EvtDeviceReleaseHardware do driver.

Normalmente, o driver chama WdfCmResourceListGetCount de sua função de retorno de chamada EvtDevicePrepareHardware para determinar o número de descritores de recursos na lista de recursos traduzidos e, em seguida, chama WdfCmResourceListGetDescriptor em um loop para identificar registros mapeados em memória, portas de E/S e interrupções.

Se um driver receber um recurso de memória traduzida (CmResourceTypeMemory), ele deverá mapear o endereço físico para um endereço por meio do qual ele pode acessar registros de dispositivo.

Um driver KMDF chama MmMapIoSpace para mapear o intervalo de endereços físicos fornecido para o espaço do sistema nãopagado. Em seguida, ele usa as Rotinas da Biblioteca HAL para ler e gravar em registros.

Um driver UMDF chama WdfDeviceMapIoSpace para mapear o endereço físico para um endereço pseudo-base que ele pode usar em conjunto com as Funções de Acesso de Porta/Registro do WDF para ler e gravar em registros e portas.

O driver cancela omaps dos recursos chamando MmUnmapIoSpace ou WdfDeviceUnmapIoSpace de sua função de retorno de chamada EvtDeviceReleaseHardware .

Você não precisa mapear recursos no espaço de E/S (CmResourceTypePort, CmResourceTypeInterrupt, CmResourceTypeDma).

Se o driver UMDF chamar WdfDeviceMapIoSpace, você deverá definir a diretiva INF UmdfDirectHardwareAccess como AllowDirectHardwareAccess.

Para obter um exemplo que mostra como um driver localiza e mapeia recursos de registro mapeados em memória, consulte Leitura e gravação em registros de dispositivo.