鱼C论坛

 找回密码
 立即注册
查看: 5685|回复: 4

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

[复制链接]
发表于 2016-11-19 17:40:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
TB1eC4MIFXXXXaOXpXXXXXXXXXX_!!0-item_pic.jpg_430x430q90.jpg

5 ^: p0 T( N+ C( F" b- Z' `8 L- w4 g/ g3 v/ t( L) ^: L
书名:《windows内核安全与驱动开发》
0 s: o  @8 y& z9 u4 h作者:谭文;陈铭霖
& ]) @# l( [: P; y6 F3 e出版社:电子工业出版社
+ a  _  U2 @2 @4 S$ A出版年:2015年6月1日(第1版)' R- ]4 S3 p0 }9 D
定价:139.00元
% j! Y5 |' A* e0 {; Z( n装帧:平装
* X4 C, s; V5 |8 CISBN:9787121262159
( Y+ l! W7 E4 O
7 F5 Y! r! ^! j2 F5 [) _: k7 b" V购买链接:: R5 R, o0 c2 @$ A1 J5 j/ y

$ @( T; P0 \9 h$ N- v( V1 D

+ M2 M+ e" I! H亚马逊 -> 传送门7 C! _0 Z2 y7 B& C  g& R

; ?: _6 L6 x0 s* R% m: t, F0 G当当网 -> 传送门
0 q8 T1 `' M3 u
1 c7 L( m4 e, }3 l. d京东 -> 传送门
4 H; K. k+ `$ R5 D
# u' d3 w* ^! n$ e  N) u8 _天猫 -> 传送门4 M$ s$ G( E5 h* w- G1 P" i  D

# {  n/ _% r5 t& P# |' ]+ }- s% K2 v
内容简介:
, H" b7 a: s6 G  b( V$ U% }# {2 v1 T9 }4 z$ z9 X; K* q


  a1 L. R: b4 a9 I1 G本书的前身是《天书夜读——从汇编语言到Windows内核编程》和《寒江独钓——Windows内核安全编程》。与 Windows 客户端安全软件开发相关的驱动程序开发是本书的主题。书中的程序使用环境从 32 位到 64 位,从 Windows XP 到 Windows 8 都有涉及,大部分程序不经过修改即可在 Windows 10 上运行。同时本书也深入浅出地介绍了进行内核安全编程所需要的操作系统、汇编等基础知识。5 o2 q  U  g* u4 \
  I$ U- U$ M# B  k8 f
本书共分三篇,基础篇囊括了驱动开发的基础知识,降低了入门的难度;开发篇介绍了在实际工作中可能遇到的各种开发需求的技术实现,包括:串口的过滤、键盘的过滤、磁盘的虚拟、磁盘的过滤、文件系统的过滤与监控、文件系统透明加密、文件系统微过滤驱动、网络传输层过滤、Windows 过滤平台、NDIS 协议驱动、NDIS 小端口驱动、NDIS 中间层驱动、IA-32 汇编基础、IA-32 体系中的内存地址、处理器权限级别切换、IA-32 体系结构中的中断和 Windows 内核挂钩;高级篇包含了汇编语言、操作系统原理、处理器体系架构相关的内容。本书是由长期从事这个行业的工程师自己写的,所以处处以实用为准。对细节的考究主要体现在对实际问题的解决,而不是知识的详尽程度上。
4 I, I" U. T* o# y3 t
* M% J( T+ \9 B  t! L目录:  P& r1 Z, C( C3 G; N% t  l

' i2 b+ Q8 v; g! h% Q2 t. @
$ w4 K1 Q. a! Q7 Q8 q7 s, z# A% Z
基 础 篇
" I0 r) ^) R, a4 X( R( B! ?' m1 B# K- ]/ G
第1章 内核上机指导2
8 ~( U0 R+ |# r% v/ I1 j
$ K! X5 {; ?3 `6 e: L
1.1 下载和使用WDK2 - e, S6 Q3 q4 n1 }% Z4 h
1.1.1 下载并安装WDK2
4 c( X7 M: K* }" ~" u, \1.1.2 编写第一个C文件4 ! N7 B! m6 X* J8 K# E7 z1 I* m+ C  @
1.1.3 编译一个工程5   T/ r( H/ ^- k
1.2 安装与运行6 1 u) O$ ?4 ]# F( E
1.2.1 下载一个安装工具6 ' Z; K7 k' [( C. `
1.2.2 运行与查看输出信息7   K2 k8 j. X  l$ M- `' c; D4 ]
1.2.3 在虚拟机中运行8
- Q: G; ?" r8 a1.3 调试内核模块9   s% ]: d. V8 F( V8 l
1.3.1 下载和安装WinDbg9
% D% R, A5 {' H3 y1 ^8 y1.3.2 设置Windows XP调试执行9 ' {" D: l& U: j: t' i4 v
1.3.3 设置Vista调试执行10
/ r9 W8 Q6 Z& Y5 ?+ w  L0 b% |1.3.4 设置VMware的管道虚拟串口11 ! A1 m- p& f* l8 q- [
1.3.5 设置Windows内核符号表12 4 x1 r) f6 v2 ]; j& b- R: E5 g. h% l
1.3.6 实战调试first13 5 p2 ^. T  _6 H- u2 a

- O4 E  b8 U; w0 r7 Q! t第2章 内核编程环境及其特殊性16
5 _% \5 |4 x; C% x% W3 S. v6 G- G3 T; j
2.1 内核编程的环境16
. @0 L+ ?5 H$ \/ e$ Y5 I9 T2.1.1 隔离的应用程序16 ) Z3 `/ ]# R' Z9 t1 R1 q
2.1.2 共享的内核空间17
# v9 P! X# ^1 I8 e2.1.3 无处不在的内核模块18 4 u0 x0 P4 q1 |0 L$ ?1 x9 O
2.2 数据类型19
$ G% e# J3 |+ C( j) O  m2.2.1 基本数据类型19
; y- o) K8 S% f* ~7 O$ \, {2.2.2 返回状态19 ) G6 V4 v) o: R" q- @
2.2.3 字符串20
5 d; h* q6 S1 t' b7 s: L2 z! f2.3 重要的数据结构21
' G& E+ Z& P: e2.3.1 驱动对象21
5 b1 q2 Y! t$ [& C  E( C" M+ m" R2.3.2 设备对象22
" L3 w; a/ n" v2 F) T2.3.3 请求24
  Q* o/ b2 {6 }3 a- I. S+ x7 Z2.4 函数调用25
8 f1 V4 q6 v2 @% ~. y2.4.1 查阅帮助25 8 q8 w3 _; ~& y0 b2 @
2.4.2 帮助中有的几类函数26
9 F. E5 g8 @6 a' T+ b2.4.3 帮助中没有的函数28 3 Q! h0 M4 t+ E$ L  N
2.5 Windows的驱动开发模型29 % M$ s/ S, F$ l8 O; W7 Y
2.6 WDK编程中的特殊点30 : x8 e& L9 t+ N) ?2 u% k
2.6.1 内核编程的主要调用源30
1 B! f- c7 Z" o/ A' T' T1 l2.6.2 函数的多线程安全性30 # y( x& [9 q& C* K' D( e; R
2.6.3 代码的中断级32 * m7 U! d9 T: K& n8 O) h
2.6.4 WDK中出现的特殊代码32
3 l; @: L4 v  s3 ?4 R; R% |! j
: p7 R9 d. P4 ^. ]8 [: I第3章 字符串与链表35 ) d+ f3 d. B# F" t* {$ Q% S
7 B; j$ _  I  m
3.1 字符串操作35
8 T7 [1 a/ w+ L& X" V3.1.1 使用字符串结构35 ' a8 d; R5 [) s1 z7 }; w9 G  N
3.1.2 字符串的初始化36
. J& R1 ^, g& \3.1.3 字符串的拷贝37 6 H9 O/ Z6 n$ ^6 f, u, s
3.1.4 字符串的连接38
. i1 T, ]5 b8 K' L# N3.1.5 字符串的打印38   E+ E; Q9 k. n- x8 D( f# M
3.2 内存与链表40
0 r" H5 j* Y; N- y, n6 A5 O- s3.2.1 内存的分配与释放40 . Q$ [# D' w7 Q; U, N6 k; ]. `# _. {
3.2.2 使用LIST_ENTRY41 1 k) o) r! M- b# D! f6 |
3.2.3 使用长长整型数据43 2 i9 n- }3 V$ u0 h) p
3.3 自旋锁44
/ B, z; I/ R, i/ h, h. }3.3.1 使用自旋锁44
3 g3 S8 j5 v$ u3.3.2 在双向链表中使用自旋锁45
% Y0 U& E9 P& @  ~' ~; I5 @! T3.3.3 使用队列自旋锁提高性能46
6 q2 C: Y: Z5 L$ ~) E% w+ @  z; R' C' J; J1 ]8 ?6 ^4 I3 |2 F
第4章 文件、注册表、线程47
; y- F, h8 I3 s$ U- k6 C" @1 X/ }, W. J4 O* `* q; G' [
4.1 文件操作47 * D# G. M" H4 Y/ N/ y7 Q
4.1.1 使用OBJECT_ATTRIBUTES47
) ^$ n, E$ \' U% {- L( m3 t( J& N4.1.2 打开和关闭文件48 8 ]' x3 B/ b6 |
4.1.3 文件读/写操作51
9 D9 p8 D" g+ ?. s* a2 o2 p0 x4.2 注册表操作53 5 h! c  x0 D' T  r0 g) z4 r
4.2.1 注册表键的打开53
) }  g% @% O$ C* B: e) Z8 M4.2.2 注册表键值的读55
" N/ `: n5 h, Z: d) o: o+ L6 ]4.2.3 注册表键值的写57 ! Z. O8 n" I* e+ ~8 t2 a, g
4.3 时间与定时器58
) w; y% Z" s" ~% |) x$ d4.3.1 获得当前“滴答”数58 ! Y2 ?+ E5 Y$ f: m8 l* D
4.3.2 获得当前系统时间58
) w9 k6 K, d! {4.3.3 使用定时器59
1 S. c4 Y0 `0 b& W4.4 线程与事件62
$ H. }, O* p# {( z& E, d( B9 ?4.4.1 使用系统线程62 & p- y" f- {0 W4 A& g) D# O3 D
4.4.2 在线程中睡眠63
8 t9 o' k; C0 r' {4.4.3 使用同步事件64
8 `: z6 {* m: W0 q2 _5 v9 h* ?1 p% L# n. b8 d7 N1 O! M  c
第5章 应用与内核通信67 # r, Z1 L6 \& H: y
9 J3 P* S. n# f1 T
5.1 内核方面的编程68
4 J- @. ^8 g' Q5.1.1 生成控制设备68 8 u1 ~$ ]( Z6 X& }2 \7 p
5.1.2 控制设备的名字和符号链接70
. |- d7 }' L% H, m* W5.1.3 控制设备的删除71
) [1 f( @  l0 D6 Y5.1.4 分发函数72 $ U0 M. r2 m. D8 H- E9 u' z$ ]
5.1.5 请求的处理73
- k; _) K4 }2 U1 n9 ^5.2 应用方面的编程74 , Z$ o& N5 l9 c" Z
5.2.1 基本的功能需求74
1 |% I% w* v3 Y8 c1 r5.2.2 在应用程序中打开与关闭设备75
3 ]3 Z- s! t! ?, b2 G! a5.2.3 设备控制请求75
* J3 T4 h' o+ o1 j& Z7 h5.2.4 内核中的对应处理77 & O! P! }2 [0 K; k9 t8 m
5.2.5 结合测试的效果79
# K7 h  w. w$ p" M& i: t8 g5.3 阻塞、等待与安全设计80
$ ?2 @$ z3 U3 y0 M5 r" l5.3.1 驱动主动通知应用80 5 `7 J; |+ w' Q( J
5.3.2 通信接口的测试81
' x( S* U6 [0 M5.3.3 内核中的缓冲区链表结构83 3 T. X- g; m/ h$ ~7 @1 B
5.3.4 输入:内核中的请求处理中的安全检查84 ; x' I9 T8 n5 t& r
5.3.5 输出处理与卸载清理85 4 |0 w* f  b$ p2 [$ R, P/ y3 t

7 M  X# |+ A# r* o第6章 64位和32位内核开发差异88. h, }. Y( H5 T/ Z* j0 x
5 i. b8 G) H: }0 N3 e1 V# U
6.1 64位系统新增机制88
( V# T9 e7 Z! w' u6.1.1 WOW64子系统88 " g5 b9 X( l5 o# Y7 X
6.1.2 PatchGuard技术91
7 c* Z7 q% o, m" q. \; o3 F( K6.1.3 64位驱动的编译、安装与运行91 6 L4 O0 I7 p* Q  A
6.2 编程差异92
/ b/ \& e* {2 b) H6.2.1 汇编嵌入变化92
, R  @' M  `- n9 ?6.2.2 预处理与条件编译93 * v" n& A/ N. V3 h- R% n! X4 ~
6.2.3 数据结构调整93 5 Q) d; c5 e& e/ T4 U8 I% T
+ |2 V, G# ~# w: v# q
1 w& g; r1 i' W( ~& X8 _
开 发 篇 ; W4 x: g: |9 p1 f+ b0 q  V' G' X4 r
# z1 n2 Y* t; ]" F9 D
第7章 串口的过滤96
9 C: J+ B  |" f: h9 o
% F: r" }& u2 N( Q5 \7.1 过滤的概念96 % h6 K6 V' R  b3 K
7.1.1 设备绑定的内核API之一97 , ?& T/ Z9 x' w
7.1.2 设备绑定的内核API之二98 : ^! H* c+ S+ O/ F& m! X9 ?  W
7.1.3 生成过滤设备并绑定98
8 x. W  X1 ]8 u' x8 X7.1.4 从名字获得设备对象100
* N# G* t* u" `7.1.5 绑定所有串口101
3 u. x( G! ]$ p. B' k0 \. q7.2 获得实际数据102
8 e6 X" K' g( U7 i1 ^7 g7.2.1 请求的区分102
: ]$ G" J1 I& G7.2.2 请求的结局103 9 n" n& |9 l  M5 C; [
7.2.3 写请求的数据104 2 E# t5 m" v5 n- }. l3 |3 q) ]- G
7.3 完整的代码105 4 ^$ w2 E1 Q; o4 V2 T5 j4 A
7.3.1 完整的分发函数105 2 I8 ]! r* ?% B; }  Q2 p
7.3.2 如何动态卸载106
/ a1 l* M4 @. f9 Q5 J7.3.3 代码的编译与运行107 1 ?. h3 {4 ^' H' F4 F. T# X% b
0 m5 s8 M4 k2 q
第8章 键盘的过滤109 ' u( @5 B' T# W8 f% p/ T1 f
8 g5 y& G2 }7 r- v* C# o- {$ L- @
8.1 技术原理110 ) I; Y1 j: |& V* b# m
8.1.1 预备知识110 , W$ s( b; u4 T* s  \# P2 Q
8.1.2 Windows中从击键到内核110 5 i4 I4 c, L) g5 M9 Y
8.1.3 键盘硬件原理112 + Q% [( A1 b1 F$ [9 [3 H
8.2 键盘过滤的框架112 " T' X" n1 H4 X1 O9 k3 `* |
8.2.1 找到所有的键盘设备112 3 C& s4 p) {. `9 k
8.2.2 应用设备扩展115
5 H  x( }3 y, d; i3 {. D- M3 s0 e8.2.3 键盘过滤模块的DriverEntry117
+ h, w. L% T% N) X8.2.4 键盘过滤模块的动态卸载117
6 i* n/ S" W& K$ A3 [8.3 键盘过滤的请求处理119   B: b4 ~$ q9 @: B/ B
8.3.1 通常的处理119
6 P. w2 ?- p% M; l8.3.2 PNP的处理120 % c8 d: o0 i" x1 v! _+ c6 W
8.3.3 读的处理121
: k) _9 m# {3 j- Z5 C. j, p* L8.3.4 读完成的处理122
! h' b) N6 H1 o0 s; F: N6 q8.4 从请求中打印出按键信息123
" l1 }5 Y) d( k* a; x# u8.4.1 从缓冲区中获得KEYBOARD_INPUT_DATA123 8 O) K7 l4 O: _5 v
8.4.2 从KEYBOARD_INPUT_DATA中得到键124
/ H* W% J. s- ^4 D) p: i9 y! M8.4.3 从MakeCode到实际字符124 7 n* _3 C$ M' {* F
8.5 Hook分发函数126
' m: o$ ~0 T8 N) {& c" S7 v3 `8.5.1 获得类驱动对象126
0 N: M7 t7 _; x, s8.5.2 修改类驱动的分发函数指针127 2 ?9 ?% ~/ E  }3 |
8.5.3 类驱动之下的端口驱动128
# q5 ]# {) a1 ]* ?6 \6 O8.5.4 端口驱动和类驱动之间的协作机制129 8 Z$ j2 Y" f0 j  B, v6 y! s
8.5.5 找到关键的回调函数的条件129 2 v2 I1 ]' {; Q. @
8.5.6 定义常数和数据结构130 ; b+ n1 j5 n7 Q
8.5.7 打开两种键盘端口驱动寻找设备131
+ j, n- Q2 d! G$ O0 E* C8.5.8 搜索在KbdClass类驱动中的地址133 ( j& G  c+ w4 {* k+ m% c4 t
8.6 Hook键盘中断反过滤135
- \+ e, X3 p$ R9 e8.6.1 中断:IRQ和INT136 # @0 u/ o+ w6 H* ^/ a- U
8.6.2 如何修改IDT136
0 Q/ w5 Y! _& g- T" U$ Z  `! X8.6.3 替换IDT中的跳转地址137 ! K" \# f2 P5 G/ x, c' L
8.6.4 QQ的PS/2反过滤措施139
" [; @. k9 l6 u8 W9 G+ p8.7 直接用端口操作键盘139
3 D3 A) Z) @2 P+ T9 y9 K) g8.7.1 读取键盘数据和命令端口139
3 z7 C& I+ @! o1 U* I8.7.2 p2cUserFilter的最终实现140 8 j- J$ ^3 f6 t* _6 ^5 j

7 U; O; C# ~8 C* ~第9章 磁盘的虚拟143 , F& R7 R) g" O' ]

. C1 [: E4 F6 L9.1 虚拟的磁盘143 1 v# ?  J% M! ?+ A6 D- N
9.2 一个具体的例子143
( J. a: M# S& k9 j0 i' \9.3 入口函数144
. G. f7 Z1 A- I9.3.1 入口函数的定义144 1 z5 ]' y  W+ ~
9.3.2 Ramdisk驱动的入口函数145 / T* m& O+ B& ~2 \4 S, a
9.4 EvtDriverDeviceAdd函数146 4 b! u5 _: O, c5 }' S3 `' L; s! ~. [
9.4.1 EvtDriverDeviceAdd的定义146 3 Q5 ~4 ]" H( @" M/ e  V- T
9.4.2 局部变量的声明146 7 m5 u; x1 W5 K: C5 r
9.4.3 磁盘设备的创建147
6 j7 o; |! Q0 ^# v9.4.4 如何处理发往设备的请求148
- P. J! f! H, N" W! n$ X9.4.5 用户配置的初始化149 7 Q+ o7 E, y: d1 L' y
9.4.6 链接给应用程序151
# z1 P( H# e% ?/ U7 z9.4.7 小结152
, d' l0 v6 q* M" p: x  `9.5 FAT12/16磁盘卷初始化152
; a+ N$ f! L, R0 U7 p4 O* i2 M9.5.1 磁盘卷结构简介152 ) g! \# Q: W$ q; R: u
9.5.2 Ramdisk对磁盘的初始化154
, u) b- W4 Z5 u( ?( T9.6 驱动中的请求处理160
; n  q7 s" A9 \* W( R3 [1 U9.6.1 请求的处理160 $ V0 `( J2 S. ]/ H
9.6.2 读/写请求160 5 t, b: v. y* R. D; J7 v
9.6.3 DeviceIoControl请求162
$ E/ S) [/ D! ~1 W0 l9.7 Ramdisk的编译和安装164 3 v* r) T& J) o  R
9.7.1 编译164 : V( L1 b: c$ L: H) [# m  @' e  v
9.7.2 安装164
0 t& r+ X3 y& i/ \: F# b9.7.3 对安装的深入探究165 4 I1 K' R% L2 w! D: m, {
! m! `) I7 \. J, b( u" f9 _# I
第10章 磁盘的过滤167
, h3 C4 `9 m# H5 i- f! U
6 ^  j2 R% p" q$ Q10.1 磁盘过滤驱动的概念167 1 `2 m2 J, a, L
10.1.1 设备过滤和类过滤167 4 }5 Q# A) ?: n
10.1.2 磁盘设备和磁盘卷设备过滤驱动167 ( [5 E! z5 l, d6 X
10.1.3 注册表和磁盘卷设备过滤驱动168
. D) F! m% t9 L10.2 具有还原功能的磁盘卷过滤驱动168 3 |) L: U: @+ L* L6 p; L" l2 h
10.2.1 简介168
3 s7 t9 D& E1 t; m# q# ^% U10.2.2 基本思想169
3 K) ~# ~  s: T8 m4 p2 C) |10.3 驱动分析169
6 t, r+ a" w2 _9 E0 S. ]10.3.1 DriverEntry函数169
7 x' U' [! m5 n6 Y& B/ q10.3.2 AddDevice函数170
; ^5 _# @% g* q10.3.3 PnP请求的处理174
* Z* ~6 M9 q3 j2 N+ }* {10.3.4 Power请求的处理178 * V! t% [! f( R" _
10.3.5 DeviceIoControl请求的处理178
' ~$ \- a. w* V7 r3 Y  A$ T10.3.6 bitmap的作用和分析182
5 o# A* C, D' m/ V6 R% s10.3.7 boot驱动完成回调函数和稀疏文件187 # c) F% g7 Y) R# c! l$ k- C
10.3.8 读/写请求的处理190
0 f, a9 V) M  ?7 F
. H8 S) A3 X/ {9 p$ k3 H! t1 k" b: \第11章 文件系统的过滤与监控199 4 x3 \4 j: n8 L( c. w

* v% Z& Y; k/ A, b1 z9 C11.1 文件系统的设备对象200 / [! t& J3 c' {1 r4 i  z  q; y
11.1.1 控制设备与卷设备200 7 u8 ~. q% }% }( H# f9 N2 e
11.1.2 生成自己的一个控制设备201
5 W* m* p- W6 H, H11.2 文件系统的分发函数202
7 L$ i6 p7 F- g7 c11.2.1 普通的分发函数202
7 u/ U/ F$ R! G* q) \$ E+ q11.2.2 文件过滤的快速IO分发函数203 4 I3 \9 O% p" U' |
11.2.3 快速IO分发函数的一个实现205
; h' O; [+ u% d' g$ w11.2.4 快速IO分发函数逐个简介206 " M9 W; n1 [0 X$ J6 m' G! F; t" S
11.3 设备的绑定前期工作207
4 U" @+ a2 G- O5 J$ O0 e. `11.3.1 动态地选择绑定函数207
. H  n: u1 K: H$ V% [9 P11.3.2 注册文件系统变动回调208 ! x. C' D7 J) b6 v0 v; s
11.3.3 文件系统变动回调的一个实现209 . ~- O' M# m3 u  x' ~, H/ c2 `
11.3.4 文件系统识别器211 3 ]: B" N+ y( o/ y9 L
11.4 文件系统控制设备的绑定212
* G" [( {( |+ H4 W3 D2 d4 R+ P11.4.1 生成文件系统控制设备的过滤设备212   _! G% H( e& w! h- A
11.4.2 绑定文件系统控制设备213 / B" u9 t+ U! ?0 F( b4 r- g+ i
11.4.3 利用文件系统控制请求215
# G4 a* J6 t  P& H2 H11.5 文件系统卷设备的绑定217
; ]3 E) D. z* b4 u. S) |11.5.1 从IRP中获得VPB指针217
& L8 W. z8 X" `  h2 }# K2 h6 a# l11.5.2 设置完成函数并等待IRP完成218
9 t5 \+ r* S) ~% o11.5.3 卷挂载IRP完成后的工作221
8 j$ M8 o9 A" g8 K5 z0 Z( S: z: S11.5.4 完成函数的相应实现223
6 j: u, Z% i4 u11.5.5 绑定卷的实现224
% \0 d9 D3 x' h9 k* G11.6 读/写操作的过滤226 2 w5 ?0 l8 Y8 U5 Z9 h
11.6.1 设置一个读处理函数226 / v( `, j0 v  L& g; {
11.6.2 设备对象的区分处理227 5 U7 s2 a/ }$ {; d/ G  A, e6 z
11.6.3 解析读请求中的文件信息228 8 ?2 |/ P1 O# ~" w
11.6.4 读请求的完成230
! f8 T2 {/ `. q5 Z% Z9 _9 e11.7 其他操作的过滤234
' \8 Z2 G) c5 S5 A0 A8 L/ H4 _* a11.7.1 文件对象的生存周期234
- r2 q" |. ?8 \3 c11.7.2 文件的打开与关闭235 - W" v$ T0 O6 o+ [
11.7.3 文件的删除237
1 G$ s+ ?1 d  ?/ F$ N/ a+ g11.8 路径过滤的实现238 3 c6 n# S; M0 ]6 d
11.8.1 取得文件路径的三种情况238
# s+ e9 n- C% v3 ], J11.8.2 打开成功后获取路径238
  N- y) g3 e$ z11.8.3 在其他时刻获得文件路径240 : }9 H5 v' @1 P" d2 w" C+ R
11.8.4 在打开请求完成之前获得路径名240 + l( z; P( Z  R% Y5 {1 F
11.8.5 把短名转换为长名242
7 G5 [4 L1 F5 w5 O  x1 h% `: o0 L. k11.9 把sfilter编译成静态库243
2 G* b6 o+ r% ~, ?5 ?2 K1 g1 @11.9.1 如何方便地使用sfilter243 ) }" o/ Y9 c0 m; u4 I
11.9.2 初始化回调、卸载回调和绑定回调244
/ E* }' `5 S! z5 r# v" l. n8 R11.9.3 绑定与回调245 3 v9 W. R2 ?9 }, \1 ?
11.9.4 插入请求回调246 1 A/ r1 w* X- D! C, l& B1 @
11.9.5 如何利用sfilter.lib249
7 R/ R1 [! @2 E: t
& L7 b4 Y9 ~+ [8 j第12章 文件系统透明加密252 1 A( N9 c5 ]- T* W5 o
2 T5 V* n, ?. Y. M" ~" _
12.1 文件透明加密的应用252 0 m  f5 c0 d$ j4 P" O
12.1.1 防止企业信息泄密252 5 _; Z3 X' Q/ |( j$ h
12.1.2 文件透明加密防止企业信息泄密253
* I" S; F0 l' T& j& ^12.1.3 文件透明加密软件的例子253   T, n& d) H9 T; l3 {
12.2 区分进程254
$ Z; ?* g6 G! A; r( A) i# {12.2.1 机密进程与普通进程254 & @! B+ F' i  P# o/ j6 a
12.2.2 找到进程名字的位置255 # S7 C' ~5 Y: I' V" h! O
12.2.3 得到当前进程的名字256 . D4 ~7 c2 s' }2 e' H% f& \
12.3 内存映射与文件缓冲257
1 v9 W; L& G- G0 [/ f12.3.1 记事本的内存映射文件257
3 L2 B6 \7 M, Q$ @! o# [12.3.2 Windows的文件缓冲258 8 j( y+ H$ j1 H) ~
12.3.3 文件缓冲:明文还是密文的选择259 . O. g; v; O6 @5 p
12.3.4 清除文件缓冲260 , l7 J" K8 A0 o$ ^/ s; i% ?8 z
12.4 加密标识263
' Y- O' q* a' J/ B' O12.4.1 保存在文件外、文件头还是文件尾 263
& g; G' p$ q) m. f9 E3 i12.4.2 隐藏文件头的大小 2648 t8 `9 c7 w, {: \  ]4 _- {! j2 p
12.4.3 隐藏文件头的设置偏移 2664 h- T2 ~6 V0 a% X* c
12.4.4 隐藏文件头的读/写偏移 267, X) C1 z, W3 R( }, f
12.5 文件加密表 267! v# x4 @) C2 N; g) c
12.5.1 何时进行加密操作 267
4 Z; w, r; W/ \12.5.2 文件控制块与文件对象 268# V2 D: O, F& j0 g' S1 b' t8 Y
12.5.3 文件加密表的数据结构与初始化 2699 j8 T( E( `# d! ?( C, B& O# n
12.5.4 文件加密表的操作:查询 270+ X$ q0 I0 m0 D# U& ~
12.5.5 文件加密表的操作:添加 271
' x9 M& U  n, D12.5.6 文件加密表的操作:删除 272( e: M; y& O, G, O/ Z  C
12.6 文件打开处理 273
" q( s( m4 v% V; r* [3 S7 e$ q) b12.6.1 直接发送IRP进行查询与设置操作 2741 Y8 w: _3 x; o. h7 o
12.6.2 直接发送IRP进行读/写操作 2764 c9 M" A3 a" ^# y% A1 t8 Z
12.6.3 文件的非重入打开 2773 }' r0 \0 ?) z3 @; O1 h
12.6.4 文件的打开预处理 280% k) w1 L! \/ N# |
12.7 读/写加密和解密 285( `) \6 X  b0 Z- j* {1 u
12.7.1 在读取时进行解密 285
6 W2 v8 n( V+ p6 U# S12.7.2 分配与释放MDL 286
  X7 J7 Y% H1 D8 _7 V4 P" z7 d# p12.7.3 写请求加密 2876 n: V# Z( |" ?3 q, q
12.8 crypt_file的组装 289
& f( n0 G: {) t$ D4 e: K4 d12.8.1 crypt_file的初始化 289
! u0 O9 T8 f0 F: U9 u. |12.8.2 crypt_file的IRP预处理 290
2 ?1 h8 @6 D% M: C12.8.3 crypt_file的IRP后处理 293
8 [5 P1 _5 v6 L; [  i1 e& g& {- ^' l) k
第13章 文件系统微过滤驱动 297" h& \' k# F& ?

( h$ x, O' {6 [& V6 Q13.1 文件系统微过滤驱动简介 297
0 W. x; s. t1 \  h' @3 S. W- z13.1.1 文件系统微过滤驱动的由来 2975 E9 j+ M7 M6 Y7 u1 `+ Z4 H9 q- ^% d
13.1.2 Minifilter的优点与不足 298; _. w/ {$ e# U; J+ m
13.2 Minifilter的编程框架 2989 _! i) w9 v6 Q% Q
13.2.1 微文件系统过滤的注册 299
& C* j6 V* m; k) m13.2.2 微过滤器的数据结构 3006 @( l% I/ `* p: H3 L( l3 N
13.2.3 卸载回调函数 303( I* s0 A! c$ T9 u+ U  Z/ [$ R" w
13.2.4 预操作回调函数 3037 R9 @3 A3 ]: M3 R
13.2.5 后操作回调函数 306
" a! Z' L2 h9 N( r0 |) u- t* C0 p2 S13.2.6 其他回调函数 307+ i% F6 N" w- X- M/ Q5 Z% l
13.3 Minifilter如何与应用程序通信 309
: @/ F& T8 _9 B3 k0 ^8 T13.3.1 建立通信端口的方法 310
- M# s* _" G; y8 G2 K13.3.2 在用户态通过DLL使用通信端口的范例 311
5 ~; ]: t) q# m6 }! \8 ?1 n13.4 Minifilter的安装与加载 3143 f9 q& E3 U# P* D1 b& o
13.4.1 安装Minifilter的INF文件 314
' S, c$ B+ ~0 L# @: W& Q" t13.4.2 启动安装完成的Minifilter 316' W5 c  g' z/ w/ _* r, P8 R  \) r! I3 }
% V6 s; J& O: t0 m4 k  J8 u8 V6 e" `% Q
第14章 网络传输层过滤 3179 h' _, i9 m! \, L$ O4 C6 E
: R, [: c/ o: ^; F; k
14.1 TDI概要 317
; w. R- H; ~6 U5 I9 J) K1 K7 E14.1.1 为何选择TDI 317
/ t& F; {5 M' ^- G14.1.2 从socket到Windows内核 3186 |, m& ?- `4 R. z; R8 T: q4 {
14.1.3 TDI过滤的代码例子 319
5 P* y5 g& Z# e8 {& ?9 k) |14.2 TDI的过滤框架 319$ u% L# A! S* k& ]
14.2.1 绑定TDI的设备 319, @- L$ T3 ]3 z0 d) J% O1 F2 m
14.2.2 唯一的分发函数 320' X, b/ t4 n% o  n) a: O1 ?3 V: ?
14.2.3 过滤框架的实现 3224 ?6 \- c. N& c! p3 o0 k9 x
14.2.4 主要过滤的请求类型 323
4 O9 X: }! n( N. B$ E5 z* L& Q14.3 生成请求:获取地址 324  ?% m5 M3 z& X* c- g0 R! t: i
14.3.1 过滤生成请求 324* w$ J1 `3 q/ Q! u# F
14.3.2 准备解析IP地址与端口 326
! D  J. @/ Y+ _! @6 s/ d+ {14.3.3 获取生成的IP地址和端口 327
+ V% V4 w2 V, W3 |' z/ E14.3.4 连接终端的生成与相关信息的保存 3293 R0 o7 h( a$ ?0 R
14.4 控制请求 3303 E' k8 B5 \- `$ p# p9 h
14.4.1 TDI_ASSOCIATE_ADDRESS的过滤 330
$ U9 _$ q, W; m& ~) n+ O( f/ J* c$ H14.4.2 TDI_CONNECT的过滤 3325 g9 L: V: O1 A' O" {  K
14.4.3 其他的次功能号 333
. h+ _" z% y/ `& _" R14.4.4 设置事件的过滤 334
# A) B. `6 p; J, ~, W6 T2 J" ?, s2 y14.4.5 TDI_EVENT_CONNECT类型的设置事件的过滤 336
( i; k8 F8 I; |14.4.6 直接获取发送函数的过滤 3375 u8 T5 E% }- K  c3 d( D
14.4.7 清理请求的过滤 339' Q, J- `1 q$ k
14.5 本书例子tdifw.lib的应用 3413 S! M, [# ^4 n- L) {
14.5.1 tdifw库的回调接口 341
" U+ V3 L; P  g14.5.2 tdifw库的使用例子 3428 d- _1 G) ~, r' o, S" c9 a

. U+ i& P. I5 ^/ m- n% \第15章 Windows过滤平台 345
5 [9 g# v* V( b3 v) Q
. l& t: F3 X6 Y0 u* F15.1 WFP简介 345+ k% y9 _8 b( T+ G4 f" z6 W' B( v
15.2 WFP框架 345; e+ r3 W. e/ ?* q, Q; [  M9 }( b
15.3 基本对象模型 347# ^, U) Y4 W& A( R4 C
15.3.1 过滤引擎 3478 g; X9 h% u, r1 Q5 p! q) Y/ j
15.3.2 垫片 347" H9 [3 y* Z5 D
15.3.3 呼出接口 347
+ u  z, w9 i" i8 u15.3.4 分层 348
% M3 q& f! J$ G- q1 r) _7 ~! p15.3.5 子层 349  g5 ~1 v' K1 h( n( D/ ]) s
15.3.6 过滤器 3504 G' d2 _+ `/ }
15.3.7 呼出接口回调函数 3549 z) Z& @" n& U, r( s8 `+ q9 q
15.4 WFP操作 3595 ~# w8 {) H+ u7 Z6 h' I1 D5 B& p+ ^0 i
15.4.1 呼出接口的注册与卸载 360' l. L( ^) G3 ?* K4 T' C7 r, z  C8 C, |, ?
15.4.2 呼出接口的添加与移除 360/ k( _  v  b3 j3 ^8 U* T# Z
15.4.3 子层的添加与移除 361
: P  E! E; T- [1 ]15.4.4 过滤器的添加 362
5 t# L/ K5 n% _: m6 \; a, b15.5 WFP过滤例子 362. z# V+ T) T, ?3 W. u8 A* n. c
' y* y' s( n' E- X2 E) W% K
第16章 NDIS协议驱动 370
$ a- |7 E7 `0 N& p
! `$ i) ]2 E* Q16.1 以太网包和网络驱动架构 370
( j( Y$ T) I2 {: ]3 C16.1.1 以太网包和协议驱动 370
. Q9 e2 @! f: `1 n0 h8 p+ O# G16.1.2 NDIS网络驱动 371
. u- n& C9 f+ m; o6 b/ ~3 r, j16.2 协议驱动的DriverEntry 372
# ]$ o$ P% B7 Z+ d6 Y; }" B16.2.1 生成控制设备 372/ L% q, q1 ~6 `$ {- _
16.2.2 注册协议 374
: E* |9 {' ]. J- Q+ j- }; C' M16.3 协议与网卡的绑定 3757 x9 z" D& l$ x0 j) U$ s
16.3.1 协议与网卡的绑定概念 375
9 h! H9 m2 P% T1 `$ Z5 B16.3.2 绑定回调处理的实现 376& E/ ~4 z+ y5 @3 n- X
16.3.3 协议绑定网卡的API 378; h5 B5 q" Q9 b" |  s4 H
16.3.4 解决绑定竞争问题 379# Y) l5 N) P) i4 t$ h
16.3.5 分配接收和发送的包池与缓冲池 380
; O" c8 _0 T1 _$ t5 q3 d4 X! \16.3.6 OID请求的发送和请求完成回调 3818 D7 \( P' S! [
16.3.7 ndisprotCreateBinding的最终实现 385
  C. Q8 A8 i2 p16.4 绑定的解除 390
. p" ^% X3 F& i; E! o16.4.1 解除绑定使用的API 390
/ i* [! k- @8 _! ^16.4.2 ndisprotShutdownBinding的实现 392" h" H4 s* b, D8 `* a/ L- b1 \) V
16.5 在用户态操作协议驱动 3950 ]3 Y$ ~6 Q" k, I) s4 Q
16.5.1 协议的收包与发包 395  m1 g. ^1 L6 Y3 t4 s$ D  T) [; ^
16.5.2 在用户态编程打开设备 396
) H6 P- I- H# \" y( n9 i% |16.5.3 用DeviceIoControl发送控制请求 397
  }1 g1 b' Z& c5 S' V' @5 T- ~2 v* K16.5.4 用WriteFile发送数据包 399
7 P/ D4 _2 f: a$ E" W1 C16.5.5 用ReadFile发送数据包 400
; U& U( q4 K8 P1 {: U1 F16.6 在内核态完成功能的实现 402# E7 B* l0 y; b( f+ U* w1 a
16.6.1 请求的分发与实现 402
; f% O$ q1 N: e! L' N16.6.2 等待设备绑定完成与指定设备名 4025 Y# K0 D6 n/ L# Z7 q2 U
16.6.3 指派设备的完成 4033 Z' l. E+ O, A- M  H2 n- J
16.6.4 处理读请求 406
) v. e" _% H8 K1 S16.6.5 处理写请求 408
+ U) s4 R# i- a, L& S, X16.7 协议驱动的接收回调 412* j! ^3 q, n0 o6 f9 N! J! O
16.7.1 和接收包有关的回调函数 412
) Q! O2 Q- ?/ |7 i0 l' h. H, N16.7.2 ReceiveHandler的实现 413
  _* D8 |* ]; v/ U5 P16.7.3 TransferDataCompleteHandler的实现 417( K/ b1 ?0 Z2 D4 \, _# e% W
16.7.4 ReceivePacketHandler的实现 4188 A1 E- _% ?* P0 M3 C, g
16.7.5 接收数据包的入队 420$ W8 f4 R7 E# s" _# h% ^3 ]& i! x
16.7.6 接收数据包的出队和读请求的完成 422
0 z9 L' ]8 ^2 ^! U+ G# I# O; m& D
, ~: k% G+ I' E/ O第17章 NDIS小端口驱动 427
& y9 H! Y! F6 f6 V# }( y3 y. l, d  `+ M; S$ J
! J* U: ^, G+ _& L' h' Z- Q  |17.1 小端口驱动的应用与概述 427
, o* q2 N  L' D6 y* |* x17.1.1 小端口驱动的应用 427
* v' ~/ l  H$ d& O2 _! V0 z17.1.2 小端口驱动示例 428
+ F  t7 _) e, y$ P3 s7 d( s7 K17.1.3 小端口驱动的运作与编程概述 429
& y: R0 I3 G- t) m17.2 小端口驱动的初始化 4293 u) L4 M& G5 {
17.2.1 小端口驱动的DriverEntry 429
+ ?* B6 D5 U- c, J8 k  _17.2.2 小端口驱动的适配器结构 431& a0 N) k) w; _+ _- _% m1 F" @$ H. I
17.2.3 配置信息的读取 433
( T2 {! b- c3 s) k& b17.2.4 设置小端口适配器上下文 433
5 M7 D7 h: [+ a/ F17.2.5 MPInitialize的实现 434
2 x# M/ [2 [; I! B% _: C17.2.6 MPHalt的实现 4378 M6 b+ P, W% P: l. R0 x. c# n
17.3 打开ndisprot设备 438
) N% b7 x9 |0 o& S% i' O17.3.1 IO目标 438
% n9 p5 \: Y* s" B3 ]& x+ s17.3.2 给IO目标发送DeviceIoControl请求 439( n3 x7 n, x! s) Y5 _# y" h" Z
17.3.3 打开ndisprot接口并完成配置设备 4416 ?* |0 R5 [& F; H+ A
17.4 使用ndisprot发送包 443
7 U* r7 a4 E' I9 b0 w, e17.4.1 小端口驱动的发包接口 443
/ r, Z0 z2 n  m; k* D  I/ X17.4.2 发送控制块(TCB) 4449 d" ^+ D2 M4 I9 S/ b
17.4.3 遍历包组并填写TCB 4462 i" l* W. A3 c4 u, B- _2 p
17.4.4 写请求的构建与发送 449+ W8 D: P5 }3 K, ]7 C/ d( f
17.5 使用ndisprot接收包 4519 A" g: P5 J+ ^7 [! Z/ m& v0 o: q
17.5.1 提交数据包的内核API 4511 w5 h7 U9 h( q
17.5.2 从接收控制块(RCB)提交包 452* \8 L! [( C- R( I- O; `; L
17.5.3 对ndisprot读请求的完成函数 454
% G- H; n0 X, N& b17.5.4 读请求的发送 4568 W. `. s( I! {4 n" y4 x
17.5.5 用于读包的WDF工作任务 457$ E% e: g+ N( t7 M
17.5.6 ndisedge读工作任务的生成与入列 459+ D3 B( \! g/ q( i0 @! G% b# ]) N/ [
17.6 其他的特征回调函数的实现 461. p6 x- ~% Y) Y' q# b4 c2 j
17.6.1 包的归还 461, u. y( ^) ~( n) W8 b$ G  y6 y
17.6.2 OID查询处理的直接完成 462  [1 n5 H8 k( f+ I# j0 S
17.6.3 OID设置处理 4652 f+ J7 V% c' R* [! F
  U* x8 f3 O. K' e/ z# j
第18章 NDIS中间层驱动 467& C9 V. ~" O; b& d3 P0 u

' C7 U0 n& ?4 X+ I6 l0 n: m18.1 NDIS中间层驱动概述 467" m5 N4 p7 T6 Y+ @' w5 y
18.1.1 Windows网络架构总结 467
; b2 Y* |( R2 I$ x  ^* o18.1.2 NDIS中间层驱动简介 468$ n" @, u+ j: r% z. O1 X# l
18.1.3 NDIS中间层驱动的应用 4690 Z3 j* Y3 E, Y% O3 W
18.1.4 NDIS包描述符结构深究 470
1 a% [$ M+ t! m, A" x* u% U18.2 中间层驱动的入口与绑定 473$ R$ q5 u4 d" ^; U4 G
18.2.1 中间层驱动的入口函数 473
' Q% [, \9 E! {% n, o+ `0 W8 ^18.2.2 动态绑定NIC设备 474* A7 V/ Z- p9 Q+ E0 [& m: \8 Z  Z, Y$ D
18.2.3 小端口初始化(MpInitialize) 475
; x& H1 M7 U" l! y7 c18.3 中间层驱动发送数据包 477
1 S& \5 u1 |) C% S( x18.3.1 发送数据包原理 4771 h$ O' o1 m7 F) a/ e, i
18.3.2 包描述符“重利用” 478
2 Q1 R5 ?3 X# ~( q5 {* Y4 \18.3.3 包描述符“重申请” 481" F2 {' K2 U* o% ~  l: c
18.3.4 发送数据包的异步完成 482
" {8 [" `; t0 C8 |18.4 中间层驱动接收数据包 484$ o; j& V8 G. P8 s" U/ v$ T
18.4.1 接收数据包概述 484, D9 c, E  H* i4 P. n% S
18.4.2 用PtReceive接收数据包 485
/ d0 ?1 _6 ~/ S% N# J7 F18.4.3 用PtReceivePacket接收 490: ]5 ]; y& K6 R4 g% p9 h
18.4.4 对包进行过滤 4918 _$ q# o: [4 T. x# b+ |) G, @
18.5 中间层驱动程序查询和设置 494
7 w1 M& y' u, p* ?18.5.1 查询请求的处理 494
) D) Q* X! g' N' N. q3 O9 M18.5.2 设置请求的处理 496
5 J6 C9 A/ r9 y' O4 _& |1 V18.6 NDIS句柄 498
( u' t) `# Q# t% Q, \7 H1 |18.6.1 不可见的结构指针 498
/ y4 H8 [; P3 i5 _  m18.6.2 常见的NDIS句柄 4999 b9 |1 |! r3 }6 K! Y0 c
18.6.3 NDIS句柄误用问题 500
4 C9 Y2 r2 n# b18.6.4 一种解决方案 502) d2 @+ z0 ]) s; \* i( T
18.7 生成普通控制设备 503
; j* s7 ?) ?3 t3 a3 ?( Z, v18.7.1 在中间层驱动中添加普通设备 503
1 w$ x6 d$ o7 z18.7.2 使用传统方法来生成控制设备 5056 x0 V8 j1 O6 c3 l

  j6 ]& D2 J" D% d5 I/ Q第19章 IA-32汇编基础 511
: y8 i7 Q3 K' i0 d" r
: E9 [# e; I/ R8 U6 J# S19.1 x86内存、寄存器与堆栈 511
8 ]$ R0 q2 n8 ?9 w0 `3 y19.1.1 _asm关键字 511
% x3 o! M9 X5 h% M/ {19.1.2 x86中的mov指令 5122 p( F/ V; I" x* _; f1 M% R
19.1.3 x86中的寄存器与内存 512
' q( S7 v1 o! D6 J* x19.1.4 赋值语句的实现 513+ s# [' K. M& @; `# D/ ]. Q
19.2 x86中函数的实现 514
9 q! ~( I5 ^# N: y7 T& k19.2.1 一个函数的例子 5143 N6 G' y, }+ W4 k. y
19.2.2 堆栈的介绍 515' h5 L' x! |; q) k
19.2.3 寄存器的备份和恢复 516
6 `/ {& B2 c6 y3 H4 c8 K" T19.2.4 内部变量与返回值 518
, T% g9 Y. o6 u8 `) c19.3 x86中函数的调用与返回 521
; k) @2 Q* h) p% L19.3.1 函数的调用指令call 521
9 e! M# g2 }+ ?3 F. q9 ^& ?19.3.2 通过堆栈传递参数 521$ @% Y8 P' l4 b7 `' }( c# H: p
19.3.3 从函数返回 523
6 e0 K) G3 t- G9 I8 ]4 q- }19.3.4 三种常见的调用协议 524
# ], F- [+ p0 ]+ v% D19.4 从32位汇编到64位汇编 526
$ _( D0 I; Z: o5 _/ i7 q2 D* t5 ]19.4.1 Intel 64与IA-32体系架构简介 5263 S3 q' P7 x6 R- P+ o( Q
19.4.2 64位指令与32位指令 526
. `, L+ _& B' U5 @, ]! W19.4.3 通用寄存器 527
# \7 T9 g& a& b8 d9 _; O$ u8 b19.5 64位下的函数实现 528
: K" j* r& G2 L1 o2 e1 n19.5.1 函数概览 528
- E. n) V: r' L* r19.5.2 32位参数的传递 529
, Y* I; q9 b0 w% m8 ]( Q19.5.3 64位参数与返回值 5307 a5 U. I# J, t: G, L& B
19.5.4 栈空间的开辟与恢复 5318 _% U. w: h" I, T" r& V* }: W  W

. m7 ?& ^& {' b& D! F第20章 IA-32体系中的内存地址 534
0 K/ C% p) Q5 A5 i6 H$ o4 i
" m/ I( G- [( V  t20.1 内存的虚拟地址 534$ f  O% g; z/ U0 |! p9 }( M* k' d
20.1.1 C语言中的内存地址 534
4 J: {/ Z. N* C/ g20.1.2 虚拟地址的构成 535
3 c" k4 C- Z% O0 M20.1.3 段的选择 536
' v5 i: r' ?% {: o$ A20.2 全局描述符表和段描述符 538
; d: Z* X7 |7 L! j( F' c1 s' ]20.2.1 全局描述符表 538: f! {$ M; o' _& D% A, b! x3 Z! T
20.2.2 段类型 539. k* E! g! c' _& D) q
20.2.3 段寄存器与段选择子 5409 j! y/ l4 E" Z/ p5 R
20.2.4 64位模式下的段 541
8 ~( x1 H6 H7 z% @  C: a$ a; F& o20.3 分段编程实践 542
- N+ D' Q7 U0 C2 Q* k+ r6 ^20.3.1 系统表寄存器的结构 542+ D1 V) H1 d% a6 M$ J
20.3.2 在汇编语言中获取全局描述表的位置 543
6 @  ~" N/ T3 Y+ J5 r# m0 K20.3.3 调试范例:sgdt指令的错误使用 545. ~- B8 G5 i$ Y8 M& i% x1 t: n
20.3.4 在64位下获得全局描述符表 547
8 r* o- l- z- ^4 R20.4 线性地址基础 549
+ }3 I) p2 Z% n8 y& h. ?( P20.4.1 分页控制机制 550
& K! F% M5 k& U! E1 F* A/ F( U20.4.2 线性地址的转换 551
! h2 t+ w+ N: ]/ I1 X20.4.3 混合页面大小 552. V: g5 i8 c: t) S9 I' `. u* A
20.4.4 32位物理地址的页目录和页表项 5522 e6 V5 O, o2 d+ U0 B5 ~/ m% V
20.5 各种特殊分页方式 555
- F: a2 J* e. c) e+ `, [3 \20.5.1 PAE分页方式 555
8 N. f0 Y6 W8 l' j20.5.2 PSE-36分页机制 5582 B/ v  B" L7 O( J" n' @9 ?
20.5.3 IA-32e模式下的线性地址 559
* [. r3 l5 D% ?. i! K" D20.6 分页编程实践 562
* q0 P; X- z, ~1 o* B: ]1 x20.6.1 页目录和页目录指针表的获取 562. [9 P/ N2 q7 C, v6 g7 H& V- @
20.6.2 页表的获取 564
4 S4 \3 E' H- C8 e20.6.3 线性地址的结构 567
* a0 }. z4 _6 p7 g1 d" q$ s
. T$ |" V5 w: b3 K第21章 处理器权限级别切换 571- }; j+ C3 m, Q  |8 ], O

9 ?' G3 M. G! A4 }3 t21.1 Ring0和Ring3权限级别 571  ?; e% v! c; \* D
21.2 保护模式下的分页内存保护 572
8 n" z- S1 K1 S! p21.3 分页内存不可执行保护 574
; ^, H7 g- `4 L9 Y' \7 R21.3.1 不可执行保护原理 574
, t; E  Q. w/ W' W( S+ O21.3.2 不可执行保护的漏洞 575
" v; Q7 n0 o6 B; Q( J21.3.3 上机实践 577/ {4 ?* G6 e0 r3 _0 e
21.4 权限级别的切换 579# X. r# V4 t% D' n; v6 V
21.4.1 调用门及其漏洞 579
: h* L/ v% O8 s21.4.2 sysenter和sysexit指令 581
' j1 K6 i# j- B21.4.3 上机实践 583. I0 e1 \! F( _4 C

! J0 h7 w, K8 S- z% J第22章 IA-32体系结构中的中断 585
: P2 {& P- Y7 l& ?9 @
/ Z5 }% w6 v- }2 E7 L& G4 f22.1 中断基础知识 5855 G" w: R& B/ u5 B, p! p; E
22.1.1 中断描述符表 585
  R; E$ e( F. n' O+ `22.1.2 中断处理过程 587
3 g$ r! T$ q# M# V0 m: [# Y22.1.3 64位模式下的中断处理机制 589
% Q' N; ]9 s3 t/ s  X( g; v2 E22.1.4 多核下的中断 589
' g& U# \; t0 u3 h22.2 Windows中断机制 593
0 {6 q+ E+ {% `- }. n! ^22.3 中断编程实践 596
! _7 ]. y0 }6 u  E22.3.1 IDT Hook 596( X$ I  T( T7 J% k+ ?
22.3.2 巧用IDT Hook实现安全防护 598
& i' V9 g$ F+ `. I) J' S) E% V% Y1 [5 _5 a0 x: T
第23章 Windows内核挂钩 601
' W: p4 \, W% L: r( U% u( C4 o
/ B& Z8 v% O: E1 I0 d0 G23.1 系统服务描述符表挂钩 602. l4 s! D4 m" [6 f7 M
23.1.1 系统服务描述符表(SSDT) 602
3 i& U( m. {, X; L9 p' y% M23.1.2 系统服务描述符表挂钩的意图 603' f* H8 |: ?7 t( T* a
23.1.3 寻找要挂钩的函数的地址 6042 K7 m; G+ C* W; w% F+ a4 d' x
23.1.4 函数被挂钩的过程 605# b- ^: V* T6 |! T; Q7 f
23.1.5 具体实现的代码 606
4 @, ~  i& v$ X6 [1 m' I7 V4 `23.2 函数导出表挂钩 608) g4 `7 o) |5 Q" e3 J
23.2.1 内核函数的种类 608
. b9 ~8 x2 q2 T$ w23.2.2 挂钩IoCallDriver 610/ r0 o5 |1 [) K* f! Y/ X2 e0 W. @
23.2.3 对跳转地址进行修改 6117 |  w& F6 N  C  `/ u5 J7 a
23.3 Windows 7系统下IofCallDriver的跟踪 612
  X1 `! w9 {: W3 v& L. |+ T7 E, `23.4 Windows 7系统下内联挂钩 615/ T5 g; B, V  U7 y1 O
23.4.1 写入跳转指令并拷贝代码 6152 Z' V5 I" x! o! J6 |" y
23.4.2 实现中继函数 617
$ N; B- o9 x) W0 i9 D, ~* |' ~* p: T, O/ e
2 {3 j; z4 E) m/ Z3 e# h4 m
高 级 篇
5 I% l% I, N' O
& S- M% D. }7 o, g! C1 A第24章 Windows通知与回调 6202 T7 |- ]# I7 \+ \

; v7 z$ }1 i+ [! f& x7 E24.1 Windows的事件通知与回调 620
! C! c  X6 ]9 z( e- J* E24.2 常用的事件通知 6207 S. b% G. ^; ~4 A0 v
24.2.1 创建进程通知 621
9 U, O1 C2 O0 W, {4 K" K24.2.2 创建线程通知 625
  d) M, Q+ k' Z! F24.2.3 加载模块通知 626
) N- Q) a* @' t# X: }- M2 N24.2.4 注册表操作通知 629
- m" L9 k9 s  [24.3 Windows回调机制 636
+ Z1 D/ Y+ P1 A3 T! u24.3.1 回调对象 6366 O' m( z6 M3 j
24.3.2 回调对象的创建 637
0 M% f1 @* G7 C) i24.3.3 回调对象的注册 637  ^6 q! c2 g4 {* E( B  o1 W
24.3.4 回调的通告 638& X5 z  ]* H) Z# i0 Q$ M  y5 b
24.4 安全的死角,回调的应用 639
' ?1 j2 h  ~/ M* r" T$ J$ p) x. r" j' L1 g# a
第25章 保护进程 640
: W* B- ?+ ~/ x
* a0 u' ?0 K; o25.1 内核对象简介 640, e1 v9 ^# m) a% Q4 T* |% ]8 P1 w
25.2 内核对象的结构 641
- a. @1 ~' n" \; r% u6 J25.3 保护内核对象 642( G2 L# \9 R; o/ \9 \* F$ ?
25.3.1 处理对象的打开 643/ ~0 H6 `: \8 f# @7 M
25.3.2 处理句柄的复制 644
% D# a$ T  s5 B0 a) D( i25.3.3 处理句柄的继承 646
5 z# k" X0 n7 u# q3 J25.4 进程的保护 652
6 D. w1 f" \2 ^8 [& m' ]5 z5 O25.4.1 保护原理 652
5 W* `2 }6 T- P& J" X+ x# g! c25.4.2 Vista以后的进程对象保护 654  ?1 ^( l" T" t" K$ I" U, a, {% K
25.4.3 进程的其他保护 655
5 V) U9 n; s6 O7 ]3 v/ y& D: l+ \! Z2 O
附录A 如何使用本书的源码光盘 656& b+ ?$ o% g+ T7 m8 ]3 N5 q  b  G

. `6 j; ?9 L+ L6 Z附录B 练习题 6592 `' e7 x" N8 Y" N
0 ~( T3 h, U+ X: T
0 V1 G& o/ P0 q7 y9 W& M" b
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-25 11:01:33 | 显示全部楼层
会驱动的都是大神啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-27 22:34:32 | 显示全部楼层
哦,这个,额,不知道他讲的操作系统的内核指的是什么,这个,很好,我很想学
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-24 16:33:16 | 显示全部楼层
推荐 windows内核编程本身参考资料就很少 网络驱动等开发应用更是可怜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-18 14:54:42 | 显示全部楼层
都不能下载的啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-4 16:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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