Windows程序中的字符编码

Windows程序中的字符编码

ID:43326181

大小:118.50 KB

页数:6页

时间:2019-09-30

Windows程序中的字符编码_第1页
Windows程序中的字符编码_第2页
Windows程序中的字符编码_第3页
Windows程序中的字符编码_第4页
Windows程序中的字符编码_第5页
资源描述:

《Windows程序中的字符编码》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Windows程序中的字符编码写这篇文章的起因是这么一个问题:我们在使用和安装Windows程序时,有时会看到以“2052”、“1033”这些数字为名的文件夹,这些数字似乎和字符集有关,但它们究竟是什么意思呢?研究这个问题的同时,又会遇到其它问题。我们会谈到Windows的内部架构、Win32API的A/W函数、Locale、ANSI代码页、与字符编码有关的编译参数、MBCS和Unicode程序、资源和乱码等,一起经历这段琐碎细节为主,间或乐趣点缀的旅程。0WhereisWin32APIWindows程序有用户态和核心态的说法。在32位地址空间屮,0x80000000以下属于用户态

2、,0x80000000以上屈于核心态。所有硬件管理都在核心态。用户态程序的不能直接使用核心态的任何代码。所谓核心态其实只是CPU的一种保护模式。在X86CPU上,用户态处于ring3,核心态处于ring0o从用户态进入核心态的最常用的方法是在寄存器eax填一个功能码,然后执行int2e^这有点像DOS时代的DOS和BIOS系统调用。在NT架构中这种机制被称作systemserviceo在核心态提供systemservice的有两个家伙:ntoskrnl.exe和win32k.sysontoskrnl.exe是Windows的大脑,它的上层被称为Executive,下层被称作Kern

3、el□Win32k.sys提供与显示有关的systemservice□在用户态一侧,有一个重要的角色叫作ntdll.dll,大多数systemservice都是它调用的。它封装这些systemservice,然后提供一个API接口。这个接口被称作nativeAPLnativeAPI的用户是各个子系统(subsystem),包括Win32子系统、OS/2子系统、POSIX子系统。各个子系统为Win32、OS2、POSIX程序提供了运行平台。ntdll.dll由于提供了平台无关的API接口,所以被看作是NT系统的原生接口,由之得到了“nativeAPI”的匪号。其实它的主要工作是将调用

4、传递到核心态。Win32、OS/2、POSIX,听起来很庞大。其实真正做好的只有Win32子系统。OS2、POSIX都是ConsoleUI,即只有字符界面。提供OS/2子系统,只因为在1988年,NT的主要设计目标就是与OS/2兼容,后來由于Windows3.0卖得很好,所以设计冃标被变更为与Windows兼容。提供POSIX子系统,是为了应付美国政府的一个编号为FIPS151-2的标准。Win32子系统的管理员是一个叫作csrss.exe的弟兄,它的全名是:Client/ServerRun-TimeSubsystemo它刚上任时,本来要分管所有的子系统,但后来POSIX和OS/2

5、都被分别处理了,所以只管了一个Win32o即使这样也很了不起,所有的Win32程序的进程、线程们都要向它登记。不过Win32程序用得最多的还是Win32子系统的DLL们,最核心的DLL包括:kernel32.dlLUser32.dll、Gdi32.dll、Advapi32.dll<>这些DLL包装了ntdll.dll的nativeAPI。其中Gdi32.dll比较特殊,它与核心态的win32k.sys直接保持联系,以提高NT系统的图形处理能力。Win32子系统的DLL们提供的接口函数在MSDN文档中被详细介绍,它们就是Win32APL附录0Windows的启动计算机上电后,从BIO

6、S的ROM开始运行。BIOS在做一些初始化后会将硬盘的笫一个扇区的数据读入内存,然后将控制权交给它,这段数据被称作MasterBootRecord(MBR)oMBR包含一段启动代码和硬盘的主分区表。这段启动代码扫描主分区表,找到第一个可以启动的分区,然后将这个分区的第一个扇区读入内存并运行。这个扇区被称作引导扇区(bootsector)c引导扇区的代码具备读文件系统根目录的能力,显然不同的文件系统需要不同的代码。引导扇区会从根目录中读出一个叫作ntldr的文件。顾名思义,这个文件是loadNT的主要角色。它的业绩主要包括将CPU从实模式转入保护模式,启动分页机制,处理boot.in

7、i等。如果boot.ini中有一句:C:bootsect.rh="RedHatLinux”bootsect.rh的内容是Linux引导扇区,用户又选择了"RedHatLinuxntldr就会将执行Linux的引导扇区,开始Linux的引导。如果用户选择继续使用Windows,ntldr会装载并运行我们前面提到的ntoskrnl.exe0ntoskrnl.exe会启动会话管理器smss.exe。smss.exe启动csrss.exe和winlogon.exe©smss

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。