Bagikan melalui


Operasi pemuat set API

Penting

Info dalam topik ini berlaku untuk semua versi Windows 10, dan yang lebih baru. Kita akan menyebut versi tersebut di sini sebagai "Windows", memanggil pengecualian apa pun jika perlu.

Set API mengandalkan dukungan OS di pemuat pustaka untuk secara efektif memperkenalkan pengalihan namespace modul ke dalam proses pengikatan pustaka. Nama kontrak set API digunakan oleh pemuat pustaka untuk melakukan pengalihan runtime referensi ke biner host target yang menampung implementasi set API yang sesuai.

Ketika loader menemukan dependensi pada SET API pada waktu proses, loader berkonsultasi dengan data konfigurasi dalam gambar untuk mengidentifikasi biner host untuk set API. Data konfigurasi ini disebut skema set API. Skema ini dirakit sebagai properti OS, dan pemetaan antara set API dan biner mungkin berbeda tergantung pada biner mana yang disertakan dalam perangkat tertentu. Skema ini memungkinkan fungsi yang diimpor dalam satu biner untuk dirutekan dengan benar pada perangkat yang berbeda, bahkan jika nama modul host biner telah diganti namanya atau sepenuhnya direfaktor pada perangkat Windows yang berbeda.

Windows mendukung dua teknik standar untuk mengonsumsi dan berinteraksi dengan set API: penerusan langsung dan penerusan terbalik.

Penerusan langsung

Dalam konfigurasi ini, kode yang menggunakan mengimpor nama modul set API secara langsung. Impor ini diselesaikan dalam satu operasi, dan merupakan metode yang paling efisien dengan overhead paling sedikit. Secara konseptual, resolusi ini dapat menunjuk ke biner yang berbeda pada perangkat Windows yang berbeda, seperti yang ditunjukkan dalam contoh berikut:

Set API yang diimpor: api-feature1-l1-1-0.dll

  • WINDOWS PC ->feature1.dll
  • HoloLens ->feature1_holo.dll
  • IoT ->feature1_iot.dll

Karena pemetaan disimpan dalam repositori data skema kustom, itu berarti bahwa nama set API yang berakhiran dengan .dll tidak langsung merujuk ke file pada disk. Bagian .dll dari nama set API hanyalah konvensi yang diperlukan oleh pemuat. Nama set API lebih seperti alias atau nama virtual untuk file DLL fisik. Ini membuat nama portabel di seluruh rentang perangkat Windows.

Penerusan terbalik

Meskipun nama set API menyediakan namespace layanan yang stabil untuk modul di seluruh perangkat, tidak selalu praktis untuk mengonversi setiap biner ke sistem baru ini. Misalnya, aplikasi mungkin telah digunakan secara umum selama bertahun-tahun, dan kompilasi ulang biner aplikasi mungkin tidak layak. Selain itu, beberapa aplikasi mungkin perlu terus berjalan pada sistem yang dibangun sebelum set API tertentu diperkenalkan.

Untuk mengakomodasi tingkat kompatibilitas ini, sistem penerus disediakan di semua perangkat Windows yang mencakup subset permukaan API Win32. Penerus ini menggunakan nama modul yang diperkenalkan di PC Windows, dan memanfaatkan sistem API Set untuk memberikan kompatibilitas di semua perangkat Windows.

Operasi pemuat berperilaku seperti ini:

  1. Pada perangkat selain PC Windows, loader disajikan dependensi nama modul PC Windows warisan yang tidak ada di perangkat.
  2. Loader menemukan penerus set API untuk modul ini dan memuatnya ke dalam memori.
  3. Penerus memiliki pemetaan untuk set API untuk fungsi tertentu yang dipanggil.
  4. Loader menemukan biner host yang tepat untuk perangkat tertentu.

Secara konseptual, pemetaan terlihat seperti:

DLL yang diimpor: feature1.dll

  • WINDOWS PC ->feature1.dll
  • HoloLens ->penerus feature1.dll ->api-feature1-l1-1-0.dll ->feature1_holo.dll
  • Penerus IoT ->feature1.dll ->api-feature1-l1-1-0.dll ->feature1_iot.dll

Hasil akhirnya secara fungsional sama dengan penerusan langsung, tetapi mencapainya dengan cara yang memaksimalkan kompatibilitas aplikasi.

Catatan

Penerusan terbalik menyediakan cakupan hanya untuk subset permukaan API Win32. Ini tidak mengizinkan aplikasi yang menargetkan versi desktop Windows untuk dijalankan pada semua perangkat Windows.