Colin Work Shop (C)
Name: Colin Xu
Age: 26
Location: Shanghai, PRC
Ycul Blog    Colin Work Shop    Edit My Blog
   Profile
Name:    Colin Xu
Age:    26
Location:    Shanghai
   Time & Date
   Categories
   · All
   · Mess
   · Feelings
   · Technique Releated
   · Unclassified
   Recent Comments
   Friends' Blogs
   · Live Space, 好朋友才能看...
   Trackers' Blogs
   Google Search
Google
  Crack & Keygen Search
www.astalavista.ms
订阅 RSS
歪酷博客
Recommended Browser:
IE 6.0/Firefox 1.5 or Higher
Recommended Resolution:
1024*768 or Higher
      Colin Work Shop
                        some little works
   Blog
SuperColin @ 2010-01-01 00:00

虽然尚未达到历史高点
都是谁 @.@ 劳驾来的人留个记号吧...


 
Colin Xu @ 2009-02-07 16:58

alert("Hello world"); 
#include stdio.h
void main(){
	int i,j,k;
	for (...){
		if (...)
	}
}


 
Colin Xu @ 2009-02-03 12:09

算起来,应该是学生时代最后一个在寒假里过的农历春节了吧。
过年前的三天回家住了,爸妈还是一如既往开始准备过年的吃的东西,以至于到今天还有没吃完的属于年货的东西。
大年三十,贴春联放爆竹。三十晚上一家人围在一起吃年夜饭,看春晚。如果没了春晚,估计过年的气氛就更淡了吧。
初一开始么,就各种聚会,总之是不停得吃阿吃。。。
这个年过得很安静,除了必要的各种聚会,剩下的时间都能待在家里,过过消遣的日子。白天晒着太阳,看书上网游戏;我爸在边上看报纸偶尔也上上网;我妈又开始看另一个韩剧。还有咖啡、蜜饯、瓜子相伴。弄好无线之后,晚上也可以窝在被子里上网了。

好像有很久都没有享受过这么悠闲的日子了。不过接下来,再次重归忙碌。



 
Colin Xu @ 2009-02-01 23:41

10个小时看完然后写完了第二部分,暂时告一段落,后面进度会减慢一些。
后面要作点科研的事情,开始写毕业论文,准备intern,...



 
Colin Xu @ 2009-02-01 23:19

不支持代码框也就算了,文章长度居然还有限制。。。。
不得不把一篇拆成4篇


 
Colin Xu @ 2009-02-01 23:18

  硬件抽象层(HAL, Hardware Abstraction Layer):
实现可移植性的关键,向Windows运行的硬件平台提供低层接口,使得对Windows来说隐藏了I/O接口,中断控制等细节。程序通过调用HAL例程来获得与平台相关的信息。

设备驱动(Device Driver):
处在I/O管理器和相关硬件之间的的可装载内核模块,在以下三种环境之一运行(内核模式):
  • 发起I/O功能的用户线程中
  • 内核模式的系统线程中
  • 由中断发起

有以下类型的驱动:

  • Hardware device driver,使用HAL向硬件设备写入或读取
  • File system driver, 接受面向文件的I/O请求并转换成针对特定设备的I/O
  • File system filter driver, I/O请求传递给下一层前,截获I/O请求并进行附加处理
  • Network redirector and server, 将系统的I/O请求转发至网络
  • Protocol driver,实现网络协议
  • Kernel streaming filter driver, 相互链接以处理数据流

 WDM(Windows Driver Model):
Windows NT Driver Model
的扩展,同时增加了对PnPPower Options的等的支持。
WDM
定义了三种驱动:

  • 总线驱动(bus driver), 为总线控制器,适配器,桥等其他拥有子设备的设备提供服务。任何总线都有总线驱动。
  • 功能驱动(function driver), 提供对特定设备的接口,唯一可以访问设备专用寄存器的驱动。
  • 过滤驱动(filter driver), 为设备提供附加功能,可以改变I/O请求

WDM中,总线驱动将设备报告给PnP管理器,功能驱动控制硬件。单一的驱动程序无法完成控制设备的所有功能。
下层过滤驱动哦负责改变I/O请求,上层过滤驱动负责增加附加功能。

Ntdll.dll
中的函数列表:windows为用户模式子系统DLL提供的所有系统服务以及相对于每个子系统暴露出的子集。也含有部分未文档化的API

Windows
系统例程的命名规范:
<
前缀><操作><对象>

常用前缀:

Prefix

Component

Cc

Cache manager

Cm

Configuration manager

Ex

Executive support routines

FsRtl

File system driver run-time library

Hal

Hardware abstraction layer

Io

I/O manager

Ke

Kernel

Lpc

Local procedure call

Lsa

Local security authentication

Mm

Memory manager

Nt

Windows system services (most of which are exported as Windows functions)

Ob

Object manager

Po

Power manager

Pp

PnP manager

Ps

Process support

Rtl

Run-time library

Se

Security

Wmi

Windows Management Instrumentation

Zw

Mirror entry point for system services (beginning with Nt) that sets previous access mode to kernel, which eliminates parameter validation, because Nt system services validate parameters only if previous access mode is user


系统进程(System Process):

  • Idle process, 每个CPU中一个线程,占用CPU空闲时间
  • System process,包含大部分内核模式系统线程
  • Session managersmss.exe
  • Windows subsystem, csrss,exe
  • Logon process,winlogon.exe
  • Service control manager, services.exe及其建立的子进程
  • Local security authentication server, lsass.exe

Idle processSystem process在系统中没有实际对应的镜像文件。
进程树表明了进程之间的父子关系。

进程相关的工具:
Task Manager, taskmgr.exe
Process Viewer, pviewer.exe
Process Status, pstat.exe,
唯一可以显示模块在系统空间中的加载地址
Process Explode, pview.exe
Task List, tlist.exe
Quick Slice, qslice.exe

中断(interrupt)与延迟过程调用(DPC)
任务管理器会将中断与延迟过程调用时间包含在系统空闲时间中。

系统进程(system process)与系统线程(system thread)
系统进程(Windows 2000中的ID8Windows XP2003中的ID4)是只能运行在内核模式的内核模式系统线程的母体。
内核模式系统线程(kernel-mode system thread)只在内核模式下的系统空间中加载代码,通过PsCreateSystemThread在系统初始化阶段创建。
系统线程有:
balance set manager,
每秒唤醒一次,发出与调度有关的事件
cache manager,
实现先读后写的I/O
file server device driver(srv.sys),
向磁盘上对网络共享的文件数据发起网络I/O请求

系统线程默认属于系统进程,但设备驱动可以在任何进程中创建系统线程。

会话管理器(Session Manager):
系统中第一个创建的用户模式进程。打开额外页面文件、执行延迟的文件改名和删除等操作、创建系统环境变量等。

Winlogon->LSASS->Userinit:
Winlogon,
处理交互式用户登陆界面和注销。可以通过SAS(Secure Attention Sequence)启动,Windows上的SASctrl+alt+del.Windows GINA(Graphical Identification and Authentication)(msgina.dll)提供默认的登陆界面。
Lsass,
本地安全服务器进程
Userinit,
执行该用户的初始化工作,查找注册表中的shell键值来执行系统外壳(默认explorer.exe)然后退出。因此Explorer.exe没有父进程。

服务控制管理器(SCM, Service Control Manager):
Services.exe,
负责启动、停止服务进程以及与服务进程交互。
服务有三种名称:进程名,注册表中的内部名称,SCM中的显示名。服务还可以有一个描述域。




 
Colin Xu @ 2009-02-01 23:16

环境子系统和子系统DLL(environment subsystems and subsystem DLLs):
OS/2, POSIX, Windows
OS/2
Windows 2000开始取消。
Windows XP
开始不包含POSIX,而是一个增强版本的POSIX
位于HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems
Windows
键值,Windows子系统专用文件
Kmode, Windows
子系统内核文件
OS/2, POSIX
键值,OS/2POSIX子系统文件。

环境子系统将Windows基本服务自己开放给应用程序,每个子系统提供对原生服务不同部分的访问。应用程序只能完成对应的唯一子系统下的功能,每个可执行文件只对应唯一的子系统,运行时有进程创建代码检查程序头中的子系统标示,该标示由链接是的/SUBSYSTEM指定。
不同子系统不能混合调用。
应用程序不直接调用Windows系统服务,而是通过子系统DLL来调用。
可以用Exetype工具或Dependency Walker工具检查应用程序工作的子系统。

当一个应用程序调用子系统DLL中的函数时,有以下三种情况之一:

  • 函数完全在子系统DLL中的用户模式下实现,不必向环境子系统进程传递消息,不会调用Windows系统服务
  • 函数需要对Windows执行体的调用,如ReadFileWriteFile
  • 函数需要环境子系统的参与

某些函数可能需要第二种与第三种的接合

POSIX
OS/2通过调用Windows子系统来显示I/O.

Windows子系统:

  • 环境子系统进程(csrss.exe)
    • 支持控制台(文本)窗口
    • 创建和删除进程/线程
    • 部分支持16位虚拟DOS
    • GetTempFile等函数,自然语言函数等
  • 内核模式设备驱动(Win32k.sys)
    • 窗口管理器
    • 图形设备接口(GDI)
  • 子系统DLL
    • Kernel32.dll, Advapi32.dll, User32.dll, Gdi32.dll等文档化的Windows API
    • 大部分未文档化的调用Ntoskrnl.exeWin32k.sys的内核模式系统服务
  • 图形设备驱动,硬件独立的图形显示驱动,打印驱动

应用程序通过调用标准用户函数建立用户接口控制,窗口管理器将这些请求传递给GDI
GDI
提供一组二维函数,使得应用程序与图形设备交互但不必关心设备本身。

Windows NT 4
以前,窗口管理器和图形服务是用户模式Windows子系统进程的一部分,但自NT4以后,被放入内核模式,提高了系统的性能。但与其他服务进程的切换消耗了CPU周期和内存资源。

USER
GDI放在内核模式下,其对性能和稳定性的影响已经减至最小,并不影响抢先式调动。因为在Windows中,在执行体任何地方执行的线程都会在用户模式下线程一起抢先和调度,而不像其他系统,内核模式的执行过程不会被抢占。

POSIX子系统:
Portable Operating System Interface based on Unix, Unix
风格操作系统接口的国际标准。
Windows
只实现了POSIX.1(ISO/IEC 9945-1:1990, IEEE POSIX stardard 1003.1-1990)

OS/2子系统:
仅支持OS/2 1.216位基于字符或者视频I/O的应用程序。

Ntdll.dll:
主要用于子系统DLL的系统支持库,包含两类函数:

  • 系统服务,从用户模式调用Windows执行体模块的接口。NtCreateFile.
  • 由其他子系统、子系统DLL、原生镜像使用的内部支持函数

Ntdll.dll对所有函数具有相同的入口点名,而在函数内部负责处理器体系结构相关的模式切换指令。
Ntdll.dll
还包含其他函数,如镜像载入,堆管理等。

执行体(Executive)
执行体是Ntoskrnl.exe的上层(kernel是下层),包含以下类型的函数:

  • 用户模式可导出和可调用的函数,称为系统服务,通过Ntdll.dll导出
  • 通过使用DeviceIoControl函数调用的设备驱动函数,提供从用户模式调用内核模式中不与读写相关的设备驱动函数
  • 只能从内核模式调用的函数.Windows DDK, Installable File System(IFS)中文档化的函数
  • 可以从内核模式调用但为在DDKIFS中文档化的函数
  • 定义为全局符号但未导出的函数,Ntoskrnl.exe内部调用。IopMi开头
  • 模块内部未定义为全局符号的函数

执行体包含以下主要组件:

  • Configuration Manager, 负责实现和管理系统注册表
  • Process and thread manager, 负责建立和终止进程、线程。在Windows内核中实现,执行体向这些低层对象添加了部分功能。
  • SRM(security reference manager), 强制本地安全策略
  • I/O manager, 实现了设备独立的I/O, 将任务转发至适当的设备进行后续处理
  • PnP(Plug and Play) manager,针对某一设备加载何种驱动,合理分配I/O端口,IRQDMA通道等硬件资源,当硬件设备改变时向系统发送适当的通知消息
  • Power manager,协调电源事件,想设备驱动发送电源管理,I/O通知
  • WDM Windows Management Instrument routines, 设备驱动可以发布性能和配置信息,并且从用户模式的WMI服务接受指令
  • Cache manager, 增强基于文件的I/O性能
  • Memory manager, 实现虚拟内存,支持cache manager
  • Logical prefetcher, 加速系统和进程的启动顺序

执行体还包含以上组件使用的若干函数

  • Object manager
  • LPC(local procedure call) facility
  • common run-time library
  • executive support routines

内核(kernel):
提供了执行体组件所需要的基本机制,如线程调度、服务同步等。主要由C编写,部分汇编,可以在DDK中查阅。Ke开头

内核对象(Kernel Object):
内核对线程和其他可共享资源的包装,使得内核更加易于控制。

  • control object, 建立控制多种操作系统函数的原语
  • dispatcher object, 影响线程调度

硬件支持:
将执行体和设备驱动从Windows支持的多种体系结构中独立、抽象出来,如中断处理,异常发布,多处理器同步等。




 
Colin Xu @ 2009-02-01 23:15

  可扩展性(Scalability):
  • 在任何可用的处理器上同时执行代码
  • 同一进程内的多线程可以同时在多个处理器上执行
  • 与内核、驱动、服务器进程进行良好同步(自旋锁,自旋锁队列等),多组件可以同时在多核上运行
  • I/O接口等编程机制可以在具有多线程的服务进程上良好实现,并扩展至多处理器

ClientServer版本的差异:

  • Windows 2000
    • Client: Windows 2000 Professional
    • Server: Windows 2000 Server, Windows 2000 Advanced Server, Windows 2000 Datacenter Server
  • Windows XP,均为client版本:
    • Windows XP Starter Edition
    • Windows XP Home Edition
    • Windows XP Professional Edition
      (
      已下三种与professional具有相同的系统核心)
    • Windows XP Tablet PC Edition
    • Windows XP Media Center Edition
    • Windows XP Embedded
  • ClientServer主要在支持的处理器数、物理内存数、网络并发连接数方面存在不同。Server同时还提供特殊的分层服务,如directory services, clusteringmultiuser Terminal Services等。
  • Windows Server 2003的大部分组件相对于Windows XP未作改变,是Server版。
  • Windows XPWindows 2003的差异
 

Number of Processors Supported (32-bit edition)

Physical Memory Supported (32-bit edition)

Number of Processors Supported (64-bit edition)

Physical Memory Supported (Itanium editions)

Physical Memory Supported (x64 editions)

Windows XP Home Edition

1

4 GB

Not available

Not available

Not available

Windows XP Professional

2

4 GB

2

16 GB

16 GB

Windows Server 2003 Web Edition

2

2 GB

Not available

Not available

Not available

Windows Server 2003 Small Business Server

2

2 GB

Not available

Not available

Not available

Windows Server 2003 Standard Edition

4

4 GB

Not available

Not available

Not available

Windows Server 2003 Enterprise Edition

8

32 GB

8

64 GB

64 GB

Windows Server 2003 Datacenter Edition 32

128 GB on x64;

64 GB on x86

64

512 GB (1024 GB in SP1)

Not available

  • Windows Server 2003各版本的差异
  • 系统通过HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions下的ProductType键值来判断系统是Client还是Server: ServerNTWinNT,并存储为全局变量MmproductType.通过ProductSuite来判断各种版本。
  • Windows下用户编程通过VerifyVersionInfo函数来判断操作系统版本。设备驱动程序通过内核模式函数RtlGetVersion来获得。
  • Server会为系统吞吐优化,Client则为桌面交互的反应时间优化。
Checked build, debug version, Windows重新编译时的版本号,编译时定义了DBG标志,Windows 2000 Professional Windows XP ProfessionalWindows Server 2003,进行更严格的错误检查。大部分checked build代码包含断言,便于调试。

可以用如下VBScript检查版本:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery  ("SELECT * FROM Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
  Wscript.Echo "Caption: " & objOperatingSystem.Caption
  Wscript.Echo "Debug: " & objOperatingSystem.Debug
  Wscript.Echo "Version: " & objOperatingSystem.Version
Next



Windows体系结构:






 
Colin Xu @ 2009-02-01 20:05

1989年设计Windows NT的需求:

  • 真正32位抢先式(preemptive)、可重入(reentrant)、虚拟内存操作系统。
    • 抢先式:不需要请求协作,操作系统利用中断调度任务执行,所有进程都能获得CPU时间。
    • 可重入:可以安全并行执行,无静态/全局非常量数据,不返回静态/全局数据
  • 可运行在多种硬件体系结构和平台上
  • 可以在对称多处理器系统(SMP)上运行和扩展
  • 分布式计算平台,既可以作为服务器也可以作为客户端
  • 可以运行部分16位MS-DOS及Windows 3.1应用程序
  • 符合POSIX 1003.1
  • 符合政府和工业对操作系统安全性的要求
  • 支持Unicode,易于本地化

Windows NT的项目目标:

  • 可扩展(Extensibility)
  • 可移植(Portability)
  • 稳定性和鲁棒性(Reliability & Rebustness)
  • 兼容性(Compatibility)
  • 性能(Performance)

操作系统模型:
大部分操作系统会将应用程序与内核隔离。
Windows和大多数Unix系统一样,是单一整体操作系统,操作系统代码和设备驱动共享同一块内核模式下受保护的内存空间。
Windows不是基于微内核的系统。纯微内核系统的主要操作系统组件在各自独立隔离的私有地址空间中运行,其余均在用户模式下运行。纯微内核系统的效率不高。
所有操作系统组件受保护,应用程序无法直接访问。
Windows的内核组件包含了面向对象的设计思想,但严格来说并非面向对象的系统。大部分系统代码由C写成,便于移植,其对象的实现借用了面向对象编程语言中的一些特性来实现。

Windows体系结构:


四种用户模式进程:

  • 固定的系统支持进程,非Windows服务。登陆管理、会话管理等。
  • 服务进程和主机Windows服务。任务调度、打印等,与用户登陆独立的服务。
  • 用户应用程序
  • 环境子系统服务器进程。windows子系统,POSIX子系统,OS/2子系统。

Windows内核模式组件:

  • 执行体(Executive): 基本操作系统服务。内存管理,进程管理,安全,I/O,网络。
  • 内核(Kernel): 低层操作系统功能。线程调度,中断,多处理器同步。
  • 设备驱动(Device Driver): 硬件设备驱动。文件系统,网络驱动。
  • 窗口和图形系统(windowing and graphics system): 图形用户界面GUI。

核心Windows系统文件:

  • Ntoskrnl.exe, 执行体和内核
  • Ntkrnlpa.exe, 仅在32位系统中存在。带物理地址扩展PAE支持的执行体和内核
  • Hal.dll, 硬件抽象层HAL(hardware abstraction layer)
  • Win32k.sys, windows子系统的内核模式部分
  • Ntdll.dll, 内部支持函数和系统服务,向可执行函数传递消息
  • Kernel32.dll, Advapi32.dll, User32.dll, Gdi32.dll,核心Windows子系统DLL

可移植性(Portability):
Windows被设计在可以运行于多种硬件体系结构之上,包括CISC和RISC。
Windows NT支持x86和MIPS,然后加入了对Alpha AXP的支持。
Windows NT 3.51开始支持PowerPC。
Windows 2000开始取消了对MIPS和PowerPC的支持,然后取消了对Alpha AXP的支持。
最新的Windows 2000,Windows XP, Windows Server 2003仅支持x86体系结构,以及对Intel Itanium IA-64, AMD x86-64, Intel 64-bit Extension Technology (EM64T)三种64位处理器的支持。

Windows通过两种主要方式实现多平台的可移植性:

  • 分层设计。系统的低层部分、处理器体系结构相关和平台相关的部分被分成多个独立的模块,使得上层系统可以不受这种处理器差异和体系结构差异的影响。提供可移植性的两个核心组件是kernel(包含在ntoskrnl.exe中)和HAL(包含在Hal.dll中)。体系结构相关的函数在kernel中实现。同意体系结构下系统相关的函数在HAL中实现。除此之外,内存管理也属于体系结构相关的组件,但与系统整体相比只是一小部分。
  • windows系统大部分由C编写而成,少部分为C++。直接与系统硬件通讯或者明显影响系统性能的部分由汇编语言编写,系统各个部分都可能存在由汇编语言编写的代码。

对称式多处理(SMP, symmetric multiprocessing):
Windows是SMP系统,此外还有非对称处理(ASMP, assymmetric multiprocessing)。

Windows XP和Windows Server 2003支持两种新的SMP系统,超线程(hyperthreading)和非一致性内存结构(NUMA, non-uniform memory architecure).

  • Hyperthreading, 由Intel提出。在一个物理处理器上模拟多个逻辑处理器,所有逻辑处理器都有各自的CPU状态,但共享执行引擎和cache,一个逻辑处理器可以在其他逻辑处理器忙碌时继续工作。Windows XP的调度算法使得系统可以对多处理器超线程机器更好地工作。
  • NUMA, 处理器被分为成为节点(node)的组,每个节点有自己的处理器和内存,并且通过缓存一直的互联总线连接到更大的系统上。NUMA系统上的Windows仍然作为一个SMP系统,所有处理器都可以访问所有内存,但访问所在节点上的内存比访问其他节点上的内存更快。系统会尽量调度处在同一节点上的内存和处理器给线程使用。

Windows最多支持32个处理器(64位支持最多64个),但这只是受字长使用方便的限制,而非Windows设计上的限制。保存在:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Licensed Processors

Windows 2000各版本支持的处理器、物理内存差别:

Edition

Number of Processors Supported

Physical Memory Supported

Windows 2000 Professional

2

4 GB

Windows 2000 Server

4

4 GB

Windows 2000 Advanced Server

8

8 GB

Windows 2000 Datacenter Server

32

64 GB


由于性能原因,kernel和HAL在单处理器系统、多处理器系统上的文件有所不同。Windows 2000有6个不同文件,Windows XP和Windows Server 2003有3个不同文件。64位系统上没有PAE的区别,只有单处理器、多处理的差异:

Name of File on System Disk

Name of Uniprocessor Version on Distribution Media

Name of Multiprocessor Version on Distribution Media

Ntoskrnl.exe

Ntoskrnl.exe

Ntkrnlmp.exe

Ntkrnlpa.exe (PAE kernel; 32-bit systems only)

Ntkrnlpa.exe in \Windows\<arch>\Driver.cab

Ntkrpamp.exe in \Windows\<arch>\Driver.cab

Hal.dll

Depends on system type

Depends on system type

(Windows 2000 only)

   

Win32k.sys

\I386\UNIPROC\Win32k.sys

Win32k.sys in \I386\Driver.cab

Ntdll.dll

\I386\UNIPROC\Ntdll.dll

\I386\Ntdll.dll

Kernel32.dll

\I386\UNIPROC\Kernel32.dll

\I386\Kernel32.dll

HAL在个系统上的差异:

HAL File Name

Systems Supported

Hal.dll

Standard PCs

Halacpi.dll

Advanced Configuration and Power Interface (ACPI) PCs

Halapic.dll

Advanced Programmable Interrupt Controller (APIC) PCs

Halaacpi.dll

APIC ACPI PCs

Halmps.dll

Multiprocessor PCs

Halmacpi.dll

Multiprocessor ACPI PCs

Halborg.dll

Silicon Graphics Workstation (Windows 2000 only; platform no longer marketed)

Halsp.dll

Compaq SystemPro (Windows XP only)




 
Colin Xu @ 2009-01-31 22:24

Windows内核学习-1

参考书目:
Microsoft Windows Internals, 4th Edition

读前感:
作者Mark Russinovich和David Solomon无疑是两位顶级牛人,前者通过reverse engineering对windows内核有深入了解,后者是windows内核培训师,此书自然非常值得一读,也是工作的需要。

好像一直以来对版本号都比较在意。以前总是喜欢记各种数字,分类,级别之类的东西。
Product Name, Internal Version Number
Windows NT 3.1, 3.1
Windows NT 3.5, 3.5
Windows NT 3.51, 3.51gi
Windows NT 4.0, 4.0
Windows 2000, 5.0
Windwos XP, 5.1
Windows Server 2003, 5.2
Windows Vista, Server 2008, 6.0
更详细的可以参考转载的另一篇文章。

其实从NT问世以来,核心代码的变化就不大了,相对于95等基于DOS的Windows,其改进主要有以下几个方面:
支持多处理器系统
支持访问权限控制等安全性
完全32位系统,无16位代码
完全多任务
允许16位程序在各自的地址空间运行
只有映射了相同共享内存区段的进程,其共享内存相互可见
95下部分关键操作系统页在用户模式下可写,使得系统和应用程序容易崩溃

Windows API包含以下几个主要部分:
Base Services
Component Services
User Interface Services
Graphics and Multimedia Services
Messaging and Collaboration
Networking
Web Services

.NET Framework的概念:
一组类库的集合,FCL(Framework Class Library)和CLR(Common Language Runtime)。
提供托管代码(managed code)执行环境和即时调试(just-in-time debug, JIT debug),类型验证、垃圾收集、代码访问安全性等特性。
所有.NET Framework的组件都是在非托管Windows API函数基础上实现的标准用户模式Windows DLL。

.NET Framework各组件间的关系:

Windows API 函数:文档化的、Windows API中可调用的例程。CreateProcess
Native system services(executive system services): 非文档化、用户模式下可调用的服务。NtCreateProcess
Kernel support functions (or routines):只能在内核模式中调用的Windows操作系统子例程。ExAllocatePool
Windows services:由Windows控制管理器启动的进程。Task Scheduler
DLL:在应用程序使用时动态载入的一组可调用子例程的集合。

Process(进程):
执行程序实例时包含资源集合的一个容器。Program(程序)是指一组指令的集合。抽象化的windows进程包含:
私有地址空间
可执行程序
一组指向各种系统资源的句柄
access token(security context),标示了用户、安全组、与进程相关的优先级
process ID (client ID),唯一
至少一个执行线程

Windows只保留 创建者进程创建者的ID,而不保留父进程和和孙子进程之间的链接。
对于这点,我的理解是,如果A进程创建了B进程,B进程又创建了C进程。此时若结束A的进程树,由于A与C之间无链接,故C进程不会结束,而A进程和B进程会结束。

Thread(线程):
Windows在进程内用于调度执行的入口,包含:
CPU状态寄存器内容
用于kernel mode的栈和user mode的栈
TLS(thread-local storage): 私有存储控件,由子系统、运行时库、DLL使用
thread ID,唯一,不会与process ID重复
可拥有自己的security context

Fiber:
允许应用程序调度自己的线程而不依赖Windows基于优先级的调度机制,也称为轻量级线程。在kernel32.dll中在用户模式下实现,对内核可见。
使用fiber:
使用windows函数"ConvertThreadFiber"将线程转换为fiber;
使用"CreateFiber"函数,新转换的fiber可以建立附加的fiber,每个fiber可以拥有自己的fiber集合。
与线程不同,只有手动使用"SwitchToFiber",或者当前fiber结束,新的fiber才开始执行。

进程中的所有线程共享进程的虚拟地址空间及其他资源,可以读取/写入其他线程的内存。然而,除非进程使其部分私有地址空间成为共享内存区(shared memory section, Windows API的文件映射对象file mapping object),或者进程有权限打开其他进程以使用"ReadProcessMemory"等进程交叉内存函数(cross-process memory function),否则线程在其他情况下无法引用非所属进程的地址空间。

Access Token: 位于进程对象内部,描述security context,包含进程的security identification和credentials。线程默认没有access token,但是线程个体可以在不影响进程中其他线程的情况下拥有一个模拟其他进程(包括远程进程)security context的access token。
VAD(virtual address descriptor): 内存管理单元用来跟踪进程正在使用的虚拟地址的数据结构。
Job: 进程模型的扩展,使得一组进程可以作为一个单元进行管理和操作,弥补windows中缺少的结构化的进程树。

Virtual Memory:Windows实现了基于扁平/线性地址空间的虚拟内存系统,使得每个进程都可以拥有各自较大的私有地址控件。可以使物理上不连续的内存被映射到连续区域,在运行时由内存管理单元及其他硬件进行翻译和映射。通过保护和映射,操作系统可以保证私有地址控件相互独立,不会冲突或者覆盖。由于大部分系统的物理内存比正在使用的进程需要的虚拟内存少很多,因此内存管理单元会将一部分内存作为分页文件存储在磁盘上。当线程访问已经转储到磁盘分页上的虚拟地址空间时,虚拟内存管理单元再将这些信息重新回载到物理内存。此部分工作由内存管理单元及相应的硬件完成,应用程序不必关心具体细节。

系统虚拟内存大小与硬件平台有关。32位x86系统的虚拟地址空间理论最大值默认4GB,其中0x00000000~0x7fffffff分配给应用程序,0x80000000~0xffffffff分配给操作系统自身使用。Windows 2000 Advanced Server, Windows 2000 DataCenter Server, Windows XP(sp2 or later), Windows Server 2003支持在boot.ini中加入"/3GB"和"/USERVA",来使得特殊标记的应用程序(必须在可执行镜像头中设置大地址空间标记aware flag)可以使用3GB的私有地址空间,其余1GB留给操作系统使用。

AWE(address windowing extension): windwos允许32位应用程序分配最多64GB物理内存,然后将其映射至2GB虚拟地址空间。通过PAE实现。

x64: 8192GB User Process space, 6657GB System space
Itanium: 7152GB User Process space, 6144GB System space
该限制并非平台体系结构的限制,而是当前64位windows实现的限制。

Kernel Mode vs. User Mode:
Windows使用了两种处理器模式,处理器本身可能支持更多模式。
user mode: 应用程序代码
kernel mode: 操作系统代码,有访问所有系统内存及CPU指令的权限。
通过提供给操作系统及系统软件更高的优先级,windows可以保证应用程序的崩溃不影响系统的整体稳定性。

Intel x86体系结构定义了四种优先级/环。Windows使用Ring 0给内核模式,Ring 3给用户模式。只使用两种优先级的原因是受较老的体系结构的影响(Compaq Alpha, Silicon Graphics MIPS)只实现两两种优先级。

Kernel mode 的系统代码和设备驱动共享同意虚拟地址空间。虚拟内存的每一页标记了处理器应该以何种方式访问该页。系统空间页只能以kernel mode访问,用户空间的所有页都可以从user mode访问。只读页在任何模式下都不可写入。

windows不会对运行在kernel mode的组件所使用的私有读写系统内存进行保护。一旦出在kernel mode下,操作系统及设备驱动即具有了对系统内存空间的完全访问权限。这种保护上的缺陷使得加载第三方设备驱动时要格外注意,同时也是windows引入驱动签名机制和驱动验证机制的原因。

应用程序通过使用系统服务来调用从user mode转换到kernel mode,模式转换不影响线程调度顺序。

Privilege Time: 指在一个特定时间间隔内运行在kernel mode的时间。
User Time: 指在一个特定时间间隔内运行在user mode的时间。

Terminal Service:远程用户可建立至另一台机器的会话并且运行应用程序。服务器将图形界面传回客户端,同时将远程用户的输入指令传给服务器。Unix下的X Windows允许应用程序在服务器上运行而显示在客户端,因为整个用户会话都是远程的,而不仅是单一的应用程序。

Windows 2000 Server允许建立远程会话,Windows 2000 Professional不可。
Windows XP Professional只允许建立一个远程会话,即同一会话同一时刻只允许本地或远程之一登陆。
Windows XP支持快速用户切换。
Windows 2000 Server和Windows Server 2003 Standard Edition同时允许两个远程连接。

可以通过Windows API来限制和控制应用程序的远程执行。

Object: 静态定义对象类型的单一运行时实例。
Handle: 对象实例的引用。

Security:
discretionary protection: 对象拥有者授予/拒绝他人访问
privilege access control: 若拥有者不可用,控制某使用者是否有使用权

Registry: 保存用于维护系统、设备、设置、安全及用户配置的数据结构

Unicode:大部分有字符串参数的内核函数均以16位unicode来存储和处理,为保持和ANSI的兼容性,有字符串参数的函数都会有ANSI(以A标示)和Unicode(以W标示)两个版本的函数接口。

常用工具:
www.sysinternals.com
Startup Programs Viewer
DLL List
EFS Information Dumper
File Monitor
Handle Viewer
Junction Tool
Live Kernel Debugging
Logon Sessions
Object Viewer
Pending File Moves
PipeList Tool
Process Explorer
Get SID Tool
Registry Monitor
TDImon

Support Tools, Platform SDK, Windows DDK, Resource Kits:
Dependency Walker
Global Flags
Kernel Debuggers
Open Handles
Page Fault Monitor
Pool Monitor
Process Statistics
Process Viewer
Quick Slice
Service Control
Task (Process) List

Windows built-in tools:
Performance tool
Task Manager

SoftICE