首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

急求教Hook文件操作的有关问题

2012-03-19 
急!求教Hook文件操作的问题!这是小弟按照detours帮助文档写的截获系统DeleteFile操作的代码在另外一个程序

急!求教Hook文件操作的问题!
这是小弟按照detours帮助文档写的截获系统DeleteFile操作的代码
在另外一个程序里LoadLibrary()和FreeLibrary()
编译,链接都正常,并且Attach和Detach都成功,但就是无法截获系统的DeleteFile操作,删除文件就和正常一样
请问是什么原因呢?

C/C++ code
#include <windows.h>#include <detours.h>BOOL (WINAPI * SysDeleteFileA)(LPCTSTR lpFileName)= DeleteFile;BOOL WINAPI MyHookDeleteFileA(LPCTSTR lpFileName);//如果不注释掉编译总显示error C2440: 'initializing' : cannot convert from '' to 'int (__stdcall *)(const char //*)'的错误,不知为什么?谁能解一下?//BOOL (WINAPI * SysDeleteFileW)(LPCTSTR lpFileName)= DeleteFileW;//BOOL WINAPI MyHookDeleteFileW(LPCTSTR lpFileName);__declspec(dllexport) void ExportFunc(void){}BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved){    switch(fdwReason)    {    case DLL_PROCESS_ATTACH:        DetourTransactionBegin();        DetourUpdateThread(GetCurrentThread());        DetourAttach(&(PVOID&)SysDeleteFileA,MyHookDeleteFileA);        if(DetourTransactionCommit()==NO_ERROR)        {            MessageBox(NULL,"Attach Successfully!","Successful",MB_OK);        }    //    DetourTransactionBegin();    //    DetourUpdateThread(GetCurrentThread());    //    DetourAttach(&(PVOID&)SysDeleteFileW,MyHookDeleteFileW);                break;    case DLL_PROCESS_DETACH:        DetourTransactionBegin();        DetourUpdateThread(GetCurrentThread());        DetourDetach(&(PVOID&)SysDeleteFileA, MyHookDeleteFileA);        if(DetourTransactionCommit()==NO_ERROR)        {            MessageBox(NULL,"Detach Successfully!","Successful",MB_OK);        }        break;    }    return true;}BOOL WINAPI MyHookDeleteFileA(LPCTSTR lpFileName){    MessageBox(NULL,"You Can Not Delete This File!","ERROR",MB_OK);    return true;}/*BOOL WINAPI MyHookDeleteFileW(LPCTSTR lpFileName){    return true;}*/


再弱弱的问一下~谁有HOOK API比较详细的教程?给小弟发一套吧?谢了!

[解决办法]
Hook DeleteFileW
[解决办法]
DeleteFileW现在哪还有用DeleteFileA的了。
[解决办法]
你应该拦截DeleteFileW
[解决办法]
需要改你的Project Setting,修改字符集。
[解决办法]
修改工程设置为Unicode字符集。
[解决办法]
应该hook掉DeleteFileW和MoveFileExW这两个函数,因为有些程序会把文件“移动”到回收站里面。
[解决办法]
你的DLL注入到目标进程了吗?
你先测试Hook自己的进程,程序调用DeleteFileW看能否Hook到。
[解决办法]
我有个hook CreateProcessW的代码,你邮箱多少?发给你看看吧
[解决办法]
楼主,你5楼的问题,你HOOK的是 xxxxW 的函数,参数却把TCHAR解释写成了 char ,报的就是这个错.
如果有 xxxxA xxxxW 2个函数,系统最后一定会调用 xxxxW ,而参数,是 unsigned short ,不是char

在指定了 xxxxW 的情况,就最好不要用UNICODE与ASCII兼容的宏,直接用UNICODE的.否则换了环境又会出错.

热点排行