hongpengtao
驱动小牛
驱动小牛
  • 注册日期2006-03-16
  • 最后登录2015-06-03
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望190点
  • 贡献值0点
  • 好评度104点
  • 原创分0分
  • 专家分0分
阅读:1740回复:4

tooflat 大侠 请考如何构造MJ_CLEANUP和MJ_CLOSE的IRP

楼主#
更多 发布于:2007-01-25 18:22
  我想在SfCreate完成后
status = IoCallDriver( ((PSFILTER_DEVICE_EXTENSION) DeviceObject->DeviceExtension)->AttachedToDeviceObject, Irp );
过滤将irp取消
使用代码
Irp->IoStatus.Status = STATUS_ACCESS_DENIED;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
发现文件被占用了不能删除移动

想通过构造MJ_CLEANUP和MJ_CLOSE的IRP关了要个以经占用的文件
hongpengtao
驱动小牛
驱动小牛
  • 注册日期2006-03-16
  • 最后登录2015-06-03
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望190点
  • 贡献值0点
  • 好评度104点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-01-26 09:38
顶一下自己
正在阅读

  
OSR Technical Articles

Building IRPs to Perform I/O
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-01-26 09:39
发送IRP_CLEANUP和IRP_CLOSE,可以直接使用IoCancelFileOpen,不过这样是不安全的,版上应该讨论过很多次了。


/////////////////////////////////////////////////////////////////////////////////

直接构造cleanup irp如下, close没试过,应该差不多。

NTSTATUS
SfIssueCleanupIrpSynchronously(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp,
    IN PFILE_OBJECT FileObject
    )
{
    PIO_STACK_LOCATION    irpSp = NULL;
    IO_STATUS_BLOCK        iosb;
    KEVENT                event;

    KeInitializeEvent(&event, NotificationEvent, FALSE);
    KeClearEvent(&FileObject->Event);

    Irp->Tail.Overlay.OriginalFileObject = FileObject;
    Irp->Tail.Overlay.Thread = PsGetCurrentThread();
    Irp->Overlay.AsynchronousParameters.UserApcRoutine =(PIO_APC_ROUTINE) NULL;
    Irp->RequestorMode = KernelMode;
    Irp->UserEvent = &event;
    Irp->UserIosb = &iosb;
    Irp->Flags = IRP_SYNCHRONOUS_API | IRP_CLOSE_OPERATION;

    irpSp = IoGetNextIrpStackLocation(Irp);
    irpSp->MajorFunction = IRP_MJ_CLEANUP;
    irpSp->FileObject = FileObject;

    if (STATUS_PENDING == IoCallDriver(DeviceObject, Irp)) {
        KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, NULL);
    }

    return iosb.Status;
}
hongpengtao
驱动小牛
驱动小牛
  • 注册日期2006-03-16
  • 最后登录2015-06-03
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望190点
  • 贡献值0点
  • 好评度104点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-01-26 10:11
谢谢 老大我去试试
hongpengtao
驱动小牛
驱动小牛
  • 注册日期2006-03-16
  • 最后登录2015-06-03
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望190点
  • 贡献值0点
  • 好评度104点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-01-26 13:07
再次谢谢老大

我的问题以解决
游客

返回顶部