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参数来判断。