阅读:1610回复:3
vcmfc : 还是请教mj_read 的问题!
上次回帖时你说过:
处理: 读取的字节一定要用Irp->IoStatus.Information,用Parameters.Read.Length,你会出事的。 1.Irp->AssociatedIrp.SystemBuffer 2.Irp->MdlAddress 3.Irp->UserBuffer A.KernelMode处理 B.UserMode处理 能不能说具体点? 我的读文件测试,swf,txt都可以,但是powerpoint(*.ppt,*.pps)文件解密执行总是不对。我事先把一个ppt文件的头从offset=0开始改了16个字节,在读出数据时改回正确的ppt数据头,下断看也都执把数据修改了,但是打开ppt文件后就不能正常显示,是不是还有什么漏掉了?我这可是直接比较的读出数据啊!不能有遗漏吧?我手头没有什么资料,所以问的问题可能有些弱,不要笑话我,另能否推荐好的文件驱动资料? IoSetCompletionRoutine( Irp, myHookfun, (PVOID) (ULONG_PTR) seqNum, TRUE, TRUE, TRUE ); myHookfun中加入 if (Irp->MdlAddress) { try { pUserBuffer = MmGetSystemAddressForMdlSafe( Irp->MdlAddress,NormalPagePriority ); } except(EXCEPTION_EXECUTE_HANDLER) { // return GetExceptionCode(); goto go_1; } } else { pUserBuffer = Irp->UserBuffer; try { ProbeForWrite(Irp->UserBuffer, IrpSp->Parameters.Read.Length , 4); } except(EXCEPTION_EXECUTE_HANDLER) { // return GetExceptionCode(); goto go_1; } try { ProbeForRead(Irp->UserBuffer, IrpSp->Parameters.Read.Length , 4); } except(EXCEPTION_EXECUTE_HANDLER) { // return GetExceptionCode(); goto go_1; } } if (pUserBuffer) { try { str=(PCHAR) pUserBuffer; if (memcmp(str,&fhead,16)==0) //fhead 是文件头信息 { str[0]=0xd0; str[1]=0xcf; str[2]=0x11; str[3]=0xe0; } } except(EXCEPTION_EXECUTE_HANDLER) { return GetExceptionCode(); } } } } |
|
最新喜欢:cyliu |
沙发#
发布于:2003-01-24 12:00
拿分来了,嘿嘿
|
|
板凳#
发布于:2003-01-24 16:17
呵呵,再次感谢!
|
|
地板#
发布于:2003-01-30 11:49
sijun说的是对了,我的是错的,只处理NOCACHE irp.
|
|