다음을 통해 공유


VIDEO_ACCESS_RANGE 구조체(video.h)

VIDEO_ACCESS_RANGE 구조는 비디오 어댑터에 대한 디바이스 I/O 포트 또는 메모리 범위를 정의합니다. 모든 미니포트 드라이버의 HwVidFindAdapter 함수는 미니포트 드라이버가 지원하는 각 비디오 어댑터에 대해 액세스 범위 배열이라고 하는 VIDEO_ACCESS_RANGE 형식 요소 배열을 설정해야 합니다.

VGA 호환 미니포트 드라이버의 경우 VIDEO_ACCESS_RANGE 전체 화면 MS-DOS 애플리케이션에서 I/O 포트에 대한 직접 액세스를 사용하거나 사용하지 않도록 설정하는 VideoPortSetTrappedEmulatorPorts 전달되는 배열의 요소를 정의합니다.

통사론

typedef struct _VIDEO_ACCESS_RANGE {
  PHYSICAL_ADDRESS RangeStart;
  ULONG            RangeLength;
  UCHAR            RangeInIoSpace;
  UCHAR            RangeVisible;
  UCHAR            RangeShareable;
  UCHAR            RangePassive;
} VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE;

회원

RangeStart

VideoPortVerifyAccessRanges 전달되거나 VideoPortGetAccessRanges반환된 액세스 범위 배열의 요소에 대한 메모리 또는 I/O 포트 범위의 버스 상대 기준 주소를 지정합니다.

VideoPortSetTrappedEmulatorPorts전달될 배열에 대한 I/O 포트 범위의 버스 상대 기준 주소를 지정합니다.

RangeLength

범위의 I/O 포트 수 또는 크기(바이트)를 지정합니다.

RangeInIoSpace

범위가 I/O 공간인지 아니면 메모리 공간에 있는지를 지정합니다. TRUE(1)의 값은 범위가 I/O 공간에 있음을 나타냅니다. 값이 FALSE(0)이면 범위가 메모리 공간에 있음을 나타냅니다.

RangeVisible

미니포트 드라이버의 HwVidFindAdapter 함수가 액세스 범위 배열을 설정하는 경우 무시됩니다.

VGA 호환 미니포트 드라이버에서 TRUE 설정되고 전체 화면 MS-DOS 애플리케이션에서 I/O 포트 범위에 직접 액세스할 수 있도록 videoPortSetTrappedEmulatorPorts 전달됩니다. FALSE 설정하면 애플리케이션에서 발급한 지침이 계속 트래핑되어 유효성 검사를 위해 미니포트 드라이버의 SvgaHwIoXxx 함수로 전달됩니다.

RangeShareable

이 요소에서 설명하는 액세스 범위를 다른 드라이버 및/또는 디바이스와 공유하거나 범위를 공유할 수 없는 경우 FALSE 경우 TRUE 설정됩니다.

VideoPortSetTrappedEmulatorPorts에서 무시됩니다.

RangePassive

디바이스가 실제로 포트를 사용하는지 여부를 나타냅니다. 이 멤버의 값은 다음 표에 나와 있습니다.

의미
VIDEO_RANGE_PASSIVE_DECODE 디바이스는 포트를 디코딩하지만 드라이버는 포트를 사용하지 않습니다.
VIDEO_RANGE_10_BIT_DECODE 디바이스는 포트 주소의 10비트 디코딩합니다.

발언

미니포트 드라이버는 DriverEntry 또는 HwVidLegacyResources 함수에서 레거시 리소스를 클레임해야 합니다.

그렇지 않으면 미니포트 드라이버의 HwVidFindAdapter 함수는 어댑터의 PCI 리소스에 대한 액세스 범위 배열을 설정합니다. VideoPortGetAccessRanges 반환된 정보를 사용할 수 있습니다. 대안으로, 미니포트 드라이버 제공 HwVidQueryDeviceCallback 함수를 사용하여 VideoPortGetDeviceData 호출하거나 미니포트 드라이버 제공 HwVidQueryNamedValueCallback 함수로 videoPortGetRegistryParameters 사용하여 레지스트리에서 검색된 정보를 사용할 수 있습니다. 이러한 VideoPortXxx 호출해도 버스 상대 액세스 범위 값이 제공되지 않는 경우 HwVidFindAdapter 드라이버 제공 버스 상대 기본값을 사용하여 액세스 범위 요소를 설정할 수 있습니다.

레지스트리에서 액세스 범위 클레임

미니포트 드라이버는 VideoPortGetDeviceData, VideoPortGetAccessRanges가져오거나 미니포트 드라이버에서 기본값으로 제공된 액세스 범위로 VideoPortVerifyAccessRanges 호출해야 합니다. VideoPortVerifyAccessRanges 이러한 액세스 범위 배열에 대한 NO_ERROR 반환하는 경우 HwVidFindAdapter 또는 HwVidQueryDeviceCallback 함수는 VideoPortGetDeviceBase 사용하여 범위를 매핑하고 반환된 매핑된 논리 주소를 사용하여 어댑터에 액세스할 수 있습니다.

videoPortGetAccessRanges 성공적으로 호출하면 호출자에 대한 레지스트리에서 반환된 버스 상대 액세스 범위도 클레임됩니다. 미니포트 드라이버가 반환된 값을 수정하는 경우 수정되지 않은 요소를 포함하여 모든 액세스 범위가 있는 VideoPortVerifyAccessRanges 호출해야 합니다. 특정 비디오 어댑터에 대한 videoPortGetAccessRanges 또는 VideoPortVerifyAccessRanges 각 호출은 레지스트리에서 호출자의 클레임된 하드웨어 리소스를 덮어씁니다.

미니포트 드라이버는 VideoPortVerifyAccessRanges 또는 VideoPortGetAccessRanges NO_ERROR 반환하지 않는 범위를 사용하려고 시도해서는 안 됩니다.

어댑터와 통신하기 위해 액세스 범위를 매핑하는

미니포트 드라이버가 어댑터에 대한 레지스트리에서 리소스를 요청하면 HAL이 모든 버스 상대 디바이스 주소를 시스템 공간다시 매핑할 수 있으므로 버스 상대 주소를 사용하여 어댑터에 액세스하거나 구성할 수 없습니다.

미니포트 드라이버의 HwVidFindAdapter 함수는 VideoPortGetDeviceBase 호출하여 액세스 범위에 대한 매핑된 논리 주소를 가져와야 합니다. 그런 다음 미니포트 드라이버는 반환된 매핑된 논리 범위 주소를 VideoPortRead/WritePortXxx 전달하여 비디오 어댑터와 통신하여 I/O 공간의 디바이스 메모리에 액세스하거나 VideoPortRead/WriteRegister Xxx메모리 공간의 디바이스 메모리에 액세스할 수 있습니다.

액세스 범위가 공유 가능한지 여부를 결정합니다.

다음 지침에 따라 액세스 범위를 공유할 수 있는지 여부를 확인합니다.
  • 이 드라이버에서 메모리 또는 I/O 포트 범위를 "소유"해야 하거나 다른 드라이버가 이 범위에 액세스하면 문제가 발생할 수 있는 경우 RangeSharable FALSE 설정합니다.
  • 범위를 협력 디바이스 드라이버와 공유할 수 있는 경우 RangeSharable TRUE 설정합니다.
모든 VGA 기능을 구현하는 SVGA 미니포트 드라이버(레지스트리에서 VgaCompatible 1로 설정됨)는 시스템 VGA 드라이버가 로드되지 않도록 해당 액세스 범위를 공유할 수 없는 것으로 주장해야 합니다. 반면, 레지스트리에서 VgaCompatible 0으로 설정한 S3 또는 XGA와 같은 어댑터용 미니포트 드라이버는 시스템 VGA 드라이버와 공유하는 모든 리소스를 공유 가능한 것으로 주장해야 합니다.

그러나 통과 IOCTL로 작동하고 모든 VGA 또는 SVGA 카드에 연결할 수 있는 카드용 미니포트 드라이버는 시스템 VGA 포트 또는 메모리 범위를 사용하지 않아야 합니다. 이 경우 이러한 드라이버는 레지스트리에서 VGA 액세스 범위를 클레임하려고 시도해서는 안 됩니다. 이러한 미니포트 드라이버에서 VGA 리소스를 클레임하려는 시도는 컴퓨터의 모든 SVGA 카드 드라이버가 이러한 액세스 범위를 공유할 수 없다고 주장하기 때문에 리소스 충돌을 일으킬 수 있습니다.

VideoPortSetTrappedEmulatorPorts에 I/O 포트 범위 요소 전달

x86 기반 컴퓨터의 VGA 호환 미니포트 드라이버가 RangeVisible 멤버를 명시적으로 TRUE 다시 설정하고 하나 이상의 I/O 포트 범위를 사용하도록 설정하기 위해 VideoPortSetTrappedEmulatorPorts 호출하지 않는 한 I/O 포트 범위를 설명하는 모든 VIDEO_ACCESS_RANGE 형식 배열 요소는 보이지 않는 것으로 간주됩니다. VideoPortSetTrappedEmulatorPorts 입력 배열의 RangeSharable 멤버를 무시합니다.

VideoPortSetTrappedEmulatorPorts전달되는 VIDEO_ACCESS_RANGE 형식 요소 배열에서 각 요소의 RangeVisible 멤버의 값은 지정된 I/O 포트에 V에서 직접 액세스할 수 있는지 여부를 결정합니다. x86 기반 컴퓨터에서 전체 화면에서 실행되는MS-DOS 애플리케이션) 또는 이러한 애플리케이션에서 발급한 I/O 스트림이 먼저 유효성 검사를 위해 미니포트 드라이버 제공 SvgaHwIoPortXxx 함수로 전달되는지 여부입니다.

요구 사항

요구
헤더 video.h(Video.h 포함)

참고 항목

비디오 미니포트 드라이버 DriverEntry

EMULATOR_ACCESS_ENTRY

HwVidFindAdapter

HwVidQueryDeviceCallback

HwVidQueryNamedValueCallback

VIDEO_HW_INITIALIZATION_DATA

VideoPortGetAccessRanges

VideoPortGetDeviceBase

VideoPortGetDeviceData

VideoPortGetRegistryParameters

videoPortInitialize

VideoPortSetTrappedEmulatorPorts

VideoPortVerifyAccessRanges