Skip to content

Instantly share code, notes, and snippets.

@chenzx
Created August 1, 2014 04:28
Show Gist options
  • Save chenzx/c3528bf514f9ec1d4298 to your computer and use it in GitHub Desktop.
Save chenzx/c3528bf514f9ec1d4298 to your computer and use it in GitHub Desktop.
深入解析Windows操作系统 第6版(上册)
深入解析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