Fungsi LoadLibraryExA (libloaderapi.h)

Memuat modul yang ditentukan ke ruang alamat proses panggilan. Modul yang ditentukan dapat menyebabkan modul lain dimuat.

Sintaks

HMODULE LoadLibraryExA(
  [in] LPCSTR lpLibFileName,
       HANDLE hFile,
  [in] DWORD  dwFlags
);

Parameter

[in] lpLibFileName

String yang menentukan nama file modul yang akan dimuat. Nama ini tidak terkait dengan nama yang disimpan dalam modul pustaka itu sendiri, seperti yang ditentukan oleh kata kunci LIBRARY dalam file module-definition (.def).

Modul dapat menjadi modul pustaka (file .dll) atau modul yang dapat dieksekusi (file .exe). Jika modul yang ditentukan adalah modul yang dapat dieksekusi, impor statis tidak dimuat; sebaliknya, modul dimuat seolah-olah DONT_RESOLVE_DLL_REFERENCES ditentukan. Lihat parameter dwFlags untuk informasi selengkapnya.

Jika string menentukan nama modul tanpa jalur dan ekstensi nama file dihilangkan, fungsi menambahkan ekstensi pustaka default ".DLL" ke nama modul. Untuk mencegah fungsi menambahkan ".DLL" ke nama modul, sertakan karakter titik berikutnya (.) dalam string nama modul.

Jika string menentukan jalur yang sepenuhnya memenuhi syarat, fungsi hanya mencari jalur tersebut untuk modul. Saat menentukan jalur, pastikan untuk menggunakan garis miring terbalik (\), bukan garis miring (/). Untuk informasi selengkapnya tentang jalur, lihat Menamai File, Jalur, dan Namespace.

Jika string menentukan nama modul tanpa jalur dan lebih dari satu modul yang dimuat memiliki nama dasar dan ekstensi yang sama, fungsi mengembalikan handel ke modul yang dimuat terlebih dahulu.

Jika string menentukan nama modul tanpa jalur dan modul dengan nama yang sama belum dimuat, atau jika string menentukan nama modul dengan jalur relatif, fungsi akan mencari modul yang ditentukan. Fungsi ini juga mencari modul jika memuat modul yang ditentukan menyebabkan sistem memuat modul terkait lainnya (yaitu, jika modul memiliki dependensi). Direktori yang dicari dan urutan pencariannya bergantung pada jalur yang ditentukan dan parameter dwFlags . Untuk informasi selengkapnya, lihat Keterangan.

Jika fungsi tidak dapat menemukan modul atau salah satu dependensinya, fungsi gagal.

hFile

Parameter ini dicadangkan untuk digunakan di masa mendatang. Ini harus NULL.

[in] dwFlags

Tindakan yang harus diambil saat memuat modul. Jika tidak ada bendera yang ditentukan, perilaku fungsi ini identik dengan fungsi LoadLibrary . Parameter ini bisa menjadi salah satu nilai berikut.

Nilai Makna
DONT_RESOLVE_DLL_REFERENCES
0x00000001
Jika nilai ini digunakan, dan modul yang dapat dieksekusi adalah DLL, sistem tidak memanggil DllMain untuk proses dan inisialisasi dan penghentian utas. Selain itu, sistem tidak memuat modul executable tambahan yang dirujuk oleh modul yang ditentukan.
Catatan Jangan gunakan nilai ini; hanya disediakan untuk kompatibilitas mundur. Jika Anda berencana untuk mengakses hanya data atau sumber daya di DLL, gunakan LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE atau LOAD_LIBRARY_AS_IMAGE_RESOURCE atau keduanya. Jika tidak, muat pustaka sebagai DLL atau modul yang dapat dieksekusi menggunakan fungsi LoadLibrary .
 
LOAD_IGNORE_CODE_AUTHZ_LEVEL
0x00000010
Jika nilai ini digunakan, sistem tidak memeriksa aturan AppLocker atau menerapkan Kebijakan Pembatasan Perangkat Lunak untuk DLL. Tindakan ini hanya berlaku untuk DLL yang dimuat dan bukan ke dependensinya. Nilai ini direkomendasikan untuk digunakan dalam program penyiapan yang harus menjalankan DLL yang diekstrak selama penginstalan.

Windows Server 2008 R2 dan Windows 7: Pada sistem dengan KB2532445 terinstal, pemanggil harus berjalan sebagai "LocalSystem" atau "TrustedInstaller"; jika tidak, sistem mengabaikan bendera ini. Untuk informasi selengkapnya, lihat "Anda dapat menghindari aturan AppLocker dengan menggunakan makro Office di komputer yang menjalankan Windows 7 atau Windows Server 2008 R2" di Pangkalan Pengetahuan Bantuan dan Dukungan di https://support.microsoft.com/kb/2532445.

Windows Server 2008, Windows Vista, Windows Server 2003 dan Windows XP: AppLocker diperkenalkan di Windows 7 dan Windows Server 2008 R2.

LOAD_LIBRARY_AS_DATAFILE
0x00000002
Jika nilai ini digunakan, sistem memetakan file ke ruang alamat virtual proses panggilan seolah-olah itu adalah file data. Tidak ada yang dilakukan untuk mengeksekusi atau mempersiapkan untuk menjalankan file yang dipetakan. Oleh karena itu, Anda tidak dapat memanggil fungsi seperti GetModuleFileName, GetModuleHandle atau GetProcAddress dengan DLL ini. Menggunakan nilai ini menyebabkan penulisan ke memori baca-saja untuk meningkatkan pelanggaran akses. Gunakan bendera ini ketika Anda ingin memuat DLL hanya untuk mengekstrak pesan atau sumber daya darinya.

Nilai ini dapat digunakan dengan LOAD_LIBRARY_AS_IMAGE_RESOURCE. Untuk informasi selengkapnya, lihat Keterangan.

LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE
0x00000040
Mirip dengan LOAD_LIBRARY_AS_DATAFILE, kecuali bahwa file DLL dibuka dengan akses tulis eksklusif untuk proses panggilan. Proses lain tidak dapat membuka file DLL untuk akses tulis saat sedang digunakan. Namun, DLL masih dapat dibuka oleh proses lain.

Nilai ini dapat digunakan dengan LOAD_LIBRARY_AS_IMAGE_RESOURCE. Untuk informasi selengkapnya, lihat Keterangan.

Windows Server 2003 dan Windows XP: Nilai ini tidak didukung sampai Windows Vista.

LOAD_LIBRARY_AS_IMAGE_RESOURCE
0x00000020
Jika nilai ini digunakan, sistem memetakan file ke dalam ruang alamat virtual proses sebagai file gambar. Namun, loader tidak memuat impor statis atau melakukan langkah-langkah inisialisasi biasa lainnya. Gunakan bendera ini ketika Anda ingin memuat DLL hanya untuk mengekstrak pesan atau sumber daya darinya.

Kecuali aplikasi tergantung pada file yang memiliki tata letak dalam memori gambar, nilai ini harus digunakan dengan LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE atau LOAD_LIBRARY_AS_DATAFILE. Untuk informasi lebih lanjut, lihat bagian Keterangan.

Windows Server 2003 dan Windows XP: Nilai ini tidak didukung sampai Windows Vista.

LOAD_LIBRARY_SEARCH_APPLICATION_DIR
0x00000200
Jika nilai ini digunakan, direktori penginstalan aplikasi dicari untuk DLL dan dependensinya. Direktori di jalur pencarian standar tidak dicari. Nilai ini tidak dapat digabungkan dengan LOAD_WITH_ALTERED_SEARCH_PATH.

Windows 7, Windows Server 2008 R2, Windows Vista, dan Windows Server 2008: Nilai ini mengharuskan KB2533623 diinstal.

Windows Server 2003 dan Windows XP: Nilai ini tidak didukung.

LOAD_LIBRARY_SEARCH_DEFAULT_DIRS
0x00001000
Nilai ini adalah kombinasi dari LOAD_LIBRARY_SEARCH_APPLICATION_DIR, LOAD_LIBRARY_SEARCH_SYSTEM32, dan LOAD_LIBRARY_SEARCH_USER_DIRS. Direktori di jalur pencarian standar tidak dicari. Nilai ini tidak dapat digabungkan dengan LOAD_WITH_ALTERED_SEARCH_PATH.

Nilai ini menunjukkan jumlah maksimum direktori yang direkomendasikan yang harus disertakan aplikasi dalam jalur pencarian DLL-nya.

Windows 7, Windows Server 2008 R2, Windows Vista, dan Windows Server 2008: Nilai ini mengharuskan KB2533623 diinstal.

Windows Server 2003 dan Windows XP: Nilai ini tidak didukung.

LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR
0x00000100
Jika nilai ini digunakan, direktori yang berisi DLL untuk sementara ditambahkan ke awal daftar direktori yang dicari untuk dependensi DLL. Direktori di jalur pencarian standar tidak dicari.

Parameter lpFileName harus menentukan jalur yang sepenuhnya memenuhi syarat. Nilai ini tidak dapat digabungkan dengan LOAD_WITH_ALTERED_SEARCH_PATH.

Misalnya, jika Lib2.dll adalah dependensi C:\Dir1\Lib1.dll, memuat Lib1.dll dengan nilai ini menyebabkan sistem mencari Lib2.dll hanya di C:\Dir1. Untuk mencari Lib2.dll di C:\Dir1 dan semua direktori di jalur pencarian DLL, gabungkan nilai ini dengan LOAD_LIBRARY_SEARCH_DEFAULT_DIRS.

Windows 7, Windows Server 2008 R2, Windows Vista, dan Windows Server 2008: Nilai ini mengharuskan KB2533623 diinstal.

Windows Server 2003 dan Windows XP: Nilai ini tidak didukung.

LOAD_LIBRARY_SEARCH_SYSTEM32
0x00000800
Jika nilai ini digunakan, %windows%\system32 dicari untuk DLL dan dependensinya. Direktori di jalur pencarian standar tidak dicari. Nilai ini tidak dapat digabungkan dengan LOAD_WITH_ALTERED_SEARCH_PATH.

Windows 7, Windows Server 2008 R2, Windows Vista, dan Windows Server 2008: Nilai ini mengharuskan KB2533623 diinstal.

Windows Server 2003 dan Windows XP: Nilai ini tidak didukung.

LOAD_LIBRARY_SEARCH_USER_DIRS
0x00000400
Jika nilai ini digunakan, direktori yang ditambahkan menggunakan AddDllDirectory atau fungsi SetDllDirectory dicari untuk DLL dan dependensinya. Jika lebih dari satu direktori telah ditambahkan, urutan di mana direktori dicari tidak ditentukan. Direktori di jalur pencarian standar tidak dicari. Nilai ini tidak dapat digabungkan dengan LOAD_WITH_ALTERED_SEARCH_PATH.

Windows 7, Windows Server 2008 R2, Windows Vista, dan Windows Server 2008: Nilai ini mengharuskan KB2533623 diinstal.

Windows Server 2003 dan Windows XP: Nilai ini tidak didukung.

LOAD_WITH_ALTERED_SEARCH_PATH
0x00000008
Jika nilai ini digunakan dan lpFileName menentukan jalur absolut, sistem menggunakan strategi pencarian file alternatif yang dibahas di bagian Keterangan untuk menemukan modul yang dapat dieksekusi terkait yang menyebabkan modul yang ditentukan dimuat. Jika nilai ini digunakan dan lpFileName menentukan jalur relatif, perilaku tidak terdefinisi.

Jika nilai ini tidak digunakan, atau jika lpFileName tidak menentukan jalur, sistem menggunakan strategi pencarian standar yang dibahas di bagian Keterangan untuk menemukan modul yang dapat dieksekusi terkait yang menyebabkan modul yang ditentukan dimuat.

Nilai ini tidak dapat digabungkan dengan bendera LOAD_LIBRARY_SEARCH apa pun.

LOAD_LIBRARY_REQUIRE_SIGNED_TARGET
0x00000080
Menentukan bahwa tanda tangan digital gambar biner harus diperiksa pada waktu pemuatan.

Nilai ini memerlukan Windows 8.1, Windows 10 atau yang lebih baru.

LOAD_LIBRARY_SAFE_CURRENT_DIRS
0x00002000
Jika nilai ini digunakan, memuat DLL untuk eksekusi dari direktori saat ini hanya diperbolehkan jika berada di bawah direktori dalam daftar Beban aman.

Mengembalikan nilai

Jika fungsi berhasil, nilai yang dikembalikan adalah handel ke modul yang dimuat.

Jika fungsi gagal, nilai yang dikembalikan adalah NULL. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Keterangan

Fungsi LoadLibraryEx sangat mirip dengan fungsi LoadLibrary . Perbedaannya terdiri dari sekumpulan perilaku opsional yang disediakan LoadLibraryEx :

  • LoadLibraryEx dapat memuat modul DLL tanpa memanggil fungsi DllMain dll.
  • LoadLibraryEx dapat memuat modul dengan cara yang dioptimalkan untuk kasus di mana modul tidak akan pernah dijalankan, memuat modul seolah-olah itu adalah file data.
  • LoadLibraryEx dapat menemukan modul dan modul terkait dengan menggunakan salah satu dari dua strategi pencarian atau dapat mencari sekumpulan direktori khusus proses.
Anda memilih perilaku opsional ini dengan mengatur parameter dwFlags ; jika dwFlags nol, LoadLibraryEx berperilaku identik dengan LoadLibrary.

Proses panggilan dapat menggunakan handel yang dikembalikan oleh LoadLibraryEx untuk mengidentifikasi modul dalam panggilan ke fungsi GetProcAddress, FindResource, dan LoadResource .

Untuk mengaktifkan atau menonaktifkan pesan kesalahan yang ditampilkan oleh pemuat selama pemuatan DLL, gunakan fungsi SetErrorMode .

Tidak aman untuk memanggil LoadLibraryEx dari DllMain. Untuk informasi selengkapnya, lihat bagian Keterangan di DllMain.

Visual C++: Pengkompilasi Visual C++ mendukung sintaks yang memungkinkan Anda mendeklarasikan variabel thread-local: _declspec(thread). Jika Anda menggunakan sintaks ini dalam DLL, Anda tidak akan dapat memuat DLL secara eksplisit menggunakan LoadLibraryEx pada versi Windows sebelum Windows Vista. Jika DLL Anda akan dimuat secara eksplisit, Anda harus menggunakan fungsi penyimpanan lokal utas alih-alih _declspec(utas). Misalnya, lihat Menggunakan Penyimpanan Lokal Utas di Pustaka Tautan Dinamis.

Memuat DLL sebagai File Data atau Sumber Daya Gambar

Nilai LOAD_LIBRARY_AS_DATAFILE, LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE, dan LOAD_LIBRARY_AS_IMAGE_RESOURCE memengaruhi jumlah referensi per proses dan pemuatan modul yang ditentukan. Jika salah satu nilai ini ditentukan untuk parameter dwFlags , loader memeriksa apakah modul sudah dimuat oleh proses sebagai DLL yang dapat dieksekusi. Jika demikian, ini berarti bahwa modul sudah dipetakan ke ruang alamat virtual proses panggilan. Dalam hal ini, LoadLibraryEx mengembalikan handel ke DLL dan menambah jumlah referensi DLL. Jika modul DLL belum dimuat sebagai DLL, sistem memetakan modul sebagai file data atau gambar dan bukan sebagai DLL yang dapat dieksekusi. Dalam hal ini, LoadLibraryEx mengembalikan handel ke file data atau gambar yang dimuat tetapi tidak menambah jumlah referensi untuk modul dan tidak membuat modul terlihat oleh fungsi seperti CreateToolhelp32Snapshot atau EnumProcessModules.

Jika LoadLibraryEx dipanggil dua kali untuk file yang sama dengan LOAD_LIBRARY_AS_DATAFILE, LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE, atau LOAD_LIBRARY_AS_IMAGE_RESOURCE, dua pemetaan terpisah dibuat untuk file tersebut.

Saat nilai LOAD_LIBRARY_AS_IMAGE_RESOURCE digunakan, modul dimuat sebagai gambar menggunakan ekspansi penyelarasan bagian portable executable (PE). Alamat virtual relatif (RVA) tidak harus dipetakan ke alamat disk, sehingga sumber daya dapat lebih cepat diambil dari modul. Menentukan LOAD_LIBRARY_AS_IMAGE_RESOURCE mencegah proses lain mengubah modul saat dimuat.

Kecuali aplikasi bergantung pada karakteristik pemetaan gambar tertentu, nilai LOAD_LIBRARY_AS_IMAGE_RESOURCE harus digunakan dengan LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE atau LOAD_LIBRARY_AS_DATAFILE. Ini memungkinkan pemuat untuk memilih apakah akan memuat modul sebagai sumber daya gambar atau file data, memilih opsi mana pun yang memungkinkan sistem untuk berbagi halaman secara lebih efektif. Fungsi sumber daya seperti FindResource dapat menggunakan salah satu pemetaan.

Untuk menentukan bagaimana modul dimuat, gunakan salah satu makro berikut untuk menguji handel yang dikembalikan oleh LoadLibraryEx.

#define LDR_IS_DATAFILE(handle)      (((ULONG_PTR)(handle)) &  (ULONG_PTR)1)
#define LDR_IS_IMAGEMAPPING(handle)  (((ULONG_PTR)(handle)) & (ULONG_PTR)2)
#define LDR_IS_RESOURCE(handle)      (LDR_IS_IMAGEMAPPING(handle) || LDR_IS_DATAFILE(handle))

Tabel berikut ini menjelaskan makro ini.

Makro Deskripsi
LDR_IS_DATAFILE(handel) Jika makro ini mengembalikan TRUE, modul dimuat sebagai file data (LOAD_LIBRARY_AS_DATAFILE atau LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE).
LDR_IS_IMAGEMAPPING(handel) Jika makro ini mengembalikan TRUE, modul dimuat sebagai file gambar (LOAD_LIBRARY_AS_IMAGE_RESOURCE).
LDR_IS_RESOURCE(handel) Jika makro ini mengembalikan TRUE, modul dimuat sebagai file data atau file gambar.
 

Gunakan fungsi FreeLibrary untuk membebaskan modul yang dimuat, apakah memuat modul menyebabkan jumlah referensinya bertambah atau tidak. Jika modul dimuat sebagai file data atau gambar, pemetaan dihancurkan tetapi jumlah referensi tidak diurutkan. Jika tidak, jumlah referensi DLL akan dikurangi. Oleh karena itu, aman untuk memanggil FreeLibrary dengan handel apa pun yang dikembalikan oleh LoadLibraryEx.

Mencari DLL dan Dependensi

Jalur pencarian adalah kumpulan direktori yang dicari untuk DLL. Fungsi LoadLibraryEx dapat mencari DLL menggunakan jalur pencarian standar atau jalur pencarian yang diubah, atau dapat menggunakan jalur pencarian khusus proses yang dibuat dengan fungsi SetDefaultDllDirectories dan AddDllDirectory . Untuk daftar direktori dan urutan pencariannya, lihat Urutan Pencarian Pustaka Dynamic-Link.

Fungsi LoadLibraryEx menggunakan jalur pencarian standar dalam kasus berikut:

  • Nama file ditentukan tanpa jalur dan nama file dasar tidak cocok dengan nama file dasar modul yang dimuat, dan tidak ada bendera LOAD_LIBRARY_SEARCH yang digunakan.
  • Jalur ditentukan tetapi LOAD_WITH_ALTERED_SEARCH_PATH tidak digunakan.
  • Aplikasi belum menentukan jalur pencarian DLL default untuk proses menggunakan SetDefaultDllDirectories.

Jika lpFileName menentukan jalur relatif, seluruh jalur relatif ditambahkan ke setiap token di jalur pencarian DLL. Untuk memuat modul dari jalur relatif tanpa mencari jalur lain, gunakan GetFullPathName untuk mendapatkan jalur nonrelatif dan memanggil LoadLibraryEx dengan jalur nonrelatif. Jika modul dimuat sebagai datafile dan jalur relatif dimulai dengan "." atau "..", jalur relatif diperlakukan sebagai jalur absolut.

Jika lpFileName menentukan jalur absolut dan dwFlags diatur ke LOAD_WITH_ALTERED_SEARCH_PATH, LoadLibraryEx menggunakan jalur pencarian yang diubah. Perilaku tidak terdefinisi saat bendera LOAD_WITH_ALTERED_SEARCH_PATH diatur, dan lpFileName menentukan jalur relatif.

Fungsi SetDllDirectory dapat digunakan untuk mengubah jalur pencarian. Solusi ini lebih baik daripada menggunakan SetCurrentDirectory atau hard-coding jalur lengkap ke DLL. Namun, ketahuilah bahwa menggunakan SetDllDirectory secara efektif menonaktifkan mode pencarian DLL aman saat direktori yang ditentukan berada di jalur pencarian dan tidak aman untuk utas. Jika memungkinkan, sebaiknya gunakan AddDllDirectory untuk mengubah jalur pencarian proses default. Untuk informasi selengkapnya, lihat Urutan Pencarian Pustaka Dynamic-Link.

Aplikasi dapat menentukan direktori untuk mencari satu panggilan LoadLibraryEx dengan menggunakan bendera LOAD_LIBRARY_SEARCH_* . Jika lebih dari satu bendera LOAD_LIBRARY_SEARCH ditentukan, direktori akan dicari dalam urutan berikut:

  • Direktori yang berisi DLL (LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR). Direktori ini hanya dicari untuk dependensi DLL yang akan dimuat.
  • Direktori aplikasi (LOAD_LIBRARY_SEARCH_APPLICATION_DIR).
  • Jalur secara eksplisit ditambahkan ke jalur pencarian aplikasi dengan fungsi AddDllDirectory (LOAD_LIBRARY_SEARCH_USER_DIRS) atau fungsi SetDllDirectory . Jika lebih dari satu jalur telah ditambahkan, urutan di mana jalur dicari tidak ditentukan.
  • Direktori System32 (LOAD_LIBRARY_SEARCH_SYSTEM32).

Windows 7, Windows Server 2008 R2, Windows Vista, dan Windows Server 2008: Bendera LOAD_LIBRARY_SEARCH_ tersedia pada sistem yang telah KB2533623 diinstal. Untuk menentukan apakah bendera tersedia, gunakan GetProcAddress untuk mendapatkan alamat fungsi AddDllDirectory, RemoveDllDirectory, atau SetDefaultDllDirectories . Jika GetProcAddress berhasil, bendera LOAD_LIBRARY_SEARCH_ dapat digunakan dengan LoadLibraryEx.

Jika aplikasi telah menggunakan fungsi SetDefaultDllDirectories untuk membuat jalur pencarian DLL untuk proses dan tidak ada bendera LOAD_LIBRARY_SEARCH_* yang digunakan, fungsi LoadLibraryEx menggunakan jalur pencarian DLL proses alih-alih jalur pencarian standar.

Jika jalur ditentukan dan ada file pengalihan yang terkait dengan aplikasi, fungsi LoadLibraryEx mencari modul di direktori aplikasi. Jika modul ada di direktori aplikasi, LoadLibraryEx mengabaikan spesifikasi jalur dan memuat modul dari direktori aplikasi. Jika modul tidak ada di direktori aplikasi, fungsi memuat modul dari direktori yang ditentukan. Untuk informasi selengkapnya, lihat Pengalihan Pustaka Dynamic Link.

Jika Anda memanggil LoadLibraryEx dengan nama perakitan tanpa spesifikasi jalur dan perakitan tercantum dalam manifes yang kompatibel dengan sistem, panggilan secara otomatis dialihkan ke rakitan berdampingan.

Keterangan Keamanan

LOAD_LIBRARY_AS_DATAFILE tidak mencegah proses lain memodifikasi modul saat dimuat. Karena ini dapat membuat aplikasi Anda kurang aman, Anda harus menggunakan LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE alih-alih LOAD_LIBRARY_AS_DATAFILE saat memuat modul sebagai file data, kecuali Anda secara khusus perlu menggunakan LOAD_LIBRARY_AS_DATAFILE. Menentukan LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE mencegah proses lain memodifikasi modul saat dimuat. Jangan tentukan LOAD_LIBRARY_AS_DATAFILE dan LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE dalam panggilan yang sama.

Jangan gunakan fungsi SearchPath untuk mengambil jalur ke DLL untuk panggilan LoadLibraryEx berikutnya. Fungsi SearchPath menggunakan urutan pencarian yang berbeda dari LoadLibraryEx dan tidak menggunakan mode pencarian proses yang aman kecuali ini diaktifkan secara eksplisit dengan memanggil SetSearchPathMode dengan BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE. Oleh karena itu, SearchPath kemungkinan akan terlebih dahulu mencari direktori kerja pengguna saat ini untuk DLL yang ditentukan. Jika penyerang telah menyalin versi BERBAHAYA DLL ke direktori kerja saat ini, jalur yang diambil oleh SearchPath akan menunjuk ke DLL berbahaya, yang kemudian akan dimuat LoadLibraryEx .

Jangan membuat asumsi tentang versi sistem operasi berdasarkan panggilan LoadLibraryEx yang mencari DLL. Jika aplikasi berjalan di lingkungan di mana DLL secara sah tidak ada tetapi versi DLL berbahaya ada di jalur pencarian, versi berbahaya DLL dapat dimuat. Sebagai gantinya, gunakan teknik yang direkomendasikan yang dijelaskan dalam Mendapatkan Versi Sistem.

Untuk diskusi umum tentang masalah keamanan DLL, lihat Keamanan Pustaka Dynamic-Link.

Contoh

Contoh kode berikut menunjukkan panggilan ke LoadLibraryExA.

//Load the FMAPI DLL
hLib = ::LoadLibraryEx(L"fmapi.dll", NULL, NULL);
if ( !hLib )
{
      wprintf(L"Could not load fmapi.dll, Error #%d.\n", GetLastError());
      return;
}

Untuk contoh tambahan, lihat Mencari Teks untuk Nomor Kode Kesalahan.

Catatan

Header libloaderapi.h mendefinisikan LoadLibraryEx sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta pra-prosesor UNICODE. Mencampur penggunaan alias encoding-netral dengan kode yang tidak mengodekan-netral dapat menyebabkan ketidakcocokan yang mengakibatkan kesalahan kompilasi atau runtime. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Target Platform Windows
Header libloaderapi.h (termasuk Windows.h)
Pustaka Kernel32.lib
DLL Kernel32.dll

Lihat juga

DllMain

Fungsi Pustaka Dynamic-Link

Urutan Pencarian Pustaka Dynamic-Link

Keamanan Pustaka Dynamic-Link

FindResource

FreeLibrary

GetProcAddress

GetSystemDirectory

GetWindowsDirectory

LoadLibrary

LoadResource

OpenFile

Penautan Dinamis Run-Time

SearchPath

SetDllDirectory

SetErrorMode