1.什么是Win32 API函数?
翻译成中文就是应用程序编程接口,这些接口函数是用来给程序员调用的。这些函数都在动态链接库中。最主要的动态链接库有Kernel,User,GDI.从字面就能看出
Kernel.dll 负责系统核心
User.dll 负责用户操作
GDI.dll 是负责图形设备
除了上面三个主要的动态链接库,还有其他的DLL,也需要记住他们,可能随时会用到.
ADVAPI32.DLL(对象安全,注册表操作)
COMCTL32.DLL(通用控件)
COMDLG32.DLL(公共对话框)
SHELL32.DLL(用户界面外壳)
NETAPI32.DLL(网络)
上文中学习了ANSI字符与Unicode字符,一种是单字节编码,一种是宽字节编码。
以字符作为参数的API函数,操作系统提供了两个入口。
以MessageBox函数举例,分为MessageBoxA与MessageBoxW两个入口。
MessageBoxA多了一个将ANSI字符转换为Unicode字符,最终调用MessageBoxW的操作。
所以说ANSI版本的API占用更多的内存与更多的CPU资源。这里涉及到一个资源优化的问题。
2.为什么要学习Win32 API函数?
调试程序的时候想找到想要的关键点,非常的困难。好在有了这些API函数,可以通过程序的某一个行为猜测所调用的API,然后对这些API下断迅速找到关键点。
3.什么是WOW64
以前经常看到这个缺不明白他的用途,现在懂了,它是为了兼容32位应用程序,以前在win xp运行的程序放在win64位操作系统依然可以运行,就是这个的作用。
它充当了一个翻译的作用,调用时将32位指令翻译成64位指令,返回时在将64位指令翻译回32位指令。
WOW64不支持16位应用程序,但是32位Windows支持16位应用程序,也就是说隔了一代就被淘汰。以后出了128位操作系统会不会淘汰32位,这个只是个人猜想,
或许在不久的将来,或许这辈子是看不到了。
WOW64进程只能加载32位的DLL,不能加载原生的64位DLL,类似的原生的64位进程也不能加载32位DLL。
WOW64不支持加载32位内核模式的设备驱动程序。以前遇到为某个硬件设备安装驱动,64位系统必须要64位的驱动,用之前XP的驱动是无法安装成功的,现在知道其中的原因了。