Usando VideoPortGetProcAddress
Um driver de miniporta de vídeo desenvolvido em uma versão do sistema operacional baseada em NT pode ser carregado e executado em uma versão anterior do sistema operacional, desde que o driver de miniporto não tente usar a funcionalidade específica para a versão mais recente do sistema operacional.
Quando o driver de miniporto de vídeo é carregado, o membro VideoPortGetProcAddress da estrutura VIDEO_PORT_CONFIG_INFO contém o endereço de uma rotina de retorno de chamada exportada pelo driver de porta de vídeo, VideoPortGetProcAddress. Um driver de miniporta pode usar essa rotina de retorno de chamada para localizar o endereço de uma função de porta de vídeo exportada de videoprt.sys. Depois que o driver de miniporto tiver o endereço da função, ele poderá usar esse endereço para chamar a função. Isso é mostrado no código de exemplo a seguir.
// 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);
}
Depois que a chamada por meio da rotina de retorno de chamada VideoPortGetProcAddress for executada, pVPFunction será NULL ou conterá o endereço da função VideoPortCreateSecondaryDisplay . Se pVPFunction for NULL, o driver de porta de vídeo não exportará a função que você está tentando localizar e o driver de miniporto não deverá tentar usá-la. Se pVPFunction não for NULL, você poderá usar esse ponteiro para chamar VideoPortCreateSecondaryDisplay , conforme mostrado no exemplo anterior.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: ao longo de 2024, vamos eliminar problemas do GitHub como o mecanismo de comentários para conteúdo e substituí-lo por um novo sistema de comentários. Para obter mais informações, consulte:Enviar e exibir comentários de