系統架構設計
Lertaro 採用多處理程序隔離與模組化分層設計,確保在實現毫秒級檢索與視窗整合的同時,兼顧執行安全與穩定性。
lff.exe選用命令列用戶端依使用者與工作階段隔離的搜尋管道
Lertaro.App.exe標準使用者 · WPF搜尋視窗、設定、預覽與外掛搜尋來源
App ↔ Service
LertaroPipe搜尋請求 ↔ 結果索引服務
Lertaro.Service.exe --serviceLocalSystem · Windows 服務NTFS / ReFS 中繼資料、FAT / exFAT 監聽與網路目錄快取
App ↔ Hook
Lertaro_Hook_Events / Cmds視窗事件 ↔ 命令掛鉤與視窗配接
Lertaro.Service.exe --hook互動使用者工作階段鍵盤與滑鼠掛鉤、作用中路徑擷取、檔案對話方塊整合
Service 為已登入的使用者工作階段啟動 Hook。 僅系統管理員帳戶可提升權限執行 Hook。
共用類別庫:載入程序中,並非額外服務
Lertaro.Core索引快照、模糊比對與 IPC 契約
Lertaro.PluginSdkApp:搜尋與介面;Hook:視窗配接;Service:同時載入別名與翻譯
1. 三處理程序隔離模型
為了規避單一元件異常導致整個系統當機,並將 Windows 特權限制在最小範圍內,Lertaro 的執行階段被明確劃分為三個獨立的處理程序:
1. 背景索引服務(Lertaro.Service.exe)
- 執行身分:以 Windows 系統級
LocalSystem身分常駐執行的 Windows 服務。 - 職責範圍:負責全盤檔案索引與增量監聽。直接讀取 NTFS / ReFS 磁碟底層的 USN 變更記錄檔與 $MFT 主檔案表;即時監聽 FAT32 / exFAT 磁碟變更;定時抓取並快取 SMB / NAS 網路共用。
- 安全與效能考量:執行在 SYSTEM 級別使服務無需快顯任何 UAC 提權快顯視窗即可直接讀取原始磁碟卷的中繼資料;同時透過高效能具名管道向使用者態 App 返回檢索結果,避免前景 UI 處理程序持有不必要的全域高權限。
2. 使用者互動主程式(Lertaro.App)
- 執行身分:標準 Windows 使用者態、Session 隔離的 WPF 前景桌面應用程式。
- 職責範圍:承載快速搜尋置中浮動視窗、完整主搜尋視窗、設定中心、全域快速鍵分發、動作選單(
Ctrl+O)以及 QuickLook 檔案即時預覽介面。 - IPC 橋樑與 CLI 裝載:透過雙向具名管道
LertaroPipe與背景 Service 溝通(Core.Services.Search.SearchService是 App 側的客戶端);同時,App 自身還裝載了一條面向目前使用者的專屬具名管道服務(AppSearchPipeService),使外部伴隨工具(如lff命令列工具)能直接複用 App 已經建置好的記憶體別名表、外掛模組提供者與網路磁碟快取,無需重複初始化。
3. 全域鍵盤攔截與視窗適配處理程序(Lertaro.Service --hook)
- 執行身分:由背景服務拉起的獨立輔助處理程序。只有當登入帳號是真正的管理員時,它才會以提權方式啟動;否則它沿用使用者自己的權杖,因此下述的權限突破只在這類機器上可用。
- 職責範圍:裝載低階全域鍵盤攔截(Low-Level Keyboard Hook)與滑鼠全域監聽。
- UIPI 權限突破與當機隔離:在 Windows 安全體系中,低完整性級別的使用者態處理程序無法向以管理員身分執行的最高權限視窗發送視窗訊息或模擬輸入(UIPI 隔離)。透過在該 Hook 處理程序中執行視窗整合適配器(
IActivePathCollector、IFileDialogAdapter、IInlineSearchAdapter),只要 Hook 是以提權方式啟動的,Lertaro 就能讀取並驅動由管理員身分啟動的檔案總管、Total Commander 或第三方對話方塊。同時,即使底層攔截因第三方遊戲的反作弊模組產生異常,也不會影響主 App 處理程序的正常執行。
2. 共用核心層(Shared Core Library)
Lertaro.Core 是被 Service、App 和 Hook 處理程序同時引用的基礎類別庫,主要包含以下關鍵模組:
- 自研 fzf 模糊比對引擎(
Core/SearchIndex/Fzf/*):復刻並最佳化了知名fzf演算法的跳躍字元模糊比對、子字串分段與字元級反白計算,配合SearchQueryParser實現磁碟機定向與路徑模式切分。 - 欄式記憶體索引(
Core/IndexV2/*):採用記憶體對應欄式快照(Columnar Snapshot)與記憶體增量覆蓋層(Delta Overlay),實現億級檔案項目的亞毫秒級檢索。 - 二進位 IPC 通訊契約:定義了
SearchRequestMessage、SearchResponseBinarySerializer等標準二進位資料通訊協定,確保多處理程序間零拷貝高效序列化。 - 統一多處理程序記錄系統(
Logger):分別輸出至service.log、app.log與hook.log,並由 App 的設定中心記錄檢視器統一代理讀取與呈現。
3. 外掛模組系統在架構中的定位
所有第三方及內建外掛模組均基於 Lertaro.PluginSdk 建置,由 Lertaro.App 處理程序在啟動時自動反映掃描並載入:
- 零特權直接通訊:外掛模組自身的程式碼與載入它的處理程序在同程序內執行——通常是 App,但 Service 也會載入的兩種類別請看下一項。程式碼本身不會自行跨越處理程序邊界,因此需要註冊自訂目錄索引的外掛模組會透過
DirectoryIndexerService委派這項工作,而不是自己去周遊磁碟。 - 選擇性雙重載入機制:搜尋來源、動作與介面擴充元件僅在 App 處理程序中執行。有三類元件會被額外載入到其他處理程序:視窗與檔案對話方塊適配器(
IActivePathCollector、IFileDialogAdapter、IInlineSearchAdapter)會進入 Hook 處理程序,以處理跨權限的視窗自動化;而IAliasProvider與ITranslationProvider也會由 Service 載入(ServicePluginLoader),因為索引器要建置別名資料列,需要與介面顯示相同的轉寫與命名。