Função VideoPortSetTrappedEmulatorPorts (video.h)

Os drivers de miniporta compatíveis com VGA (SVGA) chamam a função VideoPortSetTrappedEmulatorPorts para alterar dinamicamente a lista de portas de E/S que estão presas quando uma VDM (monitor de vídeo) é executada no modo de tela inteira em um computador baseado em x86.

Sintaxe

VIDEOPORT_DEPRECATED VIDEOPORT_API VP_STATUS VideoPortSetTrappedEmulatorPorts(
       PVOID               HwDeviceExtension,
       ULONG               NumAccessRanges,
  [in] PVIDEO_ACCESS_RANGE AccessRange
);

Parâmetros

HwDeviceExtension

Ponteiro para a extensão de dispositivo do driver de miniport.

NumAccessRanges

Especifica o número de elementos na matriz AccessRange .

[in] AccessRange

Ponteiro para uma matriz de elementos VIDEO_ACCESS_RANGE . Cada elemento descreve um subconjunto adequado do EmulatorAccessEntries que o driver de miniporto configurou em VIDEO_PORT_CONFIG_INFO. Definir o membro RangeVisible de um elemento AccessRange como TRUE permite o acesso direto ao intervalo de portas de E/S pelo aplicativo MS-DOS de tela inteira. Definir um membro RangeVisible como FALSE faz com que INs, INSB/INSW/INSDs emitidos pelo aplicativo, OUTs e/ou OUTSB/OUTSW/OUTSDs para esse intervalo sejam interceptados e encaminhados para a função SvgaHwIoPortXxx do driver de miniporte correspondente para validação.

A matriz AccessRange passada para VideoPortSetTrappedEmulatorPorts deve ser um subconjunto adequado dos intervalos de portas de E/S que a função HwVidFindAdapter configurou na matriz EmulatorAccessEntries da estrutura VIDEO_PORT_CONFIG_INFO . Todos os intervalos de portas de E/S na matriz de intervalos de acesso que não estão incluídos na matriz EmulatorAccessEntries são presos e refletidos no VDD do modo de usuário.

Retornar valor

VideoPortSetTrappedEmulatorPorts retornará NO_ERROR se tiver alterado com êxito as portas presas. Caso contrário, ele retornará ERROR_INVALID_PARAMETER.

Comentários

Por padrão, o AccessRange de portas de E/S que os aplicativos MS-DOS de tela inteira podem acessar diretamente não inclui nenhum dos elementos de matriz de intervalo de acesso que descrevem intervalos de portas de E/S que também têm elementos correspondentes na matriz EmulatorAccessEntries da estrutura VIDEO_PORT_CONFIG_INFO . Ou seja, os intervalos de portas de E/S com entradas de acesso de emulador correspondentes são, por padrão, conectados às funções SvgaHwIoPortXxx do driver de miniport para que as instruções emitidas pelo aplicativo sejam encaminhadas para as funções SvgaHwIoPortXxx para validação.

Um driver de miniporto SVGA compatível com VGA pode habilitar e desabilitar intervalos de portas de E/S conforme necessário com chamadas para VideoPortSetTrappedEmulatorPorts. Os intervalos de portas habilitados permitem que um aplicativo MS-DOS de tela inteira acesse essas portas de E/S diretamente, sem ter as instruções de assembly emitidas pelo aplicativo presas e encaminhadas para as funções SvgaHwIoPortXxx do driver de miniporto para validação primeiro. O acesso direto à porta de E/S para esse aplicativo fornece ao usuário tempos de resposta de E/S de vídeo mais rápidos.

VideoPortSetTrappedEmulatorPorts verifica a matriz de parâmetros AccessRange do primeiro para o último, habilitando e desabilitando portas de E/S conforme indicado em cada elemento. Observe que um intervalo de portas habilitadas (o membro RangeVisible definido como TRUE) pode ser desabilitado novamente na mesma chamada se o driver de miniporto incluir uma descrição duplicada do mesmo intervalo com o membro RangeVisible definido como FALSE. Observe também que um driver de miniporte pode habilitar uma ampla gama de portas de E/S no elemento inicial da matriz AccessRange e desabilitar seletivamente subranges de portas em elementos de matriz subsequentes quando chama VideoPortSetTrappedEmulatorPorts.

Todos os aplicativos MS-DOS de tela inteira usam o mesmo IOPM (mapa de permissões de E/S) em computadores baseados em x86 e, portanto, o mesmo conjunto de portas de E/S habilitadas ou desabilitadas. Em cada comutador para um aplicativo de tela inteira, a função HwVidStartIO de um driver de miniporto compatível com VGA é chamada com o IOCTL_VIDEO_ENABLE_VDM VRP. Em seguida, o driver de miniporte deve reinicializar um conjunto padrão de portas de E/S diretamente acessíveis, que podem incluir todas as portas na matriz EmulatorAccessEntries .

Embora fornecer aplicativos MS-DOS em tela inteira em computadores baseados em x86 acesso direto às portas de vídeo torna as operações de vídeo iniciadas pelo aplicativo mais rapidamente, cada driver de miniporte SVGA compatível com VGA deve continuar a interceptar um subconjunto de portas de E/S críticas para impedir que esse aplicativo pendure o computador. Em particular, esses drivers de miniporte devem sempre interceptar a E/S do aplicativo para o sequenciador de adaptador compatível com VGA e registros de saída diversos. Esse driver de miniporte também deve interceptar e validar a E/S direta emitida pelo aplicativo que possa fazer com que o computador seja travado para qualquer subconjunto adicional dependente de adaptador de portas de E/S.

Chamar VideoPortSetTrappedEmulatorPorts novamente e redefinir o membro RangeVisible de um elemento AccessRange para FALSE faz com que as instruções emitidas pelo aplicativo para esse intervalo sejam encaminhadas para a função SvgaHwIoPortXxx do driver de miniporte correspondente.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível no Windows 2000 e versões posteriores dos sistemas operacionais Windows.
Plataforma de Destino Área de Trabalho
Cabeçalho video.h (inclua Video.h)
Biblioteca Videoprt.lib
DLL Videoprt.sys
IRQL PASSIVE_LEVEL

Confira também

EMULATOR_ACCESS_ENTRY

HwVidFindAdapter

HwVidStartIO

VIDEO_ACCESS_RANGE

VIDEO_PORT_CONFIG_INFO

VideoPortSynchronizeExecution