Compartir a través de


Búsqueda y asignación de recursos de hardware

En este tema se describe cómo un controlador de Kernel-Mode Driver Framework (KMDF) o User-Mode controlador driver Framework (UMDF) a partir de la versión 2 asigna un recurso de memoria traducido (CmResourceTypeMemory) que recibe en su función de devolución de llamada EvtDevicePrepareHardware .

Un controlador UMDF 1.x también puede recibir este tipo de recurso en su método IPnpCallbackHardware2::OnPrepareHardware . Para obtener más información, consulta Buscar y asignar recursos de hardware en controladores UMDF 1.x.

El controlador recibe versiones sin procesar y traducidas de recursos de hardware en la lista de recursos del dispositivo en su función de devolución de llamada EvtDevicePrepareHardware . El controlador puede guardar la lista de recursos, que es válida hasta que el marco llame a la función de devolución de llamada EvtDeviceReleaseHardware del controlador.

Normalmente, el controlador llama a WdfCmResourceListGetCount desde su función de devolución de llamada EvtDevicePrepareHardware para determinar el número de descriptores de recursos en la lista de recursos traducidos y, a continuación, llama a WdfCmResourceListGetDescriptor en un bucle para identificar registros asignados a memoria, puertos de E/S e interrupciones.

Si a un controlador se le asigna un recurso de memoria traducido (CmResourceTypeMemory), debe asignar la dirección física a una dirección a través de la cual puede acceder a los registros del dispositivo.

Un controlador KMDF llama a MmMapIoSpace para asignar el intervalo de direcciones físicos especificado al espacio del sistema no paginado. A continuación, usa las rutinas de la biblioteca HAL para leer y escribir en los registros.

Un controlador UMDF llama a WdfDeviceMapIoSpace para asignar la dirección física a una dirección pseudo base que puede usar junto con las funciones de registro y acceso de puerto de WDF para leer y escribir en registros y puertos.

El controlador desasignación de los recursos llamando a MmUnmapIoSpace o WdfDeviceUnmapIoSpace desde su función de devolución de llamada EvtDeviceReleaseHardware .

No es necesario asignar recursos en el espacio de E/S (CmResourceTypePort, CmResourceTypeInterrupt, CmResourceTypeDma).

Si el controlador UMDF llama a WdfDeviceMapIoSpace, debe establecer la directiva UmdfDirectHardwareAccess INF en AllowDirectHardwareAccess.

Para ver un ejemplo que muestra cómo un controlador busca y asigna recursos de registro asignados a memoria, consulte Lectura y escritura en registros de dispositivos.