CreateFileA和CrateFileW以及CreateFile它们的参数一样吗?

fanze2003 2006-08-03 09:42:19
如题

类似的这类函数它们的参数都是一样的吗???

先谢谢了!!!!

坚决给分
...全文
3992 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanze2003 2006-08-03
  • 打赏
  • 举报
回复
谢谢各位大哥

结贴、给分
snowbirdfly 2006-08-03
  • 打赏
  • 举报
回复
那这样以来我直接钩Kernel32.dll中的CrateFileW就应该可以了?
恩~
可以~~~
WINCE里面好像仅仅支持UNICODE~~~
98系统仅仅支持ANSI~~
booklove 2006-08-03
  • 打赏
  • 举报
回复
win2000及以上的系统内部都是Unicode的,CreateFileA也可能最后要调用CreateFileW
fanze2003 2006-08-03
  • 打赏
  • 举报
回复
打算只运行在2000以上的系统
那这样以来我直接钩Kernel32.dll中的CrateFileW就应该可以了?
思危 2006-08-03
  • 打赏
  • 举报
回复
2000以上的内核都是unicode,即使调用CreateFileA,最终还是会被转换成CreateFileW
98 只支持 MBCS,即使调用CreateFileW,最终还是会被转换成CreateFileA
早期的NT系统,是混合的,最好两个版本都钩,这样才能保证你钩子的有效性。
snowbirdfly 2006-08-03
  • 打赏
  • 举报
回复
恩~
参数当然是一样的~~~
折腾_苏州 2006-08-03
  • 打赏
  • 举报
回复
CreateFile,MessageBox 之类的函数只是一个入口,他会根据当前的环境(UNICODE/非UNICODE)来调用对应xxxW/xxxxA 函数,
这点CreateFile在WINUSER.H 5391-5419行有说明
snowbirdfly已经提出来了.........

_T("")的作用也是如此
思危 2006-08-03
  • 打赏
  • 举报
回复
参数一样,钩哪个要看操作系统
思危 2006-08-03
  • 打赏
  • 举报
回复
CreateFileA 是MBCS 版本的, CreateFileW是Unicode版本的。

你在调用时把所有与字符串有关的参数用_T("")宏括起来,就不用管最终编译时采用的是那个版本了。
fanze2003 2006-08-03
  • 打赏
  • 举报
回复
我作钩子的话是不是应该钩CrateFileW

但是不知道它的参数,不知道和CreateFile定义一样可以吗?
snowbirdfly 2006-08-03
  • 打赏
  • 举报
回复
对了,上面的MessageBox所对应的MessageBoxW函数的第二个和第三个参数是指向宽字符的指针。
#ifdef UNICODE

#define MessageBox MessageBoxW

#else

#define MessageBox MessageBoxA

#endif
思危 2006-08-03
  • 打赏
  • 举报
回复
事实上系统不存在什么CreateFile函数,只有CreateFileA和CrateFileW

编译时根据项目配置是否使用unicode,来决定最终用的是CreateFileA还是CreatFileW函数
snowbirdfly 2006-08-03
  • 打赏
  • 举报
回复
举个例子:
拿MessageBox为例:
WINUSERAPI int WINAPI MessageBoxA (HWND hWnd, LPCSTR lpText,
LPCSTR lpCaption, UINT uType) ;
WINUSERAPI int WINAPI MessageBoxW (HWND hWnd, LPCWSTR lpText,

LPCWSTR lpCaption, UINT uType) ;
这两者的第二个和第三个参数就不同~~
但是编译器通过:
#ifdef UNICODE
typedef WCHAR TCHAR, * PTCHAR ;
typedef LPWSTR LPTCH, PTCH, PTSTR, LPTSTR ;
typedef LPCWSTR LPCTSTR ;
#else
typedef char TCHAR, * PTCHAR ;
typedef LPSTR LPTCH, PTCH, PTSTR, LPTSTR ;
typedef LPCSTR LPCTSTR ;
#endif
自动就可以根据你传入的参数进行识别~~~
justin108 2006-08-03
  • 打赏
  • 举报
回复 1
说一样也一样,不一样也不一样。
A()的是ASCII的,W的unicode的宽字符,其实直接调用CreatFile就好了,系统会自己选择调用A还是W

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧