ceabie
驱动牛犊
驱动牛犊
  • 注册日期2006-08-23
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分599分
  • 威望140点
  • 贡献值0点
  • 好评度59点
  • 原创分1分
  • 专家分0分
阅读:1732回复:5

在create中怎么判断文件是 创建 还是 打开?

楼主#
更多 发布于:2007-06-16 22:48
我想过滤掉文件的打开操作,只记录创建,试了好几种方法都不行。

按照:
disposition = (currentIrpStack->Parameters.Create.Options >> 24) & 0xFF;
(disposition != FILE_OPEN)? "Create" :"Open";
不论是磁盘上文件是否真的存在,输出结果都是Create。

IRP_MJ_DIRECTORY_CONTROL 下 有一个 FileBothDirectoryInformation,从的返回结果STATUS_NO_SUCH_FILE 倒是好判断文件是否存在,但向下发送FileBothDirectoryInformation的IRP不会弄。 调用修改过的filemon里的FilemonQueryFile 在create完成后查询,却导致蓝屏(0x23,irp 损坏)。

请教各位大侠,有啥好方法可以解决?

------------------------------------------------------------------------------------------------
后来仔细地看了一下msdn,IRP_MJ_CREATE下有一个 Irp->IoStatus.Information ,返回值的附加信息,他们的标志是:
#define FILE_SUPERSEDED  0x00000000
#define FILE_OPENED          0x00000001
#define FILE_CREATED          0x00000002
#define FILE_OVERWRITTEN 0x00000003
#define FILE_EXISTS            0x00000004
#define FILE_DOES_NOT_EXIST 0x00000005

我试了一下,只是打开文件的,create后为FILE_OPENED
如果是创建,create后为FILE_CREATED
不知道大家觉得这方法怎么样.

但我还不太清楚FILE_SUPERSEDED  是什么意思。在close返回中也有。
XeChini
yandong_8212
驱动小牛
驱动小牛
  • 注册日期2006-07-28
  • 最后登录2011-02-11
  • 粉丝0
  • 关注0
  • 积分1046分
  • 威望464点
  • 贡献值1点
  • 好评度173点
  • 原创分0分
  • 专家分1分
沙发#
发布于:2007-06-20 13:28
CREATE NEW会有明显的标示,但是OPEN可能没有标示,OPEN的时候如果没有标示,需要自己查询
商务MSN:YanDong_8212@163.com
ling592
驱动牛犊
驱动牛犊
  • 注册日期2007-04-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分250分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-06-20 14:17
我是这样判断文件是否已经存在的
用IoCreateFileSpecifyDeviceObjectHint打开需要判断的文件,若返回值为STATUS_OBJECT_NAME_NOT_FOUND则说明文件不存在
ling592
驱动牛犊
驱动牛犊
  • 注册日期2007-04-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分250分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-06-20 14:18
我是这样判断文件是否已经存在的
用IoCreateFileSpecifyDeviceObjectHint打开需要判断的文件,若返回值为STATUS_OBJECT_NAME_NOT_FOUND则说明文件不存在
ronaldo
驱动小牛
驱动小牛
  • 注册日期2004-12-17
  • 最后登录2011-08-02
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望277点
  • 贡献值0点
  • 好评度104点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-06-21 10:22
如何判断是否是系统打开的文件
ceabie
驱动牛犊
驱动牛犊
  • 注册日期2006-08-23
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分599分
  • 威望140点
  • 贡献值0点
  • 好评度59点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2007-06-21 16:30
检查进程名,楼上的问题大概可以解决
XeChini
游客

返回顶部