PVIDEO_HW_FIND_ADAPTER función de devolución de llamada (video.h)

HwVidFindAdapter realiza la inicialización de datos específicos del controlador de miniporte y los dispositivos compatibles con el controlador de miniporte.

Sintaxis

PVIDEO_HW_FIND_ADAPTER PvideoHwFindAdapter;

VP_STATUS PvideoHwFindAdapter(
  PVOID HwDeviceExtension,
  PVOID HwContext,
  PWSTR ArgumentString,
  PVIDEO_PORT_CONFIG_INFO ConfigInfo,
  PUCHAR Again
)
{...}

Parámetros

HwDeviceExtension

Puntero al área de almacenamiento por dispositivo del controlador. Para obtener más información, consulte Extensiones de dispositivo.

HwContext

Es NULL y el controlador de miniporte debe omitirlo.

ArgumentString

Puntero a una cadena ASCII terminada en null que se origina con el usuario. Este puntero puede ser NULL.

ConfigInfo

Puntero a una estructura de VIDEO_PORT_CONFIG_INFO . El controlador de puerto de vídeo asigna memoria para e inicializa esta estructura con cualquier información de configuración conocida, como el número de bus de E/S del sistema y los valores que el controlador de miniporte estableció en la estructura de VIDEO_HW_INITIALIZATION_DATA .

Again

El controlador de miniporte debe omitirlo.

Valor devuelto

HwVidFindAdapter debe devolver uno de los siguientes códigos de estado:

Código devuelto Descripción
ERROR_DEV_NOT_EXIST Indica, para un bus reenumerable, que el controlador de miniporte no pudo encontrar el dispositivo.
ERROR_INVALID_PARAMETER Indica que el controlador de minipuerto no pudo configurar o inicializar correctamente el adaptador.
NO_ERROR Indica que se completó correctamente.

Comentarios

Cada controlador de miniporte de vídeo debe tener una función HwVidFindAdapter .

El controlador de puerto de vídeo hace lo siguiente antes de llamar a HwVidFindAdapter:

  • Asigna almacenamiento para el área de almacenamiento por adaptador del controlador de miniporte según el valor de HwDeviceExtensionSize que la función DriverEntry del controlador de miniporte especificada en la estructura de VIDEO_HW_INITIALIZATION_DATA y inicializa cero el almacenamiento asignado.
  • Asigna almacenamiento para una estructura de VIDEO_PORT_CONFIG_INFO y rellena toda la información disponible en función de la información proporcionada por el controlador de miniporte en VIDEO_HW_INITIALIZATION_DATA.
A continuación, el controlador de puerto de vídeo llama a la función HwVidFindAdapter del controlador de miniporte con punteros al área de almacenamiento por adaptador inicializada e información de configuración en los parámetros HwDeviceExtension y ConfigInfo , respectivamente.

La función HwVidFindAdapter para los dispositivos de un bus enumerable debe hacer lo siguiente:

  • Compruebe el tamaño de la estructura de VIDEO_PORT_CONFIG_INFO a la que ConfigInfo apunta para garantizar el control de versiones adecuado.
  • Llame a VideoPortGetAccessRanges para obtener las direcciones físicas relativas al bus a las que responderá el dispositivo. El administrador de PnP asigna estas direcciones. El controlador de minipuerto debe pasar NULL en los parámetros VendorId, DeviceId y Slot de VideoPortGetAccessRanges.
  • Para los controladores de miniporte que admiten varios tipos de dispositivo, determine el tipo de dispositivo que ha detectado el administrador de PnP. El controlador de minipuerto puede llamar a VideoPortGetBusData para obtener información de configuración de PCI.
  • Rellene cualquier información de configuración pertinente pero que falte en los miembros adecuados de la estructura de VIDEO_PORT_CONFIG_INFO con datos específicos del adaptador.
HwVidFindAdapter no debe intentar inicializar el dispositivo.

HwVidFindAdapter puede asignar recursos, como memoria y bloqueos, para su uso por el controlador de miniport. Esos recursos pueden ser específicos del dispositivo o pueden ser compartidos por varios dispositivos que admite el controlador de miniporte. Si HwVidFindAdapter devuelve cualquier valor distinto de NO_ERROR, debe liberar todos los recursos específicos del dispositivo antes de devolverlos. Para los recursos que se comparten entre varios dispositivos, HwVidFindAdapter debe mantener un recuento de referencias. Por ejemplo, el recuento de referencias podría indicar el número de llamadas anteriores a HwVidFindAdapter que se realizó correctamente. De este modo, si HwVidFindAdapter debe producir un error y determina que todas las llamadas anteriores a HwVidFindAdapter han producido un error, podría liberar los recursos compartidos.

Si se produce un error en HwVidFindAdapter cada vez que el controlador de puerto de vídeo llama, el sistema operativo podría descargar el controlador de minipuerto más adelante. En tal caso, los recursos que HwVidFindAdapter asignó pero que no liberaron se filtrarán.

Para un dispositivo en un bus reenumerable, como ISA, PnP sigue intentando iniciar el dispositivo, aunque es responsabilidad de HwVidFindAdapter determinar si el dispositivo está presente realmente. Si no se encuentra el dispositivo, HwVidFindAdapter debe devolver ERROR_DEV_NOT_EXIST.

HwVidFindAdapter también debe llamar a VideoPortSetRegistryParameters para almacenar información específica del adaptador en la clave HardwareInformation . El programa Mostrar usa esta información en Panel de control. Consulte Configuración de información de hardware en el Registro para obtener más información.

Según el adaptador y el valor AdapterInterfaceType en VIDEO_PORT_CONFIG_INFO, HwVidFindAdapter puede llamar a algunas de las siguientes funciones VideoPortXxx para obtener los datos de configuración relativos al bus necesarios y los intervalos de acceso asignados para comunicarse con el adaptador:

  • VideoPortGetBusData para obtener información de configuración específica del tipo de bus sobre un adaptador en un bus de E/S determinado.

  • VideoPortGetDeviceData para obtener información específica de VIDEO_DEVICE_DATA_TYPE del registro y llamar a HwVidQueryDeviceCallback para procesar esta información.

  • VideoPortGetRegistryParameters para obtener información de configuración del registro.

  • VideoPortGetAccessRanges para obtener direcciones de intervalos de acceso relativos al bus y posiblemente otros valores de configuración de hardware, y para reclamarlos en el registro para que lo use el controlador de un adaptador.

  • VideoPortVerifyAccessRanges para determinar si el controlador de miniporte puede reclamar la memoria de vídeo relativa al bus o los puertos de E/S para el adaptador; de lo contrario, un controlador cargado previamente ya ha reclamado el recurso en el Registro y HwVidFindAdapter debe intentar reclamar otros intervalos de acceso si es posible o no.

  • VideoPortGetDeviceBase para asignar cada dirección base relativa al bus y el tamaño del intervalo reclamados correctamente, como se describe en una estructura de VIDEO_ACCESS_RANGE , a direcciones lógicas de espacio del sistema . HwVidFindAdapter debe llamar correctamente a VideoPortVerifyAccessRanges o VideoPortGetAccessRanges para poder llamar a VideoPortGetDeviceBase.

Si el controlador no controla las interrupciones, HwVidFindAdapter debe establecer BusInterruptLevel y BusInterruptVector en la estructura de VIDEO_PORT_CONFIG_INFO en cero después de su llamada a VideoPortGetAccessRanges. Si ambos miembros son cero, el controlador de puerto de vídeo no conecta la interrupción del controlador de minipuerto. Al establecer explícitamente BusInterruptLevel y BusInterruptVector en cero en HwVidFindAdapter , se deshabilita el punto de entrada HwVidInterrupt , si existe, configurado por la rutina DriverEntry del controlador de miniporte.

HwVidFindAdapter no debe dejar un adaptador no admitido con su estado cambiado. Para los adaptadores VGA/SVGA, HwVidFindAdapter debe dejar el adaptador en un estado VGA y restaurar los registros extendidos que podrían haber modificado a su condición original.

HwVidFindAdapter debe ser paginable.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado video.h (incluya Video.h)

Consulte también

DriverEntry of Video Miniport Driver

DrvAssertMode

HwVidInterrupt

HwVidQueryDeviceCallback

HwVidQueryNamedValueCallback

VIDEO_HW_INITIALIZATION_DATA

VIDEO_PORT_CONFIG_INFO

VideoPortFreeDeviceBase

VideoPortGetAccessRanges

VideoPortGetBusData

VideoPortGetDeviceBase

VideoPortGetDeviceData

VideoPortGetRegistryParameters

VideoPortVerifyAccessRanges