reborn
驱动小牛
驱动小牛
  • 注册日期2006-07-21
  • 最后登录2007-10-13
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望144点
  • 贡献值0点
  • 好评度143点
  • 原创分0分
  • 专家分0分
阅读:1329回复:1

发IRP删除文件问题请教!

楼主#
更多 发布于:2007-07-16 11:21
我在Sfilter中自己IRP 来实现删除一个文件的功能:但是在// 安装IRP完成例程
    //
    IoSetCompletionRoutine(Irp, SfMyDeleteFileCompleted, 0, TRUE, TRUE, TRUE);
    (void) IoCallDriver(DeviceObject, Irp); 之后,程序就会跳进
NTSTATUS
SfPassThrough (
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
{
{
       ASSERT(!IS_MY_CONTROL_DEVICE_OBJECT( DeviceObject ));

   ASSERT(IS_MY_DEVICE_OBJECT( DeviceObject ));

  
   IoSkipCurrentIrpStackLocation( Irp );

    
        return IoCallDriver( ((PSFILTER_DEVICE_EXTENSION) DeviceObject->DeviceExtension)->AttachedToDeviceObject, Irp );

}
默认例程中,到第一句就蓝屏了,把前两句屏蔽掉到return也蓝屏,到底是怎么回事啊?请高人指教!
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2007-07-16 14:47
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;
在孤独和无助中缓慢前行...
游客

返回顶部