鱼C论坛

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

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

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

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

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

x
TB1eC4MIFXXXXaOXpXXXXXXXXXX_!!0-item_pic.jpg_430x430q90.jpg
) F. D1 d5 T$ ]- \; `. h! w
7 u6 W( n5 Z0 y
书名:《windows内核安全与驱动开发》
# A0 Z# Y0 B: L8 a6 K& r$ w作者:谭文;陈铭霖* X8 s0 {9 P* h; Q5 H
出版社:电子工业出版社
, T% ~7 X' e, r# M出版年:2015年6月1日(第1版)
+ a$ s& l* e: b+ x定价:139.00元
: j0 j; _* P5 \, w" I! F$ F装帧:平装
3 V- y8 o5 g, lISBN:97871212621596 V1 Y. Y9 D8 Q6 K1 n
  p6 P8 w6 q5 C1 o
购买链接:
6 c# z4 x0 l2 M8 Z# {7 n/ E" W- G1 u- V& U! B* L: n& X. U

2 u. ~; e5 S# [' Z  W7 G- {7 ^; p
亚马逊 -> 传送门
5 D5 y  c2 r- D7 \6 R
5 N8 B* u: l" a- B: X9 {4 }当当网 -> 传送门; o$ c0 J- _$ F4 g- Z( C

/ |  |* E3 [# [3 R+ a; s京东 -> 传送门2 {2 S! s' H$ X. U
5 T" ]" l2 r3 g  X4 y) }9 z( s
天猫 -> 传送门
6 f* N$ D4 ^7 _& \3 }, _6 e! i  U
: [+ X9 ~# ?9 U4 g3 q+ Z6 K- d0 p% w: V9 K; N2 L. x7 G- y5 _
内容简介:
1 j3 F) J0 R6 E- V; M2 i4 P$ N, D" E/ _5 `( R6 ^

2 w' r* d1 W; `7 T5 p7 R
本书的前身是《天书夜读——从汇编语言到Windows内核编程》和《寒江独钓——Windows内核安全编程》。与 Windows 客户端安全软件开发相关的驱动程序开发是本书的主题。书中的程序使用环境从 32 位到 64 位,从 Windows XP 到 Windows 8 都有涉及,大部分程序不经过修改即可在 Windows 10 上运行。同时本书也深入浅出地介绍了进行内核安全编程所需要的操作系统、汇编等基础知识。- ?6 i7 t& e6 Q) U4 O7 ?( T# |$ U
6 Q* j2 e- M) s  {. C% {. P
本书共分三篇,基础篇囊括了驱动开发的基础知识,降低了入门的难度;开发篇介绍了在实际工作中可能遇到的各种开发需求的技术实现,包括:串口的过滤、键盘的过滤、磁盘的虚拟、磁盘的过滤、文件系统的过滤与监控、文件系统透明加密、文件系统微过滤驱动、网络传输层过滤、Windows 过滤平台、NDIS 协议驱动、NDIS 小端口驱动、NDIS 中间层驱动、IA-32 汇编基础、IA-32 体系中的内存地址、处理器权限级别切换、IA-32 体系结构中的中断和 Windows 内核挂钩;高级篇包含了汇编语言、操作系统原理、处理器体系架构相关的内容。本书是由长期从事这个行业的工程师自己写的,所以处处以实用为准。对细节的考究主要体现在对实际问题的解决,而不是知识的详尽程度上。) q  g. o+ y4 M9 m  ~
- O2 b; Z1 n; L+ \4 {# {8 k1 D
目录:, @! M9 J/ k5 h
6 s7 d0 Z4 j# v) W+ F/ R! T$ Z; ?6 l

7 M1 e5 z) k. D; C
基 础 篇 / n; U& m+ s8 ^$ T) P9 @
) D! Z1 G6 V8 C2 s
第1章 内核上机指导2
  a1 S- ?1 W, \' f& O3 X! }4 |
8 `( N* V3 x9 v6 y* M2 h6 V" C/ ?
1.1 下载和使用WDK2
2 B9 j- U, @2 T& F' X* l1.1.1 下载并安装WDK2 , d5 {, L6 _; K6 _
1.1.2 编写第一个C文件4 0 {  y6 j5 M/ B( o. T) Q8 L8 c6 C0 H
1.1.3 编译一个工程5 3 j" y( Z0 F) W' _4 N% k; l  U! V
1.2 安装与运行6
+ c4 x5 n6 H( z0 i* J! Y) Q" e  x1 `1.2.1 下载一个安装工具6
7 M) N7 S+ T$ b1.2.2 运行与查看输出信息7 1 ?8 I2 u# F) H
1.2.3 在虚拟机中运行8   c& ?% w% E: j% o0 u8 v/ A5 X, v
1.3 调试内核模块9
! W. _* l$ m% E; j4 P7 o1.3.1 下载和安装WinDbg9
( ~6 d. r& d4 D$ }7 G% C$ H+ j1.3.2 设置Windows XP调试执行9
  R) b, W4 }" o0 V1.3.3 设置Vista调试执行10 0 c3 v  ]- K6 F
1.3.4 设置VMware的管道虚拟串口11
1 ?$ ~: `$ Z. _1.3.5 设置Windows内核符号表12
* i* P: |* B7 B  x0 v$ Z1.3.6 实战调试first13
& T: b. w1 |0 f9 s3 I& M8 R8 Q  F% D! B6 n% @, a; E
第2章 内核编程环境及其特殊性16 ' e& G. Z6 H! w6 }# j
; W; r9 d/ s3 R! H
2.1 内核编程的环境16
/ }# [. o$ O. t* u2.1.1 隔离的应用程序16 " j$ Z( [0 d/ M2 @7 i9 H% p
2.1.2 共享的内核空间17
' @- e: V. G; K; c! W* [2.1.3 无处不在的内核模块18
9 S$ z$ `7 j) W, n2.2 数据类型19 1 x8 V3 t  r( W
2.2.1 基本数据类型19 ( d! v$ k/ V: v6 c3 w( f  ?
2.2.2 返回状态19 * Q1 x: a8 |  s7 [: z$ ?% f+ n
2.2.3 字符串20
  {& ^/ R  c3 ?2.3 重要的数据结构21
6 Y2 L, S5 L  ?. T2.3.1 驱动对象21
/ \" h8 U' o6 q. U2.3.2 设备对象22 0 c7 q# |' S8 p# u' h2 c7 |8 g$ y" Z
2.3.3 请求24 ( u( y1 S" n8 R. ]* K1 s% y
2.4 函数调用25
( I1 E4 A* q$ B& n' t2.4.1 查阅帮助25
% Z. t0 w* s6 ?) J2.4.2 帮助中有的几类函数26
; v1 i& ?5 @) b! I/ i  }$ C4 d9 U; I2.4.3 帮助中没有的函数28   ~8 M0 e& U  _& \
2.5 Windows的驱动开发模型29   j4 E8 \7 g7 ]$ M. d* `
2.6 WDK编程中的特殊点30
1 M3 F& y% S& R# N. x! g2.6.1 内核编程的主要调用源30 # C& t6 P# |6 l) m( H9 I
2.6.2 函数的多线程安全性30 ; z1 }. n! F+ E. F
2.6.3 代码的中断级32   T9 P: C6 q. W4 }* T* t. Z* J
2.6.4 WDK中出现的特殊代码32
7 C# D0 Q% F& ~* D4 B% o5 O, Y& c' b: x% G
第3章 字符串与链表35
4 s$ c- |7 w9 a: L0 O+ x# K+ q4 L6 @. o
3.1 字符串操作35
& M% {5 j+ C! D+ M3.1.1 使用字符串结构35 # z; S( s' r4 i8 Z3 x0 b- `
3.1.2 字符串的初始化36 0 C$ V5 L9 c6 q+ ^6 U2 o2 y+ |' }
3.1.3 字符串的拷贝37 7 }) _" Q- `. F9 B: x
3.1.4 字符串的连接38
1 m5 K& V7 B2 z3 f) j) @3.1.5 字符串的打印38 ' r- U7 T4 y9 |
3.2 内存与链表40 + P) W! D; ~8 X; r7 _+ P! _3 K. }
3.2.1 内存的分配与释放40   z8 S+ U: l& e2 j3 K8 E
3.2.2 使用LIST_ENTRY41 : N0 p9 R' s. k! L4 W" W
3.2.3 使用长长整型数据43
4 E. j+ Z; }- z( z9 X6 n3.3 自旋锁44
5 I9 ^, E+ K+ V+ @- e3.3.1 使用自旋锁44
/ \: {3 A2 E0 _( B2 F+ ?5 }$ D3.3.2 在双向链表中使用自旋锁45
1 H2 T( |$ q. U3.3.3 使用队列自旋锁提高性能46
& K% E% i7 u4 ]" |
/ I( n1 H, R4 G, e' C第4章 文件、注册表、线程47
) ]5 Z6 B0 D. G+ \4 D8 g
9 E3 G1 D- O/ D1 b  W8 N4.1 文件操作47 % j. W8 }9 M% c8 F7 {% }
4.1.1 使用OBJECT_ATTRIBUTES47 - T+ n. Q1 _4 e1 N/ K2 Z
4.1.2 打开和关闭文件48 4 K4 w. b) P0 {; A- d4 l
4.1.3 文件读/写操作51 7 }$ |8 b/ M1 v( L
4.2 注册表操作53 # Q7 e9 C4 K5 K- _& N% p" h- }
4.2.1 注册表键的打开53 3 h9 D' w( e; i$ J
4.2.2 注册表键值的读55
/ J5 s1 ~4 e) H; P6 f& R4.2.3 注册表键值的写57 - p* k6 f! r& C, Y
4.3 时间与定时器58 : M$ X0 i2 R, S2 [, e
4.3.1 获得当前“滴答”数58
  O4 s! r# e# t  H/ ?9 x: b3 g2 T4.3.2 获得当前系统时间58 & ^. Q: G5 k3 I7 W0 s- N5 `
4.3.3 使用定时器59
- J( ~$ S! E. e' k4.4 线程与事件62
  e8 j* d8 ^& ~7 o: p4 y4.4.1 使用系统线程62
8 B4 C, E$ k. u* r) _4.4.2 在线程中睡眠63
& e- m  h0 I& U2 d2 n4.4.3 使用同步事件64
  H( z4 V6 ?/ e3 {( `# l* I6 U& X( ]9 T) w- a% G
第5章 应用与内核通信67 4 m" F  Y% C7 D+ I) t
* X, Q8 }6 u0 x6 A, Y* G; Y9 e
5.1 内核方面的编程68 6 r& n, q$ l9 B) ~: z
5.1.1 生成控制设备68
- z% F# y" l7 K, {4 D3 o9 u; r0 @9 @5.1.2 控制设备的名字和符号链接70 " Q- l7 ]0 V5 @
5.1.3 控制设备的删除71 " M6 O: j/ O/ j8 m  M; _- {3 X
5.1.4 分发函数72
- K8 {( O! i, z. x; l' @. L5.1.5 请求的处理73 % i3 A$ N- x3 [- W9 F) e+ m
5.2 应用方面的编程74
4 G3 W9 A, k7 `) i3 [) ]5.2.1 基本的功能需求74
& ^+ @/ ]2 q  l# x. F% K  b5.2.2 在应用程序中打开与关闭设备75
! V1 `4 t% @: O5.2.3 设备控制请求75   z' l" ]3 O4 z1 x3 R+ g% c
5.2.4 内核中的对应处理77
- _3 ^% T+ R! G5.2.5 结合测试的效果79 . B$ }# D: I- i$ H3 |" B
5.3 阻塞、等待与安全设计80
" ~+ F. h! [/ x5.3.1 驱动主动通知应用80 ) S' u2 w! o: O6 |+ y$ }
5.3.2 通信接口的测试81
. K5 t% F9 `) u5 _: T5.3.3 内核中的缓冲区链表结构83 9 H7 I. w9 `" W0 ?+ `9 |1 I
5.3.4 输入:内核中的请求处理中的安全检查84
9 r- b2 `4 s+ W, z$ O0 k9 N5.3.5 输出处理与卸载清理85 . o( `. N, O% R1 c$ A* M
8 Z' k- x# i' O6 n; ]0 w3 ]6 Z# r
第6章 64位和32位内核开发差异88
& Z, a4 {% v$ L1 U# W, o% g8 h
# q! ^" C) Y' @" L3 C7 r6.1 64位系统新增机制88 + p9 o3 Q$ U7 }0 g' ~
6.1.1 WOW64子系统88 ! ?$ B; \# i& _: F% M! u* {
6.1.2 PatchGuard技术91
: i+ j, m* N7 f) @  h0 B6.1.3 64位驱动的编译、安装与运行91 ) c' @; [3 u# O- d2 E9 F
6.2 编程差异92 0 _  v$ S$ m) A
6.2.1 汇编嵌入变化92 ; @) q& r& ?+ T8 T$ `7 H2 I
6.2.2 预处理与条件编译93
" Y. Q3 P7 ^$ ^8 p7 R2 u% L0 W6.2.3 数据结构调整93 1 H1 z: {8 W8 l7 M* u
& J, Q6 H/ K( r
" h; _: @  ?$ Z# f+ }2 a8 d) h
开 发 篇 & g: T: A9 Z0 R4 N
+ F2 H4 w; q1 Z. A
第7章 串口的过滤96
! d- D  v1 m6 _. S6 `; M. D/ m
2 L5 o8 j$ K6 X" ?9 p7.1 过滤的概念96
2 H% @' y3 [$ u7 h( E7.1.1 设备绑定的内核API之一97
! c9 R7 w2 R/ D5 h$ q7.1.2 设备绑定的内核API之二98 8 x! Q1 K! B1 R1 T( k& y
7.1.3 生成过滤设备并绑定98
( {( k: r7 \- t! u: P: T7.1.4 从名字获得设备对象100
# t  ?+ ~2 u, N4 k5 k" }* j7.1.5 绑定所有串口101
0 E: e% d$ r/ ?- k- }7.2 获得实际数据102 " d6 a+ l; a% a! m
7.2.1 请求的区分102
2 r) P4 w4 M) i7.2.2 请求的结局103 9 c) r* Z  `, `7 ?' u& V
7.2.3 写请求的数据104 ! g/ z+ K5 n/ y4 _9 L$ I+ B3 E
7.3 完整的代码105 4 S, [* n- w# l2 ~
7.3.1 完整的分发函数105
2 g4 q) v+ y) g7.3.2 如何动态卸载106
7 Q0 ~* E2 x1 J  M/ B5 \7.3.3 代码的编译与运行107
$ @4 l! c; p2 C* v% J
4 R6 x: k* l! Z# F第8章 键盘的过滤109 ) H+ ^. K5 W4 w$ c9 `

  G6 D) p. e, c. M! c4 B8 T8.1 技术原理110
  r) C4 q. E) L/ I" ^8.1.1 预备知识110
9 I" d; x0 F9 m: X/ E8.1.2 Windows中从击键到内核110 2 E* v0 Z8 S; B1 e1 h) K
8.1.3 键盘硬件原理112 ! i* d5 a/ `) P- [* ^7 u
8.2 键盘过滤的框架112
$ }& O- V1 o7 o1 s8 |2 u6 o# u' I8.2.1 找到所有的键盘设备112
9 G: G# U0 i2 @4 r/ b1 Z2 t8.2.2 应用设备扩展115
$ l% b) M# u! O! B/ v+ X8.2.3 键盘过滤模块的DriverEntry117 0 l& c5 f, r; }3 ~1 @4 k6 b( {
8.2.4 键盘过滤模块的动态卸载117
; h8 C: r  V1 |% q0 k' H8.3 键盘过滤的请求处理119 1 o- w6 _  _6 _7 X. W" u% a
8.3.1 通常的处理119
- t' `, q; I3 f2 f8.3.2 PNP的处理120   X' L' {6 a4 w6 i3 O0 t. h
8.3.3 读的处理121
: l# M% Y( y+ @9 M8.3.4 读完成的处理122 ! K4 _4 q+ R! x3 b  z7 J4 T/ S
8.4 从请求中打印出按键信息123 . a5 ?, i5 u0 S0 c+ x
8.4.1 从缓冲区中获得KEYBOARD_INPUT_DATA123 3 n( |1 }/ K. N
8.4.2 从KEYBOARD_INPUT_DATA中得到键124
4 s# {5 s9 |( L; d- C4 J# O8.4.3 从MakeCode到实际字符124 ( K, d/ `( P6 b
8.5 Hook分发函数126
* M, O! _+ v; k$ i2 q* k; Q7 d8.5.1 获得类驱动对象126 9 Z' P& o9 h# g2 A& a  t+ q
8.5.2 修改类驱动的分发函数指针127 3 X+ }9 k4 f4 x1 o% {; |
8.5.3 类驱动之下的端口驱动128
( {& k1 M9 \8 S8.5.4 端口驱动和类驱动之间的协作机制129 1 @7 M3 V$ k. K5 F& W7 J
8.5.5 找到关键的回调函数的条件129
; u/ [. G" `. B/ T. g: d# E8.5.6 定义常数和数据结构130
) w! B4 {/ I3 V. d2 B  i4 G8.5.7 打开两种键盘端口驱动寻找设备131 + S' c" G# Y' C1 E6 X% n; \; Q1 F
8.5.8 搜索在KbdClass类驱动中的地址133
$ _/ }4 L! g) W* ^; h1 v0 q; G8.6 Hook键盘中断反过滤135 $ A& m1 C8 n) K: b9 \! q
8.6.1 中断:IRQ和INT136 4 D1 l8 y" f8 l3 }/ f- E2 @1 [
8.6.2 如何修改IDT136 7 S8 Q; |' G) q
8.6.3 替换IDT中的跳转地址137 , Z- x% {7 A% p1 @: \
8.6.4 QQ的PS/2反过滤措施139
# c4 u) o5 v/ J' P4 A$ i7 v8.7 直接用端口操作键盘139
% B9 _) m" N+ o5 Z3 Z1 v" f8.7.1 读取键盘数据和命令端口139
. t9 Y* a0 ~" B8.7.2 p2cUserFilter的最终实现140 ' s. k! e) }5 O( t, A5 A1 y) O

( g6 c3 i; F' p1 w2 J3 x第9章 磁盘的虚拟143 # `! ~6 f& [7 A; I+ n# _1 d

# C/ L! p- g( k$ H# p9.1 虚拟的磁盘143
2 b! ~6 j6 R3 ~8 ^9.2 一个具体的例子143 + G6 z1 F  W- C: n2 Q1 I1 n
9.3 入口函数144 1 V/ R! W1 u, Q1 u6 r: H  q
9.3.1 入口函数的定义144
1 i$ e3 T9 q- J' F9.3.2 Ramdisk驱动的入口函数145
9 ?; r# @6 Z% `( f, z8 b4 c9.4 EvtDriverDeviceAdd函数146 $ D5 E6 B: y, O7 g, I! G: ]! m8 a- y
9.4.1 EvtDriverDeviceAdd的定义146
8 ]2 W: m) q" s6 }3 }9.4.2 局部变量的声明146   a; I( m" h) \/ w
9.4.3 磁盘设备的创建147
2 v5 f/ }! \% e( V5 s: q8 ^9.4.4 如何处理发往设备的请求148 5 s$ E' b2 I  P
9.4.5 用户配置的初始化149 2 X% s; J* E1 Q- z' W" Q! n
9.4.6 链接给应用程序151
' I/ S) m' b  @4 k0 \( L4 o+ w( |9.4.7 小结152
' b5 O  r6 G0 u8 Z# [3 p0 C2 k9.5 FAT12/16磁盘卷初始化152
$ j4 C4 K5 {8 ?; P3 W9.5.1 磁盘卷结构简介152
8 {' Z7 [# t" F$ R! b5 R9.5.2 Ramdisk对磁盘的初始化154 . ~% K7 f" b* v  H' R! ]
9.6 驱动中的请求处理160 % ~  H# Y; j  c: v3 {5 C
9.6.1 请求的处理160 ! x8 k  S, U2 p# V7 A7 D  i$ t
9.6.2 读/写请求160
) r/ a" @4 H& S/ K* B9.6.3 DeviceIoControl请求162 ' Q. d. H9 c8 O9 m  X
9.7 Ramdisk的编译和安装164 5 j& F# d: V# q
9.7.1 编译164 1 f9 {5 e  I8 ^
9.7.2 安装164
1 ?, u$ ]! ?* |9 j) v9.7.3 对安装的深入探究165
) {4 ]* ~* m2 W9 H; I* a. `/ J( |0 _# B+ ?, ]
第10章 磁盘的过滤167 , d  H! H* l2 V1 P

# W5 J1 a6 s1 q" m% d1 }10.1 磁盘过滤驱动的概念167
- p# ^" T: s0 v1 B10.1.1 设备过滤和类过滤167 . e" d3 P4 S5 y0 V" O
10.1.2 磁盘设备和磁盘卷设备过滤驱动167
% C: y! T+ v. q% @8 a10.1.3 注册表和磁盘卷设备过滤驱动168
0 o1 z$ |! G/ n! }3 v10.2 具有还原功能的磁盘卷过滤驱动168
$ }3 [. V* ?: k1 {1 g# ?/ f10.2.1 简介168
  S. s: ~6 Y% K# ~- v5 I3 r10.2.2 基本思想169
* G7 K1 J' H) Z7 L: e* t+ W  ^10.3 驱动分析169 + k& H; g4 S( a2 M9 F4 `
10.3.1 DriverEntry函数169
: }, _; H& c( f( x: Y8 O$ ^10.3.2 AddDevice函数170 ! e) ?/ O9 |! G7 I! B5 v
10.3.3 PnP请求的处理174
$ Q( ?, @2 i5 ^6 I; F# J& c  Q10.3.4 Power请求的处理178
' \( U- D6 |& l0 a  ~( ?10.3.5 DeviceIoControl请求的处理178 ( ^1 o9 A  q$ o% I. L8 v
10.3.6 bitmap的作用和分析182
4 ]  T6 E# c' _& ~10.3.7 boot驱动完成回调函数和稀疏文件187 . c4 Z9 g- W4 H( m5 L( I) v! z9 C
10.3.8 读/写请求的处理190
# W- j) h4 j+ I' R1 A
, x- v+ ~/ x- Q9 ~. w5 s+ }第11章 文件系统的过滤与监控199 + S" H: F# [* [  A

' @5 c( z' S$ ^0 t( u11.1 文件系统的设备对象200
  ]' }8 C. ]8 w# {+ |11.1.1 控制设备与卷设备200
9 |+ p6 J' F+ u11.1.2 生成自己的一个控制设备201
2 G/ |" }  J, q4 O) P4 {* \  j11.2 文件系统的分发函数202   g2 \" L5 g0 a& n% f' ]2 }. f( g
11.2.1 普通的分发函数202
3 _/ P* X, l/ O11.2.2 文件过滤的快速IO分发函数203 1 ]2 N) j1 B3 \
11.2.3 快速IO分发函数的一个实现205
; L, H0 r& S" ~# j1 ~) Y7 \: Y! O, A5 y11.2.4 快速IO分发函数逐个简介206
" o3 t4 W* j# o3 l8 Z/ W; K11.3 设备的绑定前期工作207 + K9 v- L$ m7 j4 t1 L! {  \; \
11.3.1 动态地选择绑定函数207 ' i- M' t% L: v, _
11.3.2 注册文件系统变动回调208
) c5 r7 r; k9 `, p  Z11.3.3 文件系统变动回调的一个实现209 ' y/ g6 R  {/ b. g! P: T
11.3.4 文件系统识别器211
6 y' D% \) m: I  L7 _11.4 文件系统控制设备的绑定212
# v5 o0 Z: Q% t1 o11.4.1 生成文件系统控制设备的过滤设备212 7 E4 O6 E; O( u/ a1 q8 L. f1 P2 \
11.4.2 绑定文件系统控制设备213
" g6 Y7 A* @& C- W: G11.4.3 利用文件系统控制请求215   q7 G4 }- i" P4 \7 s  C# |0 i
11.5 文件系统卷设备的绑定217
' V" c# I0 @2 ?" K2 y" [11.5.1 从IRP中获得VPB指针217 8 P, h. a, q- F! O! N5 B* ~
11.5.2 设置完成函数并等待IRP完成218 ' l7 v, U4 x( i- n$ [" U
11.5.3 卷挂载IRP完成后的工作221 $ L# `( d& M0 P% W
11.5.4 完成函数的相应实现223 ' s( U* N  y: r; @6 q
11.5.5 绑定卷的实现224
- }! t0 s" D) \, \% e- [( w: O11.6 读/写操作的过滤226
- F2 Q/ h: ^% }* Q! {11.6.1 设置一个读处理函数226 2 \3 X9 \% N) W
11.6.2 设备对象的区分处理227 % o: z) w- J, `  M8 j6 P. [
11.6.3 解析读请求中的文件信息228
3 Q% o8 J0 y& k8 y7 f& \1 @11.6.4 读请求的完成230
) ^* f2 c9 E$ ], o11.7 其他操作的过滤234
$ q9 p5 e. @$ C$ `11.7.1 文件对象的生存周期234   K/ a' G& F: @1 A$ T' P
11.7.2 文件的打开与关闭235
" \! z8 [+ |) `( k5 l9 @11.7.3 文件的删除237 / F& l8 L" P7 z  ]: _  `
11.8 路径过滤的实现238
% r% q1 J! @' C2 Q! g11.8.1 取得文件路径的三种情况238
" k; B1 n, X# S% Z- r0 I, w11.8.2 打开成功后获取路径238
6 _4 W  g" c! L* l* `11.8.3 在其他时刻获得文件路径240 3 D  L! m- u5 F6 z9 w& b6 L
11.8.4 在打开请求完成之前获得路径名240
( }; A6 L# |, w$ A11.8.5 把短名转换为长名242
. d* \- x  Q6 x8 n11.9 把sfilter编译成静态库243
- q9 k! v; n7 P. F' v11.9.1 如何方便地使用sfilter243
$ B; P" G. Z( S; y11.9.2 初始化回调、卸载回调和绑定回调244 # L8 V4 O1 E! J
11.9.3 绑定与回调245
1 T0 l2 T3 d8 `( D2 u11.9.4 插入请求回调246
, f& Q6 |7 O2 C1 y' R; C0 b4 d11.9.5 如何利用sfilter.lib249
3 `8 i9 h( n. z" j5 ?4 j  A
% _( E% K+ E( H第12章 文件系统透明加密252
% m. x: s; Z3 v! M, Z9 H5 Z4 `/ W2 l. y! M  P/ N
12.1 文件透明加密的应用252
: X3 G9 e/ H5 D% m4 x8 F12.1.1 防止企业信息泄密252
1 D! k3 N  c, H1 f( |) S9 _12.1.2 文件透明加密防止企业信息泄密253 1 Y& a2 d7 S9 _# @9 e& z! u
12.1.3 文件透明加密软件的例子253 8 U  C  B3 w# i& m
12.2 区分进程254
9 p1 R( `/ l( [4 a6 E5 C12.2.1 机密进程与普通进程254
$ }8 O- x& V; s1 R6 ?  c12.2.2 找到进程名字的位置255
% h# O4 E' n: u; M, n4 o12.2.3 得到当前进程的名字256 . E5 m1 n7 F7 e  J* Z
12.3 内存映射与文件缓冲257 % j; e% n) X: J
12.3.1 记事本的内存映射文件257 / }/ S, B" V2 V4 ~, y0 f
12.3.2 Windows的文件缓冲258
( I, }' V8 O/ W0 Z) Q( A% U12.3.3 文件缓冲:明文还是密文的选择259
7 a( u( y6 C3 [12.3.4 清除文件缓冲260
* F% A/ n2 O8 }; V/ H. ?12.4 加密标识263! l! v6 q' h1 ?6 _0 W$ L& S0 T
12.4.1 保存在文件外、文件头还是文件尾 263: b; |. n) C3 s$ c; G% q) n
12.4.2 隐藏文件头的大小 264
. \3 K; s& L7 I6 s, m; O12.4.3 隐藏文件头的设置偏移 2665 I# M8 O- Q* o3 A0 Y
12.4.4 隐藏文件头的读/写偏移 267
+ a% a# D" k# N( ^' b12.5 文件加密表 267
0 M) Z  j% d  Z12.5.1 何时进行加密操作 2672 [0 N7 m$ z( g  B
12.5.2 文件控制块与文件对象 268
) y  ], w' v, u8 \  `12.5.3 文件加密表的数据结构与初始化 269) r5 \7 T& k* O0 s  }
12.5.4 文件加密表的操作:查询 270
* ~7 b: a( q! U* u. d, |4 ~9 H, b12.5.5 文件加密表的操作:添加 271
$ q  l) `6 S7 u* ?% E1 ^12.5.6 文件加密表的操作:删除 272: K& I9 g: v) \
12.6 文件打开处理 273% w$ K4 _1 ~& W* y
12.6.1 直接发送IRP进行查询与设置操作 274: r. ~3 f' B3 X0 q. |
12.6.2 直接发送IRP进行读/写操作 276
" ]1 x! e: D4 ^: N12.6.3 文件的非重入打开 277
/ v6 S% s; g3 G# n  ~7 L' S12.6.4 文件的打开预处理 2800 L  d" a- j7 m: ]! p8 _
12.7 读/写加密和解密 285
3 s( y, V4 h/ W$ K9 j- h. {12.7.1 在读取时进行解密 285; R: K& h" g* S
12.7.2 分配与释放MDL 2860 f% V+ R) C' @
12.7.3 写请求加密 2875 V# d  a' d* d% M! F2 ]
12.8 crypt_file的组装 289
" ~) Z- u( m% `1 h4 b% N12.8.1 crypt_file的初始化 289
1 y/ P1 [( ~1 }: |. F$ r0 z12.8.2 crypt_file的IRP预处理 290* |5 Y5 X3 F" b7 K$ I/ @( l, K( a
12.8.3 crypt_file的IRP后处理 2933 x, `4 W& ?* [3 |. C) Z1 \! W( f" I
3 \( ]! s9 D3 R2 Z+ _0 U6 [
第13章 文件系统微过滤驱动 297
  \4 z; u7 \# F  u5 E2 w' `/ u4 }; W4 ?' B
13.1 文件系统微过滤驱动简介 297
& S/ r, m: q& s# t13.1.1 文件系统微过滤驱动的由来 297
6 B0 ~% M  F# @& A+ Z! g, _6 v/ V13.1.2 Minifilter的优点与不足 298
/ q* @. x1 t+ d' q& w0 |13.2 Minifilter的编程框架 2986 x5 @, J9 F' D) j( i2 f
13.2.1 微文件系统过滤的注册 299
; g* S9 l) v. o  |- `" y9 s13.2.2 微过滤器的数据结构 300% x  F$ i. Y2 D- f% e
13.2.3 卸载回调函数 3037 ]9 a/ A5 E/ H# u0 z
13.2.4 预操作回调函数 303
# T7 M3 O# e; |, S! p" [13.2.5 后操作回调函数 306
- o0 x( N: n9 [& H# }/ c% T13.2.6 其他回调函数 307
& A* {" q4 B6 [2 h; }$ u13.3 Minifilter如何与应用程序通信 309
# ?4 f9 Q7 |  y% ~& s: B13.3.1 建立通信端口的方法 3100 }! x! s5 @8 \) q, U& ?; A2 v
13.3.2 在用户态通过DLL使用通信端口的范例 311
" V$ x; b; \! W  m13.4 Minifilter的安装与加载 314
- V! F- K3 u. b; z9 {2 t5 L13.4.1 安装Minifilter的INF文件 3141 r5 q3 M* ~. N* c1 U" v
13.4.2 启动安装完成的Minifilter 316
0 \( J* n! V& [( A7 X/ ~6 W1 M' O9 @/ s( g  O& H6 o
第14章 网络传输层过滤 3177 d, |4 V5 O5 i& m' Y; G. t
. I9 E) i9 M& y$ N
14.1 TDI概要 317
' i/ d# {) V9 {: r0 a) {14.1.1 为何选择TDI 3175 E- i- N: I/ `4 v- \1 W
14.1.2 从socket到Windows内核 318
3 n( S9 A3 Q  i0 @6 q3 E14.1.3 TDI过滤的代码例子 319
6 K! k. h  b9 ^+ y+ \9 }% Q: b14.2 TDI的过滤框架 3197 d4 T: l$ n+ H! C7 ^% h/ z
14.2.1 绑定TDI的设备 3197 e( E8 {2 [8 c" b4 Y. [
14.2.2 唯一的分发函数 320/ u& k+ ~' }; F0 T3 z8 w
14.2.3 过滤框架的实现 322' F* B4 z. D6 u& `
14.2.4 主要过滤的请求类型 3230 ^7 a9 U2 I) f5 D  G
14.3 生成请求:获取地址 324/ Z* H8 Y0 ~4 N* `5 E4 E/ d
14.3.1 过滤生成请求 324" p/ o( l0 b! z8 `( h& B/ U# x1 f
14.3.2 准备解析IP地址与端口 326
4 a. {9 \# t- t# h% }( v14.3.3 获取生成的IP地址和端口 327
: s  _5 T4 _* Z- @( n# V$ ^14.3.4 连接终端的生成与相关信息的保存 329& d& k2 C1 F+ A& W# [& e* j% a& n, e' J3 m
14.4 控制请求 330. d8 e% @) @! y" X5 q3 O
14.4.1 TDI_ASSOCIATE_ADDRESS的过滤 3303 h% V6 {& }* y8 A+ k% B
14.4.2 TDI_CONNECT的过滤 332
0 @- F7 s1 L2 ?& \$ ]7 d* ?. x# x14.4.3 其他的次功能号 333
$ D# q& L  @: u4 f% q. H) c14.4.4 设置事件的过滤 334% T2 u, \) ^7 ]+ h+ V; C: r
14.4.5 TDI_EVENT_CONNECT类型的设置事件的过滤 3366 H# ?; B  D4 F" n& m
14.4.6 直接获取发送函数的过滤 337
- v' h* t1 ?' D+ a( l1 Z7 G4 r14.4.7 清理请求的过滤 339, [$ k. u" H/ M1 S+ P* V7 L) F
14.5 本书例子tdifw.lib的应用 341
5 L% ?9 k3 {* `4 t4 _. g7 P$ t$ \14.5.1 tdifw库的回调接口 3416 V9 `, N, y7 y  p+ Q7 L) `& q1 U( ~
14.5.2 tdifw库的使用例子 342
. H9 D- I* `- n5 u# q4 S; x+ M. L. Y8 ^0 g  _0 Y. x+ M* M, H) x
第15章 Windows过滤平台 345# D6 B; H' Z% R0 p8 C/ L3 s
; [9 R) [1 I8 {
15.1 WFP简介 345$ L4 B7 Y2 V( i8 [6 r
15.2 WFP框架 345' I' V: _0 y- N, b% K  @
15.3 基本对象模型 347, |6 T& n3 P9 n" A  @
15.3.1 过滤引擎 347
$ C$ Z! M5 E3 ?. t1 a15.3.2 垫片 347
; g7 C7 E6 @$ _8 l; Y15.3.3 呼出接口 347# u2 T& Z% P% R" P& [8 \
15.3.4 分层 348; ^+ A3 s, I6 d, P$ W7 B4 X" [: E
15.3.5 子层 349% }% P4 q- P( W: ]$ \4 m
15.3.6 过滤器 350+ C  T$ A+ ]& S, r- f$ s1 I! t5 m
15.3.7 呼出接口回调函数 354
6 O+ i; F5 V$ G5 r8 p9 Q6 S15.4 WFP操作 359
) ]1 y2 N% _: n5 N6 }15.4.1 呼出接口的注册与卸载 360
) J, m6 o; h( A8 {15.4.2 呼出接口的添加与移除 360
; _5 x6 Z5 I" V: r15.4.3 子层的添加与移除 361
2 T8 P& ~1 x/ l; P' R7 v. I15.4.4 过滤器的添加 3625 d' |. f2 l' H; c1 j' B1 F
15.5 WFP过滤例子 362/ z, T' x& k. V; D: _

" b5 `7 @2 v1 n+ q! j: R/ u0 F5 V& m第16章 NDIS协议驱动 370
- T  S% N/ g$ _1 F1 T5 M+ l) f. U1 V$ g9 ?1 e; p0 @
16.1 以太网包和网络驱动架构 370& Z/ P7 {: T1 R" B
16.1.1 以太网包和协议驱动 370
% y: F  e1 C% t16.1.2 NDIS网络驱动 371
: i5 \0 H3 {, l! K: a5 [* Y- d16.2 协议驱动的DriverEntry 372; v- ~& }, S- c  ]
16.2.1 生成控制设备 372
' [3 a$ o0 q0 G16.2.2 注册协议 374, M# s! N4 {" v1 l
16.3 协议与网卡的绑定 375
# q$ }* g% v/ Y  {) ~* Z16.3.1 协议与网卡的绑定概念 375  T+ `' }2 r5 d* a3 Y7 A0 R+ S
16.3.2 绑定回调处理的实现 3765 `9 G" ]/ _, Q$ a; ~
16.3.3 协议绑定网卡的API 378/ [& ]- d0 o& [; x3 L! G
16.3.4 解决绑定竞争问题 3795 J$ k; ^% g4 l: R  N% G
16.3.5 分配接收和发送的包池与缓冲池 380: |) J( a. R: e4 {, Z  i
16.3.6 OID请求的发送和请求完成回调 381; c% O% X4 Y" i' q' \' p
16.3.7 ndisprotCreateBinding的最终实现 3859 S7 [& }, L1 C$ P; Q5 p' R
16.4 绑定的解除 390
' a  z6 I9 q1 G& h4 L16.4.1 解除绑定使用的API 3909 J# O, I4 U% c" K2 A6 m
16.4.2 ndisprotShutdownBinding的实现 3925 x' i/ |  P& m/ e! d! K
16.5 在用户态操作协议驱动 395! x0 X1 x( `9 {. I+ J( [5 z3 Z: U
16.5.1 协议的收包与发包 3956 c, l' z" q! e: m
16.5.2 在用户态编程打开设备 396
" Z5 W6 m6 v% ^4 p16.5.3 用DeviceIoControl发送控制请求 3973 M6 c" A# F7 Q" I. L$ C6 v( c
16.5.4 用WriteFile发送数据包 399
3 C2 e5 G/ w: a( @, S" s16.5.5 用ReadFile发送数据包 400
  z- i5 g; r; {1 H# E! C16.6 在内核态完成功能的实现 402/ G5 {: v& c; W- ^4 I9 h
16.6.1 请求的分发与实现 402
( d/ n. a' @# h- y' ?  T1 d16.6.2 等待设备绑定完成与指定设备名 402# I/ B* ^' Y! i7 x! C2 Y
16.6.3 指派设备的完成 403% H9 ~: ^! _/ _" X' H: h
16.6.4 处理读请求 406
2 Z. l' j: ^6 {/ \: n; |16.6.5 处理写请求 408
; T7 p% c, K+ y) X3 l! C16.7 协议驱动的接收回调 412
, N5 y% m0 Q" A& I3 S16.7.1 和接收包有关的回调函数 412
6 X) V2 C3 h( b! c& \16.7.2 ReceiveHandler的实现 413
* x$ ?; W# Q( |8 V16.7.3 TransferDataCompleteHandler的实现 417
; J+ c' i% E. ]3 x& M. A16.7.4 ReceivePacketHandler的实现 418' K( |0 D9 P& [* w- ^4 x
16.7.5 接收数据包的入队 420
3 v, v. ^; S( s" b$ Z5 S/ A- ^) D16.7.6 接收数据包的出队和读请求的完成 422/ T; `; b" n# G
! K0 }: q  q0 d1 K! _; ~
第17章 NDIS小端口驱动 427
; I# J# ]4 ^9 l1 X# G* [; [8 M/ v. G+ c8 f( g
17.1 小端口驱动的应用与概述 427
) z  `! \+ X/ e: I17.1.1 小端口驱动的应用 427& [8 r% G& ~8 X# a( j9 m
17.1.2 小端口驱动示例 428* @8 c7 g1 a  m* M
17.1.3 小端口驱动的运作与编程概述 429
& J/ N6 _5 A1 V  y1 @0 a17.2 小端口驱动的初始化 4298 D" S& y; H& U6 q- \9 M
17.2.1 小端口驱动的DriverEntry 429$ p+ y1 r, h" N6 Z
17.2.2 小端口驱动的适配器结构 431( e) P- N  g6 S" B& Q2 z' b
17.2.3 配置信息的读取 4336 L; w3 r& T1 ~: k
17.2.4 设置小端口适配器上下文 4332 [9 z2 J! W) }9 [8 U; Q7 G# j
17.2.5 MPInitialize的实现 4349 b$ P* N2 o! k
17.2.6 MPHalt的实现 437' Y  S4 B/ X/ U
17.3 打开ndisprot设备 438$ S: J$ Z7 O6 L6 U& x
17.3.1 IO目标 438
- F' E; Q8 n# S$ i& y, M4 x+ j+ P" N17.3.2 给IO目标发送DeviceIoControl请求 439
" l/ a7 x. B0 ~, T  e17.3.3 打开ndisprot接口并完成配置设备 441
$ h7 t; m% l# I* n7 H/ }. P17.4 使用ndisprot发送包 443
9 P) X% f* l; T( Y# \5 l17.4.1 小端口驱动的发包接口 443. ~( H7 h# e$ J6 O4 q' S2 r2 F# r
17.4.2 发送控制块(TCB) 444
3 }: T  `) R9 N2 S8 l  u) C7 A17.4.3 遍历包组并填写TCB 446
# F( f% N6 W& n* S17.4.4 写请求的构建与发送 449, Z% W9 |& B8 ]) p
17.5 使用ndisprot接收包 451
! P1 g! u0 L- n4 s' Z' d/ D17.5.1 提交数据包的内核API 451
+ W) s4 C* n' n& L7 [17.5.2 从接收控制块(RCB)提交包 452
3 U7 M# Q% _5 i" G17.5.3 对ndisprot读请求的完成函数 454: c3 q. G0 \: J8 R4 U0 D
17.5.4 读请求的发送 456: M+ y7 D! v3 I4 q* [: Y2 H1 ?
17.5.5 用于读包的WDF工作任务 457
) i/ ?) X4 ~9 b' m5 l17.5.6 ndisedge读工作任务的生成与入列 459
4 z0 U0 {! X3 p# p2 w17.6 其他的特征回调函数的实现 4613 L7 _- D$ l% \2 h+ U
17.6.1 包的归还 461# z+ x! {( T+ c9 m
17.6.2 OID查询处理的直接完成 462
4 C4 [( Q1 q/ d7 O: z* r  ]17.6.3 OID设置处理 465
! n* m) K( `& {5 B
& D5 t& r" M  w: O' g: {第18章 NDIS中间层驱动 467
3 B2 a4 l- ?2 \5 P8 q# e3 X  Q0 _% V6 ]2 x8 [
18.1 NDIS中间层驱动概述 467
7 J& M2 h0 r$ B- [' }  P# o18.1.1 Windows网络架构总结 467
4 _% F( {) d  u4 A- t. ^18.1.2 NDIS中间层驱动简介 468
) q0 U5 M9 n, G18.1.3 NDIS中间层驱动的应用 469
: O  Y  C" o! V- W18.1.4 NDIS包描述符结构深究 470  ~( E5 v) N8 R1 ]. M( q
18.2 中间层驱动的入口与绑定 473& ~8 M2 l+ S: o3 F$ Z# F
18.2.1 中间层驱动的入口函数 473
5 i  T8 B3 {# P* T) ?18.2.2 动态绑定NIC设备 474
8 f# o( a/ T5 h& D18.2.3 小端口初始化(MpInitialize) 475+ M/ t* ]; [( Y0 Q
18.3 中间层驱动发送数据包 477
. L. U) y  w7 z3 p. ^, _18.3.1 发送数据包原理 477
6 `1 B8 Q  F# [; Q, O18.3.2 包描述符“重利用” 478
/ H5 R0 v1 y* w18.3.3 包描述符“重申请” 4817 E# B- a8 {' H. P( U7 {  M
18.3.4 发送数据包的异步完成 4820 C  Y9 s! H- v! n
18.4 中间层驱动接收数据包 484
4 y: ?( }* T/ A# K" g& W' ?( Y18.4.1 接收数据包概述 484
) N; T: S: `$ M2 Q18.4.2 用PtReceive接收数据包 4852 C5 R, s7 x( _3 L: r
18.4.3 用PtReceivePacket接收 490; U6 @5 B1 H+ g. ?/ o0 L
18.4.4 对包进行过滤 491
8 U( u+ i4 h; H& Z' o+ f18.5 中间层驱动程序查询和设置 494
2 k7 Y- p: Y9 p+ {9 _2 O$ N% a- y6 G18.5.1 查询请求的处理 494
5 N% E- ^- P8 j! Y& J" ~18.5.2 设置请求的处理 496
. b2 |0 Q5 H7 t, {1 }% y+ ]/ N: e18.6 NDIS句柄 498! B$ R0 w( B1 d# e/ D( V' X6 \9 e
18.6.1 不可见的结构指针 4987 @) @! K+ L( D& s2 m) {
18.6.2 常见的NDIS句柄 4997 a) m- N" ]% W& {6 a
18.6.3 NDIS句柄误用问题 500# J3 `4 O  _) L2 F# |: k5 |* f2 @
18.6.4 一种解决方案 502
' t- S/ A- W0 T% |18.7 生成普通控制设备 503
+ b( p; y) s, l+ t4 z0 a2 [0 J18.7.1 在中间层驱动中添加普通设备 5031 _# O4 e1 ^" e9 p1 w' x* S( A
18.7.2 使用传统方法来生成控制设备 5051 D( x+ o! Z/ d5 H! `

# C* I( I. e6 K  g) z4 l第19章 IA-32汇编基础 511
$ V( B2 h( H% R" Q$ _0 q
# E) d  ?$ y/ i. S19.1 x86内存、寄存器与堆栈 511
0 r- }: k) z2 C/ g$ {19.1.1 _asm关键字 511
7 t* Z- T1 u. K4 r19.1.2 x86中的mov指令 512: Q% |) p/ n, a, j- `
19.1.3 x86中的寄存器与内存 512
" l* Q* ]8 j3 p* s6 a$ y3 Q19.1.4 赋值语句的实现 513! R% C4 H5 O5 W( W& t
19.2 x86中函数的实现 5147 ?! M* {( V0 |4 Q1 g1 X+ T6 \/ `6 q
19.2.1 一个函数的例子 5147 H! Z5 C2 M  a8 G' d
19.2.2 堆栈的介绍 515, @: D8 y+ T( P
19.2.3 寄存器的备份和恢复 516
! E( ~2 u  k% `7 k3 P19.2.4 内部变量与返回值 518
0 S2 \: z. q& n% E19.3 x86中函数的调用与返回 5211 I6 R" \% c* E
19.3.1 函数的调用指令call 521
; E2 B" A7 X) A( s- |19.3.2 通过堆栈传递参数 521
! O/ W  g$ R% ?5 |# \' b) h19.3.3 从函数返回 523
2 ^& N& x; K$ \% a19.3.4 三种常见的调用协议 5240 N. j/ j; c# n9 x: {- ^
19.4 从32位汇编到64位汇编 526
. N2 ~/ Z6 n0 V2 c8 w3 q& |19.4.1 Intel 64与IA-32体系架构简介 526
$ k' V( I, i5 `/ K19.4.2 64位指令与32位指令 526, B, S) i5 @9 |4 i  Q4 I
19.4.3 通用寄存器 527
: S, i" b0 L$ j19.5 64位下的函数实现 5288 m6 U& S! Q1 h$ S5 u
19.5.1 函数概览 528
* U8 i% H2 N- U0 t4 t  ~$ }19.5.2 32位参数的传递 529% h$ j. a4 F& t
19.5.3 64位参数与返回值 530
" {& y: d+ p6 b19.5.4 栈空间的开辟与恢复 531  O% k8 F- o1 i
3 g: G: k7 p! g/ ~0 O
第20章 IA-32体系中的内存地址 5348 |# A$ `/ q% S' Y' D4 [' Q

1 I9 Q) J$ }4 p7 t- w0 _+ ^* S20.1 内存的虚拟地址 534
9 o* c0 d) T' T/ `( M20.1.1 C语言中的内存地址 534
4 L# _# P  x# Y3 l: H0 @20.1.2 虚拟地址的构成 5357 I# p9 h8 J; b! P' X$ s
20.1.3 段的选择 5364 m3 E3 n# ]7 `: |" T* J7 T
20.2 全局描述符表和段描述符 538
3 l5 _0 o& l5 D7 W0 k) }  G+ o. `& c20.2.1 全局描述符表 538
1 d5 G, `: O1 n: @, Q- M20.2.2 段类型 539
, X3 M- R; }* w; y  _, o, c9 o20.2.3 段寄存器与段选择子 540
9 t& d1 W# v- q6 |! m: O3 c- F' A* z20.2.4 64位模式下的段 541
" `5 M* l0 T' r% j9 Z20.3 分段编程实践 542; I* ]* {4 I) N  v6 ]9 ~7 B) f
20.3.1 系统表寄存器的结构 542
0 I* u" ?& I: }20.3.2 在汇编语言中获取全局描述表的位置 543  r+ L6 n. N+ P" L
20.3.3 调试范例:sgdt指令的错误使用 5454 U, H7 Y: y9 I, i4 b
20.3.4 在64位下获得全局描述符表 547& ]* F3 b' Q+ ^8 u( t+ s
20.4 线性地址基础 5498 T3 C- j3 q% E3 \
20.4.1 分页控制机制 5502 {" i% D: d1 ]3 a+ |* K* `
20.4.2 线性地址的转换 551
& p* Q3 _$ a$ H7 }" {5 |& r4 }20.4.3 混合页面大小 552& X' v( }* E" c3 e$ S& [
20.4.4 32位物理地址的页目录和页表项 5527 f1 {% ^5 k* B
20.5 各种特殊分页方式 555
9 b! r1 E( a. M6 L  N20.5.1 PAE分页方式 555
! q$ ?, Y5 C7 I: L. f1 D% [20.5.2 PSE-36分页机制 5580 E2 R7 y) u2 _9 m
20.5.3 IA-32e模式下的线性地址 5599 U1 E+ d8 J- V
20.6 分页编程实践 562
3 \) v- v7 J" U# Q20.6.1 页目录和页目录指针表的获取 562% H* v" t1 `& C9 Q
20.6.2 页表的获取 564
$ I9 ?% m2 j7 ?! [) }- g' ]20.6.3 线性地址的结构 567
9 C( |; {3 |) X$ O9 v1 S% u' }4 Q  Y7 a6 x  o& e* l* w9 @
第21章 处理器权限级别切换 571
; _8 a- X' u" f4 h: y1 Q9 Z8 V: l' h/ x8 l  G+ p9 o. g% D2 |
21.1 Ring0和Ring3权限级别 571
: B- N0 H0 D# D+ _21.2 保护模式下的分页内存保护 572: D9 x* q. V' B0 ]
21.3 分页内存不可执行保护 574
, w" J: f+ z" t: U1 M; Y21.3.1 不可执行保护原理 574
) {% K0 }+ ~1 x5 u7 `  S' J21.3.2 不可执行保护的漏洞 5754 O4 w; u; `/ |' A- _6 }! S; G
21.3.3 上机实践 577+ ^9 R# C* Z0 I: H+ R
21.4 权限级别的切换 579
: r4 G% F, I! g$ K* k21.4.1 调用门及其漏洞 579
' \! d8 J$ t& e: ]21.4.2 sysenter和sysexit指令 581
" M/ z: M' A$ |6 M; q21.4.3 上机实践 583
  v- \5 S  Y4 T9 H+ Q$ x% |
% @1 F9 I( G- X% `: b# \: @第22章 IA-32体系结构中的中断 585
: k: m$ |, ^2 {
% ^( m. y! x  D" A- S22.1 中断基础知识 585
$ c/ @- D: D) Q6 R9 {22.1.1 中断描述符表 585
) p: \+ q/ R5 e8 M( w( B22.1.2 中断处理过程 5870 f: a* |# j) ]
22.1.3 64位模式下的中断处理机制 589
+ N( [) a' O0 q6 L! W: Z5 G- a22.1.4 多核下的中断 589
& A( ?$ x9 K% e( E4 `22.2 Windows中断机制 593& x" @/ V6 z0 k
22.3 中断编程实践 596
! t3 |% e( W8 m  x22.3.1 IDT Hook 596) s4 n' h7 `9 k- p
22.3.2 巧用IDT Hook实现安全防护 5981 R$ l1 o' J0 K- U" @2 N* @& A
, C1 t9 o3 l0 g/ P' D* Z
第23章 Windows内核挂钩 601
4 }5 Q& [7 w( @) y
: o9 U3 R  w0 H4 X& b6 c& N* E23.1 系统服务描述符表挂钩 602
5 F. q* _" ]" D7 o23.1.1 系统服务描述符表(SSDT) 602- z* C- V# u0 Z  [
23.1.2 系统服务描述符表挂钩的意图 6033 }  w5 p: A# y. A. c
23.1.3 寻找要挂钩的函数的地址 604$ h  R% L4 ?  v/ t6 e! i! g
23.1.4 函数被挂钩的过程 6057 a- g6 b7 F- D8 G0 ]  K( X
23.1.5 具体实现的代码 606
* T; I4 b4 x. Z. E/ ]23.2 函数导出表挂钩 6086 A, E" S# H, j2 A1 ]( z7 a
23.2.1 内核函数的种类 608
# x* R4 M4 U9 S23.2.2 挂钩IoCallDriver 610
% }" a" c! b' z! T8 R! U. R23.2.3 对跳转地址进行修改 6116 E" }& ~( Z" a2 k8 [
23.3 Windows 7系统下IofCallDriver的跟踪 612
% W3 @8 U9 M- r' ^, u  Z* k* E23.4 Windows 7系统下内联挂钩 615- O1 w0 ~) P& @2 s
23.4.1 写入跳转指令并拷贝代码 615
9 n; E% f  _; x& U: A23.4.2 实现中继函数 617
! P. Z$ W* A0 g: D* h" h5 z$ X. I
% F" d4 W, M# r. e  v: i6 X( m: r- m. a$ |! t) m% H2 C5 k, j
高 级 篇
3 Z2 {9 J  ~2 i* T
# a( B7 U; r- p2 ~4 H" o4 [第24章 Windows通知与回调 620& f( N3 s# N3 ?; }

) ]% X/ x- G3 c24.1 Windows的事件通知与回调 620
: U" m, H, a' R3 w' |; r3 U, n24.2 常用的事件通知 620
- H2 z, c1 X( y24.2.1 创建进程通知 621
9 f% O( _  O. K( G7 k5 H, l' f) w24.2.2 创建线程通知 625& k* s1 X& e+ N
24.2.3 加载模块通知 626
. w3 b1 F2 f/ h! r3 D6 i24.2.4 注册表操作通知 629
5 {9 X. \0 n& L0 u) A: X24.3 Windows回调机制 636
3 o7 g  P1 E/ i  C8 K( a24.3.1 回调对象 636
" d$ q' T1 e) o6 O6 k6 k. q24.3.2 回调对象的创建 637- k1 a; `$ m- U
24.3.3 回调对象的注册 637+ |: Q0 X4 d' i4 I% z
24.3.4 回调的通告 638
& z) s# V, q. w& t5 x1 B4 I24.4 安全的死角,回调的应用 639% `0 C- R" r  H  c4 `4 K- L  ]

& i# u" b1 i) b9 k第25章 保护进程 640" N7 N7 c/ ~9 ]/ ^! J- u

, y4 a+ Z# u; a2 c' I25.1 内核对象简介 640$ H4 S( f$ _- Z/ Z/ t) G0 v
25.2 内核对象的结构 6416 N/ Q" `. R/ ~$ l/ \
25.3 保护内核对象 642
3 C% X, g( k8 x% g, Z25.3.1 处理对象的打开 643
  w/ ~. d& ~3 z  S7 n7 R" t25.3.2 处理句柄的复制 644
1 ~; e9 i' M! ^* |25.3.3 处理句柄的继承 6468 o- B6 G; y5 M
25.4 进程的保护 6526 S# n  W4 E2 h+ w- G
25.4.1 保护原理 652
4 S: V7 L# s; q" a3 N25.4.2 Vista以后的进程对象保护 654
: h: F* I, W( V; h& j) s0 ?" U25.4.3 进程的其他保护 655. o& x& q6 {! l' W" L5 `
& Y$ c. a6 T9 u( F
附录A 如何使用本书的源码光盘 656
/ U4 m5 n4 z. D" j8 c# ?/ J
4 G0 i8 _# c+ ~+ h& P1 F. v) Z附录B 练习题 659: H$ O5 ^7 g. R0 J) o4 f6 B
, P$ h+ ?5 c+ ?) v6 w

% W- y. }9 F2 p* [* v* k/ l  I
想知道小甲鱼最近在做啥?请访问 -> 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-5-5 22:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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