Función VideoPortSetTrappedEmulatorPorts (video.h)
Los controladores de minipuerto compatibles con VGA (SVGA) llaman a la función VideoPortSetTrappedEmulatorPorts para cambiar dinámicamente la lista de puertos de E/S que se capturan cuando un VDM (monitor de visualización de vídeo) se ejecuta en modo de pantalla completa en una máquina basada en x86.
Sintaxis
VIDEOPORT_DEPRECATED VIDEOPORT_API VP_STATUS VideoPortSetTrappedEmulatorPorts(
PVOID HwDeviceExtension,
ULONG NumAccessRanges,
[in] PVIDEO_ACCESS_RANGE AccessRange
);
Parámetros
HwDeviceExtension
Puntero a la extensión del dispositivo del controlador de minipuerto.
NumAccessRanges
Especifica el número de elementos de la matriz AccessRange .
[in] AccessRange
Puntero a una matriz de elementos VIDEO_ACCESS_RANGE . Cada elemento describe un subrango adecuado de emulatorAccessEntries que el controlador de miniporte configuró en VIDEO_PORT_CONFIG_INFO. Establecer el miembro RangeVisible de un elemento AccessRange en TRUE permite el acceso directo al intervalo de puertos de E/S mediante la aplicación MS-DOS de pantalla completa. Si se establece un miembro RangeVisible en FALSE, inSB/INSW/INSDs, OUTs o OUTSB/OUTSW/OUTSDemitidos por la aplicación a ese intervalo se interceptará y reenviará a la función SvgaHwIoPortXxx del controlador de miniport correspondiente para la validación.
La matriz AccessRange que se pasa a VideoPortSetTrappedEmulatorPorts debe ser un subconjunto adecuado de los intervalos de puertos de E/S que la función HwVidFindAdapter configuró en la matriz EmulatorAccessEntries de la estructura VIDEO_PORT_CONFIG_INFO . Los intervalos de puertos de E/S de la matriz de intervalos de acceso que no se incluyen en la matriz EmulatorAccessEntries se capturan y reflejan en el VDD en modo de usuario.
Valor devuelto
VideoPortSetTrappedEmulatorPorts devuelve NO_ERROR si cambió correctamente los puertos atrapados. De lo contrario, devuelve ERROR_INVALID_PARAMETER.
Comentarios
De forma predeterminada, accessRange de puertos de E/S a los que las aplicaciones MS-DOS de pantalla completa pueden tener acceso directamente no incluye ninguno de los elementos de la matriz de intervalos de acceso que describen los intervalos de puertos de E/S que también tienen los elementos correspondientes en la matriz EmulatorAccessEntries de la estructura VIDEO_PORT_CONFIG_INFO . Es decir, los intervalos de puertos de E/S con las entradas de acceso del emulador correspondientes se enlazan de forma predeterminada a las funciones SvgaHwIoPortXxx del controlador de miniport, por lo que las instrucciones emitidas por la aplicación se reenvía a las funciones SvgaHwIoPortXxx para la validación.
Un controlador SVGA compatible con VGA puede habilitar y deshabilitar intervalos de puertos de E/S según sea necesario con llamadas a VideoPortSetTrappedEmulatorPorts. Los intervalos de puertos habilitados permiten que una aplicación MS-DOS de pantalla completa acceda directamente a esos puertos de E/S, sin tener las instrucciones de ensamblado emitidas por la aplicación atrapados y reenviados a las funciones SvgaHwIoPortXxx del controlador de minipuerto para la validación en primer lugar. El acceso directo al puerto de E/S para esta aplicación proporciona al usuario tiempos de respuesta de E/S de vídeo más rápidos.
VideoPortSetTrappedEmulatorPorts examina la matriz de parámetros AccessRange del primer elemento al último, habilitando y deshabilitando los puertos de E/S como se indica en cada elemento. Tenga en cuenta que un intervalo de puertos habilitados (el miembro RangeVisible establecido en TRUE) se puede deshabilitar de nuevo en la misma llamada si el controlador de miniporte incluye una descripción duplicada del mismo intervalo con el miembro RangeVisible establecido en FALSE. Tenga en cuenta también que un controlador de minipuerto puede habilitar una amplia gama de puertos de E/S en el elemento inicial de la matriz AccessRange y deshabilitar selectivamente los subrangos de puertos en los elementos de matriz posteriores cuando llama a VideoPortSetTrappedEmulatorPorts.
Todas las aplicaciones ms-DOS de pantalla completa usan el mismo mapa de permisos de E/S (IOPM) en máquinas basadas en x86 y, por lo tanto, el mismo conjunto de puertos de E/S habilitados o deshabilitados. En cada conmutador a una aplicación de pantalla completa, se llama a una función HwVidStartIO del controlador de miniporte compatible con VGA con la IOCTL_VIDEO_ENABLE_VDM VRP. Después, el controlador de minipuerto debe reinicializar un conjunto predeterminado de puertos de E/S accesibles directamente, que puede incluir cualquier puerto en la matriz EmulatorAccessEntries .
Aunque proporcionar a las aplicaciones MS-DOS de pantalla completa en máquinas basadas en x86 acceso directo a los puertos de vídeo hace que las operaciones de vídeo iniciadas por la aplicación sean más rápidas, todos los controladores SVGA compatibles con VGA deben seguir interceptando un subconjunto de puertos de E/S críticos para evitar que dicha aplicación bloquee la máquina. En concreto, estos controladores de minipuerto siempre deben interceptar la E/S de aplicación al secuenciador de adaptadores compatible con VGA y registros de salida varios. Este miniportador también debe interceptar y validar la E/S directa emitida por la aplicación que podría hacer que la máquina se bloquee para cualquier subconjunto adicional dependiente del adaptador de puertos de E/S.
Llamar de nuevo a VideoPortSetTrappedEmulatorPorts y restablecer el miembro RangeVisible de un elemento AccessRange en FALSE hace que las instrucciones emitidas por la aplicación para ese intervalo se reenvíen a la función SvgaHwIoPortXxx del controlador de miniport correspondiente.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Disponible en Windows 2000 y versiones posteriores de los sistemas operativos Windows. |
Plataforma de destino | Escritorio |
Encabezado | video.h (incluir Video.h) |
Library | Videoprt.lib |
Archivo DLL | Videoprt.sys |
IRQL | PASSIVE_LEVEL |