magichere
驱动小牛
驱动小牛
  • 注册日期2007-01-24
  • 最后登录2008-05-07
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望137点
  • 贡献值0点
  • 好评度136点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2007-03-26 09:55
使用这样的 file.$encrypt$  文件标志。会有什么问题呢?
我的程序简单跑的没问题。遇到大文件处理。比如安装OFFICE 。需要建立Temp目录下很多临时文件。这时候就坏掉了。有时候出现文件损坏,或文件标志没有。导致无法解密。目录下的相同扩展名的标志文件小于这种扩展名的文件。
tooflat 指点一下哦。
创造美好的未来生活!!!
magichere
驱动小牛
驱动小牛
  • 注册日期2007-01-24
  • 最后登录2008-05-07
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望137点
  • 贡献值0点
  • 好评度136点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2007-03-26 10:02
这个函数有什么用处?

#define FAT_NTC_FCB                        0x0502
#define NTFS_NTC_FCB                    0x0705

BOOLEAN
SfIsObjectFile(
               IN PFILE_OBJECT FileObject
               )
{
    PFSRTL_COMMON_FCB_HEADER fcb = (PFSRTL_COMMON_FCB_HEADER) FileObject->FsContext;

//    KdPrint(("sfilter!SfIsObjectFile: fcb->NodeTypeCode = %x\n", fcb->NodeTypeCode));

    if (fcb->NodeTypeCode == FAT_NTC_FCB)
        return TRUE;
    else if (fcb->NodeTypeCode == NTFS_NTC_FCB)
        return TRUE;

    return FALSE;
}
创造美好的未来生活!!!
magichere
驱动小牛
驱动小牛
  • 注册日期2007-01-24
  • 最后登录2008-05-07
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望137点
  • 贡献值0点
  • 好评度136点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2007-03-26 11:43
我把所有创建的文件都打出来了。 发现 丢失加密标志的文件 都没有打出来。怎么跳过去了。重要的是,文件还被加密了。55
创造美好的未来生活!!!
qihuiling_0304
驱动牛犊
驱动牛犊
  • 注册日期2007-03-18
  • 最后登录2010-11-15
  • 粉丝0
  • 关注0
  • 积分662分
  • 威望68点
  • 贡献值0点
  • 好评度66点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2007-03-30 00:43
诶呀,大家真厉害...
我做的毕业设计就是这个,还一点都不懂呢...
郁闷
~要有追求卓越的执著~
Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
24楼#
发布于:2007-04-05 16:54
NTSTATUS WdmReadCompletion(IN PDEVICE_OBJECT DebiceObject, IN PIRP Irp, IN PVOID Context)
{
    KEVENT* pEvent = (KEVENT*)Context;

    UNREFERENCED_PARAMETER(Irp);
    UNREFERENCED_PARAMETER(DebiceObject);
    KeSetEvent(pEvent, IO_NO_INCREMENT, FALSE);

    return STATUS_SUCCESS;
}

NTSTATUS WdmRead(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
    PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(Irp);
    NTSTATUS status = STATUS_SUCCESS;
    KEVENT kEvent;
    int i=0;

    LONGLONG FilePointer = IrpStack->Parameters.Read.ByteOffset.QuadPart;
    LONG ReadLen = IrpStack->Parameters.Read.Length;
    KIRQL irql;
    PVOID OldBuffer = NULL;
    PSFILTER_DEVICE_EXTENSION DevExt = (PSFILTER_DEVICE_EXTENSION) DeviceObject->DeviceExtension;

    PAGED_CODE();
    DeviceObject = DeviceObject;
    KdPrint(("Read: %d bytes from file pointer %d.\r\n", (int)ReadLen, (int)FilePointer));

    if (!(Irp->Flags & (IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO)))
    {
        IoSkipCurrentIrpStackLocation(Irp);
        return IoCallDriver(DevExt->AttachedToDeviceObject, Irp);
    }

    do {
        if(FilePointer < 0)
        {
            status = STATUS_INVALID_PARAMETER;
            break;
        }
        else
        {
            if (Irp->MdlAddress)
                OldBuffer = MmGetSystemAddressForMdl(Irp->MdlAddress);
            else if(Irp->AssociatedIrp.SystemBuffer == NULL)
                OldBuffer = Irp->UserBuffer;
            else OldBuffer = Irp->AssociatedIrp.SystemBuffer;

            if(OldBuffer == NULL)
                break;

            KeClearEvent(&kEvent);
            IoSetCompletionRoutine(Irp, WdmReadCompletion, (PVOID)&kEvent, TRUE, TRUE, TRUE);
            status = IoCallDriver(DevExt->AttachedToDeviceObject, Irp);

            if(STATUS_PENDING == status)
            {
                status = KeWaitForSingleObject(&kEvent, Executive, KernelMode, FALSE, NULL);
                ASSERT(STATUS_SUCCESS == status);
            }
        
            KeAcquireSpinLock(&BufferLock, &irql);

            for(i = 0; i < ReadLen; i++)
                ((char*)OldBuffer) = ((char*)OldBuffer)-1;

            KeReleaseSpinLock(&BufferLock, irql);
            return IoCallDriver(DevExt->AttachedToDeviceObject, Irp);
        }        
    } while(0);

    Irp->IoStatus.Status = status;
    IoCompleteRequest(Irp, IO_NO_INCREMENT);
    return status;
}
《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
25楼#
发布于:2007-04-05 17:00
NTSTATUS
SfWriteCompletion(
                 IN PDEVICE_OBJECT DeviceObject,
                 IN PIRP Irp,
                 IN PVOID Context
                 )
{
    PW_R_COMPLETION_STRUCT CompletionCtx = (PW_R_COMPLETION_STRUCT)Context;
    PVOID userBuffer = Irp->UserBuffer;

    DeviceObject = DeviceObject;

    Irp->MdlAddress = CompletionCtx->Mdl;
    Irp->UserBuffer = CompletionCtx->UserBuffer;
    Irp->AssociatedIrp.SystemBuffer = CompletionCtx->AssociatedBuffer;

    ExFreePoolWithTag(userBuffer, SFLT_POOL_TAG);
    ExFreePoolWithTag(CompletionCtx, SFLT_POOL_TAG);

    return STATUS_SUCCESS;
}

NTSTATUS WdmWrite(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
    PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(Irp);
    NTSTATUS status = STATUS_SUCCESS;
    int i = 0;
    LONGLONG FilePointer = IrpStack->Parameters.Write.ByteOffset.QuadPart;
    LONG WriteLen = IrpStack->Parameters.Write.Length;
    KIRQL irql;
    PVOID OldBuffer = NULL;
    PVOID NewBuffer = NULL;
    PSFILTER_DEVICE_EXTENSION DevExt = (PSFILTER_DEVICE_EXTENSION) DeviceObject->DeviceExtension;
    PW_R_COMPLETION_STRUCT pCompletionCtx=NULL;

    PAGED_CODE();
    DeviceObject = DeviceObject;

    KdPrint(("Wirte: %d bytes from file pointer %d.\r\n", (int)WriteLen, (int)FilePointer));

    if (!(Irp->Flags & (IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO)))
    {
        IoSkipCurrentIrpStackLocation(Irp);
        return IoCallDriver(DevExt->AttachedToDeviceObject, Irp);
    }

    do
    {
        if(FilePointer < 0)
            status = STATUS_INVALID_PARAMETER;
        else
        {
            if (Irp->MdlAddress)
                OldBuffer = MmGetSystemAddressForMdl(Irp->MdlAddress);
            else if(Irp->AssociatedIrp.SystemBuffer == NULL)
                OldBuffer = Irp->UserBuffer;
            else OldBuffer = Irp->AssociatedIrp.SystemBuffer;

            if(OldBuffer == NULL)
                break;

            NewBuffer = ExAllocatePoolWithTag(NonPagedPool, WriteLen, SFLT_POOL_TAG);
            if(NULL == NewBuffer)
            {
                IoSkipCurrentIrpStackLocation(Irp);
                return IoCallDriver(DevExt->AttachedToDeviceObject, Irp);
            }

            pCompletionCtx = ExAllocatePoolWithTag(NonPagedPool, sizeof(W_R_COMPLETION_STRUCT), SFLT_POOL_TAG);
            if(NULL == NewBuffer)
            {
                ExFreePoolWithTag(NewBuffer, SFLT_POOL_TAG);
                IoSkipCurrentIrpStackLocation(Irp);
                return IoCallDriver(DevExt->AttachedToDeviceObject, Irp);
            }

            pCompletionCtx->Mdl = Irp->MdlAddress;
            pCompletionCtx->UserBuffer = Irp->UserBuffer;
            pCompletionCtx->AssociatedBuffer = Irp->AssociatedIrp.SystemBuffer;

            KeAcquireSpinLock(&BufferLock, &irql);

            memset(NewBuffer, 0, WriteLen);
            memcpy(NewBuffer, OldBuffer, WriteLen);
            for(i = 0; i < WriteLen; i++)
                ((char*)NewBuffer) = ((char*)NewBuffer)+1;

            if(NULL != Irp->MdlAddress)
                Irp->MdlAddress = NULL;
            if(NULL != Irp->AssociatedIrp.SystemBuffer)
                Irp->AssociatedIrp.SystemBuffer = NULL;

            Irp->UserBuffer = NewBuffer;

            KeReleaseSpinLock(&BufferLock, irql);

            IoCopyCurrentIrpStackLocationToNext(Irp);
            IoSetCompletionRoutine(Irp, SfWriteCompletion, pCompletionCtx, TRUE, TRUE,TRUE);
            return IoCallDriver(DevExt->AttachedToDeviceObject, Irp);
        }
    } while(0);

    Irp->IoStatus.Status = status;
    IoCompleteRequest(Irp, IO_NO_INCREMENT);

    return status;
}


上面的WdmWrite和WdmRead会蓝屏,为什么啊?
《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
26楼#
发布于:2007-04-05 18:44
看看
《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
cxjnet
驱动牛犊
驱动牛犊
  • 注册日期2005-03-21
  • 最后登录2014-05-01
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望191点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
27楼#
发布于:2008-11-22 18:58
不错,真的是吐血了
wangmingliang
驱动牛犊
驱动牛犊
  • 注册日期2008-05-21
  • 最后登录2009-09-01
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望106点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
28楼#
发布于:2008-11-22 22:08
请问一下bluacat,您是如何判断您要加密的文件的?
wangmingliang
驱动牛犊
驱动牛犊
  • 注册日期2008-05-21
  • 最后登录2009-09-01
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望106点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
29楼#
发布于:2008-11-24 09:35
恳请bluacat的回复
wanted999
驱动牛犊
驱动牛犊
  • 注册日期2006-03-28
  • 最后登录2012-08-13
  • 粉丝0
  • 关注0
  • 积分519分
  • 威望429点
  • 贡献值0点
  • 好评度48点
  • 原创分0分
  • 专家分0分
30楼#
发布于:2008-12-07 05:25
原理是这样,
实现方法很多种,
做到高效安全最费功夫.
BuShiXiaoHaiZi
驱动牛犊
驱动牛犊
  • 注册日期2008-12-20
  • 最后登录2012-04-22
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望531点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
31楼#
发布于:2008-12-21 10:42
汗 ~ 自己都弄错了
qin.susu
驱动牛犊
驱动牛犊
  • 注册日期2007-04-19
  • 最后登录2009-07-07
  • 粉丝0
  • 关注0
  • 积分196分
  • 威望477点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
32楼#
发布于:2009-04-08 09:26
文件过滤驱动透明加解密学习之!
xum2008
驱动牛犊
驱动牛犊
  • 注册日期2009-05-08
  • 最后登录2014-08-10
  • 粉丝0
  • 关注0
  • 积分75分
  • 威望741点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
33楼#
发布于:2010-02-07 20:05
不太懂。。。
shawhe
驱动牛犊
驱动牛犊
  • 注册日期2010-01-25
  • 最后登录2010-12-11
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望171点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
34楼#
发布于:2010-05-20 21:13
学习啦!
上一页 下一页
游客

返回顶部