Created
August 1, 2014 04:28
-
-
Save chenzx/c3528bf514f9ec1d4298 to your computer and use it in GitHub Desktop.
深入解析Windows操作系统 第6版(上册)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
深入解析Windows操作系统 第6版(上册) | |
跳转至: 导航、 搜索 | |
目录 | |
1 概念和工具 | |
2 系统架构 | |
3 系统机制 | |
4 管理机制 | |
5 进程、线程和作业 | |
6 安全性 | |
7 网络 | |
概念和工具 | |
纤程:ConvertThreadToFiber, CreateFiber(用户可自行调度) | |
虚拟地址描述符(VAD) | |
地址窗口扩展(AWE):32位应用可申请多达64G物理内存 | |
x64地址空间为8TB(Windows实现限制) | |
p17 模式转换(用户<-->内核)不是线程切换 | |
Direct2D在用户模式下执行大量计算,然后将画面数据发送到内核中进行合成(哦~) | |
p19 ?用Windows无事可做时,它运行于内核模式下 | |
p26 调试符号服务器:srv*c:\symbols*http://msdl.microsoft.com/download/symbols | |
内核调试:Kd/Windbg | |
本地内核调试* | |
lkd> dt nt!_* | |
lkd> dt nt!_kinterrupt -r | |
Sysinternals LiveKd | |
系统架构 | |
核心系统文件:Ntoskrnl.exe Ntkrnlpa.exe(32)Hal.dll Win32k.sys Ntdll.dll {Kernel, Advapi, User, Gdi}32.dll | |
许可策略:p44 winsiderss提供的“SlPolicy.exe -f Kernel” | |
检查版本(Checked Build, 用于设备驱动开发) | |
ASSERT -> RtlAssert -> DbgPrintEx | |
不必安装整个,可只复制Ntoskrnl.exe和正确的HAL.dll | |
Windows子系统 | |
对于每个会话,Csrss.exe有一个实例加载3个DLL:Basesrv.dll Winsrv.dll Csrsrv.dll | |
内核模式设备驱动 Win32k.sys,包含下列支持: | |
窗口管理 | |
GDI | |
DirectX的包装函数(-> Dxgkrnl.sys) | |
Conhost.exe | |
子系统DLL(将文档化的API转译成未文档化的内核模式系统调用) | |
MinWin* | |
图形设备驱动 | |
UNIX/POSIX子系统 | |
NtDll.dll | |
执行体(Ntoskrnl.exe的上层) | |
包含以下类型的函数: | |
系统服务:绝大多数可通过Windows API访问,少数不行(ALPC、NtQueryInformationProcess等) | |
可DeviceIoControl调用的设备驱动函数 | |
WDK函数 | |
定义为全局符号但未被导出的,如Iop* Mi* | |
及以下组件: | |
配置管理 进程管理 安全引用监视 I/O管理 PnP 电源 WDM的WMI 缓存 内存 逻辑预取和Superfetch | |
内核 | |
内核对象:控制对象、dispatcher对象 | |
KPCR和HPRCB | |
HAL | |
x64要求支持ACPI和APIC | |
设备驱动 | |
类型:硬件、文件系统、文件系统过滤、网络重定向和服务器 协议驱动 内核流式过滤 | |
从WDM角度看,有3种:总线驱动、功能、过滤 | |
WDF:KMDF + UMDF | |
常用的函数名称前缀:Alpc Cc Cm Dbgk Em Etw Ex FsRtl Hvl Io Kd Ke Lsa Mm Nt Ob Pf Po Pp Ps Rtl Se Sm Tm Wdi Zw ... | |
系统进程 | |
System进程 | |
Smss | |
Wininit | |
SCM(Services.exe) | |
Lsm | |
Winlogon、LogonUI和Userinit | |
系统机制 | |
陷阱分发 | |
IDT | |
x86:i8259A(PIC)/i82489(APIC);IA64:SAPIC | |
IRQL | |
p87 延迟IRQL? | |
预定义的IRQL: | |
高端 KeBugCheckEx | |
电源失败(设计文档中,但从未被真正用过??) | |
处理器间中断 | |
时钟 | |
性能剖析 Kernrate | |
同步IRQL | |
设备IRQL | |
CMCI(可纠正的机器检查中断) | |
DPC/Dispatch和APC(软件中断):在此以上不能等待对象,及只能访问非换页的内存 | |
被动级别 | |
p100 PCI 22基于消息信号的中断(MSI)? | |
IRQ亲和性和优先级 | |
p105 线程化DPC,必须使用KeAcquire/ReleaseSpinLockForDpc | |
APC | |
Windows错误报告(WER) | |
系统服务分发 | |
对象管理器 | |
暴露给Windows API的执行体对象:Process Thread Job Section File Token Event Semaphore Mutex Timer IoCompletion Key Directory TpWorkerFactory TmRm/TmTx/TmTM/TmEn WindowsStation Desktop PowerRequest EtwConsumer | |
p167 对象目录(有点类似于Linux的/proc fs) | |
同步 | |
自旋锁/DPC:pause指令? | |
排队的自旋锁 !qlocks | |
低IRQL的同步:条件变量/Slim读写锁/InitOnce/临界区 | |
dispatcher对象 | |
p187 WaitBlock | |
keyed event(低内存情形?) | |
fast/guarded mutex | |
执行体资源 | |
=> 推锁? | |
系统辅助线程 !exqueue | |
Windows全局标志 NtGlobalFlag | |
高级本地过程调用(ALPC) | |
消息模型 | |
异步操作 | |
视图、区域和内存区 | |
属性 | |
Blob、句柄和资源 | |
安全性 | |
性能 | |
调试和跟踪 | |
内核事件跟踪 | |
Wow64 | |
文件系统重定向? | |
用户模式调试 | |
调试对象? | |
映像加载器 | |
!peb | |
!tlist -t ntdll!_LIST_ENTRY.Flink -x "dt ntdll!_LDR_DATA_TABLE_ENTRY@$extret\" 001c1cf8 | |
SwitchBack?在清单文件中嵌入专门针对目标Windows版本的GUID | |
API集? | |
Hyper-V:VMBus VSP VID VSC Vmwp VDev .... | |
二级地址转译和带标记的TLB(GVA->GPA->SPA代价大,Intel NPT/AMD RVI) | |
动态内存 | |
热迁移 | |
集群共享卷(CSV) | |
内核事务管理(KTM) | |
热补丁支持 | |
.HOT1 补丁描述符 | |
内核补丁保护 KPP | |
代码完整性 | |
KMCS策略 | |
管理机制 | |
注册表 | |
事务(TxR):RegCreate/Open/DeletekeyTransacted;用到KTM的CLFS | |
p291 REG_LINK对regedit是不可见的? | |
hive? | |
服务 | |
StartServiceCtrlDispatcher -> RegisterServiceCtrlHandler -> SetServiceStatus ... | |
服务隔离,SID | |
会话0? | |
统一的后台进程管理器(UBPM) | |
Windows管理设施(WMI) | |
Windows诊断基础设施(WDI) | |
进程、线程和作业 | |
p421 优先级提升 | |
由于调度器/分发器事件(减少延迟) | |
由于I/O操作完成(减少延迟) | |
UI输入(减少延迟/提高响应) | |
由于线程等待某个执行体资源太长(避免饥饿) | |
一个准备运行的线程在相当一段时间内没有被运行过(避免饥饿和优先级反转) | |
空闲(Idle)线程 | |
多处理器系统(超线程、多核、NUMA) | |
基于处理器份额的调度 | |
DFSS | |
基于SID的CPU比率限制的实现 | |
动态的处理器添加与更换 ? | |
安全性 | |
AuthZ API | |
UAC | |
权限提升(run as) | |
AppID、AppLocker和SRP | |
网络 | |
总体结构 | |
网络API | |
WSK(取代了老的TDI):Tcpip.sys NetIO.sys | |
RPC | |
BITS(怎么个智能法?) | |
BranchCache | |
多重定向器支持 | |
分布式文件系统 | |
名字空间 | |
复制 | |
脱机文件 | |
BrandCache | |
DNS | |
PNRP? | |
位置和拓扑结构 | |
NCSI | |
协议驱动 | |
NDIS |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment