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