阅读:1454回复:6
请教大牛,文件过滤驱动能否在读写时区分不同进程?
利用文件过滤驱动做文件加密,在读写文件时,根据进程进行判别,允许某些进程读取时解密,而其他进程读取时不解密,反过来写的时候也一样。这个有可能做到吗?
我试试发现读写时简单通过PsGetCurrentProcess()取得的经常是System,不可行。 文件全路径可以通过在Create的时候缓存FileObject->FsContext和文件全路径,在读写时进行检索,我在想是否可以用类似的思路解决读写时识别进程的问题,但不知道使用哪个变量可以进行关联,FileObject->FsContext2可以吗?请有经验的大牛指教。 |
|
沙发#
发布于:2007-03-13 21:31
仔细想了一下,因为CacheManager的存在,这样的功能恐怕实现不了,如果退一步的话,对于非指定的进程,把他们的读写IRP都返回失败,是不是应该可以做到?
|
|
板凳#
发布于:2007-03-13 21:46
可以在filter驱动中得到进程块及进程路径
|
|
|
地板#
发布于:2007-03-14 06:16
almost in most cases...
|
|
|
地下室#
发布于:2007-03-14 08:56
引用第2楼znsoft于2007-03-13 21:46发表的“”: How?请大牛指点一下。PsGetCurrentProcess()好像不行。我只要进程名就行啦,进程全路径拿起来很麻烦,倒是没有必要。 |
|
5楼#
发布于:2007-03-14 10:19
引用第4楼youngwinter于2007-03-14 10:56发表的“”: 去kernel版搜索一下,会出来一大堆,还有源代码可以拿~~ |
|
|
驱动小牛
|
6楼#
发布于:2007-03-14 13:30
对于Filter,你在分发函数里面获得的进程就是发起这个IRP的进程,比如一个应用程序CreateFile,到你的CreateDispatch里面,然后PsGetXXX获得的就是应用程序的进程.如果是在内核线程中ZwCreateFile,那这个时候的IRP通常也会到CreateDispatch中,进程就变成System了.
进程名: ULONG ProcessNameOffset = 0x1fc; #define GetCurrentProcessName() ( \ (PUCHAR) PsGetCurrentProcess() + ProcessNameOffset \ ) |
|