HOOK InternetReadFile修改数据的问题

时间:2022-05-16 07:26:22
想过滤网页的信息  HOOK了InternetReadFile函数,但是在修改接收后的数据失败。
下面有三种情况只能替换内容 或者追加内容 ,却不能直接删除或者完全换成我的内容。
不明白这是什么原因呢
BOOL WINAPI CWininetHook::_InternetReadFile( __in HINTERNET hFile,__out LPVOID lpBuffer,__in DWORD dwNumberOfBytesToRead,__out LPDWORD lpdwNumberOfBytesRead )
{  
BOOL isBool=s_pfnInternetReadFile(hFile,lpBuffer,dwNumberOfBytesToRead,lpdwNumberOfBytesRead ); 
CStringA str((char*)lpBuffer);
// str="1231333333333"; //新内容等于1231333333333加原来的数据lpBuffer。不是应该等于1231333333333吗?
// str="";//内容没有变化
str.Replace("123","456");//可以成功替换
char* pChar=(char*)lpBuffer;
memset(pChar,0,sizeof(pChar));
strcpy(pChar,str); 
return isBool;
}

5 个解决方案

#1


内存弄错了吧?

#2


引用 1 楼 ydfivy 的回复:
内存弄错了吧?

但是替换却可以成功啊。

#3


替换可以,但是不能替换所有内容?是不是大小计算有问题

#4


//    str="1231333333333"; //新内容等于1231333333333加原来的数据lpBuffer。不是应该等于1231333333333吗?

肯定不是,因为CString的字符串所指的空间不是lpBuffer所指的空间,只是把lpBuffer所指空间的数据复制到CString而已

memset(lpBuffer,0,dwNumberOfBytesToRead)
其实你可以用类似的方法strcpy_s((char*)lpBuffer,dwNumberOfBytesToRead-1,"1231333333333");

#5


引用 4 楼 fishion 的回复:
//    str="1231333333333"; //新内容等于1231333333333加原来的数据lpBuffer。不是应该等于1231333333333吗?

肯定不是,因为CString的字符串所指的空间不是lpBuffer所指的空间,只是把lpBuffer所指空间的数据复制到CString而已

memset(lpBuffer,0,dwNumberO……


谢谢,这样可以完全替换掉了,但是又出现令一个问题。页面上显示好几个"1231333333333"。每调用一次InternetReadFile "1231333333333" 就会多一个,不明白上面不是已经用memset清空了吗 怎么数据还会叠加呢

#1


内存弄错了吧?

#2


引用 1 楼 ydfivy 的回复:
内存弄错了吧?

但是替换却可以成功啊。

#3


替换可以,但是不能替换所有内容?是不是大小计算有问题

#4


//    str="1231333333333"; //新内容等于1231333333333加原来的数据lpBuffer。不是应该等于1231333333333吗?

肯定不是,因为CString的字符串所指的空间不是lpBuffer所指的空间,只是把lpBuffer所指空间的数据复制到CString而已

memset(lpBuffer,0,dwNumberOfBytesToRead)
其实你可以用类似的方法strcpy_s((char*)lpBuffer,dwNumberOfBytesToRead-1,"1231333333333");

#5


引用 4 楼 fishion 的回复:
//    str="1231333333333"; //新内容等于1231333333333加原来的数据lpBuffer。不是应该等于1231333333333吗?

肯定不是,因为CString的字符串所指的空间不是lpBuffer所指的空间,只是把lpBuffer所指空间的数据复制到CString而已

memset(lpBuffer,0,dwNumberO……


谢谢,这样可以完全替换掉了,但是又出现令一个问题。页面上显示好几个"1231333333333"。每调用一次InternetReadFile "1231333333333" 就会多一个,不明白上面不是已经用memset清空了吗 怎么数据还会叠加呢