Использование VideoPortGetProcAddress
Драйвер видео минипорта, разработанный в одной версии операционной системы на основе NT, можно загрузить и запустить в более ранней версии операционной системы, если драйвер мини-порта не пытается использовать функции, характерные для более новой версии операционной системы.
При загрузке драйвера видеопорта член VideoPortGetProcAddress структуры VIDEO_PORT_CONFIG_INFO содержит адрес подпрограммы обратного вызова, экспортируемой драйвером видеопорта, 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);
}
После выполнения вызова через подпрограмму обратного вызова VideoPortGetProcAddresspVPFunction имеет значение NULL или содержит адрес функции VideoPortCreateSecondaryDisplay . Если pVPFunction имеет значение NULL, драйвер видеопорта не экспортирует функцию, и драйвер мини-порта не должен пытаться использовать ее. Если pVPFunction не равно NULL, этот указатель можно использовать для вызова VideoPortCreateSecondaryDisplay , как показано в предыдущем примере.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по