在Windows系統(tǒng)上開發(fā)工作在內(nèi)核模式的設(shè)備驅(qū)動程序是一件極為困難的事情。使用Dokan庫(Dokan Library),您可以非常方便地創(chuàng)建自己的文件系統(tǒng)而不需要編寫設(shè)備驅(qū)動程序。Dokan庫類似于Linux下的FUSE用戶空間文件系統(tǒng),但是它工作在Windows下,其與FUSE(Linux user mode file system)類似。常見的場合貌似在游戲《坦克世界》的插件安裝里。
Dokan庫:
Dokan庫包含一個用戶模式的DLL文件(dokan.dll)以及一個內(nèi)核模式文件系統(tǒng)驅(qū)動(dokan.sys)。Dokan文件系統(tǒng)驅(qū)動一旦安裝,您就可以在Windows上創(chuàng)建和普通文件系統(tǒng)一樣的文件系統(tǒng)。使用Dokan庫創(chuàng)建的文件系統(tǒng)的應(yīng)用程序稱為文件系統(tǒng)應(yīng)用程序。
來自用戶程序的文件操作請求(例如:CreateFile,ReadFile,WriteFile等)將被發(fā)送的 Windows輸入/輸出子系統(tǒng)(運(yùn)行在內(nèi)核模式),請求之后將被發(fā)送到Dokan文件系統(tǒng)驅(qū)動程序(dokan.sys)。通過使用Dokan用戶模式庫文件(dokan.dll)提供的函數(shù),文件系統(tǒng)應(yīng)用程序能夠向文件系統(tǒng)驅(qū)動程序注冊回調(diào)函數(shù)。
文件系統(tǒng)驅(qū)動程序在收到請求后調(diào)用注冊的回調(diào)函數(shù)例程來響應(yīng)請求;卣{(diào)函數(shù)例程的處理結(jié)果將返回給用戶程序。例如:當(dāng)Windows資源管理器請求創(chuàng)建一個目錄,請求“OpenDirectory”將發(fā)送到 Dokan文件系統(tǒng)驅(qū)動程序,然后驅(qū)動程序?qū)⒄{(diào)用文件系統(tǒng)應(yīng)用程序提供的OpenDirectory回調(diào)函數(shù)例程。
函數(shù)例程的處理結(jié)果作為 OpenDirectory請求的響應(yīng)返回給Windows資源瀏覽器。如此一來,Dokan文件系統(tǒng)驅(qū)動程序就如同一個位于用戶程序和文件系統(tǒng)程序之間的代理程序。使用Dokan庫的好處是,它允許程序員開發(fā)更安全也更容易調(diào)試的用戶空間文件系統(tǒng)。