WriteFile已成功截获,并转向了我自定义的函数MyWriteFile,代码如下:
BOOL MyWriteFile(
HANDLE hFile, // 文件句柄
LPCVOID lpBuffer,// 数据缓存区指针
DWORD nNumberOfBytesToWrite, // 你要写的字节数
LPDWORD lpNumberOfBytesWritten, // 用于保存实际写入字节数的存储区域的指针
LPOVERLAPPED lpOverlapped // OVERLAPPED结构体指针
)
{
OutputDebugString((LPCSTR)lpBuffer); //用于调试,输出待加密的明文
LPCVOID lpBufferNew = Encrypt(lpBuffer, nNumberOfBytesToWrite); //加密,更改了要写的字节数,并返回密文数据缓存区指针
OutputDebugString((LPCSTR)lpBufferNew); ////用于调试,输出加密后的密文
return WriteFile(hFile, lpBufferNew, nNumberOfBytesToWrite, lpNumberOfBytesWritten, lpOverlapped);
}目前只拿记事本程序做测试,第一次按下Ctrl+S保存后没问题,但第二次保存时便会弹出让我“另存为”的对话框,而且关闭记事本窗口的时候会提示让我保存(保存和不保存我都试过了:后者直接关闭窗口,而且文本内容确实是加密后的内容;前者会新建一个txt文件,内容和不保存所得的txt文件内容一样,都是加密过的)。问题是:我截获了WriteFile,在第一次保存之后,进行第二次保存或者关闭窗口为什么出现上述情况,为什么系统觉得我之前没有保存过呢?
BOOL MyWriteFile(
HANDLE hFile, // 文件句柄
LPCVOID lpBuffer,// 数据缓存区指针
DWORD nNumberOfBytesToWrite, // 你要写的字节数
LPDWORD lpNumberOfBytesWritten, // 用于保存实际写入字节数的存储区域的指针
LPOVERLAPPED lpOverlapped // OVERLAPPED结构体指针
)
{
OutputDebugString((LPCSTR)lpBuffer); //用于调试,输出待加密的明文
LPCVOID lpBufferNew = Encrypt(lpBuffer, nNumberOfBytesToWrite); //加密,更改了要写的字节数,并返回密文数据缓存区指针
OutputDebugString((LPCSTR)lpBufferNew); ////用于调试,输出加密后的密文
return WriteFile(hFile, lpBufferNew, nNumberOfBytesToWrite, lpNumberOfBytesWritten, lpOverlapped);
}目前只拿记事本程序做测试,第一次按下Ctrl+S保存后没问题,但第二次保存时便会弹出让我“另存为”的对话框,而且关闭记事本窗口的时候会提示让我保存(保存和不保存我都试过了:后者直接关闭窗口,而且文本内容确实是加密后的内容;前者会新建一个txt文件,内容和不保存所得的txt文件内容一样,都是加密过的)。问题是:我截获了WriteFile,在第一次保存之后,进行第二次保存或者关闭窗口为什么出现上述情况,为什么系统觉得我之前没有保存过呢?
解决方案 »
- 那位做过CPU卡的读写程序?
- OpenGL中的坐标问题求教——
- 急!急!急!急!如何在listview中实现乡表格的风格
- ATL控件问题 改变属性后没有显示变化
- VC的使用问题
- TCP和UDP共用一个winsoket连接??
- ==========如何把Matlab集成到VC中去==================
- 急!急!急!用visual studio 2008打包成安装软件的问题
- 200分紧急求救,用MFC做下面这个屏幕保护需要用到那些技术
- 请教关于用VC++ 对mapinfo OLE开发的问题(我在企业开发里开了这个帖子没有人问,所以跑这儿来了。欢迎大家参与讨论,来者有分)
- MFC中为什么直接使用DC不直接使用效果不一样
- JRTPLIB中GotoFirstSourceWithData返回老是为FALSE
你在里面把 nNumberOfBytesToWrite 改变了假设原来nNumberOfBytesToWrite = 10
改后nNumberOfBytesToWrite = 16
那么lpNumberOfBytesWritten返回16
一比较两个字节数不同
我还这样测试了一下:
BOOL MyWriteFile(
HANDLE hFile, // 文件句柄
LPCVOID lpBuffer,// 数据缓存区指针
DWORD nNumberOfBytesToWrite, // 你要写的字节数
LPDWORD lpNumberOfBytesWritten, // 用于保存实际写入字节数的存储区域的指针
LPOVERLAPPED lpOverlapped // OVERLAPPED结构体指针
)
{
return WriteFile(hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, lpOverlapped);
}
发现即使我对要写的数据什么都不改,只要把WriteFile阶段了,这样出现一开始我说的那种状况...
掉了这个?
return WriteFile(hFile, lpBufferNew, nNumberOfBytesToWrite, lpNumberOfBytesWritten, lpOverlapped);