Partilhar via


Operação do carregador de conjunto de API

Importante

As informações neste tópico aplicam-se a todas as versões do Windows 10 e posteriores. Referir-nos-emos a essas versões aqui como "Windows", chamando a atenção para quaisquer exceções quando necessário.

conjuntos de API dependem do suporte ao sistema operacional no carregador de bibliotecas para introduzir efetivamente um redirecionamento de namespace de módulo no processo de vinculação de biblioteca. O de nome de contrato do conjunto de API é usado pelo carregador de bibliotecas para executar um redirecionamento de tempo de execução da referência para um binário de host de destino que abriga a implementação apropriada do conjunto de APIs.

Quando o carregador encontra uma dependência em um conjunto de APIs em tempo de execução, ele 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 diferentes dispositivos, mesmo que os nomes dos módulos do host binário tenham sido renomeados ou completamente refatorados em diferentes dispositivos Windows.

O Windows suporta duas técnicas padrão para consumir e interagir com conjuntos de API: de encaminhamento direto e encaminhamento reverso.

Reencaminhamento 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 a menor 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 parte .dll do nome do conjunto de API é apenas uma convenção exigida pelo carregador. O nome do conjunto de API é 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 dos conjuntos 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 ter sido de 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 da introdução de conjuntos de APIs específicos.

Para acomodar esse nível de compatibilidade, um sistema de encaminhadores de são fornecidos em todos os dispositivos Windows que cobrem um subconjunto da superfície da API do Win32. Esses encaminhadores usam os nomes de módulo que foram introduzidos em PCs Windows e aproveitam o sistema de conjunto de APIs para fornecer compatibilidade em todos os dispositivos Windows.

A operação do carregador se comporta assim:

  1. Em um dispositivo diferente de um PC Windows, o carregador é apresentado uma dependência de nome de módulo de PC Windows herdado que não está presente no dispositivo.
  2. O carregador localiza um encaminhador de conjunto de API para este módulo e o carrega na memória.
  3. O encaminhador tem um mapeamento para o conjunto de API para a função dada que está sendo chamada.
  4. O carregador encontra o binário de host adequado para o dispositivo dado.

Conceitualmente, o mapeamento se parece com:

DLL importado: feature1.dll

  • PC com Windows ->feature1.dll
  • HoloLens ->feature1.dll forwarder ->api-feature1-l1-1-0.dll ->feature1_holo.dll
  • IoT ->feature1.dll forwarder ->api-feature1-l1-1-0.dll ->feature1_iot.dll

O resultado final é funcionalmente o mesmo que de encaminhamento direto, mas ele 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. Não permite que as aplicações destinadas a versões de ambiente de trabalho do Windows sejam executadas em todos os dispositivos Windows.