wince中的檔案過濾驅動(FSDSPY)
wince中的檔案過濾系統(FSDSPY)
在wince中實現隱藏檔案,隱藏資料夾,保護檔案不被刪除,阻止建立目錄
注意:所講一切只對HardDisk有效,ROM上的目錄不在此驅動範圍內。
首先,wince5.0中提供了驅動的公共模組,位置所在
%_WINCEROOT%/public/common/oak/drivers/fsd/fsdspy/
我們可以像新增其他驅動一樣將改驅動新增到wince中。
當然包括最基本的登錄檔資訊新增
; HIVE BOOT SECTION
[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/FlashDrv/FATFS/Filters/FSDSPY]
"Dll"="fsdspy.dll"
"Order"=dword:2
; END HIVE BOOT SECTION
當然少不了將驅動的DLL檔案拷貝到wince中
fsdspy.dll $(_FLATRELEASEDIR)/fsdspy.dll NK SH
到此基本上就可以讓你的系統啟動後文件系統filesys.exe就會自動呼叫fsdspy.dll。
下面我們來簡單看看這個驅動
1.file.cpp檔案
這個檔案主要是針對一些檔案基本操作,包括讀,寫,建立等等。
我們只要對其中的FILTER_CreateFileW函式進行改造就可以達到我們想要的效果。
HANDLE FILTER_CreateFileW(
PVOLUME pvol,
HANDLE hProc,
LPCWSTR lpFileName,
DWORD dwAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreate,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile)
這是函式原型,其中有2個引數很重要,分別是lpFileName和dwCreate,lpFileName是檔案的名字,dwCreate引數有下面5種
CREATE_ALWAYS
CREATE_NEW
OPEN_ALWAYS
OPEN_EXISTING
TRUNCATE_EXISTING
其中前2種是新建檔案。
對此,我們可以通過這兩個引數控制對某些檔案的各種操作,也可以防止新建檔案。
2.find.cpp
這個檔案主要是查詢,你可以將他對應到API函式的FindFirstFile,FindNextFile。
我們只要對其中的HANDLE FILTER_FindFirstFileW函式進行改造就可以隱藏檔案甚至資料夾。
HANDLE FILTER_FindFirstFileW(PVOLUME pvol, HANDLE hProc, PCWSTR pwsFileSpec, PWIN32_FIND_DATAW pfd)
在這個函式之中首先我們需要注意的是pwsFileSpec,這個引數就是要查詢的東西。支援萬用字元。比如要隱藏Harddisk下的所有目錄只需過濾“*.*”就可以達到
效果。需要注意的是,非HardDisk下的頂級目錄需要自己判斷pwsFileSpec中帶的路徑。
如果只想隱藏資料夾下面某些檔案,這個麻煩一點,你需要配合FILTER_FindNextFileW函式一起才能達到完美的效果。同樣的也不難,處理pfd引數就可以了,不
過必須在執行完FilterHook對應的函式後做處理。簡單點說就是清空查詢到的資訊,return一個無效控制代碼就可以了。
3.path.cpp
這個檔案包括一些目錄操作和檔案操作。
主要可能用到有下面4個函式
FILTER_CreateDirectoryW建立資料夾
FILTER_RemoveDirectoryW刪除資料夾
FILTER_DeleteFileW刪除檔案
FILTER_MoveFileW修改檔案/資料夾名字
需要過濾可以直接通過pwsNewFileName引數來判斷。