abc13271552
驱动小牛
驱动小牛
  • 注册日期2007-08-13
  • 最后登录2023-12-05
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望552点
  • 贡献值0点
  • 好评度160点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:862回复:3

使用FileObject写文件尾的问题,(请看下代码,帮分析一下)

楼主#
更多 发布于:2007-11-05 10:12
BOOLEAN SfAddTailFalg(   IN PDEVICE_OBJECT DeviceObject,
                         IN PFILE_OBJECT FileObject
                         )
{
    PHOOK_EXTENSION  hookExt = (PHOOK_EXTENSION)DeviceObject->DeviceExtension;
    IO_STATUS_BLOCK IoStatus = {0};
    NTSTATUS Status;
//    PUCHAR Buffer;
    LARGE_INTEGER ByteOffset;
//    ULONG CurOffset =0;
//    BOOLEAN EndOfFile = FALSE;
    FILE_STANDARD_INFORMATION fsi;
//    IO_STATUS_BLOCK  IoStatusBlock;
    UCHAR pBuff[4]={0};

    if ( !FilemonQueryFile(                    
        DeviceObject,            
        FileObject,                
        FileStandardInformation,        
        &fsi,                                
        sizeof(FILE_STANDARD_INFORMATION)    
                    ) )
    {
        return FALSE;
    }
    //判断是否是加密文件
    ByteOffset.QuadPart = fsi.EndOfFile.QuadPart -4 ; //尾部
    

    Status = SfReadWriteSynchronously (
                //    DeviceObject,
                    hookExt->FileSystem,
                    FileObject,
                    IRP_MJ_READ,
                    &IoStatus,
                    pBuff,
                    4, //sizeof(Buff),
                    &ByteOffset,
                    0);
        if ( !NT_SUCCESS( Status ) ){
            return FALSE;
        }

    DbgPrint("%s\n", "AddTailFlag");
    return TRUE;
}
这部分是读4个字节,可正确读出
驱网无线,快乐无限
abc13271552
驱动小牛
驱动小牛
  • 注册日期2007-08-13
  • 最后登录2023-12-05
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望552点
  • 贡献值0点
  • 好评度160点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-11-05 10:17
BOOLEAN SfAddTailFalg(   IN PDEVICE_OBJECT DeviceObject,
                         IN PFILE_OBJECT FileObject
                         )
{
    PHOOK_EXTENSION  hookExt = (PHOOK_EXTENSION)DeviceObject->DeviceExtension;
    IO_STATUS_BLOCK IoStatus = {0};
    NTSTATUS Status;
//    PUCHAR Buffer;
    LARGE_INTEGER ByteOffset;
//    ULONG CurOffset =0;
//    BOOLEAN EndOfFile = FALSE;
    FILE_STANDARD_INFORMATION fsi;
//    IO_STATUS_BLOCK  IoStatusBlock;
    UCHAR pBuff[4]={0};

    if ( !FilemonQueryFile(                    
        DeviceObject,            
        FileObject,                
        FileStandardInformation,        
        &fsi,                                
        sizeof(FILE_STANDARD_INFORMATION)    
                    ) )
    {
        return FALSE;
    }
    //判断是否是加密文件
    ByteOffset.QuadPart = fsi.EndOfFile.QuadPart -4 ; //尾部
    

    Status = SfReadWriteSynchronously (
                //    DeviceObject,
                    hookExt->FileSystem,
                    FileObject,
                    IRP_MJ_WRITE,
                    &IoStatus,
                    "Test",
                    4, //sizeof(Buff),
                    &ByteOffset,
                    0);
        if ( !NT_SUCCESS( Status ) ){
            return FALSE;
        }

    DbgPrint("%s\n", "AddTailFlag");
    return TRUE;
}
//这个是写,这个会蓝,在SfReadWriteSynchronously函数中的
    IoSetCompletionRoutine(Irp, &IrpCompletion, 0 , TRUE, TRUE, TRUE);
    Status = IoCallDriver(DeviceObject, Irp);  //在这里蓝掉.
但这个写对写字板是可以的,在word中是不行?
我现在有两个问题,请大家帮忙看看:
1,上层用Read方式打开,在驱动层得到的FileObject,能否用于写标识?
2,在写标识时,以512byte写,是否是必须的,为什么写字板直接可以写上而word不行?
驱网无线,快乐无限
lovemi
驱动牛犊
驱动牛犊
  • 注册日期2007-10-30
  • 最后登录2007-11-29
  • 粉丝0
  • 关注0
  • 积分660分
  • 威望67点
  • 贡献值0点
  • 好评度66点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-11-05 11:06
zhsh200
驱动牛犊
驱动牛犊
  • 注册日期2005-01-27
  • 最后登录2013-07-18
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望212点
  • 贡献值1点
  • 好评度54点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-11-05 12:42
反汇编别人的看一下, 就知道了,  而且一些函数的名称都跟人家的是一样的....

牛啊...
游客

返回顶部