northpointstar
驱动牛犊
驱动牛犊
  • 注册日期2003-01-07
  • 最后登录2007-01-05
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2304回复:9

关于Hook CreateFileW的问题

楼主#
更多 发布于:2005-03-22 16:27
在用户层Hook了CreateFileW函数

在自己的函数中直接转给真正的CreateFileW,可是真正的函数
总不会执行成功,GetLastError错误为找不到指定的文件
HANDLE WINAPI MyCreateFileW(LPCTSTR lpFileName,
  DWORD dwDesiredAccess,                      
  DWORD dwShareMode,                          
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  DWORD dwCreationDisposition,                
  DWORD dwFlagsAndAttributes,                
  HANDLE hTemplateFile)
{
HANDLE hFile;
TCHAR szRet[5];
TCHAR szFileName[256];
WideCharToMultiByte(CP_ACP,0,(const unsigned short *)lpFileName,-1,szFileName,255,NULL,NULL);
OutputString(_T(\"lpFileName is:\"));
OutputString(szFileName);
//创建文件
hFile=CreateFileW(lpFileName,dwDesiredAccess,dwShareMode,
lpSecurityAttributes,dwCreationDisposition,                
                   dwFlagsAndAttributes,hTemplateFile);
if(hFile=INVALID_HANDLE_VALUE)
{
OutputString(_T(\"CreateFileW failed!!!\\n\"));
stprintf(szRet,_T(\"%u\"),GetLastError());
OutputString(szRet);
}
}
但是lpFileName没有经过任何变换,并且用OutputString输出无异常,为什么会找不到文件呢?请各位高手解答一下疑惑. :(
freewindows
zdhe
驱动太牛
驱动太牛
  • 注册日期2001-12-26
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72362分
  • 威望362260点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-03-22 17:51
please check every function when you may change ERR .
you should not modify ERR. (use GetLastError, SetLastError and save and pop it).

we had done it and there is no problem about what you said.
northpointstar
驱动牛犊
驱动牛犊
  • 注册日期2003-01-07
  • 最后登录2007-01-05
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-22 18:35
好奇怪,将
if(hFile=INVALID_HANDLE_VALUE)
{
OutputString(_T(\"CreateFileW failed!!!\\n\"));
stprintf(szRet,_T(\"%u\"),GetLastError());
OutputString(szRet);
}
注释掉后就没有问题了,难道我注释后就打开成功了,它们之间
有什么关系吗?为什么??? :o
freewindows
ysy
ysy
驱动中牛
驱动中牛
  • 注册日期2002-02-18
  • 最后登录2008-08-25
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望29点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-22 19:10
hFile =  INVALID_HANDLE_VALUE ===〉
hFile == INVALID_HANDLE_VALUE
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2005-03-22 19:12
先挣点分吧
if(hFile=INVALID_HANDLE_VALUE)
{
OutputString(_T(\"CreateFileW failed!!!\\n\"));
stprintf(szRet,_T(\"%u\"),GetLastError());
OutputString(szRet);
}
if(hFile=INVALID_HANDLE_VALUE)
错了,应该是==
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-03-23 08:12
楼主大智若愚了。。。嘿嘿
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
6楼#
发布于:2005-03-23 08:53
if(hFile=INVALID_HANDLE_VALUE)
估计他是BASIC出身的,这中错误都能范....
难怪有人会想
if(INVALID_HANDLE_VALUE==hFile)
的这种做法.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
paladinii
驱动中牛
驱动中牛
  • 注册日期2003-10-28
  • 最后登录2012-03-09
  • 粉丝0
  • 关注0
  • 积分282分
  • 威望74点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-03-23 09:20
我就支持if( INVALID_HANDLE_VALUE == hFile )这种做法。呵呵
Ideas for life!
northpointstar
驱动牛犊
驱动牛犊
  • 注册日期2003-01-07
  • 最后登录2007-01-05
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-03-24 09:35
杀了我吧,为这个我要拿出50分,无颜以对江东父老啊
BTW:我是C语言出身的..... :(
freewindows
yuanyuan
驱动大牛
驱动大牛
  • 注册日期2003-01-15
  • 最后登录2010-08-04
  • 粉丝0
  • 关注0
  • 积分1025分
  • 威望300点
  • 贡献值0点
  • 好评度232点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-03-31 18:59
幸亏没有加入then,呵呵
游客

返回顶部