Minifilter 拦截FileMapping IO事件
IO类型
在Windows上一般常见的两种IO:
- 普通IO, 如通过ReadFile,WriteFile等Windows API进行读写
- FileMapping,通过CreateFile打开一个文件,然后通过CreateFileMapping创建FileMapping对象,通过MapViewOfFile映射,之后就像操作内存一样(memcpy, strcpy等等),这些数据的变更会被操作系统同步到对应的文件上。
Minifilter拦截
针对IO类型的(1),其实,绝大多数人都会在minifilter中拦截,因为很简单,只需要拦截IRP_MJ_WRITE/IRP_MJ_READ就可以了。如下。
{ IRP_MJ_WRITE,
0,
PreWrite,
PostWrite }
每当应用程序调用WriteFile的时候,这两个函数都会进来,然后里面可以做一些过滤,阻断,加密等等。
但是对于(2),FileMapping,可能会有一些迷惑。
FileMapping拦截
比如应用程序这样写文件:
void TestIOFileMapping() {
HANDLE hFile;
hFile = CreateFile(L"testfilemapping.foo",
GENERIC_READ | GENERIC_WRITE, FILE_SHAR