Operação de carregador de conjunto de API
Importante
As informações neste tópico se aplicam a todas as versões do Windows 10 e posteriores. Vamos nos referir a essas versões aqui como "Windows", chamando quaisquer exceções quando necessário.
Os conjuntos de API dependem do suporte do sistema operacional no carregador de bibliotecas para introduzir efetivamente um redirecionamento de namespace de módulo no processo de vinculação de biblioteca. O nome do contrato do conjunto de APIs é usado pelo carregador de bibliotecas para executar um redirecionamento de tempo de execução da referência a um binário de host de destino que abriga a implementação apropriada do conjunto de APIs.
Quando o carregador encontra uma dependência de um conjunto de APIs em tempo de execução, o carregador consulta os dados de configuração na imagem para identificar o binário do host para um conjunto de APIs. Esses dados de configuração são chamados de esquema de conjunto de API. O esquema é montado como uma propriedade do sistema operacional, e o mapeamento entre conjuntos de API e binários pode diferir dependendo de quais binários estão incluídos em um determinado dispositivo. O esquema permite que uma função importada em um único binário seja roteada corretamente em dispositivos diferentes, mesmo que os nomes de módulo do host binário tenham sido renomeados ou completamente refatorados em diferentes dispositivos Windows.
O Windows oferece suporte a duas técnicas padrão para consumir e interface com conjuntos de APIs: encaminhamento direto e encaminhamento reverso.
Encaminhamento direto
Nessa configuração, o código de consumo importa um nome de módulo de conjunto de API diretamente. Essa importação é resolvida em uma única operação e é o método mais eficiente com menos sobrecarga. Conceitualmente, essa resolução pode apontar para binários diferentes em diferentes dispositivos Windows, como é mostrado no exemplo a seguir:
Conjunto de APIs importadas: api-feature1-l1-1-0.dll
- PC com Windows ->feature1.dll
- HoloLens ->feature1_holo.dll
- IoT ->feature1_iot.dll
Como os mapeamentos são mantidos em um repositório de dados de esquema personalizado, isso significa que um nome de conjunto de API que termina com .dll não se refere diretamente a um arquivo no disco. A .dll parte do nome do conjunto de APIs é apenas uma convenção exigida pelo carregador. O nome do conjunto de APIs é mais parecido com um alias ou um nome virtual para um arquivo DLL físico. Isso torna o nome portátil em toda a gama de dispositivos Windows.
Encaminhamento reverso
Embora os nomes de conjunto de API forneçam um namespace estável para módulos entre dispositivos, nem sempre é prático converter todos os binários para esse novo sistema. Por exemplo, um aplicativo pode estar em uso comum por muitos anos, e recompilar os binários do aplicativo pode não ser viável. Além disso, alguns aplicativos podem precisar continuar a ser executados em sistemas criados antes que conjuntos de API específicos fossem introduzidos.
Para acomodar esse nível de compatibilidade, um sistema de encaminhadores é fornecido em todos os dispositivos Windows que cobrem um subconjunto da superfície da API Win32. Esses encaminhadores usam os nomes de módulo que foram introduzidos em PCs com Windows e aproveitam o sistema de conjunto de APIs para fornecer compatibilidade entre todos os dispositivos Windows.
A operação da carregadeira se comporta assim:
- Em um dispositivo diferente de um PC com Windows, é apresentada ao carregador uma dependência de nome de módulo de PC Windows herdada que não está presente no dispositivo.
- O carregador localiza um encaminhador de conjunto de API para este módulo e o carrega na memória.
- O encaminhador tem um mapeamento para a API definida para a determinada função que está sendo chamada.
- O carregador localiza o binário de host apropriado para o dispositivo especificado.
Conceitualmente, o mapeamento se parece com:
DLL importada: feature1.dll
- PC com Windows ->feature1.dll
- HoloLens -feature1.dll forwarder -api-feature1-l1-1-0.dll ->>>feature1_holo.dll
- IoT -feature1.dll encaminhador -api-feature1-l1-1-0.dll ->>>feature1_iot.dll
O resultado final é funcionalmente o mesmo que o encaminhamento direto, mas o realiza de uma forma que maximiza a compatibilidade do aplicativo.
Observação
O encaminhamento reverso fornece cobertura apenas para um subconjunto da superfície da API do Win32. Ele não permite que aplicativos destinados a versões de área de trabalho do Windows sejam executados em todos os dispositivos Windows.