lemony
驱动牛犊
驱动牛犊
  • 注册日期2005-12-09
  • 最后登录2013-03-24
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
阅读:2024回复:10

如何让IRP_MJ_CREATE返回成功

楼主#
更多 发布于:2007-10-04 02:37
我在IRP_MJ_CREATE中拦截到用户一个打开文件的操作。。

这个文件其实在磁盘上没有。。

但是我想要用户在调用CreateFile的时候,返回成功。。。

请问应该怎么做。。。

我尝试了直接设置
Data->IoStatus.Status = STATUS_SUCCESS;
Data->IoStatus.Information = FILE_CREATED;

但是没有什么效果。。

我感觉应该给用户返回一个句柄之类的东西,但是不知道具体怎么做。。

求大家给点思路
lemony
驱动牛犊
驱动牛犊
  • 注册日期2005-12-09
  • 最后登录2013-03-24
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-10-04 03:13
上面写错了

Data->IoStatus.Information = FILE_OPENED;

不过结果还是一样,返回找不到文件。。
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
板凳#
发布于:2007-10-04 06:38
至少你得把fileobject伪造好啊~~
有几个结构要xxx啊,不然自然是未遂状态啊~
没有战争就没有进步 X3工作组 为您提供最好的军火
lemony
驱动牛犊
驱动牛犊
  • 注册日期2005-12-09
  • 最后登录2013-03-24
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-10-04 16:07
是否只需要将FILE_OBJECT结构填充好,就ok了?

没有其它需要完成的事情了吧。。
lemony
驱动牛犊
驱动牛犊
  • 注册日期2005-12-09
  • 最后登录2013-03-24
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-10-04 18:01
大概看了以下FILE_OBJECT结构。。

有一些标志属性是可以很简单填充的,但是不知道下面两个该怎么填。。。

PVOID  FsContext;
PVOID  FsContext2;
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-10-04 18:31
FsContext是文件系统填写的,如果你不打算把irp发给文件系统,你可以自己设置这个值,不过这样做的话,随后所有对该文件的操作你都得拦截,不能交给文件系统处理了,难度不小。
lemony
驱动牛犊
驱动牛犊
  • 注册日期2005-12-09
  • 最后登录2013-03-24
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
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还是不能返回成功。。。
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
7楼#
发布于:2007-10-05 17:04
引用第5楼tooflat于2007-10-04 18:31发表的  :
FsContext是文件系统填写的,如果你不打算把irp发给文件系统,你可以自己设置这个值,不过这样做的话,随后所有对该文件的操作你都得拦截,不能交给文件系统处理了,难度不小。


嘿嘿~好东西~
没有战争就没有进步 X3工作组 为您提供最好的军火
lemony
驱动牛犊
驱动牛犊
  • 注册日期2005-12-09
  • 最后登录2013-03-24
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-10-06 18:09


能具体再提示一下吗?
yandong_8212
驱动小牛
驱动小牛
  • 注册日期2006-07-28
  • 最后登录2011-02-11
  • 粉丝0
  • 关注0
  • 积分1046分
  • 威望464点
  • 贡献值1点
  • 好评度173点
  • 原创分0分
  • 专家分1分
9楼#
发布于:2007-10-12 11:07
相当于自己小型做个文件系统.
商务MSN:YanDong_8212@163.com
clarence
驱动牛犊
驱动牛犊
  • 注册日期2006-05-08
  • 最后登录2009-09-30
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望97点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-10-12 11:22
FSCONTEXT 就是FCB,如果随便添写我觉得可能不是特别好,不过没有试过,你可以根据里面的东西相应的设置一下看看可不可以。FSContext2可以为空的。
游客

返回顶部