linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
阅读:1208回复:5

大牛们都进来,删除一个文件的时候,我想把另外一个目录下的某一个文件也删掉,如何做?

楼主#
更多 发布于:2007-07-11 10:52
大牛们都进来,删除一个文件的时候,我想把另外一个目录下的某一个文件也删掉,如何做
在孤独和无助中缓慢前行...
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2007-07-13 14:44
删除一个文件是在SfCleanupClose()中判断吗?
在孤独和无助中缓慢前行...
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
板凳#
发布于:2007-07-13 15:03
拦截IRP_MJ_SET_INFORMATION - FileDispositionInformation;
人总在矛盾中徘徊。。。
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
地板#
发布于:2007-07-13 17:21
devia兄,拦截IRP_MJ_SET_INFORMATION - FileDispositionInformation;

改名的时候可作如下判断:
BOOLEAN IsRename = (irpSp->Parameters.SetFile.FileInformationClass ==                      FileRenameInformation);

删除的时候如何判断?
在孤独和无助中缓慢前行...
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2007-07-13 17:25
1、文件的Delete
    Delete实际上是通过向FSD发送IRP_MJ_SET_INFORMATION的IRP,并把IrpSp-> Parameters.SetFile.FileInformationClass设置为FileDispositionInformation,用一个 FILE_DISPOSITION_INFORMATION结构填充buffer来执行的。

    fdi.DeleteFile=TRUE;

    irpsp->MajorFunction=IRP_MJ_SET_INFORMATION;
    irpsp->Parameters.SetFile.Length = sizeof(FILE_DISPOSITION_INFORMATION);
    irpsp->Parameters.SetFile.FileInformationClass = FileDispositionInformation;
    irpsp->Parameters.SetFile.DeleteHandle = (HANDLE)handle;

2 文件的Rename
    类似于Delete,Rename是向FSD发送IRP_MJ_SET_INFORMATION的IRP,把IrpSp-> Parameters.SetFile.FileInformationClass设置为FileRenameInformation,填充buffer 为FILE_RENAME_INFORMATION结构。

    fri.ReplaceIfExists=TRUE;
    fri.RootDirectory=0;//Set fri.FileName to full path name.
    fri.FileNameLength=wcslen(filename)*2;
    wcscpy(fri.FileName,filename);//If the RootDirectory member is NULL, and the file is being moved to a different directory, this member specifies the full pathname to be assigned to the file.

    irpsp->MajorFunction=IRP_MJ_SET_INFORMATION;
    irpsp->Parameters.SetFile.Length = sizeof(FILE_FILE_RENAME_INFORMATION);
    irpsp->Parameters.SetFile.FileInformationClass = FileRenameInformation;
在孤独和无助中缓慢前行...
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2007-07-13 17:30
呵呵,这些内容其实在tooflat版主的
NTSTATUS
SfSetInformation(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
{}
方法中已有答案。多谢devia版主的热心指点啊。
在孤独和无助中缓慢前行...
游客

返回顶部