Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Windows 綜合教學 >> 關於 Windows

Windows DLL 檔案別名機制與 KnownDLLs 註冊表深度解析

編輯:關於 Windows

Windows 透過註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs 維護核心 DLL 別名對應,確保關鍵系統元件(如 kernel32.dll)永遠從 System32 載入,防止 DLL 劫持與版本衝突。

KnownDLLs 運作原理

  • 鍵名:不含 .dll 副檔名(如 kernel32)。
  • 值:實際檔名(如 kernel32.dll)。
  • 當 LoadLibrary("kernel32.dll") 未指定完整路徑時,載入器優先檢查 KnownDLLs,命中則直接從 System32 載入,忽略當前目錄同名檔案。
  • 此機制僅對 .dll 副檔名 生效,載入器會自動截斷副檔名比對鍵名。

修改 KnownDLLs 達到 DLL 重導向

透過修改註冊表值,可將系統 DLL 導向自訂版本(如偵錯版、相容性修補版),但極度不建議於生產環境操作,可能導致系統不穩或無法開機。測試環境請務必備份機碼。

COM 物件 DLL 本地載入技巧:.local 檔案

若應用程式 myapp.exe 需強制優先載入同目錄下的私有 DLL(避免與系統/其他軟體版本衝突),只需在同目錄建立空檔案 myapp.exe.local,啟動時載入器會優先搜尋應用程式目錄。

  • 支援:Windows 2000 / XP / Server 2003 / Vista / 7 / 8 / 10 / 11。
  • 不支援:Windows 98 / Me。
  • 此為「應用程式目錄優先」舊版相容機制,現代應用建議使用 Side-by-Side 組件清單(Manifest)管理相依性。

安全性啟示

  • KnownDLLs 是防禦 DLL 搜尋順序劫持的核心機制之一。
  • 開發者應避免依賴當前目錄載入 DLL,改用完整路徑或 SetDllDirectory/AddDllDirectory 控制搜尋順序。
  • 部署原則:私有 DLL 放應用程式目錄 + .local 檔案;共用 DLL 走 SxS 清單或安裝至 System32(需簽章驗證)。
Copyright © Windows教程網 All Rights Reserved