Windows简介
操作系统
- 操作系统也是一种软件.
- 操作系统是一个特殊的软件, 它需要按照特定的规定来进行编写
- 操作系统提供了一系列的API, 使软件可以通过操作系统进行硬件操作
Windows版本变迁
| 发布时间 | 版本代号 | 正式名称 |
|---|---|---|
| 1985 年 | 1.01 | Windows 1.01 ( 已停止支持 ) |
| 1986 年 | 1.03 | Windows 1.03 ( 已停止支持 ) |
| 1987 年 | 2.03 | Windows 2.03 ( 已停止支持 ) |
| 1988 年 | 2.1 | Windows 2.1 ( 已停止支持 ) |
| 1988 年 | 2.0 | Windows/286 2.0 ( 已停止支持 ) |
| 1988 年 | 2.1 | Windows/386 2.1 ( 已停止支持 ) |
| 1990 年 | 3.0 | Windows 3.0 ( 已停止支持 ) |
| 1992 年 | 3.1 | Windows 3.1 ( 已停止支持 ) |
| 1992 年 | 3.11 | Windows For Workgroups 3.1 ( 已停止支持 ) |
| 1994 年 | NT 3.1 | Windows NT 3.1 ( 已停止支持 ) |
| 1994 年 | 3.2 | Windows 3.2(简体中文版)( 已停止支持 ) |
| 1994 年 | NT 3.5 | Windows NT 3.5 ( 已停止支持 ) |
| 1995 年 | NT 3.51 | Windows NT 3.51 ( 已停止支持 ) |
| 1995 年 | 4.0 | Windows 95 ( 已停止支持 ) |
| 1996 年 | NT 4.0 | Windows NT 4.0 ( 已停止支持 ) |
| 1996 年 | CE 1.01 | Windows CE 1.01 ( 已停止支持 ) |
| 1997 年 | CE 2.0 | Windows CE 2.0 ( 已停止支持 ) |
| 1997 年 | CE 2.01 | Windows CE 2.01 ( 已停止支持 ) |
| 1998 年 | CE 2.10 | Windows CE 2.10 ( 已停止支持 ) |
| 1998 年 | CE 2.11 | Windows CE 2.11 ( 已停止支持 ) |
| 1998 年 | 4.1 | Windows 98 ( 已停止支持 ) |
| 1999 年 | CE 2.12 | Windows CE 2.12 ( 已停止支持 ) |
| 1999 年 | 4.1 | Windows 98 Second Edition(98 SE)( 已停止支持 ) |
| 2000 年 | NT 5.0 | Windows 2000 ( 已停止支持 ) |
| 2000 年 | 4.9 | Windows Millennium Edition (ME)( 已停止支持 ) |
| 2000 年 | CE 3.0 | Windows CE 3.0 ( 已停止支持 ) |
| 2001 年 | NT 5.1 | Windows XP ( 已停止支持 ) |
| 2002 年 | CE 4.1 | Windows CE 4.1(已停止支持) |
| 2002 年 | NT 5.1 | Windows XP Media Center Edition ( 已停止支持 ) |
| 2002 年 | NT 5.1 | Windows XP TabletPC Edition ( 已停止支持 ) |
| 2003 年 | NT 5.2 | Windows Server 2003 ( 已停止支持 ) |
| 2003 年 | NT 5.2 | Windows XP 64-bit Edition ( 已停止支持 ) |
| 2004 年 | CE 5.0 | Windows CE 5.0 ( 已停止支持 ) |
| 2005 年 | NT 5.2 | Windows XP Professional x64 Edition ( 已停止支持 ) |
| 2005 年 | NT 5.2 | Windows Server 2003 x64 Editions ( 已停止支持 ) |
| 2006 年 | NT 5.1 | Windows Fundamentals for Legacy PCs ( 已停止支持 ) |
| 2006 年 | CE 6.0 | Windows Embedded CE 6.0 ( 已停止支持 ) |
| 2007 年 | NT 6.0 | Windows Vista ( 已停止支持 ) |
| 2007 年 | NT 6.0 | Windows Home Server ( 已停止支持 ) |
| 2008 年 | NT 6.0 | Windows Server 2008 ( 已停止支持 ) |
| 2009 年 | NT 6.1 | Windows 7 ( 至 2020 年停止支持 ) |
| 2009 年 | NT 6.1 | Windows Server 2008 R2 ( 已停止支持 ) |
| 2010 年 | CE 7.0 | Windows Phone 7 ( 已停止支持 ) |
| 2011 年 | CE 7.0 | Windows Embedded Compact 7 ( 已停止支持 ) |
| 2011 年 | NT 6.1 | Windows Home Server 2011 ( 已停止支持 ) |
| 2012 年 | NT 6.2 | Windows 8 ( 已停止支持 ) |
| 2012 年 | NT 6.2 | Windows RT ( 已停止支持 ) |
| 2012 年 | NT 6.2 | Windows Server 2012 ( 至 2023 年停止支持 ) |
| 2012 年 | NT 6.2 | Windows Phone 8 ( 至 2023 年停止支持 ) |
| 2013 年 | NT 6.3 | Windows 8.1 ( 至2023年停止支持 ) |
| 2013 年 | NT 6.3 | Windows RT 8.1 ( 至 2023 年停止支持 ) |
| 2013 年 | NT 6.3 | Windows Server 2012 R2 ( 至 2023 年停止支持 ) |
| 2014 年 | NT 6.3 | Windows Phone 8.1 ( 至 2023 年停止支持 ) |
| 2015 年 | NT 10.0 | Windows 10 (每个版本技术支持5年,扩展支持10年) |
| 2016 年 | NT 10.0 | Windows 10 Mobile (每个版本技术支持5年,扩展支持10年) |
| 2016 年 | NT 10.0 | Windows Server 2016 ( 至 2026 年停止支持 ) |
Windows系统变迁
16位图形用户界面
- 非NT的, 它仅仅是一个运行于 MS-DOS 系统的一个图形用户界面.
它包括
- Windows 1.0(1985)
- Windows 2.0(1987)
- Windows/286
- Windows 3.X
以下引用自维基百科
早期版本的 Windows 通常被看作仅仅是运行于 MS-DOS 系统中的一个图形用户界面, 不是操作系统. 主要因为它们在 MS-DOS 上运行并且被用作文件系统服务.
不过, 即使最早的16位版本的Windows也已经具有了许多典型的操作系统的功能,
包括拥有自己的可执行文件格式以及为应用程序提供自己的设备驱动程序(计时器、图形、打印机、鼠标、键盘以及声卡).
与 MS-DOS 不同, Windows通过协作式多任务允许用户在同一时刻执行多个图形应用程序.
最后, Windows还实现了一个设计精良的、基于存储器分段的软件虚拟内存方, 使其能够运行大于物理内存的应用程序.
代码段和资源在内存不足的时候进行交换, 并且当一个应用程序释放处理器控制时, 特别是等待用户输入的时候, 数据段会被移入内存. 16位和32位混合操作系统
- 这是一个操作系统
它包括
- Windows 95(第一版发行于1995年,后来的改进版本发行于1996年和1997年)
- Windows 98(1998年、1999年和2000年)
Windows ME
- 虽然它是Windows 98的家族之一, 但从来没有在广告出现过
- Windows ME也被认为是对Windows 2000的低端仿制版本, 以适应想享受当时新出现的Windows 2000但苦于硬件性能不足的用户
- 由于 Windows ME 系统表现太差, 被戏称为 Windows Mistake Edition
以下引用自维基百科
这个系列的16位的Windows的升级版本, 仍然需要依赖16位的DOS基层程序才能运行, 不算是真正意义上的32位操作系统.
由于使用DOS代码, 架构也与16位DOS一样, 核心属于单核心, 但也引入了部分32位操作系统的特性, 具有一定的32位的处理能力.
它可视为微软将 MS-DOS 操作系统和早期 Windows 图形用户界面集成出售, 或本身也晋升为操作系统, 因此用户就不用再单独购买 MS-DOS 以运行"Windows图形用户界面"了.32位操作系统
- 从 NT 3.1 开始
- 开启了微软的 NT 时代
它们包括
- Windows NT 3.1(1992年)
- Windows NT 3.5
- Windows NT 3.51
- Windows NT 4.0
- Windows 2000
- Windows XP
- 32位 Windows Vista
- 32位 Windows 7
- 32位 Windows 8
- 32位 Windows 8.1
32位 Windows 10
- Windows XP、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 10同时有32位的x86版本与64位的x64版本
Windows Server 2003
- Windows Server 2003 R2 Datacenter Edition(32-Bit x86)
- Windows Server 2003 R2 Enterprise Edition(32-Bit x86)
- Windows Server 2003 R2 Standard Edition(32-bit x86)
以下引用自维基百科
这个系列是Windows NT体系结构操作系统, 是真正的纯32位操作系统.
Windows NT架构操作系统是完整独立的操作系统, 不同于依然需要DOS基层程序的混合16/32位的Windows 9x.
这个操作系统是为更高性能需求的商业市场而编写的32位操作系统.
这个系列都是Windows NT架构, 核心采用混合式核心即改良式微核心.64位操作系统
支持Itanium家族架构的微软Windows产品有
- Windows 2000 Advanced/Datacenter Server Limited Edition
- Windows XP 64-bit Edition
- Windows XP 64-bit Edition Version 2013
- Windows Server 2003/2003 R2 Enterprise/Datacenter
- Windows Server 2008/2008 R2 for Itanium Based System
支持x64架构的Windows产品有:
- Windows XP Professional x64 Edition
- Windows Server 2003/2003R2全线产品(Web版除外)
- Windows Vista/7/8/8.1
- Windows Server 2008/2008R2/2012/2012R2 全线产品
- Windows 10
以下引用自维基百科
64位Windows NT架构操作系统, 分为支持于IA-64架构和x64架构的两种不同版本.
在历史上微软曾对两种不同的64位架构提供支持, 其一是Intel公司和HP联合开发具有革新化的Itanium家族架构, 或称之为IA-64;
另一个就是AMD公司开发的演进化的x86-64架构.
由于两种架构的核心设计思想不同, 因此两种架构的操作系统和应用软件不具有互通性, 但都对传统的IA-32架构的软件一定程度上提供支持.
微软在发布Windows Server 2012 R2前放弃了对Itanium架构的支持.
因此现在微软的64位产品指的单单是x86-64架构, 而在微软的词汇中称为x64.移动设备操作系统
- 微软针对移动产品而开发的精简移动设备操作系统.
包括
- Windows Mobile
- Windows Phone
- Windows 10 Mobile
Windows CE 内核
- Pocket PC 2000
- Pocket PC 2002
- Windows Mobile 2003
- Windows Mobile 2003 SE
- Windows Mobile 5
- Windows Mobile 6
- Windows Mobile 6.1
- Windows Mobile 6.5
- Windows Mobile 6.5.3
- Windows Phone 7
Windows NT内核
- Windows Phone 8/8.1
- Windows RT
- Winndows RT 8.1
- Windows 10 Mobile
NT结构
它是指一系列微软设计及制造, 由Windows NT所派生出的视窗操作系统架构.
以下引用自维基百科
Windows NT采用用户模式与核心模式的分层设计并且是抢占式和可重入的.
可运行在单处理器或对称多处理器(SMP)上, 并利用I/O请求包与异步I/O来处理所有的I/O请求.
在Windows 2000(含)之前采用的Windows NT皆为32位版本的, 第一版64位的Windows NT首先用于64位的Windows XP.
用户模式下的程序与子系统仅能访问其可访问的资源, 核心模式下的程序则可以访问所有资源与外部设备.
Windows NT采用的核心是属于混合核心.
其体系结构包括简单内核、硬件抽象层(HAL)、驱动程序、服务(总称为运行体), 这些均属于核心模式.
Windows NT的用户模式子系统可以通过核心模式中的I/O Manager传递I/O请求给同样在核心模式中合适的驱动程序.
Windows NT的用户模式包括了两个子系统: 环境子系统(在不同操作系统类型下运行应用程序); 集成子系统(Integral subsystem)运行一些系统相关的函数.
在Windows NT中, 在核心模式的程序可以访问电脑所有的硬件和系统资源, 且在核心模式的程序可以在用户模式下运行的服务与应用程序访问到临界区(critical areas)时终止他们, 以避免访问到不该访问的存储器空间.
运行体提供了大部分的系统服务功能.
位于硬件抽象层与运行体之间的Windows NT的核心模式部分提供了多处理器同步、线程、中断调度与分派、异常处理、例外分派的功能.
核心还负责在引导时初始化设备驱动程序.
核心模式驱动程序分为三层:高层驱动程序、中层驱动程序、低层驱动程序.
Windows驱动程序模型(WDM)是存在于中层驱动程序, 主要用于二进制档与源代码兼容于Windows 98与Windows 2000的驱动程序.
低层驱动程序也可以是旧式Windows NT的设备驱动程序,或是PnP总线.所有的程序都运行在内存中的
- 我们的操作系统, 用户软件都运行于我们的
物理内存中 - 如果软件中使用了错误的内存地址, 修改了其他软件中的数据, 就会导致其他程序的数据被更改, 从而引起应程序崩溃
直接操作物理内存风险很大.- 在WindowsNT之前, 都是直接操作物理内存的
- WindowsNT之后就分为了用户态和和核心态, 它是通虚拟内存管理程序实现的.
- 虚拟内存中程序在执行的时候会正确地加载到物理内存.
- 我们写的程序都会运行在用户态, 发现可以执行才会转到核心态.
- 这样确保程序崩溃后操作系统并不会崩溃.
- 所以 Windows 95, Windows 98 等系统很容易出现操作系统崩溃蓝屏
- 我们的操作系统, 用户软件都运行于我们的
硬盘上面的程序是不可以执行的
CPU是在内存中取数据, 硬盘的数据要想被读入CPU, 需要首先被加载到内存中
NT架构的运行流程为:
- 软件载入用户态
- 从用户态载入核心态
- 对硬件进行操作
- 用户态我们也称之为 RING3, 它是我们平时所用的.
- 核心态我们也称之为 RING0, 它是操作系统平时用的.
Windows与编程语言
Windows API
以下引用自维基百科
Windows操作系统应用程序接口(Windows API), 有非正式的简称法为WinAPI, 是微软对于Windows操作系统中可用的核心应用程序编程接口的称法.
它被设计为各种语言的程序调用, 也是应用软件与Windows系统最直接的交互方式.
大多数驱动程序需要对Windows系统更底层次访问接口, 由所用版本的Windows的Native API来提供接口.
Windows有一个软件开发包(SDK, software development kit)提供相应的文档和工具, 以使程序员开发使用Windows API的软件和利用Windows技术.- Windows提供了一套程序开发接口, 全名叫做 Application Programming Interface, 即应用程序编程接口.
- 它有 R0 API 和 R3 API
- WindowsAPI是向下兼容的
为了实现向下兼容, 在有新的函数的时候, 通常会加一个Ex
- 比如, MessageBox, 有新函数叫 MessageBoxEx
- 关于Windows编程的文档, 请尽量查询 MSDN, 对于搜索引擎的答案, 仅作为参考.
SDK
- 软件开发工具包(Software Development Kit, SDK)一般是一些被软件工程师用于为
特定的软件包、软件框架、硬件平台、作业系统等创建应用软件的开发工具的集合. - SDK全称为 Software Development Kit.
以下引用自维基百科
它或许只是简单的为某个编程语言提供应用程序接口的一些文件, 但也可能包括能与某种嵌入式系统通讯的复杂的硬件.
一般的工具包括用于调试和其他用途的实用工具.
SDK还经常包括示例代码、支持性的技术注解或者其他的为基本参考资料澄清疑点的支持文档.
软件工程师通常从目标系统开发者那里获得软件开发包.
为了鼓励开发者使用其系统或者语言, 许多SDK是免费提供的.
SDK经常可以直接从互联网下载, 有时也被作为营销手段.
例如, 甲产品或许会免费提供构件SDK以鼓励人们使用它, 从而会吸引更多人由于能免费为其编程而购买其构件.
SDK可能附带了使其不能在不兼容的许可证下开发软件的许可证.
例如一个专有的SDK可能与自由软件开发抵触.
而GPL能使SDK与专有软件开发近乎不兼容.
LGPL下的SDK则没有这个问题.MFC
- MFC是一套框架
- 它是微软提供的, 用于在C++环境下编写用于程序的一个框架和引擎
- 它可以说是 WinAPI 和 C++ 结合后的再一次封装
- 它属于应用程序框架
Windows API的分类
基础服务(Base Services)
提供对Windows系统可用的基础资源的访问接口.
- 文件系统(file system)
- 外部设备(device)
- 进程(process)
- 线程(thread)
- 访问注册表(Windows registry)
- 错误处理机制(error handling)
这些功能接口位于:
16位Windows下的kernel.exe、krnl286.exe或krnl386.exe系统文件中
32位Windows下的kernel32.dll和advapi32.dll中图形设备接口(GDI)
- 提供输出图形内容到显示器, 打印机以及其他外部输出设备.
它位于
16位Windows下的gdi.exe;
32位Windows下的gdi32.dll图形化用户界面(GUI)
提供创建和管理屏幕和大多数基本控件(control)
- 比如按钮和滚动条
- 接收鼠标和键盘输入
- 其他与GUI有关的功能
这些调用接口位于
16位Windows下的user.exe
32位Windows下的user32.dll
从Windows XP版本之后, 基本控件和通用对话框控件(Common Control Library)的调用接口放在comctl32.dll中.通用对话框链接库(Common Dialog Box Library)
为应用程序提供标准对话框
- 比如打开/保存文件对话框
- 颜色对画框
- 字体对话框等等.
这个链接库位于:
16位Windows下的commdlg.dll中
32位Windows下comdlg32.dll中
它被归类为User Interface API之下通用控件链接库(Common Control Library)
为应用程序提供接口来访问操作系统提供的一些高级控件.
- 比如状态栏(status bar)
- 进度条(progress bars)
- 工具栏(toolbar)
- 标签(tab)
这个链接库位于
16位Windows下的commctrl.dll中
32位Windows下comctl32.dll中
它被归类为User Interface API之下Windows外壳(Windows Shell)
- 作为Windows API的组成部分, 不仅允许应用程序访问Windows外壳提供的功能, 还对之有所改进和增强.
它位于
16位Windows下的shell.dll中
32位Windows下的shell32.dll中(Windows 95则在shlwapi.dll中)
它被归类为User Interface API之下网络服务(Network Services)
为访问操作系统提供的多种网络功能提供接口
- 它包括NetBIOS
- Winsock
- NetDDE
- RPC
- ...
Web相关API
Internet Explorer网页浏览器也提供许多程序接口
可嵌入的网页浏览器控件(以及 Trident / MSHTML 引擎)
- 位于shdocvw.dll和mshtml.dll之中
urlmon.dll中的命名服务(URL moniters service)
- 利用COM对象为应用程序提供解析URL服务
- 应用程序也可以为其他程序提供自己的URL处理程序
- WinInet IE的网络层,支持HTTP和HTTPS等协议
- 一个支持多种语言文本的链接库(mlang.dll)
DirectX Transforms
- 一组图像过滤组件
- XML支持(MSXML组件)
Windows的邮件功能相关的API
地址本和邮件API
- 在Windows 7取消邮件功能之后也随之从Windows API中去除
- 由于Windows Mail在Windows Vista上取代了Outlook Express, 对应的API也随之变化.
多媒体相关API
- 自从Windows 95 OSR2以来, Microsoft把DirectX API作为Windows安装的一部分.
DirectX提供一组松散相关的多媒体和游戏服务
- Direct3D可以作为OpenGL的替代, 来访问3D加速硬件.
DirectDraw提供硬件加速2D framebuffer(帧缓冲)访问接口.
- 自DirectX 9以来, 相比Direct3D更倾向于后者
- 因为Direct3D提供更全面的高性能图形功能(毕竟2D渲染只是3D渲染的(不严格)子集).
- 已被Direct2D替代。
DirectSound提供底层次的硬件加速声卡访问.
- 被XAudio替代
DirectInput用来与输入设备(摇杆和gamepad)进行通信
- 已被DirectX 9中引入的XInput所替代
DirectPlay提供一个多人游戏的架构(multiplayer gaming infrastructure).
- 它已经被DirectX 9所替代
- Microsoft不建议用它开发游戏。
DirectShow可以创建和运行通用的多媒体管道(generic multimedia pipelines)
- 它可以与GStreamer框架相媲美
- 经常被用来渲染游戏视频和创建媒体播放器(Windows Media Player
- 诸如FFDShow之类的编解码器正是基于此;
- 在Windows Vista及更高版本中, DirectShow被Media Foundation替代).
- 不建议用DirectShow开发游戏
DirectMusic提供类似MIDI的功能
- 与DirectSound一起被XAudio替代
程序通信API
Windows API的功能主要通过使操作系统和应用程序之间的交互来实现.
- 为了实现不同Windows应用程序的通信, 微软随着主要Windows API, 推出一系列的技术.
- 最初的DDE(Dynamic Data Exchange)升级为对象连接与嵌入(Object Linking and Embedding)
- 再后来是组件对象模型(COM)
封装库
微软利用许多更底层的Windows API函数, 开发出许多封装库(wrapper), 让应用程序以更抽象的方式与Windows API进行交互.
- MFC(Microsoft Foundation Class Library)用C++ 类别来封装Windows API的功能,因而允许用更为面向对象的方式与API进行交互
- ATL(Active Template Library)是对COM的面向模板(template oriented)的封装
- WTL(Windows Template Library)作为ATL的增强,被用来作为MFC的轻型的替代物
其他著名的封装库是Borland公司的产品, 为了与MFC竞争而推出的OWL(Object Windows Library)提供了类似的面向对象封装
- 不久Borland又推出VCL(Visual Component Library)来取而代之
大多数的Windows 程序框架(application framework)是对Windows API的封装
- .NET Framework、Java以及其他在Windows下的程序语言, 都是(或者包含)封装库.
Windows API入门
我们使用Visual Studio系列软件在进行Windows程序开发的时候, VS会默认的给我们进行一些附加库的添加. 
所以, 我们只需要添加 #include <Windows.h> 就可以在我们的项目中使用Windows的API了.
Windows.h
它包含了Windows里大量我们常用的API函数
Windows.h 是一个特别重要的头文件, 它包含了其他Windows头文件, 这些头文件的某些也包含了其他头文件.
- WinDef.h
- WinNT.h
- WinBase.h
- WinUser.h
- WinGDI.h
WinDef.h
Windows基础类型定义头文件
WinNT.h
Unicode支持头文件
WinBase.h
Kernel函数头文件
WinUser.h
用户态(Ring3)接口头文件
WinGDI.h
图形设备接口头文件
未完待续...
如有错误,请提出指正!谢谢.
本文由 花心胡萝卜 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: 2017-05-05 at 09:45 am