关于找不到CreateFile函数的地址的问题

      想找CreateFile函数的地址,将其hash值压入,却导致死循环,计算不出函数地址。准备放弃时,跟踪了其它程序,发现调用的是CreateFileA函数,而非CreateFile函数。

网上搜索相关知识点,查到如下信息:

事实上系统不存在什么CreateFile函数,只有CreateFileA和CrateFileW
编译时根据项目配置是否使用unicode,来决定最终用的是CreateFileA还是CreatFileW函数

CreateFileA 是MBCS 版本的, CreateFileW是Unicode版本的。

在调用时把所有与字符串有关的参数用_T("")宏括起来,就不用管最终编译时采用的是那个版本了。

 

2000以上的内核都是unicode,即使调用CreateFileA,最终还是会被转换成CreateFileW
98 只支持 MBCS,即使调用CreateFileW,最终还是会被转换成CreateFileA
早期的NT系统,是混合的,最好两个版本都钩,这样才能保证你钩子的有效性。

 

最终解决方法,将CreateFileA的hash值压入,直接就能计算出函数地址了!

posted on 2014-04-10 18:47  小知识  阅读(445)  评论(0)    收藏  举报

导航