阅读:2024回复:10
如何让IRP_MJ_CREATE返回成功
我在IRP_MJ_CREATE中拦截到用户一个打开文件的操作。。
这个文件其实在磁盘上没有。。 但是我想要用户在调用CreateFile的时候,返回成功。。。 请问应该怎么做。。。 我尝试了直接设置 Data->IoStatus.Status = STATUS_SUCCESS; Data->IoStatus.Information = FILE_CREATED; 但是没有什么效果。。 我感觉应该给用户返回一个句柄之类的东西,但是不知道具体怎么做。。 求大家给点思路 |
|
沙发#
发布于:2007-10-04 03:13
上面写错了
Data->IoStatus.Information = FILE_OPENED; 不过结果还是一样,返回找不到文件。。 |
|
板凳#
发布于:2007-10-04 06:38
至少你得把fileobject伪造好啊~~
有几个结构要xxx啊,不然自然是未遂状态啊~ |
|
|
地板#
发布于:2007-10-04 16:07
是否只需要将FILE_OBJECT结构填充好,就ok了?
没有其它需要完成的事情了吧。。 |
|
地下室#
发布于:2007-10-04 18:01
大概看了以下FILE_OBJECT结构。。
有一些标志属性是可以很简单填充的,但是不知道下面两个该怎么填。。。 PVOID FsContext; PVOID FsContext2; |
|
5楼#
发布于:2007-10-04 18:31
FsContext是文件系统填写的,如果你不打算把irp发给文件系统,你可以自己设置这个值,不过这样做的话,随后所有对该文件的操作你都得拦截,不能交给文件系统处理了,难度不小。
|
|
6楼#
发布于:2007-10-04 19:25
FltObjects->FileObject->FsContext = ExAllocatePool(NonPagedPool,1024);;//随便填充的,因为不知道怎么填
FltObjects->FileObject->ReadAccess = 1; FltObjects->FileObject->WriteAccess = 0; FltObjects->FileObject->DeleteAccess = 0; FltObjects->FileObject->SharedRead = 1; FltObjects->FileObject->SharedWrite = 0; FltObjects->FileObject->SharedDelete = 0; FltObjects->FileObject->Flags = FO_CACHE_SUPPORTED | FO_SYNCHRONOUS_IO; Data->IoStatus.Status = STATUS_SUCCESS; Data->IoStatus.Information = FILE_OPENED; return FLT_POSTOP_FINISHED_PROCESSING; 我大概填了一下这些值。。。不过CreateFile还是不能返回成功。。。 |
|
7楼#
发布于:2007-10-05 17:04
引用第5楼tooflat于2007-10-04 18:31发表的 : 嘿嘿~好东西~ |
|
|
8楼#
发布于:2007-10-06 18:09
能具体再提示一下吗? |
|
驱动小牛
|
9楼#
发布于:2007-10-12 11:07
相当于自己小型做个文件系统.
|
|
10楼#
发布于:2007-10-12 11:22
FSCONTEXT 就是FCB,如果随便添写我觉得可能不是特别好,不过没有试过,你可以根据里面的东西相应的设置一下看看可不可以。FSContext2可以为空的。
|
|