阅读:1605回复:12
找了整个论坛都没有找到,加密问题
加密后数据变长了,写到文件里后发现增加的数据没有写入,哪位大虾能指点一下,谢谢!
我是用NOTEPAD打开的,只处理PAGING_IO,NOCACHE_IO,SYNCHRONOUS_PAGING_IO |
|
沙发#
发布于:2004-02-03 09:15
你换一个加密算法,使得数据长度不变。
加密后数据变长会出现N多问题。 |
|
|
板凳#
发布于:2004-02-03 09:51
都会出现哪些问题???
|
|
地板#
发布于:2004-02-03 09:54
另外,NOTEPAD写数据的时候,io_stack->Parameters.Write.Length长度总是4096,但是实际写入的数据长度并不是4096,实际上写入的数据长度保存在什么地方??
|
|
地下室#
发布于:2004-10-27 16:14
另外,NOTEPAD写数据的时候,io_stack->Parameters.Write.Length长度总是4096,但是实际写入的数据长度并不是4096,实际上写入的数据长度保存在什么地方?? CompletionRoute的IoStatus.Information |
|
|
5楼#
发布于:2004-10-28 10:22
顺便问个问题,一下使我的irp_mj_write的代码,我参考论坛里面的方法加密文件,可是一存盘,硬盘上的密文反而被替换成了明文,不只是怎么回事??我在替换完了mdl后,检查过irp得mdl里面确实是密文,但是为什么没有存到硬盘上,反而把明文存上了,真奇怪,老大帮忙看看
KeInitializeEvent(&event, NotificationEvent, FALSE); IoCopyCurrentIrpStackLocationToNext(Irp); IoSetCompletionRoutine(Irp, ProcessReadCompletion, &event, TRUE, TRUE, TRUE); IoCallDriver(DeviceExtension->FileSystem, Irp); KeWaitForSingleObject(&event, Executive, KernelMode, TRUE, NULL); if(( Irp->Flags & IRP_PAGING_IO || Irp->Flags & IRP_SYNCHRONOUS_PAGING_IO || Irp->Flags & IRP_NOCACHE)) { if (Irp->MdlAddress) { testfilebuffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress,NormalPagePriority); } else { testfilebuffer = Irp->UserBuffer; } NewBuffer = ExAllocatePool(NonPagedPool,Irp->IoStatus.Information+1); memcpy(NewBuffer,testfilebuffer,Irp->IoStatus.Information); encbuffer(NewBuffer,Irp->IoStatus.Information); RtlCopyMemory(testfilebuffer,NewBuffer,Irp->IoStatus.Information); ExFreePool(NewBuffer); IoCompleteRequest(Irp, IO_NO_INCREMENT); return Irp->IoStatus.Status; } if( Irp->PendingReturned ) { IoMarkIrpPending( Irp ); return STATUS_PENDING; } IoCompleteRequest(Irp, IO_NO_INCREMENT); return Irp->IoStatus.Status; |
|
6楼#
发布于:2004-10-28 10:22
顺便问个问题,以下是我的irp_mj_write的代码,我参考论坛里面的方法加密文件,可是一存盘,硬盘上的密文反而被替换成了明文,不只是怎么回事??我在替换完了mdl后,检查过irp得mdl里面确实是密文,但是为什么没有存到硬盘上,反而把明文存上了,真奇怪,老大帮忙看看
KeInitializeEvent(&event, NotificationEvent, FALSE); IoCopyCurrentIrpStackLocationToNext(Irp); IoSetCompletionRoutine(Irp, ProcessReadCompletion, &event, TRUE, TRUE, TRUE); IoCallDriver(DeviceExtension->FileSystem, Irp); KeWaitForSingleObject(&event, Executive, KernelMode, TRUE, NULL); if(( Irp->Flags & IRP_PAGING_IO || Irp->Flags & IRP_SYNCHRONOUS_PAGING_IO || Irp->Flags & IRP_NOCACHE)) { if (Irp->MdlAddress) { testfilebuffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress,NormalPagePriority); } else { testfilebuffer = Irp->UserBuffer; } NewBuffer = ExAllocatePool(NonPagedPool,Irp->IoStatus.Information+1); memcpy(NewBuffer,testfilebuffer,Irp->IoStatus.Information); encbuffer(NewBuffer,Irp->IoStatus.Information); RtlCopyMemory(testfilebuffer,NewBuffer,Irp->IoStatus.Information); ExFreePool(NewBuffer); IoCompleteRequest(Irp, IO_NO_INCREMENT); return Irp->IoStatus.Status; } if( Irp->PendingReturned ) { IoMarkIrpPending( Irp ); return STATUS_PENDING; } IoCompleteRequest(Irp, IO_NO_INCREMENT); return Irp->IoStatus.Status; |
|
7楼#
发布于:2004-10-28 10:37
我的问题解决啦,谢谢大虾以前的帖子,给了我不少提示,不过原理还不太明白,我上面的代码里替换了mdl以后直接IoCompleteRequest,这样保存的就是明文拉,但是我改成iocalldriver,就行啦,大虾能不能解释一下为什么???
|
|
8楼#
发布于:2004-10-28 11:31
你自己不是说了吗?
IoCompleteRequest iocalldriver 函数名就体现了吧! |
|
9楼#
发布于:2004-10-28 11:50
就是不明白阿,为什么我自己完成就不能写到硬盘上啊,calldriver就行啊,
|
|
10楼#
发布于:2004-10-28 11:51
好像明白啦,是不是因为我自己完成了,所以没有写到硬盘上啊,
|
|
11楼#
发布于:2004-11-04 16:53
我也遇到相同的问题啦,但是osr上的兄弟们都建议不要改变文件大小,具体会发生什么他们也没说,我决定试一次,看看把文件变大了到底会有什么恶果,佛说,我不蓝屏谁蓝屏。。。。
|
|
12楼#
发布于:2005-03-15 14:26
因为你的去驱动是上层过滤驱动,需要传递到下层磁盘驱动才可以写入文件中的,不过我觉得你的加密有问题,你如果加密很大的文件,我想可能bugcheck
|
|