Compartilhar via


Operação do 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 todas as exceções quando necessário.

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

Quando o carregador encontra uma dependência em um conjunto de API em tempo de execução, o carregador consulta dados de configuração na imagem para identificar o binário do host para um conjunto de API. Esses dados de configuração são chamados de 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 ser diferente dependendo de quais binários sã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 dá suporte a duas técnicas padrão para consumir e interface com conjuntos de API: de encaminhamento direto e de encaminhamento reverso.

Encaminhamento direto

Nessa configuração, o código de consumo importa diretamente um nome de módulo do conjunto de API. 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, conforme mostrado no exemplo a seguir:

Conjunto de API importado: api-feature1-l1-1-0.dll

  • Computador 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 API é apenas uma convenção exigida pelo carregador. O nome do conjunto de API é mais como 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 conjuntos de API forneçam um namespace estável para módulos entre dispositivos, nem sempre é prático converter todos os binários nesse novo sistema. Por exemplo, um aplicativo pode estar em uso comum há 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 sejam introduzidos.

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

A operação do carregador se comporta da seguinte maneira:

  1. Em um dispositivo diferente de um computador Windows, o carregador apresenta uma dependência herdada do nome do módulo do Computador Windows 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 que está sendo chamada.
  4. O carregador localiza o binário de host adequado para o dispositivo especificado.

Conceitualmente, o mapeamento tem a seguinte aparência:

DLL importada: feature1.dll

  • Computador Windows –>feature1.dll
  • HoloLens ->feature1.dll encaminhador ->api-feature1-l1-1-0.dll ->feature1_holo.dll
  • IoT - encaminhador>feature1.dll ->api-feature1-l1-1-0.dll ->feature1_iot.dll

O resultado final é funcionalmente o mesmo que de encaminhamento direto, mas o realiza de uma maneira que maximiza a compatibilidade do aplicativo.

Nota

O encaminhamento reverso fornece cobertura apenas para um subconjunto da superfície da API Win32. Ele não permite que aplicativos destinados a versões de área de trabalho do Windows sejam executados em todos os dispositivos Windows.