VideoPortGetProcAddress 사용
미니포트 드라이버가 최신 운영 체제 버전과 관련된 기능을 사용하지 않는 한, 하나의 NT 기반 운영 체제 버전에서 개발된 비디오 미니포트 드라이버를 이전 운영 체제 버전에서 로드하고 실행할 수 있습니다.
비디오 미니포트 드라이버가 로드되면 VIDEO_PORT_CONFIG_INFO 구조체의 VideoPortGetProcAddress 멤버에 비디오 포트 드라이버가 내보내는 콜백 루틴의 주소 VideoPortGetProcAddress가 포함됩니다. 미니포트 드라이버는 이 콜백 루틴을 사용하여 videoprt.sys에서 내보낸 비디오 포트 함수의 주소를 찾을 수 있습니다. 미니포트 드라이버에 함수의 주소가 있으면 이 주소를 사용하여 함수를 호출할 수 있습니다. 다음 예제 코드에 나와 있습니다.
// Useful typedef for a function pointer type
// that points to a function with same argument types
// as VideoPortCreateSecondaryDisplay
typedef VP_STATUS ( *pFunc(PVOID, PVOID *, ULONG));
// Declare a pointer to a function
pFunc pVPFunction;
// Declare a pointer to a VIDEO_PORT_CONFIG_INFO struct
PVIDEO_PORT_CONFIG_INFO pConfigInfo;
// Call through VideoPortGetProcAddress callback
// to get address of VideoPortCreateSecondaryDisplay
pVPFunction = (pFunc)
( *(pConfigInfo->VideoPortGetProcAddress)(
pDeviceExt,
"VideoPortCreateSecondaryDisplay")
);
if (NULL == pVPFunction) {
// Video port does not export the function
...
}
else {
Status = pVPFunction(DevExtension,
&SecondDevExtension,
VIDEO_DUALVIEW_REMOVABLE);
}
VideoPortGetProcAddress 콜백 루틴을 통한 호출이 실행된 후 pVPFunction은 NULL이거나 VideoPortCreateSecondaryDisplay 함수의 주소를 포함합니다. pVPFunction이 NULL인 경우 비디오 포트 드라이버는 찾으려는 함수를 내보내지 않으며 미니포트 드라이버는 이 함수를 사용하려고 시도해서는 안 됩니다. pVPFunction이 NULL이 아닌 경우 이전 예제와 같이 이 포인터를 사용하여 VideoPortCreateSecondaryDisplay를 호출할 수 있습니다.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기