VIDEO_ACCESS_RANGE 구조체(video.h)
VIDEO_ACCESS_RANGE 구조는 비디오 어댑터에 대한 디바이스 I/O 포트 또는 메모리 범위를 정의합니다. 모든 미니포트 드라이버의 HwVidFindAdapter 함수는 미니포트 드라이버가 지원하는 각 비디오 어댑터에 대해 액세스 범위 배열이라고 하는 VIDEO_ACCESS_RANGE 형식 요소의 배열을 설정해야 합니다.
VGA 호환 미니포트 드라이버의 경우 VIDEO_ACCESS_RANGE VideoPortSetTrappedEmulatorPorts 에 전달된 배열의 요소를 정의하여 전체 화면 MS-DOS 애플리케이션에서 I/O 포트에 대한 직접 액세스를 사용하거나 사용하지 않도록 설정합니다.
구문
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 로 설정되고 VideoPortSetTrappedEmulatorPorts 에 전달되어 전체 화면 MS-DOS 애플리케이션에서 I/O 포트 범위에 직접 액세스할 수 있습니다. FALSE로 설정하면 애플리케이션에서 발급한 명령이 계속 트래핑되고 유효성 검사를 위해 미니포트 드라이버의 SvgaHwIoXxx 함수로 전달됩니다.
RangeShareable
이 요소에서 설명하는 액세스 범위를 다른 드라이버 및/또는 디바이스와 공유할 수 있으면 TRUE 로 설정되고 범위를 공유할 수 없는 경우 FALSE 로 설정됩니다.
VideoPortSetTrappedEmulatorPorts에서 무시됩니다.
RangePassive
디바이스가 실제로 포트를 사용하는지 여부를 나타냅니다. 이 멤버의 값은 다음 표에 나와 있습니다.
값 | 의미 |
---|---|
VIDEO_RANGE_PASSIVE_DECODE | 디바이스는 포트를 디코딩하지만 드라이버는 포트를 사용하지 않습니다. |
VIDEO_RANGE_10_BIT_DECODE | 디바이스는 포트 주소의 10비트 디코딩합니다. |
설명
미니포트 드라이버는 DriverEntry 또는 HwVidLegacyResources 함수에서 레거시 리소스를 클레임해야 합니다.
그렇지 않으면 미니포트 드라이버의 HwVidFindAdapter 함수는 어댑터의 PCI 리소스에 대한 액세스 범위 배열을 설정합니다. VideoPortGetAccessRanges에서 반환된 정보를 사용할 수 있습니다. 또는 미니포트 드라이버 제공 HwVidQueryDeviceCallback 함수 또는 VideoPortGetRegistryParameters를 미니포트 드라이버 제공 HwVidQueryNamedValueCallback 함수와 함께 VideoPortGetDeviceData를 호출하여 레지스트리에서 검색된 정보를 사용할 수 있습니다. 이러한 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/WriteRegisterXxx 를 통해 메모리 공간의 디바이스 메모리에 액세스하여 비디오 어댑터와 통신할 수 있습니다.
액세스 범위가 공유 가능한지 여부 확인
액세스 범위를 공유할 수 있는지 여부를 확인하려면 다음 지침을 따릅니다.- 메모리 또는 I/O 포트의 범위를 이 드라이버가 "소유"해야 하고 다른 드라이버가 이 범위에 액세스하면 문제가 발생할 수 있는 경우 RangeSharable 을 FALSE로 설정합니다.
- 범위를 협력 디바이스 드라이버와 공유할 수 있는 경우 RangeSharable 을 TRUE로 설정합니다.
그러나 통과 IOCTL로 작동하고 모든 VGA 또는 SVGA 카드 연결할 수 있는 카드용 미니포트 드라이버는 시스템 VGA 포트 또는 메모리 범위를 사용하지 않아야 합니다. 이 경우 이러한 드라이버는 레지스트리에서 VGA 액세스 범위를 클레임하려고 시도해서는 안 됩니다. 이러한 미니포트 드라이버에서 VGA 리소스를 클레임하려는 시도는 컴퓨터의 모든 SVGA 카드 드라이버가 이러한 액세스 범위를 공유할 수 없다고 주장했기 때문에 리소스 충돌을 일으킬 수 있습니다.
VideoPortSetTrappedEmulatorPorts에 I/O 포트 범위 요소 전달
x86 기반 컴퓨터의 VGA 호환 미니포트 드라이버가 RangeVisible 멤버를 TRUE 로 명시적으로 다시 설정하고 VideoPortSetTrappedEmulatorPorts 를 호출하여 하나 이상의 I/O 포트 범위를 사용하도록 설정하지 않는 한 I/O 포트 범위를 설명하는 모든 VIDEO_ACCESS_RANGE 형식 배열 요소는 보이지 않는 것으로 간주됩니다. VideoPortSetTrappedEmulatorPorts는 입력 배열의 RangeSharable 멤버를 무시합니다.VideoPortSetTrappedEmulatorPorts에 전달된 VIDEO_ACCESS_RANGE 형식 요소의 배열에서 각 요소의 RangeVisible 멤버 값은 VDM(x86 기반 컴퓨터의 전체 화면에서 실행되는 MS-DOS 애플리케이션)에서 지정된 I/O 포트에 직접 액세스할 수 있는지 또는 이러한 애플리케이션에서 발급한 I/O 스트림이 먼저 유효성 검사를 위해 미니포트 드라이버 제공 SvgaHwIoPortXxx 함수에 트래핑되어 전달되는지 여부를 결정합니다.
요구 사항
요구 사항 | 값 |
---|---|
헤더 | video.h(Video.h 포함) |
추가 정보
VideoPortGetRegistryParameters