liio
驱动小牛
驱动小牛
  • 注册日期2005-12-24
  • 最后登录2022-06-16
  • 粉丝4
  • 关注1
  • 积分24分
  • 威望343点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1381回复:6

tooflat老大或者konglord进来看看.SfPreCreate的菜菜问题

楼主#
更多 发布于:2007-01-16 16:47
  tooflat老大提供了SfPreCreate的代码.

很激动的把那段函数弄的编译通过.

有几个问题想请教2位高人.

SfPreCreate是放到MJ Create里处理的么.传入的是参数能说明下吗?

Status = IoCallDriver(DevExt->NLExtHeader.AttachedToDeviceObject, Irp);

        if (STATUS_PENDING == Status)
        {
            KeWaitForSingleObject(&MyFileObject->Event, Executive, KernelMode, TRUE, NULL);
            Status = Irp->IoStatus.Status;
        }

        if (NT_SUCCESS(Status) && (STATUS_REPARSE != Status))
        {
            // U can read write file here

下发驱动后.关于文件的读能说说吗?这个时候应该已经完成了文件的打开操作了.是不是可以调用ZwReadFile?好象又没有句柄,具体这里该怎么读呢?请指明.谢谢!!!
konglord
驱动牛犊
驱动牛犊
  • 注册日期2007-01-09
  • 最后登录2007-02-05
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-01-16 17:30
你用tooflat的代码运行了吗? 我运行了以后所有的文件都不能访问了....  好像有问题....
liio
驱动小牛
驱动小牛
  • 注册日期2005-12-24
  • 最后登录2022-06-16
  • 粉丝4
  • 关注1
  • 积分24分
  • 威望343点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2007-01-17 01:51
运行了,什么也没改,放在MJ_CREATE与MJ_READ里都测试过。

比你还惨:STOP:0x50

不运行就没事,晕了。

可否贴出你那部分的代码。或者发到 我 email:chz|at|china-isi.com   (|at| -> @)

如果你需要我也可贴出我的垃圾代码。呵呵

希望能 留个e-mail或者联系方式,以后多交流嘛。

我的联系方法:

e-mail:上面就是,每天都会收发

qq:8454748

Moblie : 15915899552

广州号码
liio
驱动小牛
驱动小牛
  • 注册日期2005-12-24
  • 最后登录2022-06-16
  • 粉丝4
  • 关注1
  • 积分24分
  • 威望343点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2007-01-17 01:54
惟一改的地方就是
DevExt->NLExtHeader.AttachedToDeviceObject
DevExt结构主要就是NLExtHeader

原来是DevExt->AttachedToDeviceObject

原来的结构不清楚
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-01-17 11:29
对复制的FileObject要清除FO_FILE_OBJECT_HAS_EXTENSION标志。

还有你是怎么使用的。
liio
驱动小牛
驱动小牛
  • 注册日期2005-12-24
  • 最后登录2022-06-16
  • 粉丝4
  • 关注1
  • 积分24分
  • 威望343点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2007-01-17 17:44
case IRP_MJ_CREATE:

在此调用了,也就是对文件系统的IRP_MJ_CREATE的处理中调用的....
....

清楚标志是这个吧?

MyFileObject->Flags = FileObject->Flags & ~(FO_FILE_OBJECT_HAS_EXTENSION | FO_STREAM_FILE | FO_HANDLE_CREATED | FO_CLEANUP_COMPLETE);
liio
驱动小牛
驱动小牛
  • 注册日期2005-12-24
  • 最后登录2022-06-16
  • 粉丝4
  • 关注1
  • 积分24分
  • 威望343点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2007-01-17 17:52
调用的具体代码:

SfPreCreate(HookDevice ,Irp ,currentIrpStack,FileObject);

参数来源:
HookDevice ,Irp:

NTSTATUS
ISIFSHookRoutine(
    PDEVICE_OBJECT HookDevice,
    IN PIRP Irp
    )

currentIrpStack,FileObject:

PIO_STACK_LOCATION  currentIrpStack = IoGetCurrentIrpStackLocation(Irp);
PIO_STACK_LOCATION  nextIrpStack    = IoGetNextIrpStackLocation(Irp);

FileObject = currentIrpStack->FileObject;

可以告诉我下面的代码执行完后怎么读文件么?

Status = IoCallDriver(DevExt->NLExtHeader.AttachedToDeviceObject, Irp);

       if (STATUS_PENDING == Status)
       {
           KeWaitForSingleObject(&MyFileObject->Event, Executive, KernelMode, TRUE, NULL);
           Status = Irp->IoStatus.Status;
       }

       if (NT_SUCCESS(Status) && (STATUS_REPARSE != Status))
       {
           // U can read write file here

      //就是在这里应该怎么对文件操作.希望给我提示,谢谢
游客

返回顶部