阅读:2025回复:2
改变 IrpSp->Parameters.Write.Length 为什么没有作用, 附代码.高人帮忙看看if(irp->MdlAddress!=NULL) { buffer=(PUCHAR)MmGetSystemAddressForMdlSafe(irp->MdlAddress,NormalPagePriority); DbgPrint("buffer = 0x%x",buffer); new_mdl=cfMdlMemoryAlloc(real); DbgPrint("new_mdl = 0x%x",new_mdl); if(new_mdl==NULL) { new_buffer=NULL; } else { new_buffer=(PUCHAR)MmGetSystemAddressForMdlSafe(new_mdl,NormalPagePriority); DbgPrint("new_buffer = 0x%x",new_buffer); } } else { buffer=(PUCHAR)irp->UserBuffer; new_buffer=(PUCHAR)ExAllocatePoolWithTag(NonPagedPool,real,CF_MEM_TAG); } //如果缓冲区分配失败了,直接退出即可 if(new_buffer==NULL) { irp->IoStatus.Status=STATUS_INSUFFICIENT_RESOURCES; irp->IoStatus.Information=0; ExFreePoolWithTag(my_context,CF_MEM_TAG); return FALSE; } RtlCopyMemory(new_buffer,buffer,length); //到了这里一定成功,可以设置上下文了 my_context->mdl_address=irp->MdlAddress; my_context->user_buffer=irp->UserBuffer; //******在指定给IRP之前,进行加密*****// //******文件加密部分 PUCHAR encbuf; ULONG i; encbuf=(PUCHAR)ExAllocatePool(NonPagedPool,real); RtlZeroMemory(encbuf,real); //***填充空余的buffer***// for(i=length;i<real;i++) { new_buffer='a'; } DbgPrint("Origin::::");//输出原信息 for(i=0;i<real;i++) DbgPrint("%c",new_buffer); DbgPrint("buffer = 0x%x",buffer); //调用DES算法加密 DESTEST(new_buffer,encbuf,real,DES_MODE_ENCRYPT); DbgPrint("Encrypt::::");//输出加密后信息 for(i=0;i<real;i++) DbgPrint("%c",encbuf); RtlCopyMemory(new_buffer,encbuf,real); DbgPrint("encbuf = 0x%x",encbuf); ExFreePool(encbuf); //*********************************// //****重新指定IRP即将写的长度****// irpsp->Parameters.Write.Length=real; irp->IoStatus.Information=real; //给IRP指定新的mdl,到完成之后再恢复过来 if(new_mdl==NULL) { irp->UserBuffer=new_buffer; } else { irp->MdlAddress=new_mdl; } ………………………………………… KeInitializeEvent(&waitEvent,NotificationEvent,FALSE); IoCopyCurrentIrpStackLocationToNext(irp); IoSetCompletionRoutine(irp,FsFilterDispatchReadCompletion,&waitEvent,TRUE,TRUE,TRUE); status=IoCallDriver(devExt->AttachedToDeviceObject,irp); 意图是,应用程序传进来字节不是8个整数倍,进行不气,然后调用DES加密,红色代码设置写的字节数为8个整数倍, 然后写入文件,但是发现最后写入文件的虽然是密文,但是字节数还是从应用程序传来那个数目。 难道红色代码设置的没有用??? |
|
沙发#
发布于:2011-12-14 14:25
呵呵,我也在学习这个。
检查一下写完后的Information,看是否是写入的长度 有机会多交流 |
|
|
板凳#
发布于:2011-12-14 19:29
回 1楼(cyliu) 的帖子
呵呵,解决了还有修改文件大小…… |
|