QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码

主题

帖子

荣誉

管理员

Rank: 40Rank: 40Rank: 40Rank: 40Rank: 40Rank: 40

技术值
查看: 1786|回复: 2

[Windows] 【进阶】《windows内核安全与驱动开发》

[复制链接]
最佳答案
201 
累计签到:2369 天
连续签到:1 天
小甲鱼 发表于 2016-11-19 17:40:12 17862 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
TB1eC4MIFXXXXaOXpXXXXXXXXXX_!!0-item_pic.jpg_430x430q90.jpg

- P0 f2 Q- q2 l, h3 h$ F1 W, x7 R% K4 b  s1 I1 @% A! y9 m
书名:《windows内核安全与驱动开发》
5 {* Y7 J+ I* F2 c& r作者:谭文;陈铭霖7 o* H1 ~) b0 S$ i
出版社:电子工业出版社8 p. U4 h/ B! a9 s2 e) p1 \
出版年:2015年6月1日(第1版)7 I. h+ p/ ?1 }' R' A
定价:139.00元
: f; T0 ]- g9 w5 u( S装帧:平装
! Z  m$ ^% {6 I$ K! [ISBN:9787121262159
% Z. m2 s4 v% Y3 h+ _4 S) O! ]0 s6 _5 ~+ T( X
购买链接:
8 B3 s; @% z3 N! _* [$ k8 W/ G& U8 ~) ?; F# p. `


& B% ]1 w) h8 k) R( @亚马逊 -> 传送门) t7 Y( D9 f6 E, V6 {# \" N

, m" j0 V9 L- X4 r1 c' Q+ l9 y2 |2 P当当网 -> 传送门& ^; Z1 T# b) N6 O& U/ S9 q$ I
: Y: j/ Z/ x4 W+ x" m- G4 S$ S3 }
京东 -> 传送门
+ ?0 j0 G9 A: d, x5 N: t5 m0 a$ A/ i# I( G
天猫 -> 传送门0 W0 s; j2 @1 _* ~( D% \0 v

* `8 y6 C2 A$ @: h9 e+ A. s: g
) }2 f; `) X* W6 U. V2 D内容简介:# x$ a5 M' F4 o; U: m8 J- O0 N
; Q6 y% G: c* I


6 Y! J3 x0 L, {本书的前身是《天书夜读——从汇编语言到Windows内核编程》和《寒江独钓——Windows内核安全编程》。与 Windows 客户端安全软件开发相关的驱动程序开发是本书的主题。书中的程序使用环境从 32 位到 64 位,从 Windows XP 到 Windows 8 都有涉及,大部分程序不经过修改即可在 Windows 10 上运行。同时本书也深入浅出地介绍了进行内核安全编程所需要的操作系统、汇编等基础知识。& u' e9 f9 F7 w6 S

% G. ~3 g5 {. m本书共分三篇,基础篇囊括了驱动开发的基础知识,降低了入门的难度;开发篇介绍了在实际工作中可能遇到的各种开发需求的技术实现,包括:串口的过滤、键盘的过滤、磁盘的虚拟、磁盘的过滤、文件系统的过滤与监控、文件系统透明加密、文件系统微过滤驱动、网络传输层过滤、Windows 过滤平台、NDIS 协议驱动、NDIS 小端口驱动、NDIS 中间层驱动、IA-32 汇编基础、IA-32 体系中的内存地址、处理器权限级别切换、IA-32 体系结构中的中断和 Windows 内核挂钩;高级篇包含了汇编语言、操作系统原理、处理器体系架构相关的内容。本书是由长期从事这个行业的工程师自己写的,所以处处以实用为准。对细节的考究主要体现在对实际问题的解决,而不是知识的详尽程度上。# q4 |6 {3 d/ t, V) |; ^: e4 Z
: D' [# m4 u# G% V2 e, O  J
目录:
: Q! q; F" D8 t8 ?6 Y8 h( A0 `4 k' e& d; Y! T# n: V6 Y- I/ d1 h

) I/ U  m0 ^$ G; B, F/ C+ ^3 j
基 础 篇
4 ?2 L1 o$ j9 I' y% _
) U4 W6 D3 {% v& u- j) b第1章 内核上机指导2 0 w7 a0 H6 @+ e/ i0 h1 C" H

. u" K" s* K: h1 w7 E7 W1.1 下载和使用WDK2
6 P" F$ I/ z/ w' M1.1.1 下载并安装WDK2
" ?- {9 C( f4 h7 X1.1.2 编写第一个C文件4
" |% [8 ]4 K* x0 W7 Y1.1.3 编译一个工程5
: b8 A% F8 J8 B# j1.2 安装与运行6
5 c; F9 O. z. w0 ^1.2.1 下载一个安装工具6 3 `: [7 l: u: I  N% ~( X
1.2.2 运行与查看输出信息7 7 T7 j! ]" N( U8 I
1.2.3 在虚拟机中运行8
# V. X" p' d* a) p& }. b1.3 调试内核模块9 6 K; I1 S8 l: |/ o; E) _
1.3.1 下载和安装WinDbg9
9 h7 |7 d) g* K$ K1.3.2 设置Windows XP调试执行9 $ U5 S/ a. r+ C% O0 w3 y
1.3.3 设置Vista调试执行10 ! I6 Q* g( _  y, f  ^$ W5 A
1.3.4 设置VMware的管道虚拟串口11 2 A) {! m6 Z3 t; _  f' T. z
1.3.5 设置Windows内核符号表12
$ `7 V" s3 {5 R9 I; m1.3.6 实战调试first13 , s( ~: t$ G# \- P% G6 [% J6 h
! @+ ]# I* _4 @) w/ R5 U
第2章 内核编程环境及其特殊性16 " [. H- ]$ z2 I  n4 d1 R

- t# J% v1 P: u  B3 Z* ^6 ]2.1 内核编程的环境16
( B& y% q+ {. u  l2.1.1 隔离的应用程序16
9 j* a. q1 ^9 S1 x! \6 d2.1.2 共享的内核空间17 . C. o: I7 V2 L1 r! W, T9 g
2.1.3 无处不在的内核模块18
9 ?) g" g# U8 m- e/ i* N2.2 数据类型19
0 e' B% r2 N( q; g2.2.1 基本数据类型19 + A5 x3 |7 }4 @; x  k7 n; X
2.2.2 返回状态19 : Y& P6 y; ^% p/ m
2.2.3 字符串20
0 h  [: r% S( B8 a7 o2.3 重要的数据结构21
; u8 K3 ~& P( m" D. t" E* ~1 P$ u2.3.1 驱动对象21
2 q8 L' r! u3 |. k2 b# ]2.3.2 设备对象22 ; q+ k1 B0 J) r  b( E) j8 m
2.3.3 请求24
5 H/ V- R) V+ N# @5 ^' }  [6 M0 u2.4 函数调用25 , _. {& \; P* Z; D0 a# C8 q
2.4.1 查阅帮助25
+ n1 f/ b' h7 F2.4.2 帮助中有的几类函数26
" @8 F7 k) u2 _4 d; K; \2.4.3 帮助中没有的函数28 . S$ o$ |8 z* q& p
2.5 Windows的驱动开发模型29
8 r. U$ ^& `  U" y, o- I  D( I2.6 WDK编程中的特殊点30 3 O3 s: l- e( W; D
2.6.1 内核编程的主要调用源30
# z1 k2 _! _- V' m2.6.2 函数的多线程安全性30
# m3 ?; s" K9 q4 M! M' r2.6.3 代码的中断级32
/ O# U% ]8 t% Q2.6.4 WDK中出现的特殊代码32
& `) M2 Y8 G9 f4 ~; j  H, d5 Z/ R$ M' V& l
第3章 字符串与链表35
8 F" m) P0 J+ q; }
* W' B. a& U$ l; P" O3.1 字符串操作35 0 J! x$ o# R. O/ U
3.1.1 使用字符串结构35
$ B" j) y: X5 F4 r+ h3.1.2 字符串的初始化36
, ^. Z: o/ o, B: v3.1.3 字符串的拷贝37 + P" Z  \) ~& T7 [. r
3.1.4 字符串的连接38
; w9 B/ I4 j7 C* s% ]3.1.5 字符串的打印38
7 }  l! m/ z" ?" J# |3.2 内存与链表40 % M+ x8 G6 Q8 _3 n' |/ H  R
3.2.1 内存的分配与释放40
5 u' D/ @! j, ~/ v6 ]: J! ^, ?& x# b3.2.2 使用LIST_ENTRY41 2 o/ D* v6 U3 ^2 R8 R2 d% L
3.2.3 使用长长整型数据43
, i* H* \( L; i! S# @; A! g6 M3.3 自旋锁44
" a5 X- a3 F7 B# \* m0 H3.3.1 使用自旋锁44 / w4 u) |3 G& h# a: E0 N
3.3.2 在双向链表中使用自旋锁45 & [* m: h% |1 l( u
3.3.3 使用队列自旋锁提高性能46 . J5 I- H" P& ]1 r  i0 |5 y. v5 G

) I2 @( c# j% a: ~/ N4 e( b. b+ M第4章 文件、注册表、线程47 2 B7 H! s: e$ C6 u- O1 ~) \" p
3 M4 H/ g; Z8 p, O/ D
4.1 文件操作47
, B. }5 M8 R( Q9 ]2 {) D; ^4.1.1 使用OBJECT_ATTRIBUTES47
/ a7 k6 G6 S, g; R+ B4.1.2 打开和关闭文件48
& r8 O- ~0 D1 A" E1 i: H  c4.1.3 文件读/写操作51 / A, b! }0 }. z2 }9 a9 c
4.2 注册表操作53 * P9 R3 C, H8 U1 t
4.2.1 注册表键的打开53 ! g6 _8 }/ e4 n% ?" m
4.2.2 注册表键值的读55 # P" c3 q- j6 B5 q0 L
4.2.3 注册表键值的写57 $ Z$ U/ {8 g( |, V& _5 P
4.3 时间与定时器58 ; C* m; j8 q5 o0 v
4.3.1 获得当前“滴答”数58
: n$ a  @* k5 U  ~4.3.2 获得当前系统时间58
' E8 l  E& k" ?+ k; u4.3.3 使用定时器59   r( g6 V1 C0 Z9 e/ T* _8 U
4.4 线程与事件62 # _& [: k/ V/ K5 Q  _- N
4.4.1 使用系统线程62
  t7 p. @& D4 d4.4.2 在线程中睡眠63
" f9 }6 t- F2 n9 `# m+ h4.4.3 使用同步事件64 : c( {0 t2 I- {

# _+ a7 C) B- d" U. R' i第5章 应用与内核通信67 9 H3 C% @& V- U: L) w
5 G! c# Y6 a! k- b) \4 Y! ^1 ]. Z
5.1 内核方面的编程68 ; A. J1 g. Q8 U3 h5 l: w
5.1.1 生成控制设备68
. g: W/ `7 D8 J; j% ~  C5.1.2 控制设备的名字和符号链接70 * {& ]' o" W( i, p2 h6 S7 U
5.1.3 控制设备的删除71
) E$ E2 c( G4 v- C$ [9 l) t' i, E! O1 V5.1.4 分发函数72
+ @* b8 _$ G. p" E5 q5.1.5 请求的处理73
' j) A+ u& f  O+ W) z5.2 应用方面的编程74
# \# P0 W, h1 W7 P$ t! N5.2.1 基本的功能需求74
. S+ N$ `/ c" |& o& Q5.2.2 在应用程序中打开与关闭设备75 6 I% \) @+ X9 P5 G
5.2.3 设备控制请求75 4 c- [/ D  {  h' r; S4 @& ?9 i
5.2.4 内核中的对应处理77 ' M% h- b3 I  W3 z7 ~) g8 ?( K
5.2.5 结合测试的效果79 0 {  y8 ^+ z6 G% l
5.3 阻塞、等待与安全设计80
, w* D$ d8 h* @: h( t3 X5.3.1 驱动主动通知应用80
; U( o) m5 r* J1 |3 o5.3.2 通信接口的测试81
7 Q" C! s( Z1 |0 y: p3 t5.3.3 内核中的缓冲区链表结构83 & M2 o5 C/ E  f
5.3.4 输入:内核中的请求处理中的安全检查84
! H3 d/ K4 }) H& ^( {& [5.3.5 输出处理与卸载清理85
! @' }  f& o! i. G1 z
) u" s6 C1 d" J& H4 d/ e3 ^- Q7 [第6章 64位和32位内核开发差异88
1 g  i) l: I4 b) R ! S7 j' T- }, q' @" `- A- k: }
6.1 64位系统新增机制88
. P: f" n4 P2 _6.1.1 WOW64子系统88
& M( |# X* ]9 T3 w6.1.2 PatchGuard技术91 8 U* e$ ?% ^( s2 T5 A: m
6.1.3 64位驱动的编译、安装与运行91
( B, x: ]) {3 w7 m* F6.2 编程差异92
( g1 w) T  Z1 S8 s6.2.1 汇编嵌入变化92 4 D4 W' x( q- s( j( i  G
6.2.2 预处理与条件编译93 & z( Z7 ^+ @; q* h; A5 g
6.2.3 数据结构调整93
  Y. e: x; F& G- W7 e" w8 {9 p& A6 Z0 d' _+ o) ^$ i) K

+ l: Q  l8 D; g0 W3 ~9 ^. W8 S开 发 篇
! x/ i, d5 H. a( e$ S5 p
1 p( p5 _% c1 O; x第7章 串口的过滤96
# L3 k, q3 r- n! m/ `; g7 u' v8 U, p) t1 d( x9 s5 J& Z) n
7.1 过滤的概念96
' U) |; ^! W8 l. g7.1.1 设备绑定的内核API之一97 ; s! A, G3 ~" M
7.1.2 设备绑定的内核API之二98 ! A; S. a8 C8 z7 q
7.1.3 生成过滤设备并绑定98
: ^& o) o8 {% e" P( ~' r  `$ C  l  v7.1.4 从名字获得设备对象100
. N" N$ T, d$ A% j0 `5 Q7.1.5 绑定所有串口101 9 q7 I+ b: z! R0 x
7.2 获得实际数据102 3 @: ^; e( F* ]  A* E( H8 Y  t9 `- r
7.2.1 请求的区分102   B+ Q: G3 {. @: P& ]
7.2.2 请求的结局103 , V# w( @- o. W% \: ~; I
7.2.3 写请求的数据104 ( b) ~' C2 `: ]- T
7.3 完整的代码105
4 \: s, t1 C9 c9 f7.3.1 完整的分发函数105
. s2 H, S) B: h) s/ z5 G7.3.2 如何动态卸载106 6 }: v, ]/ L1 d# A& E- F3 z1 o
7.3.3 代码的编译与运行107
) T8 i/ V0 ~! ~6 f
1 F0 b$ Z" l4 v" C4 {第8章 键盘的过滤109
! K9 `5 A# [& C# e/ y$ z
! h* t8 R. F3 `- t, i$ t8.1 技术原理110 ) ~% X, G& f. X- G5 p% Y8 U
8.1.1 预备知识110
/ W$ S) D; K, {3 G8.1.2 Windows中从击键到内核110 ( q; N8 D9 f; l, n( x. n8 _& r+ Z
8.1.3 键盘硬件原理112 9 ]' l" ^" v2 r/ |  A0 y
8.2 键盘过滤的框架112
8 c4 _9 l* _* ]: x7 _) r8.2.1 找到所有的键盘设备112 ( L. s6 y5 K' x7 q3 Z
8.2.2 应用设备扩展115 " a: w" w5 `  c0 |
8.2.3 键盘过滤模块的DriverEntry117
# N! }' \4 h. B6 G' L& Y" W8.2.4 键盘过滤模块的动态卸载117 6 f& x, R/ b" S3 K- x3 j
8.3 键盘过滤的请求处理119 * @7 b5 N2 _* H% l9 f. Q- }
8.3.1 通常的处理119
9 W8 W  S8 j- [6 u0 q7 s8.3.2 PNP的处理120 : d3 M  A/ m7 l6 A
8.3.3 读的处理121 6 i, E- k  b+ y2 m
8.3.4 读完成的处理122 7 G2 `, M0 b7 R8 y" i
8.4 从请求中打印出按键信息123
( N% M5 H, ~% m! H. d# c7 i/ |- f8.4.1 从缓冲区中获得KEYBOARD_INPUT_DATA123 8 H8 {: y- i% \5 t, p! [
8.4.2 从KEYBOARD_INPUT_DATA中得到键124 ; }/ M9 h+ N; [3 D% }8 h
8.4.3 从MakeCode到实际字符124
6 p3 y, L4 s' u/ I8 Z8.5 Hook分发函数126
& B* v7 ~) w  y: H6 ~8.5.1 获得类驱动对象126
3 y) R& x% j5 x8.5.2 修改类驱动的分发函数指针127
! }1 I4 w) n7 [( C8.5.3 类驱动之下的端口驱动128
4 B# M3 Z5 n) `8 b/ N8.5.4 端口驱动和类驱动之间的协作机制129
; n& h1 x3 Q1 d4 g( R1 N* m8.5.5 找到关键的回调函数的条件129 4 Q% M2 }" G  M, e/ X, H) M% b3 U
8.5.6 定义常数和数据结构130
. x  S# K9 |. f2 I) ^1 L' p: u8.5.7 打开两种键盘端口驱动寻找设备131
% k7 ]* e5 _  m. i& d( K8.5.8 搜索在KbdClass类驱动中的地址133 % ]. \4 }$ h2 w* P- I; @
8.6 Hook键盘中断反过滤135 . Q/ |3 _; {9 c1 U* j
8.6.1 中断:IRQ和INT136
) r# n2 r% p( L' d* G" i( e; G) `8.6.2 如何修改IDT136
. |" |9 d7 z! A$ [$ U8.6.3 替换IDT中的跳转地址137 " v+ {0 ~  C5 w* O9 a  d8 C: |
8.6.4 QQ的PS/2反过滤措施139
$ d7 }( z' _" r2 V' n8.7 直接用端口操作键盘139
. E+ E% m4 h7 [0 i$ Z2 T' j8 ]8.7.1 读取键盘数据和命令端口139
5 @' U" X7 S5 [, z8.7.2 p2cUserFilter的最终实现140 2 T# f1 M9 b5 t) i* Q9 F- H' g" M
2 j  c9 x  K9 D% j5 @5 T* q/ d6 ^
第9章 磁盘的虚拟143
; q7 F! l7 d0 F
. v/ Y) ]0 M3 O5 p9 e4 J7 [9.1 虚拟的磁盘143 $ v2 k7 A2 w+ E' Y0 j
9.2 一个具体的例子143
$ A3 g# `7 o3 q3 H. s5 ~9.3 入口函数144
0 t+ J8 b0 a5 H+ @. Y9.3.1 入口函数的定义144
! P- C+ p' b4 ^5 [' O2 l9.3.2 Ramdisk驱动的入口函数145
& z7 }) ]4 a5 P) k4 s" t4 l, m9.4 EvtDriverDeviceAdd函数146
- z0 Z& c1 U/ p5 ], n0 G' O9.4.1 EvtDriverDeviceAdd的定义146
$ f- j& d  ~2 \  ?3 `' a9.4.2 局部变量的声明146
) A' n' z& s+ q4 F9.4.3 磁盘设备的创建147 ( h2 _; _% D6 {6 ~, p
9.4.4 如何处理发往设备的请求148 + b9 U* U- g% q' ]2 X- U4 O
9.4.5 用户配置的初始化149
. c9 Y7 d4 O( w! f9 l: s  D  M9.4.6 链接给应用程序151
7 K! O! O( n9 p( R: ?, \4 `! Q9.4.7 小结152 : F9 f& m, d0 B$ J2 x, J
9.5 FAT12/16磁盘卷初始化152
/ |  o* z# f# y/ g0 Y6 k7 A% {7 v9.5.1 磁盘卷结构简介152 . g$ p5 f! O& t, |  n
9.5.2 Ramdisk对磁盘的初始化154 - @6 E5 R" E: t5 j) L
9.6 驱动中的请求处理160 5 F* J& ]' V9 M2 K5 \
9.6.1 请求的处理160
& h# U6 O" t) y( Q9 ~$ h& f9.6.2 读/写请求160
) A/ l! r2 E! O- T9.6.3 DeviceIoControl请求162
, P6 g: X* ^( O4 ?$ x0 L- j9.7 Ramdisk的编译和安装164
# H: q0 q, _! E# O9.7.1 编译164 ; n) ^; g) b& b* c2 d. e/ o  o
9.7.2 安装164 ( I' [0 C& {* C5 x
9.7.3 对安装的深入探究165
" r3 d( K: H$ _: [" [2 a# K& J' [& k" B9 ~' O9 W7 ?
第10章 磁盘的过滤167
! q1 |$ k  y+ _4 ?' Y+ K6 V5 Z. \- M; F6 v' l
10.1 磁盘过滤驱动的概念167 : M& b& c" A) T
10.1.1 设备过滤和类过滤167 9 f' f0 @. P/ W3 T8 M
10.1.2 磁盘设备和磁盘卷设备过滤驱动167
# B6 g2 H5 [) S4 _10.1.3 注册表和磁盘卷设备过滤驱动168 0 z) F) k0 W2 b$ O  h
10.2 具有还原功能的磁盘卷过滤驱动168
' l, c# u* m6 J; x10.2.1 简介168
# M' P+ D+ x0 X$ c% g10.2.2 基本思想169 0 p$ W9 Q! D& }/ Z; T2 O4 w
10.3 驱动分析169
( b% Z" \" E% L( e5 r- r10.3.1 DriverEntry函数169
) z7 w; |" N1 a8 ]! H9 {  q# W$ d10.3.2 AddDevice函数170
# G# J7 Z/ a2 ?' x. t. j5 B$ Z- _10.3.3 PnP请求的处理174 2 o4 {* n7 x0 p, `
10.3.4 Power请求的处理178 6 @3 S4 K9 V2 n- b' {
10.3.5 DeviceIoControl请求的处理178
% Y; g2 ]& Q& h  |* e10.3.6 bitmap的作用和分析182 ' b6 t  V; s7 R( t
10.3.7 boot驱动完成回调函数和稀疏文件187
( a. r# S3 t; ^' B5 o10.3.8 读/写请求的处理190 / c3 F2 t9 _' q5 [+ J6 b
2 J' Q1 j, |0 k, L0 r
第11章 文件系统的过滤与监控199
2 Z% s/ `- P! ?& L
2 g- K; Q3 H5 N& {1 l) B11.1 文件系统的设备对象200
! K; [  X, p- w9 v" g11.1.1 控制设备与卷设备200 , m$ c+ e  y4 E( @
11.1.2 生成自己的一个控制设备201
9 I. D( E3 m9 s1 z2 O3 n11.2 文件系统的分发函数202 4 K! v, ]7 h5 K0 `2 n
11.2.1 普通的分发函数202 2 h; y# g' P' r1 u
11.2.2 文件过滤的快速IO分发函数203
2 u5 p% F; C% x11.2.3 快速IO分发函数的一个实现205
9 F2 U5 p9 b1 \- O9 e8 I. p0 z$ I: w11.2.4 快速IO分发函数逐个简介206
7 J/ z% N7 r6 N: _  i11.3 设备的绑定前期工作207 1 r1 ?* |. i6 q/ Q. [
11.3.1 动态地选择绑定函数207
3 t) B& g4 B$ d9 N) ~11.3.2 注册文件系统变动回调208   }& O' L! B+ W7 s9 _
11.3.3 文件系统变动回调的一个实现209 # y6 I2 Y& G) {+ W: V+ q
11.3.4 文件系统识别器211 " [1 v+ ]: N$ X3 \6 N8 t% E
11.4 文件系统控制设备的绑定212
& ]! J1 u& Z( j. `9 J) m* b11.4.1 生成文件系统控制设备的过滤设备212
- u0 E% q: Q2 `" p3 X- w* F8 p* }11.4.2 绑定文件系统控制设备213 7 B2 n" o& H$ w
11.4.3 利用文件系统控制请求215 2 A" A  w8 C+ `2 {
11.5 文件系统卷设备的绑定217 ; s% I% K$ {/ q6 {  r
11.5.1 从IRP中获得VPB指针217
+ A' ^5 c) f. b( g11.5.2 设置完成函数并等待IRP完成218 ! h2 M! ?0 x8 v2 L. E, E0 X
11.5.3 卷挂载IRP完成后的工作221 ! @# h0 q) i5 @6 G/ F$ R
11.5.4 完成函数的相应实现223 2 M4 T- Q$ R3 o1 t1 t
11.5.5 绑定卷的实现224 $ U7 x$ n# @# D' G; j" h4 t* n
11.6 读/写操作的过滤226
" i( S' `; M- V0 p& H- K11.6.1 设置一个读处理函数226 ) @( i7 y/ {' U5 I3 ~$ B, v! K
11.6.2 设备对象的区分处理227 ( D' U- n/ D1 e
11.6.3 解析读请求中的文件信息228 ) u" W7 E1 }$ D7 N" s+ [
11.6.4 读请求的完成230 $ U+ b6 ^- }9 k; o
11.7 其他操作的过滤234
9 B/ o' F% S% P& K11.7.1 文件对象的生存周期234
' n" b4 q* M9 k. z$ J11.7.2 文件的打开与关闭235 - k) S1 a' e2 Z; s; s9 B
11.7.3 文件的删除237 * L8 J0 e8 T& P$ ]) K3 @4 F
11.8 路径过滤的实现238
  a4 ~* n7 ?: k/ d6 N; U11.8.1 取得文件路径的三种情况238 . W) n; K1 f$ {9 G' t9 a
11.8.2 打开成功后获取路径238 5 W) T1 h' @: I+ F1 \
11.8.3 在其他时刻获得文件路径240 - j) L" S$ O& x5 m# V" o
11.8.4 在打开请求完成之前获得路径名240 ' }, [' }4 |( j0 r/ k) ~; T
11.8.5 把短名转换为长名242
7 [, d" ^- y! D: d& E5 ?2 f' ?( P/ W11.9 把sfilter编译成静态库243 ! l2 f* _2 N* s7 K
11.9.1 如何方便地使用sfilter243
# ~; y, g% x" `; H7 `6 n* K) j4 Z11.9.2 初始化回调、卸载回调和绑定回调244 + _' Z3 {7 ?( a/ n
11.9.3 绑定与回调245
4 }: a7 X+ H$ w: X1 u4 q11.9.4 插入请求回调246
5 V: w2 Y" F* E; }1 Q8 |  [11.9.5 如何利用sfilter.lib249
; c# E4 c8 V3 A, P3 T# D4 F" L. O8 |0 a  H) z- v
第12章 文件系统透明加密252 1 _+ {: D. Y/ @

' d$ m" y5 M4 ]12.1 文件透明加密的应用252 3 Y. `2 D6 V5 Z' U, S( ~
12.1.1 防止企业信息泄密252
, a7 X" b8 a, m/ F8 p) }12.1.2 文件透明加密防止企业信息泄密253
% z4 J1 ], ?' d- T4 y+ o0 i- E12.1.3 文件透明加密软件的例子253 3 s% l) P. h' |+ k; Q9 P+ u
12.2 区分进程254 ) c8 S- v% [) \9 x; W0 h) Z- [
12.2.1 机密进程与普通进程254 1 o) m2 s- C9 `4 A3 j
12.2.2 找到进程名字的位置255 ! h& d( @. E6 |  n# R0 ^
12.2.3 得到当前进程的名字256
9 M) u, S/ A: G) X$ a& \12.3 内存映射与文件缓冲257
3 Q1 W* n6 Y# q- T, O8 j9 e12.3.1 记事本的内存映射文件257
8 G, N  ]6 ~  y" q  R" |* ~, f12.3.2 Windows的文件缓冲258 + |. B$ R$ r, \; [- f
12.3.3 文件缓冲:明文还是密文的选择259
0 T- ?" D$ V8 A/ ]* x* H. v12.3.4 清除文件缓冲260
, K, K# C. D6 e( j. x" k# q# ]12.4 加密标识2637 d$ K% i0 ]# n- j$ P* C
12.4.1 保存在文件外、文件头还是文件尾 263/ `5 u, X) e$ Z% b, r
12.4.2 隐藏文件头的大小 264
2 ^" f5 _/ ?5 K; [: y% |5 T" y/ N8 t12.4.3 隐藏文件头的设置偏移 266
4 l5 r/ n& K! B  k1 _5 A12.4.4 隐藏文件头的读/写偏移 267! p9 i4 ^( r' L4 k. x8 s
12.5 文件加密表 267
9 X: I, L8 p4 H* p/ a12.5.1 何时进行加密操作 267
6 D* T2 J7 @  h6 ]% U: d12.5.2 文件控制块与文件对象 268: ]7 F+ A" |5 T+ E- Y  b
12.5.3 文件加密表的数据结构与初始化 269& O3 ?/ ]4 C/ B; A9 R) W- c
12.5.4 文件加密表的操作:查询 2707 _+ b- d& ?* L: v4 u
12.5.5 文件加密表的操作:添加 271
# k$ Q( W+ \% e5 G. K  r12.5.6 文件加密表的操作:删除 272
# q1 D, N% b, n. d  |7 n# L12.6 文件打开处理 273
: v! z8 ]$ C5 W% j12.6.1 直接发送IRP进行查询与设置操作 274+ d4 G- t+ M2 E# k/ p, N7 e7 D1 z
12.6.2 直接发送IRP进行读/写操作 276$ E8 E% m, N9 N: M  A+ k
12.6.3 文件的非重入打开 277( }. f- c/ a" }
12.6.4 文件的打开预处理 2804 V. H; k' N9 x3 o/ Y$ J
12.7 读/写加密和解密 2855 p; r/ Q0 I8 _
12.7.1 在读取时进行解密 285
) B; m2 a: n9 l5 N' x$ l1 a! L12.7.2 分配与释放MDL 286
9 ]7 f1 S$ ]' m' V12.7.3 写请求加密 287
/ w  U0 s- C6 i4 Y, ]12.8 crypt_file的组装 289& J$ V4 A: e8 f6 t
12.8.1 crypt_file的初始化 289
$ @% {! N+ _7 C& K; R12.8.2 crypt_file的IRP预处理 290
. U& W2 j+ g" ?6 D9 a6 K12.8.3 crypt_file的IRP后处理 293
; P, S, l- e5 A2 E
' H0 X% L7 c7 G; n! I/ F" x第13章 文件系统微过滤驱动 297/ ?  \6 m9 W9 y; P5 W5 t* _3 b- N

# R( g! H+ i" S+ ]13.1 文件系统微过滤驱动简介 297  K& F8 j& y7 `+ N0 J
13.1.1 文件系统微过滤驱动的由来 297+ {& m9 `& k" v- }6 _
13.1.2 Minifilter的优点与不足 298/ a; _* H/ \3 k" Y7 y7 M" X! c
13.2 Minifilter的编程框架 298( y) z* q9 d( L2 r: w+ x  d6 y
13.2.1 微文件系统过滤的注册 299) i3 x" |: c' e
13.2.2 微过滤器的数据结构 300* v$ v3 S  q; W+ Q/ i' S, R- ^
13.2.3 卸载回调函数 303- q- B2 q. t0 M2 ~  ]! t/ ^2 y
13.2.4 预操作回调函数 303( a8 R+ z& m1 q, R" u8 E  D
13.2.5 后操作回调函数 3066 z. X/ o" ^( B) ~* z: u
13.2.6 其他回调函数 307$ T2 ~, \' V( E1 j% d; [
13.3 Minifilter如何与应用程序通信 309
5 a3 x: |* _! I* n' R13.3.1 建立通信端口的方法 3109 ~1 W2 Y. e& l) y& [8 V' w$ D* b
13.3.2 在用户态通过DLL使用通信端口的范例 311
& _& \( X* F& u13.4 Minifilter的安装与加载 314
4 a: w& L2 {4 A( |# b13.4.1 安装Minifilter的INF文件 314
  c$ p2 G& q9 U' N3 h$ @; G13.4.2 启动安装完成的Minifilter 316' O3 |/ W8 {7 l5 m& n2 j; u1 H
/ a) d4 _' w) c1 T
第14章 网络传输层过滤 3171 |; ]7 N0 u. k/ g$ R5 [

) X. t) A, a% _' h) F14.1 TDI概要 3174 N+ f6 x) `% L8 b5 B/ I3 _0 a
14.1.1 为何选择TDI 317, q8 N, A* Q" T5 @
14.1.2 从socket到Windows内核 318
: n/ U$ K6 |, K# H+ k3 _* d14.1.3 TDI过滤的代码例子 319. P7 d* f# K% U; a, @* F$ K
14.2 TDI的过滤框架 319/ }- C0 t$ C. ?' Z/ h
14.2.1 绑定TDI的设备 319
1 k$ x% S7 V7 g' K( Q: r6 }14.2.2 唯一的分发函数 320
  e& U2 q" a* {$ ]14.2.3 过滤框架的实现 3225 R: x% }8 J; m/ _7 N) Y
14.2.4 主要过滤的请求类型 323
$ a* R. M9 H9 S! p9 g2 }  C14.3 生成请求:获取地址 324
/ c" U  {! ]4 X, V4 y  U- v14.3.1 过滤生成请求 324; N6 k5 Q4 S* I7 m, d
14.3.2 准备解析IP地址与端口 326; G& Z+ d' N5 p/ x( `  n
14.3.3 获取生成的IP地址和端口 327, n6 q, S- Z, i/ G7 e4 }
14.3.4 连接终端的生成与相关信息的保存 329
+ z: [* r7 E) M; [6 }& ~* g+ Q14.4 控制请求 330$ m; W) S) m! q& n5 T
14.4.1 TDI_ASSOCIATE_ADDRESS的过滤 3306 b% Q1 k+ A4 A" k1 ^* _
14.4.2 TDI_CONNECT的过滤 332
4 j" D% Z9 a& K. J: E14.4.3 其他的次功能号 333
6 v- s  N; x) [- Q14.4.4 设置事件的过滤 3341 p5 q) @+ m# v$ ?, V8 t
14.4.5 TDI_EVENT_CONNECT类型的设置事件的过滤 336- o) R! b% O" ?) }1 \- q" A3 g
14.4.6 直接获取发送函数的过滤 337
2 A& \3 M6 e+ q+ ?7 P5 u/ j' c" d14.4.7 清理请求的过滤 3392 c( ^4 M: ~& ?
14.5 本书例子tdifw.lib的应用 341) g0 `- Z4 m/ |
14.5.1 tdifw库的回调接口 341
/ C7 j' e9 I  h3 q; N; q& @14.5.2 tdifw库的使用例子 342# [+ L5 r7 J: a. H7 c/ X/ b

$ Y7 S! l8 u8 ]6 `第15章 Windows过滤平台 345
# w+ o; M! C# W1 B
% S2 W* T1 M  |+ I3 V2 s15.1 WFP简介 345. b: ^: P6 I7 l! ~% g- ]' N
15.2 WFP框架 345# d3 {$ J6 T0 I* c+ J9 a7 ~
15.3 基本对象模型 347
% ]4 T8 ?1 K2 R* ?9 k15.3.1 过滤引擎 347" y( M) ]9 U2 ]! ^# b
15.3.2 垫片 347
6 `2 c0 z2 {# i; d9 Z15.3.3 呼出接口 347; [& u( P( M/ P) s% f5 @
15.3.4 分层 348# e9 h5 n6 x+ n4 }! \) Y- I
15.3.5 子层 349+ Y( \7 I- |* H  j) f- N
15.3.6 过滤器 350
$ D; t0 O/ Q- g1 q( }( h- C: E, ]15.3.7 呼出接口回调函数 354  l7 [. U" K* e/ K( D
15.4 WFP操作 359
, ~. N) R: R3 p2 f15.4.1 呼出接口的注册与卸载 360
9 \( A- F5 @4 }' G) C2 D& k& f15.4.2 呼出接口的添加与移除 360$ u3 S, J# d3 ~& o* f7 [
15.4.3 子层的添加与移除 361
0 \1 K/ Y2 k" a7 j: {. R4 J1 X15.4.4 过滤器的添加 362: ^) l7 ]7 ?; Z# G6 k: R: @
15.5 WFP过滤例子 3625 H6 O; s9 C7 N: a
: Y0 k$ a0 ^+ Q/ `, G0 s% c
第16章 NDIS协议驱动 3700 f8 r( @) o# B" a0 S

6 ]  {1 K+ O" E( f$ l16.1 以太网包和网络驱动架构 370
, F5 U9 J7 ~# s2 i4 ^0 s: n& d16.1.1 以太网包和协议驱动 370' J" X( j' Y8 _& X& z! R! o
16.1.2 NDIS网络驱动 371
8 \+ x. k, @9 G, O8 ]7 d16.2 协议驱动的DriverEntry 372
  j) p4 A5 ]* ^( ~' M7 g+ R/ F16.2.1 生成控制设备 372
- E# [- Y2 p0 p5 p3 @16.2.2 注册协议 374
* X1 e0 ]1 Y3 }$ P( a* J16.3 协议与网卡的绑定 375
9 u+ g5 [% O8 Q7 _( ?6 n- ~6 _5 V16.3.1 协议与网卡的绑定概念 3757 l1 ~" O' d$ q. p" G9 ]
16.3.2 绑定回调处理的实现 376
; N5 ]6 M; N- f3 E$ k16.3.3 协议绑定网卡的API 3784 N, l- }. v7 N* Z. f+ V! ?$ U
16.3.4 解决绑定竞争问题 379
* K) Z0 P6 U( y. p% Q" g16.3.5 分配接收和发送的包池与缓冲池 380' Q( ]! ]) S$ Y) A6 b
16.3.6 OID请求的发送和请求完成回调 3811 y# v& w6 K& d+ l# X0 Z1 X3 X
16.3.7 ndisprotCreateBinding的最终实现 385
% x' Q/ z  l% V/ l- ~16.4 绑定的解除 390
, m$ M! ]* j  }1 A; X16.4.1 解除绑定使用的API 390
2 o; h# p5 s' z( K# M16.4.2 ndisprotShutdownBinding的实现 392
; w( Y$ c5 t6 J  C2 U16.5 在用户态操作协议驱动 395* d4 k& o) J, t$ s0 P) D* I; f
16.5.1 协议的收包与发包 3953 \% e* ]( V/ m# E% D8 k
16.5.2 在用户态编程打开设备 396' O. A( P& c$ C) p8 m$ G
16.5.3 用DeviceIoControl发送控制请求 397! U! M( q0 Y* I
16.5.4 用WriteFile发送数据包 399# l" C6 n, T2 c! t( Q2 B/ e
16.5.5 用ReadFile发送数据包 400
7 W# s' D* y$ x& w$ p7 {% Z16.6 在内核态完成功能的实现 4023 D5 p$ H8 e2 N) o) C* D4 B& r
16.6.1 请求的分发与实现 4027 s) `. m2 Q& ?2 C$ Z4 k! k
16.6.2 等待设备绑定完成与指定设备名 4027 h3 t+ D/ q: z% ?  c
16.6.3 指派设备的完成 4034 y; A/ t- {4 _. `
16.6.4 处理读请求 406
) G/ F6 N  D; q: L16.6.5 处理写请求 4081 j+ O1 M& _; K+ b" ?- Y) q7 P
16.7 协议驱动的接收回调 412
' h& S5 k! }; _7 z2 [( A16.7.1 和接收包有关的回调函数 412
- v. Y! @& X2 D+ O$ Y2 c16.7.2 ReceiveHandler的实现 413$ d, N# [! i- Q7 b' w* o
16.7.3 TransferDataCompleteHandler的实现 4173 k8 E7 j3 T& B* h: F+ B9 |
16.7.4 ReceivePacketHandler的实现 4181 b. J' q( d( k" Q7 Y2 S
16.7.5 接收数据包的入队 420  x5 w0 Q, i2 R- b/ Y
16.7.6 接收数据包的出队和读请求的完成 4221 u" l9 ?" Z6 M3 e  W3 }' E) R

/ {* _* Q4 f+ b: Q- m第17章 NDIS小端口驱动 427
- p' L4 a8 p3 A5 ], x# t
& T% D" Z9 T) h0 P7 I" i17.1 小端口驱动的应用与概述 427
& L! z  `. R: y$ h; C17.1.1 小端口驱动的应用 427
8 p: }, _$ R; l' f9 C17.1.2 小端口驱动示例 4286 B* [% w) Y7 ]  j4 s9 k& m
17.1.3 小端口驱动的运作与编程概述 429
+ s, C' {0 V$ s: E1 E/ F17.2 小端口驱动的初始化 429
' |* I1 P  V% M* y17.2.1 小端口驱动的DriverEntry 429. n: O5 a7 x0 T8 j$ s+ a- V
17.2.2 小端口驱动的适配器结构 431; O5 z+ G  J9 n
17.2.3 配置信息的读取 4336 U) z' r+ L3 D# d; g
17.2.4 设置小端口适配器上下文 433$ w) `, ~8 Z' ~2 d. D  u0 l
17.2.5 MPInitialize的实现 434
" N2 R( M4 _; n+ S9 A  E17.2.6 MPHalt的实现 437# V% g, O7 @' ~
17.3 打开ndisprot设备 438/ K6 |* z+ ?2 Q. h
17.3.1 IO目标 438: K; K7 p0 w; v/ [( }
17.3.2 给IO目标发送DeviceIoControl请求 439) `' h. \9 e! {0 |, l6 l! [6 p
17.3.3 打开ndisprot接口并完成配置设备 441
3 [4 ^. b1 Y% r9 ?) T; P7 k' L17.4 使用ndisprot发送包 443
" J2 O1 @7 s4 s' K- m9 ]7 y9 M17.4.1 小端口驱动的发包接口 443- x: s: \) S8 ^8 H9 U
17.4.2 发送控制块(TCB) 444
) u" x  P) ]1 n  @/ h17.4.3 遍历包组并填写TCB 446
( W1 x. X* y- X8 {17.4.4 写请求的构建与发送 449
4 g& M4 F+ P& L) l5 k9 @17.5 使用ndisprot接收包 451" A1 U" I2 \' A0 ]
17.5.1 提交数据包的内核API 451
: `, q& \% B- w, o" u9 I17.5.2 从接收控制块(RCB)提交包 452/ ~& d: ]5 b, }) K$ @+ \( E3 ~; d7 p. ^
17.5.3 对ndisprot读请求的完成函数 454
0 f  \' }; c$ A9 N$ N( E17.5.4 读请求的发送 456; X6 X0 a8 K2 O5 y
17.5.5 用于读包的WDF工作任务 457+ @3 b4 ~# v3 `! E" w% T1 L
17.5.6 ndisedge读工作任务的生成与入列 459
8 E8 L  r# V4 \; d  b" W$ G17.6 其他的特征回调函数的实现 461
; p/ f& Y% n. u17.6.1 包的归还 461
! o+ Y  S) j8 }" J( H17.6.2 OID查询处理的直接完成 462
9 n$ z% n7 X, z) z, d0 H( s17.6.3 OID设置处理 465
. R! R8 k3 w( T' K. G/ e2 c6 J9 o6 h2 L& N$ d# c: B
第18章 NDIS中间层驱动 467' B5 J' l- W2 ?1 J3 M0 p/ t% N2 w
$ j" T* F5 k* x/ a8 `
18.1 NDIS中间层驱动概述 467( s* y# I& y: M, U4 m7 a, s4 f. V7 U
18.1.1 Windows网络架构总结 467& D) Z8 }4 s3 T( Q/ ?& k2 ^
18.1.2 NDIS中间层驱动简介 468
' h7 x; |+ T1 K/ s; s, \18.1.3 NDIS中间层驱动的应用 469. e" C+ P' E4 f( j) r
18.1.4 NDIS包描述符结构深究 470& ^( S4 n3 ?' d8 Q
18.2 中间层驱动的入口与绑定 473; x3 G- l3 o& W4 V! \
18.2.1 中间层驱动的入口函数 473
( }0 x: s, y8 J4 V) z. C8 O6 ~18.2.2 动态绑定NIC设备 474
% a6 v9 s+ q7 B% f- m7 @18.2.3 小端口初始化(MpInitialize) 4759 z& Z9 m$ v6 k& S: H6 [! Y
18.3 中间层驱动发送数据包 477
3 ?- R4 \5 E& q( b18.3.1 发送数据包原理 477
, `( |% C3 P; Q& Y# P0 F18.3.2 包描述符“重利用” 478
1 C# I( I4 G+ t18.3.3 包描述符“重申请” 481- d1 a6 U  {: T7 O
18.3.4 发送数据包的异步完成 4829 `3 P8 h% O, ?( y
18.4 中间层驱动接收数据包 484( T6 A; r- I& G1 C
18.4.1 接收数据包概述 4847 u& v$ X3 I( R7 N+ {9 R- I$ a6 N
18.4.2 用PtReceive接收数据包 485
0 V' ~/ Q- y  S. B9 H/ ]18.4.3 用PtReceivePacket接收 490
1 _# A6 p, L6 }% S) o18.4.4 对包进行过滤 491, A$ o3 N3 S3 N6 M* R
18.5 中间层驱动程序查询和设置 4940 Z2 y  n1 w. x6 G; ~
18.5.1 查询请求的处理 494
  L4 ^; {- m3 h* N- H; ~* p; A' f18.5.2 设置请求的处理 496$ n/ T, s9 b5 |9 k. U. J/ N
18.6 NDIS句柄 498
/ j1 ?. F; [6 s+ Z) V18.6.1 不可见的结构指针 498
- F2 t0 k5 G6 a! [( o8 T18.6.2 常见的NDIS句柄 499
! M$ ?5 N& |) J6 x18.6.3 NDIS句柄误用问题 500
& p4 m( m6 {, z5 x18.6.4 一种解决方案 502/ F3 F. |/ S1 T; Z0 i" }6 z# X
18.7 生成普通控制设备 503
4 n5 Y" K: H+ X  t, c$ t18.7.1 在中间层驱动中添加普通设备 503, [: \8 S6 f5 Y4 m5 \
18.7.2 使用传统方法来生成控制设备 505
$ B( S: u& \  R5 E0 m8 E# e7 [8 M
: S! `: s' @0 Y+ ?3 x' L* E第19章 IA-32汇编基础 511
. q3 }2 E: a. P# B  y5 _, P8 n0 A. L$ I7 t' [
19.1 x86内存、寄存器与堆栈 511
8 a/ _) u. T( S9 m; I) G19.1.1 _asm关键字 511/ f4 ~/ I+ H* J6 h
19.1.2 x86中的mov指令 5128 P9 `2 `+ s  E; U" j
19.1.3 x86中的寄存器与内存 512
) H, m) G: |+ p- R19.1.4 赋值语句的实现 513% e3 F6 t1 I& {" p8 R* }
19.2 x86中函数的实现 514
3 c7 Q5 G# Q+ X. z' O& s& V' g3 n19.2.1 一个函数的例子 514
& r- Z- n* F( q1 M1 a0 f! m+ y19.2.2 堆栈的介绍 515# [& Y7 g8 ~% L) |& E
19.2.3 寄存器的备份和恢复 516
5 w% m6 G# m% }9 r) V19.2.4 内部变量与返回值 518  k8 t" {$ _$ L  p3 z
19.3 x86中函数的调用与返回 521
5 V% ?& D* k* W$ R9 B- S3 Q% o5 z19.3.1 函数的调用指令call 521$ o8 q) @! @* ?+ w' Y4 [6 l
19.3.2 通过堆栈传递参数 5214 q/ ]' P9 Y) O
19.3.3 从函数返回 523
0 q- ^2 s3 a3 o+ `4 E! d19.3.4 三种常见的调用协议 5248 e6 Y. A8 S2 w1 z; {. h8 e
19.4 从32位汇编到64位汇编 5264 r# \+ t! g- I- L6 h' b
19.4.1 Intel 64与IA-32体系架构简介 526
9 U3 ^: V8 o1 K' T) W: P) y19.4.2 64位指令与32位指令 5264 u8 C. ^* w% M6 M) T
19.4.3 通用寄存器 5272 J1 g2 g1 K/ S2 T! {4 h
19.5 64位下的函数实现 528
  Z7 d) z$ n. I' v# j19.5.1 函数概览 5285 P# G8 n; R, H" z! e
19.5.2 32位参数的传递 529
! G0 T. s+ f8 ]  E/ [8 ]19.5.3 64位参数与返回值 530
5 ]" i$ r8 O1 J19.5.4 栈空间的开辟与恢复 5312 ^7 F* p9 x& Q
. k& h4 X' }9 t7 |
第20章 IA-32体系中的内存地址 534
' I3 }3 w/ d$ H$ X% n# e# b6 O& \, g* p, N. \9 y9 S
20.1 内存的虚拟地址 534
3 K* z# I8 [. L/ n/ i) B$ D6 g20.1.1 C语言中的内存地址 534: C6 k9 [- @$ ?5 j9 T. c
20.1.2 虚拟地址的构成 5357 ^" t% B' i, ~& k3 E7 X( b* S; q
20.1.3 段的选择 536+ b2 I5 P+ {. c1 v
20.2 全局描述符表和段描述符 5383 B3 r6 e3 Q( s2 w- Z
20.2.1 全局描述符表 538- L# d1 k( V( H7 o5 {) S" m  C$ {  m
20.2.2 段类型 539: h$ R# n7 A- Z1 o2 j
20.2.3 段寄存器与段选择子 540
$ Q3 {+ N) T7 {" y( T. h. _20.2.4 64位模式下的段 541
) w& X" l! J9 g% N+ B6 F/ M& M20.3 分段编程实践 5424 v" n' x% M0 U- n; e1 R1 f3 B+ V
20.3.1 系统表寄存器的结构 542' A/ p" {  B; Q- K7 f
20.3.2 在汇编语言中获取全局描述表的位置 543
* Q1 Z" g8 |/ J' \- K1 Z$ \4 _/ I- ^4 W20.3.3 调试范例:sgdt指令的错误使用 545
3 g3 Z0 Y$ J- p* X20.3.4 在64位下获得全局描述符表 547
0 s( V; K; \) i6 c0 m20.4 线性地址基础 549; y+ Q! s% `. f' G6 [
20.4.1 分页控制机制 550
. d$ j. ]8 F7 A) u9 O  a+ h20.4.2 线性地址的转换 551
0 B8 U6 n( O# J, B6 w! D0 @0 T20.4.3 混合页面大小 552
, e8 r# ^0 I* G& e5 ~& V20.4.4 32位物理地址的页目录和页表项 552
) y1 y6 }0 K' ]20.5 各种特殊分页方式 555
: j7 c& J. s/ K, [/ E20.5.1 PAE分页方式 555
3 `1 N# a1 ?0 _  K/ v- ^! ]7 T20.5.2 PSE-36分页机制 558; o, u, A3 \4 a! X" \/ n; b
20.5.3 IA-32e模式下的线性地址 559
  [4 `5 r- C2 z2 D" T20.6 分页编程实践 562
" q' v; i7 v( w! N4 x* ^: _20.6.1 页目录和页目录指针表的获取 562
+ b, v' e. g  g7 E2 J20.6.2 页表的获取 564! o. V, l! d% g  b$ `& l- @
20.6.3 线性地址的结构 567
+ ^7 @0 E  R1 h$ B
) f% t3 {3 w$ Z, D  b第21章 处理器权限级别切换 571
% Z9 K) j0 {! n" r3 p, y( j, y, B& i6 \
21.1 Ring0和Ring3权限级别 571$ F1 D! ?/ L* \% E( e! W
21.2 保护模式下的分页内存保护 572; d* }$ o: {/ m; N) X. N, l
21.3 分页内存不可执行保护 574
7 c; T9 i9 C; n; Z1 h7 E21.3.1 不可执行保护原理 574; p" I- [, g# H/ q
21.3.2 不可执行保护的漏洞 575
& K) b; H/ Z) t( H21.3.3 上机实践 577
9 b  v, [( l. q3 h* X$ V' b  J! y' b1 r21.4 权限级别的切换 5792 C: S- i3 T" M9 z; q6 D
21.4.1 调用门及其漏洞 579+ }$ `. A7 K: p' G6 A
21.4.2 sysenter和sysexit指令 5816 g7 `8 ~$ e3 @
21.4.3 上机实践 583' d: y  g3 B. k5 D6 F

$ X" h" g2 n& h6 }第22章 IA-32体系结构中的中断 585! T" I" R0 S3 t4 J

3 B. Y$ L8 z' M0 V* A. z9 F22.1 中断基础知识 585
1 `% p; G9 H- q1 h  m4 u22.1.1 中断描述符表 585
3 ?' V5 |8 Q* M22.1.2 中断处理过程 587& G# J" ~0 O  Z$ L$ e$ m
22.1.3 64位模式下的中断处理机制 589
) X7 A! [6 p% d( F' S22.1.4 多核下的中断 589' X9 l  a9 p" Y$ c/ r  E% q, y9 `- M
22.2 Windows中断机制 5932 r7 `. ?( h$ t: A- d
22.3 中断编程实践 596! E, g: z  p- Z. H; N1 ?" g9 a
22.3.1 IDT Hook 596  X, c8 j0 i, e" v9 d, S; T
22.3.2 巧用IDT Hook实现安全防护 598
0 ]5 M, l2 b. Q1 a( L7 R! j: U) w; t8 n! X/ G, Z; v% C
第23章 Windows内核挂钩 601
& B" ~3 s% \. k' I3 x: _3 o! u: l& \9 v; K, _
23.1 系统服务描述符表挂钩 602. x8 a9 m0 N% h/ t$ l7 b9 u: ^
23.1.1 系统服务描述符表(SSDT) 602
0 F$ @7 X9 ?+ Y+ s0 Z9 [- t. \23.1.2 系统服务描述符表挂钩的意图 603
+ |8 A. V0 u. P' V23.1.3 寻找要挂钩的函数的地址 604
: b7 F- H2 J3 H% L, r( I23.1.4 函数被挂钩的过程 605
2 w- i* U: E$ n1 U: v' e: M+ `23.1.5 具体实现的代码 606
' l0 \- v: Y4 _' D- k23.2 函数导出表挂钩 608- F$ H# V4 a' j( R8 j% k/ r
23.2.1 内核函数的种类 608
8 X( P7 l8 Z* [( i1 q$ B8 m23.2.2 挂钩IoCallDriver 6106 O+ l6 `: {* G8 n" u) ]) t
23.2.3 对跳转地址进行修改 611
- ^" H2 O( J9 ~; D, o4 G# ?23.3 Windows 7系统下IofCallDriver的跟踪 612
9 L; a+ o2 S8 O1 V# |23.4 Windows 7系统下内联挂钩 615
! c- z4 O) X1 y8 K2 I3 r23.4.1 写入跳转指令并拷贝代码 615% |1 G9 e3 \- @- ~- l
23.4.2 实现中继函数 617
/ t# R% a$ o  s
8 a0 g3 C. E& f' c
) b) O  F/ U. v4 ~: l高 级 篇% v0 Y1 C! B" ~; B) s
" f9 b/ F( l7 F% o6 j; O
第24章 Windows通知与回调 620
/ n4 [8 r! Y5 G9 Q, K4 B8 f
% P2 o6 x9 x, z1 O, [4 g) r24.1 Windows的事件通知与回调 620& x: D5 H: k' Y; d
24.2 常用的事件通知 620' J2 d( p4 N1 h6 B4 ?1 L  q
24.2.1 创建进程通知 621
. B8 }) K( Z. R0 j# r9 `) \' Z24.2.2 创建线程通知 625
  z7 @  r9 c6 [24.2.3 加载模块通知 626
/ K' t1 ]) q4 @" Q24.2.4 注册表操作通知 629: Z4 u$ i8 h% j! p& k
24.3 Windows回调机制 636
. S6 x7 q4 K* q1 h: s6 s24.3.1 回调对象 636$ y4 d8 v; r/ Q; \5 U
24.3.2 回调对象的创建 637. l  Z5 }3 A" e$ W
24.3.3 回调对象的注册 637- W0 O4 j9 U" [5 K0 r
24.3.4 回调的通告 638
2 \4 _; i; T6 E; h6 B24.4 安全的死角,回调的应用 639
% q- o: t; J* R
) o7 C6 V8 m# l2 O5 m第25章 保护进程 640
# W3 {4 n( L6 x2 X- k& s
7 a( P: D- c4 @0 G% i5 E' p25.1 内核对象简介 6403 x8 ]3 }! }! R0 W
25.2 内核对象的结构 641( n/ l9 q/ n1 I7 [! M
25.3 保护内核对象 642$ Z4 R$ k+ V; [, R) t% ^8 w6 ?
25.3.1 处理对象的打开 643
& Z. b' z; n& h25.3.2 处理句柄的复制 644
6 @0 J( Q2 f, a8 t, [0 T& H) b5 W! U25.3.3 处理句柄的继承 6460 L/ \# [2 |: l! k- `2 W( g
25.4 进程的保护 652
5 k2 Y) p0 h) `1 c% h& v7 y; _25.4.1 保护原理 6523 o$ g7 i% _' @: X9 v. s
25.4.2 Vista以后的进程对象保护 654
# T  m9 c8 ]0 D  Y! x$ a25.4.3 进程的其他保护 6558 [7 x; Y: ?9 C
; @2 @5 I; h. ^, S3 u4 J
附录A 如何使用本书的源码光盘 656
  ]% a( h3 @' `" h) r6 E
' i8 ~1 B- Q3 y7 d, a+ `8 T附录B 练习题 659
5 Y2 {( {0 d( G. r! B+ s
; V$ V  B: j: _. ~4 R; t% m) ~
8 y6 J( i: a3 ?, ~% s" T
楼层
跳转到指定楼层
最佳答案
28 
累计签到:848 天
连续签到:1 天
康小泡 发表于 2016-11-25 11:01:33 | 显示全部楼层
会驱动的都是大神啊。
最佳答案
0 

尚未签到

shanling2017 发表于 2018-3-27 22:34:32 | 显示全部楼层
哦,这个,额,不知道他讲的操作系统的内核指的是什么,这个,很好,我很想学

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐 上一条 /1 下一条

    移动客户端下载(未启用)
    微信公众号

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号

Copyright 2018 鱼C论坛 版权所有 All Rights Reserved.

Powered by Discuz! X3.1 Copyright
© 2001-2018 Comsenz Inc.    All Rights Reserved.

小黑屋|手机版|Archiver|鱼C工作室 ( 粤公网安备 44051102000370号 | 粤ICP备11014136号

GMT+8, 2018-4-21 21:48

快速回复 返回顶部 返回列表