PVIDEO_HW_FIND_ADAPTER 콜백 함수(video.h)

HwVidFindAdapter 는 미니포트 드라이버에서 지원하는 미니포트 드라이버 및 디바이스와 관련된 데이터의 초기화를 수행합니다.

구문

PVIDEO_HW_FIND_ADAPTER PvideoHwFindAdapter;

VP_STATUS PvideoHwFindAdapter(
  PVOID HwDeviceExtension,
  PVOID HwContext,
  PWSTR ArgumentString,
  PVIDEO_PORT_CONFIG_INFO ConfigInfo,
  PUCHAR Again
)
{...}

매개 변수

HwDeviceExtension

드라이버의 디바이스별 스토리지 영역에 대한 포인터입니다. 자세한 내용은 디바이스 확장을 참조하세요.

HwContext

NULL이며 미니포트 드라이버에서 무시해야 합니다.

ArgumentString

사용자로 시작하는 null로 종료된 ASCII 문자열에 대한 포인터입니다. 이 포인터는 NULL일 수 있습니다.

ConfigInfo

VIDEO_PORT_CONFIG_INFO 구조체에 대한 포인터입니다. 비디오 포트 드라이버는 VIDEO_HW_INITIALIZATION_DATA 구조에서 미니포트 드라이버가 설정한 시스템 IO 버스 번호 및 값과 같은 알려진 구성 정보를 사용하여 이 구조에 대한 메모리를 할당하고 초기화합니다.

Again

미니포트 드라이버에서 무시해야 합니다.

반환 값

HwVidFindAdapter는 다음 상태 코드 중 하나를 반환해야 합니다.

반환 코드 설명
ERROR_DEV_NOT_EXIST 다시 열거 가능한 버스의 경우 미니포트 드라이버가 디바이스를 찾을 수 없음을 나타냅니다.
ERROR_INVALID_PARAMETER 미니포트 드라이버가 어댑터를 성공적으로 구성하거나 초기화할 수 없음을 나타냅니다.
NO_ERROR 성공을 나타냅니다.

설명

모든 비디오 미니포트 드라이버에는 HwVidFindAdapter 함수가 있어야 합니다.

비디오 포트 드라이버는 HwVidFindAdapter를 호출하기 전에 다음을 수행합니다.

  • 미니포트 드라이버의 DriverEntry 함수가 VIDEO_HW_INITIALIZATION_DATA 구조에 지정된 HwDeviceExtensionSize 값에 따라 미니포트 드라이버의 어댑터별 스토리지 영역에 대한 스토리지를 할당하고 할당된 스토리지를 0으로 초기화합니다.
  • VIDEO_PORT_CONFIG_INFO 구조에 대한 스토리지를 할당하고 VIDEO_HW_INITIALIZATION_DATA 미니포트 드라이버 제공 정보를 기반으로 사용 가능한 모든 정보를 채웁니다.
그런 다음 비디오 포트 드라이버는 각각 HwDeviceExtensionConfigInfo 매개 변수의 초기화된 어댑터별 스토리지 영역 및 구성 정보에 대한 포인터를 사용하여 미니포트 드라이버의 HwVidFindAdapter 함수를 호출합니다.

열거 가능 버스의 디바이스에 대한 HwVidFindAdapter 함수는 다음을 수행해야 합니다.

  • ConfigInfo가 가리키는 VIDEO_PORT_CONFIG_INFO 구조체의 크기를 확인하여 적절한 버전 관리가 필요한지 확인합니다.
  • VideoPortGetAccessRanges를 호출하여 디바이스가 응답할 버스 상대 물리적 주소를 가져옵니다. 이러한 주소는 PnP 관리자가 할당합니다. 미니포트 드라이버는 VideoPortGetAccessRangesVendorId, DeviceId슬롯 매개 변수에서 NULL을 전달해야 합니다.
  • 여러 디바이스 유형을 지원하는 미니포트 드라이버의 경우 PnP 관리자가 검색한 디바이스 유형을 결정합니다. 미니포트 드라이버는 VideoPortGetBusData 를 호출하여 PCI 구성 정보를 가져올 수 있습니다.
  • VIDEO_PORT_CONFIG_INFO 구조체의 적절한 멤버에 관련되지만 누락된 구성 정보를 어댑터 관련 데이터로 채웁니다.
HwVidFindAdapter는 디바이스를 초기화하려고 시도하면 안 됩니다.

HwVidFindAdapter는 미니포트 드라이버에서 사용하기 위해 메모리 및 잠금과 같은 리소스를 할당할 수 있습니다. 이러한 리소스는 디바이스별이거나 미니포트 드라이버가 지원하는 여러 디바이스에서 공유할 수 있습니다. HwVidFindAdapter가 NO_ERROR 이외의 값을 반환하는 경우 반환하기 전에 모든 디바이스별 리소스를 해제해야 합니다. 여러 디바이스 간에 공유되는 리소스의 경우 HwVidFindAdapter 는 참조 수를 유지해야 합니다. 예를 들어 참조 횟수는 성공한 HwVidFindAdapter 에 대한 이전 호출 수를 나타낼 수 있습니다. 이렇게 하면 HwVidFindAdapter 가 실패해야 하고 HwVidFindAdapter 에 대한 이전의 모든 호출이 실패했다고 판단되면 공유 리소스를 해제할 수 있습니다.

HwVidFindAdapter가 비디오 포트 드라이버에서 호출할 때마다 실패하는 경우 운영 체제는 나중에 미니포트 드라이버를 언로드할 수 있습니다. 이러한 경우 HwVidFindAdapter 가 할당했지만 해제하지 않은 모든 리소스가 누출됩니다.

ISA와 같은 다시 등록 가능한 버스에 있는 디바이스의 경우 PnP는 디바이스가 실제로 있는지 여부를 확인하는 것은 HwVidFindAdapter 의 책임이지만 여전히 디바이스를 시작하려고 시도합니다. 디바이스를 찾을 수 없는 경우 HwVidFindAdapter 는 ERROR_DEV_NOT_EXIST 반환해야 합니다.

HwVidFindAdapterVideoPortSetRegistryParameters 를 호출하여 HardwareInformation 키에 어댑터 관련 정보를 저장해야 합니다. 이 정보는 제어판 표시 프로그램에서 사용됩니다. 자세한 내용은 레지스트리에서 하드웨어 정보 설정을 참조하세요 .

VIDEO_PORT_CONFIG_INFO 어댑터 및 AdapterInterfaceType 값에 따라 HwVidFindAdapter는 다음 VideoPortXxx 함수 중 일부를 호출하여 필요한 버스 상대 구성 데이터와 매핑된 액세스 범위를 가져와 어댑터와 통신할 수 있습니다.

  • VideoPortGetBusData 를 사용하여 특정 I/O 버스의 어댑터에 대한 버스 유형별 구성 정보를 가져옵니다.

  • VideoPortGetDeviceData 를 사용하여 레지스트리에서 VIDEO_DEVICE_DATA_TYPE 관련 정보를 얻고 HwVidQueryDeviceCallback 을 호출하여 이 정보를 처리합니다.

  • 레지스트리에서 구성 정보를 가져오는 VideoPortGetRegistryParameters입니다.

  • VideoPortGetAccessRanges 는 버스 상대 액세스 범위 주소 및 기타 하드웨어 구성 값을 가져와서 어댑터 드라이버가 사용할 수 있도록 레지스트리에서 클레임합니다.

  • VideoPortVerifyAccessRanges 는 미니포트 드라이버에서 어댑터에 대한 버스 상대 비디오 메모리 및/또는 I/O 포트를 클레임할 수 있는지 여부를 확인합니다. 그렇지 않으면 이전에 로드된 드라이버가 레지스트리의 리소스를 이미 클레임했으며 HwVidFindAdapter 는 가능하거나 실패할 경우 다른 액세스 범위를 요청해야 합니다.

  • VideoPortGetDeviceBaseVIDEO_ACCESS_RANGE 구조에 설명된 대로 성공적으로 클레임된 버스 상대 기준 주소 및 범위 크기를 시스템 공간 논리 주소에 매핑합니다. HwVidFindAdapterVideoPortGetDeviceBase를 호출하기 전에 VideoPortVerifyAccessRanges 또는 VideoPortGetAccessRanges를 성공적으로 호출해야 합니다.

드라이버가 인터럽트를 처리하지 않는 경우 HwVidFindAdapterVideoPortGetAccessRanges를 호출한 후 VIDEO_PORT_CONFIG_INFO 구조체에서 BusInterruptLevelBusInterruptVector를 모두 0으로 설정해야 합니다. 두 멤버가 모두 0이면 비디오 포트 드라이버가 미니포트 드라이버에 대한 인터럽트(인터럽트)를 연결하지 않습니다. HwVidFindAdapter에서 BusInterruptLevelBusInterruptVector를 모두 0으로 명시적으로 설정하면 미니포트 드라이버의 DriverEntry 루틴에 의해 설정된 HwVidInterrupt 진입점(있는 경우)을 사용하지 않도록 설정합니다.

HwVidFindAdapter 는 해당 상태가 변경된 상태에서 지원되지 않는 어댑터를 유지해서는 안 됩니다. VGA/SVGA 어댑터의 경우 HwVidFindAdapter 는 어댑터를 VGA 상태로 두고 원래 조건으로 수정되었을 수 있는 확장 레지스터를 복원해야 합니다.

HwVidFindAdapter를 페이징할 수 있어야 합니다.

요구 사항

   
대상 플랫폼 데스크톱
헤더 video.h(Video.h 포함)

추가 정보

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

DrvAssertMode

HwVidInterrupt

HwVidQueryDeviceCallback

HwVidQueryNamedValueCallback

VIDEO_HW_INITIALIZATION_DATA

VIDEO_PORT_CONFIG_INFO

VideoPortFreeDeviceBase

VideoPortGetAccessRanges

VideoPortGetBusData

VideoPortGetDeviceBase

VideoPortGetDeviceData

VideoPortGetRegistryParameters

VideoPortVerifyAccessRanges