VideoPortSetTrappedEmulatorPorts 함수(video.h)

VGA 호환(SVGA) 미니포트 드라이버는 VideoPortSetTrappedEmulatorPorts 함수를 호출하여 x86 기반 컴퓨터에서 VDM(비디오 디스플레이 모니터)이 전체 화면 모드로 실행될 때 트래핑되는 I/O 포트 목록을 동적으로 변경합니다.

구문

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

매개 변수

HwDeviceExtension

미니포트 드라이버의 디바이스 확장에 대한 포인터입니다.

NumAccessRanges

AccessRange 배열의 요소 수를 지정합니다.

[in] AccessRange

VIDEO_ACCESS_RANGE 요소 배열에 대한 포인터입니다. 각 요소는 미니포트 드라이버가 VIDEO_PORT_CONFIG_INFO 설정한 EmulatorAccessEntries의 적절한 하위 범위를 설명합니다. AccessRange 요소의 RangeVisible 멤버를 TRUE로 설정하면 전체 화면 MS-DOS 애플리케이션에서 I/O 포트 범위에 직접 액세스할 수 있습니다. RangeVisible 멤버를 FALSE로 설정하면 애플리케이션에서 발급한 IN, INSB/INSW/INSD, OUT및/또는 OUTSB/OUTSW/OUTSD가 해당 범위로 트래핑되어 유효성 검사를 위해 해당 미니포트 드라이버 SvgaHwIoPortXxx 함수로 전달됩니다.

VideoPortSetTrappedEmulatorPorts에 전달된 AccessRange 배열은 HwVidFindAdapter 함수가 VIDEO_PORT_CONFIG_INFO 구조체의 EmulatorAccessEntries 배열에 설정한 I/O 포트 범위의 적절한 하위 집합이어야 합니다. 에뮬레이터AccessEntries 배열에 포함되지 않은 액세스 범위 배열의 모든 I/O 포트 범위는 트래핑되어 사용자 모드 VDD에 반영됩니다.

반환 값

VideoPortSetTrappedEmulatorPorts는 트래핑된 포트를 성공적으로 변경한 경우 NO_ERROR 반환합니다. 그렇지 않으면 ERROR_INVALID_PARAMETER 반환합니다.

설명

기본적으로 전체 화면 MS-DOS 애플리케이션이 직접 액세스할 수 있는 I/O 포트의 AccessRange에는 VIDEO_PORT_CONFIG_INFO 구조의 EmulatorAccessEntries 배열에도 해당 요소가 있는 I/O 포트 범위를 설명하는 액세스 범위 배열 요소가 포함되어 있지 않습니다. 즉, 해당 에뮬레이터 액세스 항목이 있는 I/O 포트 범위는 기본적으로 미니포트 드라이버의 SvgaHwIoPortXxx 함수에 연결되므로 애플리케이션에서 발급한 지침이 유효성 검사를 위해 SvgaHwIoPortXxx 함수로 전달됩니다.

VGA 호환 SVGA 미니포트 드라이버는 VideoPortSetTrappedEmulatorPorts에 대한 호출을 사용하여 필요에 따라 I/O 포트 범위를 사용하거나 사용하지 않도록 설정할 수 있습니다. 활성화된 포트 범위를 사용하면 애플리케이션에서 발급한 어셈블리 지침이 먼저 유효성 검사를 위해 미니포트 드라이버의 SvgaHwIoPortXxx 함수에 트래핑되고 전달되지 않고도 전체 화면 MS-DOS 애플리케이션이 해당 I/O 포트에 직접 액세스할 수 있습니다. 이러한 애플리케이션에 대한 직접 I/O 포트 액세스는 사용자에게 더 빠른 비디오 I/O 응답 시간을 제공합니다.

VideoPortSetTrappedEmulatorPorts 는 첫 번째 요소에서 마지막 요소까지 AccessRange 매개 변수 배열을 검사하여 각 요소에 지시된 대로 I/O 포트를 사용하도록 설정하고 사용하지 않도록 설정합니다. 미니포트 드라이버에 RangeVisible 멤버가 FALSE로 설정된 동일한 범위에 대한 중복 설명이 포함된 경우 활성화된 포트 범위(TRUE로 설정된 RangeVisible 멤버)를 동일한 호출에서 다시 사용하지 않도록 설정할 수 있습니다. 또한 미니포트 드라이버는 AccessRange 배열의 초기 요소에서 광범위한 I/O 포트를 사용하도록 설정하고 VideoPortSetTrappedEmulatorPorts를 호출할 때 후속 배열 요소에서 포트의 하위 범위를 선택적으로 사용하지 않도록 설정할 수 있습니다.

모든 전체 화면 MS-DOS 애플리케이션은 x86 기반 컴퓨터에서 동일한 IOPM(I/O 권한 맵)을 사용하므로 사용하거나 사용하지 않도록 설정된 동일한 I/O 포트 집합을 사용합니다. 이러한 전체 화면 애플리케이션으로 전환할 때마다 VGA 호환 미니포트 드라이버의 HwVidStartIO 함수가 IOCTL_VIDEO_ENABLE_VDM VRP를 사용하여 호출됩니다. 그런 다음 미니포트 드라이버는 EmulatorAccessEntries 배열에 모든 포트를 포함할 수 있는 직접 액세스할 수 있는 I/O 포트의 기본 집합을 다시 초기화해야 합니다.

x86 기반 컴퓨터에서 전체 화면 MS-DOS 애플리케이션을 비디오 포트에 직접 액세스하면 애플리케이션 시작 비디오 작업이 더 빨라지지만 모든 VGA 호환 SVGA 미니포트 드라이버는 이러한 애플리케이션이 머신을 중단하지 않도록 중요한 I/O 포트의 하위 집합을 계속 트래핑해야 합니다. 특히 이러한 미니포트 드라이버는 항상 애플리케이션 I/O를 VGA 호환 어댑터 시퀀서 및 기타 출력 레지스터에 트래핑해야 합니다. 또한 이러한 미니포트 드라이버는 애플리케이션에서 발급한 직접 I/O를 트래핑하고 유효성을 검사해야 하며, 이로 인해 I/O 포트의 추가 어댑터 종속 하위 집합에 대해 컴퓨터가 중단될 수 있습니다.

VideoPortSetTrappedEmulatorPorts를 다시 호출하고 AccessRange 요소의 RangeVisible 멤버를 FALSE로 다시 설정하면 해당 범위에 대한 애플리케이션에서 발급한 지침이 해당 미니포트 드라이버 SvgaHwIoPortXxx 함수로 전달됩니다.

요구 사항

   
지원되는 최소 클라이언트 Windows 2000 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다.
대상 플랫폼 데스크톱
헤더 video.h(Video.h 포함)
라이브러리 Videoprt.lib
DLL Videoprt.sys
IRQL PASSIVE_LEVEL

참고 항목

EMULATOR_ACCESS_ENTRY

HwVidFindAdapter

HwVidStartIO

VIDEO_ACCESS_RANGE

VIDEO_PORT_CONFIG_INFO

VideoPortSynchronizeExecution