Udostępnij za pośrednictwem


Operacja modułu ładującego zestawu interfejsów API

Ważny

Informacje w tym temacie dotyczą wszystkich wersji systemu Windows 10 i nowszych. W tym miejscu będziemy odwoływać się do tych wersji jako "Windows", wywołując wszelkie wyjątki w razie potrzeby.

zestawy interfejsów API polegać na obsłudze systemu operacyjnego w module ładujący biblioteki, aby skutecznie wprowadzić przekierowanie przestrzeni nazw modułu do procesu powiązania biblioteki. nazwa kontraktu zestawu interfejsu API jest używana przez moduł ładujący biblioteki do wykonywania przekierowania środowiska uruchomieniowego odwołania do docelowego pliku binarnego hosta, który zawiera odpowiednią implementację zestawu interfejsu API.

Gdy moduł ładujący napotka zależność od zestawu interfejsu API w czasie wykonywania, moduł ładujący konsultuje dane konfiguracji na obrazie w celu zidentyfikowania pliku binarnego hosta dla zestawu interfejsu API. Te dane konfiguracji są nazywane schematem zestawu interfejsu API . Schemat jest zestawiony jako właściwość systemu operacyjnego, a mapowanie między zestawami interfejsów API i plikami binarnymi może się różnić w zależności od tego, które pliki binarne są zawarte w danym urządzeniu. Schemat umożliwia poprawne kierowanie importowanej funkcji w jednym pliku binarnym na różnych urządzeniach, nawet jeśli nazwy modułów hosta binarnego zostały zmienione lub całkowicie refaktoryzowane na różnych urządzeniach z systemem Windows.

System Windows obsługuje dwie standardowe techniki używania i interfejsu z zestawami interfejsów API: bezpośrednie przekazywanie i przekierowywanie odwrotne.

Przekazywanie bezpośrednie

W tej konfiguracji kod zużywającego importuje bezpośrednio nazwę modułu zestawu interfejsu API. Ten import jest rozpoznawany w ramach jednej operacji i jest najbardziej wydajną metodą z najmniejszym obciążeniem. Koncepcyjnie rozwiązanie to może wskazywać różne pliki binarne na różnych urządzeniach z systemem Windows, jak pokazano w poniższym przykładzie:

Zaimportowany zestaw interfejsu API: api-feature1-l1-1-0.dll

  • Komputer z systemem Windows —>feature1.dll
  • HoloLens —>feature1_holo.dll
  • IoT —>feature1_iot.dll

Ponieważ mapowania są przechowywane w niestandardowym repozytorium danych schematu, oznacza to, że nazwa zestawu interfejsu API kończąca się .dll nie odwołuje się bezpośrednio do pliku na dysku. Część .dll nazwy zestawu interfejsu API jest tylko konwencją wymaganą przez moduł ładujący. Nazwa zestawu interfejsu API jest bardziej podobna do aliasu lub nazwy wirtualnej dla fizycznego pliku DLL. Dzięki temu nazwa jest przenośna w całym zakresie urządzeń z systemem Windows.

Przekierowywanie odwrotne

Chociaż nazwy zestawów interfejsów API zapewniają stabilną przestrzeń nazw dla modułów na urządzeniach, nie zawsze jest praktyczne konwertowanie każdego pliku binarnego na ten nowy system. Na przykład aplikacja może być używana powszechnie przez wiele lat, a ponowne komkompilowanie plików binarnych aplikacji może nie być możliwe. Ponadto niektóre aplikacje mogą wymagać dalszego działania w systemach utworzonych przed wprowadzeniem określonych zestawów interfejsów API.

Aby obsłużyć ten poziom zgodności, system usług przesyłania dalej są udostępniane na wszystkich urządzeniach z systemem Windows, które obejmują podzbiór powierzchni interfejsu API Win32. Te usługi przesyłania dalej używają nazw modułów wprowadzonych na komputerach z systemem Windows i korzystają z systemu API Set w celu zapewnienia zgodności ze wszystkimi urządzeniami z systemem Windows.

Operacja modułu ładującego zachowuje się następująco:

  1. Na urządzeniu innym niż komputer z systemem Windows moduł ładujący przedstawia starszą zależność nazwy modułu komputera z systemem Windows, która nie jest obecna na urządzeniu.
  2. Moduł ładujący lokalizuje usługę przesyłania dalej interfejsu API dla tego modułu i ładuje go do pamięci.
  3. Usługa przesyłania dalej ma mapowanie zestawu interfejsu API dla wywoływanej funkcji.
  4. Moduł ładujący znajduje odpowiedni plik binarny hosta dla danego urządzenia.

Koncepcyjnie mapowanie wygląda następująco:

Zaimportowana biblioteka DLL: feature1.dll

  • Komputer z systemem Windows —>feature1.dll
  • HoloLens — usługa przesyłania dalej>feature1.dll —>api-feature1-l1-1-0.dll —>feature1_holo.dll
  • IoT — usługa przesyłania dalej>feature1.dll —>api-feature1-l1-1-0.dll —>feature1_iot.dll

Wynik końcowy jest funkcjonalnie taki sam jak przekazywanie bezpośrednie, ale osiąga go w sposób, który maksymalizuje zgodność aplikacji.

Nuta

Przekazywanie wsteczne zapewnia pokrycie tylko dla podzestawu powierzchni interfejsu API Win32. Nie zezwala na uruchamianie aplikacji przeznaczonych dla komputerów stacjonarnych systemu Windows na wszystkich urządzeniach z systemem Windows.