鱼C论坛

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

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

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

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

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

x
TB1eC4MIFXXXXaOXpXXXXXXXXXX_!!0-item_pic.jpg_430x430q90.jpg

% w+ `; o# A$ K8 U  A- w( {% B- I& C9 E- p: _' i4 }
书名:《windows内核安全与驱动开发》
; ~% @6 [% A4 W" ]" Q作者:谭文;陈铭霖7 y* v) V0 ?1 x% q
出版社:电子工业出版社
. L$ [" l3 P6 m5 z3 u1 B出版年:2015年6月1日(第1版)! r3 \* L, ~! V% X
定价:139.00元
* z. K: ^$ Q$ t9 A+ V% D' G装帧:平装
9 Y4 o. J3 S8 T+ U$ CISBN:9787121262159
  C2 f& i7 \; a" j" q. E% i# H* a. w0 ^' H
购买链接:4 {- ^/ }/ S0 ?4 h

+ a, m! h. F& n1 v( ~

& y& ^! R: a: F! R. x亚马逊 -> 传送门5 w7 x5 Q( N0 ~. N9 }- V
- p% N6 D7 w& ]6 \( ?; g
当当网 -> 传送门1 l; B- q7 E: X8 v
! y+ F: ?9 k2 d
京东 -> 传送门
$ G9 U) f9 v/ f
8 o3 {9 ^' s' Y' G% y天猫 -> 传送门6 a; p: x. T% Z: o2 ?
2 x5 ?9 @6 l! \+ s8 d0 |+ T
3 b- N* F) @  @- `) H
内容简介:  W$ h; V5 w, {1 _
% ]5 b4 O0 q% T  |4 H4 Z# Q9 F8 N

  E2 S& U( X% X  P5 ?4 _9 }. C
本书的前身是《天书夜读——从汇编语言到Windows内核编程》和《寒江独钓——Windows内核安全编程》。与 Windows 客户端安全软件开发相关的驱动程序开发是本书的主题。书中的程序使用环境从 32 位到 64 位,从 Windows XP 到 Windows 8 都有涉及,大部分程序不经过修改即可在 Windows 10 上运行。同时本书也深入浅出地介绍了进行内核安全编程所需要的操作系统、汇编等基础知识。5 H+ ~8 p4 J/ y  J2 ?' g  e, c
% Q/ I# ]1 @3 O9 q5 a5 n, u
本书共分三篇,基础篇囊括了驱动开发的基础知识,降低了入门的难度;开发篇介绍了在实际工作中可能遇到的各种开发需求的技术实现,包括:串口的过滤、键盘的过滤、磁盘的虚拟、磁盘的过滤、文件系统的过滤与监控、文件系统透明加密、文件系统微过滤驱动、网络传输层过滤、Windows 过滤平台、NDIS 协议驱动、NDIS 小端口驱动、NDIS 中间层驱动、IA-32 汇编基础、IA-32 体系中的内存地址、处理器权限级别切换、IA-32 体系结构中的中断和 Windows 内核挂钩;高级篇包含了汇编语言、操作系统原理、处理器体系架构相关的内容。本书是由长期从事这个行业的工程师自己写的,所以处处以实用为准。对细节的考究主要体现在对实际问题的解决,而不是知识的详尽程度上。
* r2 r& d# ~! ~7 \! M
: n# n7 X1 ]4 e( I目录:/ ?7 R  V5 n9 X, L# F5 r/ `/ F

, E# J0 y( i, a: @
. o& \* \; u- _" w* W- K$ p9 b
基 础 篇 $ d9 i' V1 h6 E* h& v  M
4 V4 {" v: W' y$ X# E
第1章 内核上机指导2 . E' s+ L8 i/ W) O

8 X5 i& O/ ]6 @1.1 下载和使用WDK2 0 }) M: O4 V- g# V4 X. y
1.1.1 下载并安装WDK2
) \9 T1 Z" f) {1.1.2 编写第一个C文件4 / k. T2 w; H; B/ @/ q  A
1.1.3 编译一个工程5
5 l& F5 h6 P+ i2 `4 Z1.2 安装与运行6
3 s) i3 a; l# n# `' l* G) n1.2.1 下载一个安装工具6 5 }. t9 o3 z3 k- A- E
1.2.2 运行与查看输出信息7 + i# r% o# E2 Q! p
1.2.3 在虚拟机中运行8 % P+ i3 q& v! U: a
1.3 调试内核模块9
, i% Z/ e7 \1 ]8 [: |1.3.1 下载和安装WinDbg9 % Q6 b3 [6 J, [8 I
1.3.2 设置Windows XP调试执行9
$ B6 N/ K+ `# c5 J8 V1.3.3 设置Vista调试执行10
  q. o9 e2 \# V; p( }, Q4 l7 _1.3.4 设置VMware的管道虚拟串口11
! Y4 }( e) [' |* e2 b! \1.3.5 设置Windows内核符号表12 0 J& I0 f0 A( K+ C; e4 }/ B
1.3.6 实战调试first13 & m+ ^+ ]- o( D: u1 X( J

7 F9 e9 B- c* _  P& ~第2章 内核编程环境及其特殊性16 ; B9 b7 n1 \5 K1 E

9 S: x( e! A3 Z; I4 W/ [2.1 内核编程的环境16
4 Y" M) a2 G% J& \- _4 ~8 Z2.1.1 隔离的应用程序16
9 ~0 X* F& ]# `4 t2 o) B2.1.2 共享的内核空间17
1 q. O0 B' j6 ~$ C2.1.3 无处不在的内核模块18 : r) V3 t, ~/ {4 Q0 u5 [/ t
2.2 数据类型19
- j1 |/ D2 v. j# R7 j9 I; @( J. k2.2.1 基本数据类型19 ) T" z( M% }+ x% A) o/ c
2.2.2 返回状态19
- O( m* O8 w1 L! J& x! P2.2.3 字符串20
# v% ^5 B4 L+ V2.3 重要的数据结构21
- Q3 m- F$ K1 L: r$ ?, z" v: v, v2.3.1 驱动对象21 - ]  ]! C8 d: Y
2.3.2 设备对象22 6 e7 t* o1 c2 Z+ Q. K$ r, P
2.3.3 请求24
- l* N" I$ P2 @2.4 函数调用25 " i) K6 m" I, p( V! m; B
2.4.1 查阅帮助25
% I) p# |! T1 C2 |6 ~2.4.2 帮助中有的几类函数26 % G: `1 x; r* D( Y3 W& r# V
2.4.3 帮助中没有的函数28
4 }+ K7 o! V5 c- [# j5 c2.5 Windows的驱动开发模型29
( ]( _2 Q$ G+ E4 P. c) _2.6 WDK编程中的特殊点30 ( x- h, S6 W' j# `9 e/ J/ q; ~
2.6.1 内核编程的主要调用源30 ) ]+ P- y% g9 V  d3 t( t6 e' p. T3 Q
2.6.2 函数的多线程安全性30 & l; K" q9 F  Y8 C: B
2.6.3 代码的中断级32
- w0 C- u0 {1 _" i& W' B/ n) H2.6.4 WDK中出现的特殊代码32
) g7 i; u7 {, Z7 P. Q& m# I- ~3 v; o
第3章 字符串与链表35 0 z$ I4 z) e4 G1 V; E; Y; ?, \
' d2 k6 \2 U! c$ A% `% R% d1 ^
3.1 字符串操作35   f5 S# i2 {! W# k( |
3.1.1 使用字符串结构35
7 f" F' y: K1 H9 d3.1.2 字符串的初始化36
3 g4 \% f& x* [3.1.3 字符串的拷贝37 1 H0 ^) _0 X3 t% s1 N6 @0 h
3.1.4 字符串的连接38 9 I. F# q9 n# J9 y7 {6 {+ \0 A
3.1.5 字符串的打印38
1 l7 P2 R$ O% ]& ^5 x9 \3.2 内存与链表40 ! E* C) a4 X  p# U
3.2.1 内存的分配与释放40
6 H7 j0 ^. i9 [9 l6 c3.2.2 使用LIST_ENTRY41 6 C7 e4 M, o) G% }3 H
3.2.3 使用长长整型数据43
2 z- }# `% U4 l+ N: o' C+ r3 I$ Y3.3 自旋锁44 * g8 m8 a4 _. \* f  K1 b( B. k5 H
3.3.1 使用自旋锁44
  [- M# Q) l1 `, c3.3.2 在双向链表中使用自旋锁45
4 ?/ @$ X. ]$ d# R& R, [1 |3.3.3 使用队列自旋锁提高性能46
0 T" C" ~" r, w8 N4 e2 F# A/ p' M8 S6 t3 j
第4章 文件、注册表、线程47 5 _7 X. S, T. M3 d1 V$ ]; Y; d3 B
3 b* G6 W2 z$ J$ {( ^
4.1 文件操作47 + R6 C% n) p! z5 d) s
4.1.1 使用OBJECT_ATTRIBUTES47   X. E) E- \! x! z
4.1.2 打开和关闭文件48
' D" b+ p1 O# M2 @! ]" d4 z4.1.3 文件读/写操作51 7 Y6 O5 H2 ?/ E
4.2 注册表操作53
- ~; `4 W8 V3 n# `! ?8 E4.2.1 注册表键的打开53
5 e( j& t  p. k8 i# @; W2 j  w4.2.2 注册表键值的读55
5 _% ^# y" [" J, ?1 z1 C4.2.3 注册表键值的写57
" R5 N' E& o( O7 u7 e# K$ W9 Z4.3 时间与定时器58 $ O( k8 Q( f5 |5 _% V7 K* Z0 d
4.3.1 获得当前“滴答”数58 % P: D% `; x% a$ q: `
4.3.2 获得当前系统时间58   h, d! [8 `, t3 u  a. ~
4.3.3 使用定时器59
- e* {( P, {# M) ~8 A4.4 线程与事件62
4 U. L& t) L* Z4.4.1 使用系统线程62
! V' }8 b1 n; |8 p2 e4.4.2 在线程中睡眠63 + U5 \2 p7 E. _1 v8 a3 {
4.4.3 使用同步事件64
0 q: q0 V1 p' q0 \; ?* C+ c
) J0 i" w) r8 P0 C. z+ z! `  G第5章 应用与内核通信67
* y6 c4 Y% c# a9 k2 _: O5 G/ {  y5 j5 c; u. B4 L# c) i
5.1 内核方面的编程68 4 g2 L+ G9 r' W1 A% n  E+ x/ l
5.1.1 生成控制设备68
+ I) N, {8 U+ G* @" V9 b8 Z5.1.2 控制设备的名字和符号链接70 8 E8 {; g# ~( D
5.1.3 控制设备的删除71
& v8 B. U3 R+ V5.1.4 分发函数72
! \2 t' q6 G# H; ~% d2 M8 n5.1.5 请求的处理73 4 E. i  v2 r8 ?' J& e7 ~) @( H
5.2 应用方面的编程74 - V1 u" _) c# n
5.2.1 基本的功能需求74
# |" ^- Z" H' V; r. x/ O9 i( j5.2.2 在应用程序中打开与关闭设备75 - X' S( N  {6 k+ k$ x8 L- ^$ `3 T
5.2.3 设备控制请求75 ) ^4 O2 v- x( }& s( y- @6 `# m
5.2.4 内核中的对应处理77 3 x* D' E0 t( B, E9 _& W/ s! c' m
5.2.5 结合测试的效果79
$ x* N) A, i0 V& A5.3 阻塞、等待与安全设计80 ) p9 W2 f0 g; V
5.3.1 驱动主动通知应用80 / y1 b, ~! u2 J! t* X
5.3.2 通信接口的测试81
1 G7 @, a& Y9 ^5.3.3 内核中的缓冲区链表结构83 3 y: T$ A  V( O5 h/ p8 A; L
5.3.4 输入:内核中的请求处理中的安全检查84
, c/ N4 u/ y* Y& v# p* d5.3.5 输出处理与卸载清理85
  L" p1 d' P% j6 p* d( |5 e! C  N% r2 u
第6章 64位和32位内核开发差异88* K3 s6 u1 C7 b. {! T0 p
7 v, A3 {5 M3 ?0 g' E
6.1 64位系统新增机制88
& q- K: q0 n% v  f* F5 W6.1.1 WOW64子系统88
0 v, o) [& q# U! t% r3 ^; Y6.1.2 PatchGuard技术91
9 A5 w* [* j2 @0 I+ `  |6.1.3 64位驱动的编译、安装与运行91 0 j: }1 V1 |) _, W) i. k0 }
6.2 编程差异92 - X9 T' K8 C+ f( T7 i0 b7 i1 y9 \# V
6.2.1 汇编嵌入变化92
! \( X5 s9 P  ?' g% |6.2.2 预处理与条件编译93 ! m: D2 ?1 l) q
6.2.3 数据结构调整93
8 e- L3 Z( x# f. s, _' r4 {. h0 J
6 R5 t1 v6 j0 }/ O. j0 w) R1 y8 A9 A* ?
开 发 篇
2 R! D/ N& Q! q2 E- i3 i% W% k$ ^, M/ H
第7章 串口的过滤96
, j* o$ N2 n% G8 u
) H; h' j+ A  @6 d/ y- [; H7.1 过滤的概念96
/ Z" {: R# E+ [' P7.1.1 设备绑定的内核API之一97
; Z5 L9 x" w) H7.1.2 设备绑定的内核API之二98 ( h% D7 V; ?( D  }7 o; b
7.1.3 生成过滤设备并绑定98
. g$ e4 s9 O' g9 B7.1.4 从名字获得设备对象100
7 E& Q' H0 Y& I0 c, b# X" q. D2 u7.1.5 绑定所有串口101
$ T6 Q# ?9 Z6 _( G( z; h7 h7.2 获得实际数据102
, u- g) J' f3 {% G7.2.1 请求的区分102 2 A' _! z, o# ^5 e9 v
7.2.2 请求的结局103   h$ G$ @1 }0 o/ v/ a  O5 \
7.2.3 写请求的数据104
+ N, @  F3 m9 @0 @! k7.3 完整的代码105 0 y) q, X$ B5 G+ J( _0 f6 n
7.3.1 完整的分发函数105
2 |: M  M! I9 Y; K# N1 R7.3.2 如何动态卸载106
+ n( J( {! Q' H6 b# L2 H7.3.3 代码的编译与运行107 1 u6 D$ R8 W+ D- w- ~4 S

  V+ i  w7 F( {& t% k& Z! i. j第8章 键盘的过滤109
  k3 s; j* ~! `
0 @2 w5 q8 s1 Y3 J/ ~  A* \! ]8.1 技术原理110
0 V9 ^) {  E( N5 s% N* M" ], H  q8.1.1 预备知识110 5 Y- m6 Q9 c  h8 p
8.1.2 Windows中从击键到内核110
& |; Z, U, b, X9 y8 t) v  _8.1.3 键盘硬件原理112 # i8 @' ^; x2 |+ q* V5 e
8.2 键盘过滤的框架112 * q+ G7 l- J' U
8.2.1 找到所有的键盘设备112 * H* B8 J* T% p+ [6 \! j7 O
8.2.2 应用设备扩展115
) O; w! g7 T+ n! B# M) m) }8.2.3 键盘过滤模块的DriverEntry117
: ~2 }& D' y% s$ t8.2.4 键盘过滤模块的动态卸载117
6 N$ e# `: z& G4 ~  ]8.3 键盘过滤的请求处理119
  e  ]* F. \2 {" u8 B$ _+ q8.3.1 通常的处理119 6 P7 ?8 M) ?9 ]1 N+ N( C( T' x
8.3.2 PNP的处理120 4 B- Q& ]/ R0 T3 l3 ^. g8 a/ i
8.3.3 读的处理121 : Y# m! p0 k& b% l, G
8.3.4 读完成的处理122
% }7 a) Y  d' d) ~8 m" j& Q8.4 从请求中打印出按键信息123 , B. X* c( L- ?9 k- Y0 x6 H  Z  S
8.4.1 从缓冲区中获得KEYBOARD_INPUT_DATA123 : _1 P, W( l, y: u& Q% A/ k
8.4.2 从KEYBOARD_INPUT_DATA中得到键124
  d/ ?. Z% m6 d$ ^- _& J8.4.3 从MakeCode到实际字符124
! P% L5 S/ p9 H  ?  B8.5 Hook分发函数126
% b% \9 [( e  `, p8.5.1 获得类驱动对象126 * h# g* ^8 D6 g0 c! L, q
8.5.2 修改类驱动的分发函数指针127
9 z) P* u, J# L8.5.3 类驱动之下的端口驱动128
: R. e* B/ b4 k) i8.5.4 端口驱动和类驱动之间的协作机制129
  `: G, s$ R! s7 X8.5.5 找到关键的回调函数的条件129 / |3 ?- _, H% ^5 g' u: Z. Y% Z
8.5.6 定义常数和数据结构130
+ m2 a6 P! ]  z8.5.7 打开两种键盘端口驱动寻找设备131 ! W$ A( H3 g5 ?: K  ~9 K5 N
8.5.8 搜索在KbdClass类驱动中的地址133 . t& d- V* ^# a( \5 G& h5 I
8.6 Hook键盘中断反过滤135 ! y' j# t+ _# m$ i% v% l
8.6.1 中断:IRQ和INT136 ' O8 m% ?0 V( `( H: M3 o
8.6.2 如何修改IDT136
" U: [  p% U  k- m& J8.6.3 替换IDT中的跳转地址137
& W" a3 ^( ~' ?  [& a% n( w8.6.4 QQ的PS/2反过滤措施139 ' z8 H% {& v7 l* C% K
8.7 直接用端口操作键盘139 ! D9 w7 e' w, n9 Z
8.7.1 读取键盘数据和命令端口139
% [; c( L# D  ]" n+ y# w$ M6 t8.7.2 p2cUserFilter的最终实现140 . U  y; `% j7 [& [/ y+ }
! _: }1 n, N1 {
第9章 磁盘的虚拟143
4 R9 G5 F: w* X- w
4 @8 Z% d. V: O% t* k5 d- o9.1 虚拟的磁盘143 & p, J* y7 _5 A/ N
9.2 一个具体的例子143
( Y  I7 T3 }$ S# K9.3 入口函数144
$ V( [4 U3 i* c1 |- p2 K9.3.1 入口函数的定义144
8 A8 |* z! c- p3 g0 H0 E$ T$ e9.3.2 Ramdisk驱动的入口函数145 5 \, K% q9 x  c! }2 J+ O
9.4 EvtDriverDeviceAdd函数146
3 E+ C* V+ P/ y. ^0 n+ ^9.4.1 EvtDriverDeviceAdd的定义146
: |! R& n. C# L0 @" y. X* [. K( `9.4.2 局部变量的声明146 . [. _5 s& g$ E
9.4.3 磁盘设备的创建147 $ j$ t( l) u6 F: P! }# ]! q9 l
9.4.4 如何处理发往设备的请求148 9 I- A/ j8 h) g4 `. H. v/ a! |
9.4.5 用户配置的初始化149
7 r+ C, z, S9 d6 H; b/ p9.4.6 链接给应用程序151
3 J; I7 W  J8 O% V- k0 h6 u1 C9.4.7 小结152 ; q3 T; c0 P+ ~2 Z2 ~8 q) |. Y
9.5 FAT12/16磁盘卷初始化152
' H' W3 @1 \0 l8 e( Q9.5.1 磁盘卷结构简介152
! T( X# K  v+ b; w  I6 X! E9.5.2 Ramdisk对磁盘的初始化154 - H- u& \  [8 z& R. h" k
9.6 驱动中的请求处理160
0 T6 n* U" m6 _9.6.1 请求的处理160 4 A8 \% ?; e, [5 e; _
9.6.2 读/写请求160
% j" c5 [0 S! R8 A. n9.6.3 DeviceIoControl请求162
+ g4 j7 F5 W" I! n6 q9 [9.7 Ramdisk的编译和安装164 1 ~0 t/ o5 w# I! W; Z) x
9.7.1 编译164
+ D4 f; `( T# `4 z5 j/ z( u! [# I9.7.2 安装164 : F# z# ^3 q/ _& G$ S
9.7.3 对安装的深入探究165 % r! Y4 G3 h. {( `0 ]4 Z# F

; }/ u+ k% C+ x第10章 磁盘的过滤167
) v6 Y- s0 d: m% e
, k  K: t( n* u8 e# `. z10.1 磁盘过滤驱动的概念167
7 c7 c1 k4 h' ^1 K  X10.1.1 设备过滤和类过滤167 2 {7 M: ~( y  h5 n
10.1.2 磁盘设备和磁盘卷设备过滤驱动167
! C" j( _8 S! t% N10.1.3 注册表和磁盘卷设备过滤驱动168
$ V2 Z5 ~+ L# p. _+ K10.2 具有还原功能的磁盘卷过滤驱动168
- S1 t, G6 g& y8 C: _10.2.1 简介168
& h& V/ ]  K* w& l3 S10.2.2 基本思想169
: n3 E5 U6 r" a4 V- X( k10.3 驱动分析169 , b% N/ X5 i3 A7 x
10.3.1 DriverEntry函数169 % ?* H. }' q/ a- |; f
10.3.2 AddDevice函数170
( P2 n2 J4 L* n10.3.3 PnP请求的处理174
. D! a" X9 K4 F* g10.3.4 Power请求的处理178
) D6 W7 |5 T$ p/ p" y) w10.3.5 DeviceIoControl请求的处理178
6 u7 u$ m1 Q4 E8 S6 e' Z10.3.6 bitmap的作用和分析182
0 @6 f# s: |. n" F% U, a10.3.7 boot驱动完成回调函数和稀疏文件187
% N: E, f6 E1 W7 g3 T10.3.8 读/写请求的处理190 # b5 f. G; r1 X1 E7 z" r

+ v4 u# T4 X# ~- |* H( O第11章 文件系统的过滤与监控199
" n7 a% q2 Q2 S+ L4 }5 o( g4 ]& M. C% g  k
11.1 文件系统的设备对象200
) h  T0 d4 o5 }; s' [6 o11.1.1 控制设备与卷设备200
3 X8 M  H7 J; [" |) j2 H11.1.2 生成自己的一个控制设备201 , d, ]" _6 {" n6 G
11.2 文件系统的分发函数202
) w5 ~) X; s0 @0 w+ y5 c11.2.1 普通的分发函数202
2 i+ _: _0 q8 E! Y% D! t/ ~( f11.2.2 文件过滤的快速IO分发函数203
; `3 X5 \/ _0 R; |5 m1 Z11.2.3 快速IO分发函数的一个实现205
4 E( C4 y; h# M. O& j, j1 L. _11.2.4 快速IO分发函数逐个简介206 * ^% t9 x) ^7 u/ T% `, ], l! B
11.3 设备的绑定前期工作207
6 Q5 r3 ]* `& u11.3.1 动态地选择绑定函数207 0 n+ L2 L, }+ F% }# A, k  `  j
11.3.2 注册文件系统变动回调208
' p' }0 b4 O- T/ t8 c11.3.3 文件系统变动回调的一个实现209
9 h6 L1 V& p  V0 U+ D$ P11.3.4 文件系统识别器211
- {9 m( R$ Y8 {4 N9 r( M" Q11.4 文件系统控制设备的绑定212 1 C2 j# Q3 d+ D2 t
11.4.1 生成文件系统控制设备的过滤设备212
  A; D* Y) W  v+ [1 {11.4.2 绑定文件系统控制设备213
7 A% s; p0 q$ H* @11.4.3 利用文件系统控制请求215
* y4 n9 F& A: U) d11.5 文件系统卷设备的绑定217
6 L5 ^: K  q8 h5 \2 C( {- d& u11.5.1 从IRP中获得VPB指针217 ( ?7 ]" B9 N  I, [$ S# L4 u
11.5.2 设置完成函数并等待IRP完成218 ! Q% ~* M1 x. t1 s) P/ B) v, j
11.5.3 卷挂载IRP完成后的工作221 & z9 W. w  i8 n1 Q6 v& O! r5 R! l
11.5.4 完成函数的相应实现223
! N8 t- e- m  ~) f7 A' F11.5.5 绑定卷的实现224 8 K% t/ x( a6 R, I2 ]2 w/ _( m0 `
11.6 读/写操作的过滤226
3 E2 z# ^* A: r% n9 g" `11.6.1 设置一个读处理函数226 6 L8 [& `) @1 b. V  K4 C
11.6.2 设备对象的区分处理227 8 Z! f) V3 Z' T" y( r1 |; @* O% W
11.6.3 解析读请求中的文件信息228
$ ?( W* o% t/ L; h$ `11.6.4 读请求的完成230 ; l% y7 i, q: g. Y' H* y1 ~
11.7 其他操作的过滤234 4 \# [' y5 s9 u; ]( f8 g# q
11.7.1 文件对象的生存周期234
! D% l9 b- P! C9 d11.7.2 文件的打开与关闭235 * ]: w' ]1 o. g8 k2 B, c! s
11.7.3 文件的删除237
8 o" S5 n5 m2 k! L11.8 路径过滤的实现238
; M2 p8 X( h( W4 b4 a6 L11.8.1 取得文件路径的三种情况238   ~2 ^) {% _' R8 e
11.8.2 打开成功后获取路径238 5 J3 K# W& B; P& w
11.8.3 在其他时刻获得文件路径240 4 z" u- t" j9 E
11.8.4 在打开请求完成之前获得路径名240   ~6 Z: d& `. ~7 X
11.8.5 把短名转换为长名242
/ I: f. C$ F5 M: k11.9 把sfilter编译成静态库243
8 o5 t5 e! ?5 y11.9.1 如何方便地使用sfilter243
1 l: T8 K) U* ?' ?- ?5 V, D5 ?6 j11.9.2 初始化回调、卸载回调和绑定回调244   E* \8 r$ V& e5 H( ^* E( W
11.9.3 绑定与回调245
9 p; k% e) H" l) p8 p  O11.9.4 插入请求回调246 / \/ p$ A6 x$ P) [% s0 i8 u
11.9.5 如何利用sfilter.lib249 8 ]% \: Z0 F; L% D. F
; @. x! `2 ~4 O$ K' U/ K
第12章 文件系统透明加密252 9 |& i( G, c' q% t. w$ t* N
0 z( k1 N1 {4 s5 w
12.1 文件透明加密的应用252 0 H4 U# s( b. j( N$ j
12.1.1 防止企业信息泄密252
+ x8 n& g  u* f. Q6 ~+ `' l1 K12.1.2 文件透明加密防止企业信息泄密253 8 W) w+ A" }6 `6 ~: H
12.1.3 文件透明加密软件的例子253 6 W$ m) Q6 T7 g: l+ ?4 |1 T: p
12.2 区分进程254 & s9 U) j+ b4 |4 Q, i; `& f
12.2.1 机密进程与普通进程254 1 ^! t. p" T+ t
12.2.2 找到进程名字的位置255 ! B3 }& b1 y, Z; v7 n
12.2.3 得到当前进程的名字256 ( }4 b0 W2 R: C
12.3 内存映射与文件缓冲257 4 X- M4 b: c9 |2 H" f
12.3.1 记事本的内存映射文件257
9 P. u, y# P% g( D( ^3 ]6 E' x12.3.2 Windows的文件缓冲258
6 K6 q$ L8 {8 l12.3.3 文件缓冲:明文还是密文的选择259
  T+ i7 N8 H# h1 ~12.3.4 清除文件缓冲260 / p! m( R% t! h  A
12.4 加密标识263
+ H: O0 Y& I/ O; s) ~  a12.4.1 保存在文件外、文件头还是文件尾 263  G* M& f1 W0 [) k. R( J* k
12.4.2 隐藏文件头的大小 2644 S* X3 @5 b0 q8 U" u4 H9 K  D
12.4.3 隐藏文件头的设置偏移 266- x# Z0 e/ k( b3 k2 \& u, v
12.4.4 隐藏文件头的读/写偏移 267" l5 M' R1 i. r* ?' [3 o! {
12.5 文件加密表 267
. g/ I5 ]1 L2 v12.5.1 何时进行加密操作 267
2 i2 R6 K# d9 @8 a6 K, p12.5.2 文件控制块与文件对象 268( ?: d* K$ n. z( [1 m$ c
12.5.3 文件加密表的数据结构与初始化 269' m( _2 @5 \( e+ H4 @
12.5.4 文件加密表的操作:查询 270
" ]: m2 r8 q# M0 a: F12.5.5 文件加密表的操作:添加 2711 m8 p/ ^3 x/ n; e  u: R
12.5.6 文件加密表的操作:删除 272: N" u/ f5 {$ `
12.6 文件打开处理 2737 ?' a1 }, T  K
12.6.1 直接发送IRP进行查询与设置操作 274- `! B: t' c. x) E! z% r7 U% ?/ @: V
12.6.2 直接发送IRP进行读/写操作 276
4 t0 ]( D6 P' R( f4 @& S12.6.3 文件的非重入打开 277* e- R0 I/ e+ u+ X5 N% k
12.6.4 文件的打开预处理 280
5 f8 j  w* A, h+ M+ g12.7 读/写加密和解密 285- {! p& l! o# A) N
12.7.1 在读取时进行解密 285
2 p$ i4 l/ W4 ~8 f12.7.2 分配与释放MDL 286/ \7 o+ Z) M2 D" e  f4 w* `
12.7.3 写请求加密 287
0 p$ `: J$ }# @. e0 O12.8 crypt_file的组装 289, w5 c; Q8 t' j/ e
12.8.1 crypt_file的初始化 289
3 ?: \: ?: X0 Q2 M1 O12.8.2 crypt_file的IRP预处理 2905 ~( s- V9 C1 J- o) l# v/ X7 y
12.8.3 crypt_file的IRP后处理 293
% A# D( [6 t. c7 v' Y% K
9 ?$ E) x- X7 e) s, \第13章 文件系统微过滤驱动 297
4 {$ ?) ]8 b9 r8 _% y4 G+ e. R; c2 C
13.1 文件系统微过滤驱动简介 2979 J$ V! J/ M& r3 a
13.1.1 文件系统微过滤驱动的由来 297
6 h, |7 p% X  v5 @/ M3 ^) l. V13.1.2 Minifilter的优点与不足 298' ~7 Z' o! n  Y% E, r5 z: i" z: I& c
13.2 Minifilter的编程框架 298
( s" C4 p  o( D5 d' \13.2.1 微文件系统过滤的注册 2999 T9 g/ I( q9 Y0 e& X
13.2.2 微过滤器的数据结构 3002 S7 O8 j% ~2 x0 z! b2 O
13.2.3 卸载回调函数 3033 n0 f7 Q% L! o" w/ B' q
13.2.4 预操作回调函数 303) e' T0 ]5 W: o
13.2.5 后操作回调函数 306- D0 y4 l5 i" v: ^" Z6 r9 ?
13.2.6 其他回调函数 307) {( E+ ?- H( ^/ V& A
13.3 Minifilter如何与应用程序通信 309
! `/ r1 v. e4 `13.3.1 建立通信端口的方法 310: P$ H/ e/ c* m
13.3.2 在用户态通过DLL使用通信端口的范例 311
4 K& T! R& r, |# g, Q13.4 Minifilter的安装与加载 314* t( f& m( \- [  t. }2 s7 X7 J
13.4.1 安装Minifilter的INF文件 314
6 W: ^) z) k# |' Y& K13.4.2 启动安装完成的Minifilter 316
! C: f/ r6 b+ r4 h# q. M/ s7 C: V% ~/ A$ \( `8 p- c8 b
第14章 网络传输层过滤 317
- e& }2 N# j5 t  ^4 s" `: `# u: b, S9 J! M  I0 C4 e$ P# K
14.1 TDI概要 317% |/ V( o2 `3 h) c9 w' t
14.1.1 为何选择TDI 317
0 R7 ]4 z; x) L9 p: R. h4 T- V14.1.2 从socket到Windows内核 318: r( c" C; E5 H
14.1.3 TDI过滤的代码例子 3190 c* r+ D2 z+ d9 P: v
14.2 TDI的过滤框架 319
% i+ {6 B' @) A# K14.2.1 绑定TDI的设备 3194 C4 ?3 ?7 y; T8 d2 ]
14.2.2 唯一的分发函数 3200 H- R& Y+ W/ l* @0 g
14.2.3 过滤框架的实现 322
& h9 K, v  u& N- ]+ c4 W3 K14.2.4 主要过滤的请求类型 323( K9 ?  d7 c) j! `! M) H
14.3 生成请求:获取地址 324
4 L% }/ i& k9 |! s* a14.3.1 过滤生成请求 3246 Y7 t# i% K" U
14.3.2 准备解析IP地址与端口 326
% _( s5 k" w. n: G4 o/ _14.3.3 获取生成的IP地址和端口 327
1 f+ X0 v( z* A3 M! k14.3.4 连接终端的生成与相关信息的保存 329' X5 K# R/ b9 v# P
14.4 控制请求 330# h5 H2 W/ |4 p$ _/ n
14.4.1 TDI_ASSOCIATE_ADDRESS的过滤 330% B& u) f* L- v$ ^0 {. P8 \, U
14.4.2 TDI_CONNECT的过滤 332/ k% E* c7 o7 T4 H( k
14.4.3 其他的次功能号 333
9 e  O2 X$ X3 r3 M4 L/ J( V14.4.4 设置事件的过滤 334
* T* h7 H* {6 Y# h3 E14.4.5 TDI_EVENT_CONNECT类型的设置事件的过滤 3368 U' r5 K) U3 z6 [5 x
14.4.6 直接获取发送函数的过滤 3377 M2 k7 B% q' \" W% ~
14.4.7 清理请求的过滤 339
8 g6 I5 f; }6 [. I3 o1 _14.5 本书例子tdifw.lib的应用 341" k. U  Y) D' r- v; ~: c" X
14.5.1 tdifw库的回调接口 3418 t: n) _* v( d" J9 J; `2 ]
14.5.2 tdifw库的使用例子 342
1 o6 {. l2 Q. u8 w$ r) v5 H+ o1 H; h! M) d* M
第15章 Windows过滤平台 345
+ l, M$ M' v6 r8 E& a! {
5 A* R' ^7 d- W; O# R; x15.1 WFP简介 3451 r% Y0 U) T3 m1 C7 s8 h3 l
15.2 WFP框架 345
5 n% S9 x, E$ o15.3 基本对象模型 3475 \7 A! u- b- O9 J
15.3.1 过滤引擎 347
, f4 [) f! N) S+ a15.3.2 垫片 3479 @6 p/ S1 I' h( B! @2 Y- B
15.3.3 呼出接口 347* X4 B0 @+ {; {
15.3.4 分层 348
7 h0 Q2 {! V! ?6 _- e# F$ Y3 [# F, O15.3.5 子层 349
0 T! U9 t$ J! r2 z15.3.6 过滤器 350
3 l4 m4 V. K3 _6 ~15.3.7 呼出接口回调函数 354$ z; \' O0 E) q) h* U- v1 C
15.4 WFP操作 3594 Z, G! l& A' C. l$ o/ s
15.4.1 呼出接口的注册与卸载 360+ R: v% L: r# m# L. h, N0 a
15.4.2 呼出接口的添加与移除 360* k* ?/ p) z( \" ^* l
15.4.3 子层的添加与移除 3613 U5 X) M; P+ x$ q) c( ?6 p
15.4.4 过滤器的添加 362
$ ~# U' f; Z1 ~( Q% c15.5 WFP过滤例子 362
$ f$ p5 e" J$ _; i, u" |, p
7 a4 q' U3 `( e$ h" z) V第16章 NDIS协议驱动 370: M) M8 Q9 F1 [

& u0 n% N7 ]0 R5 _5 Q16.1 以太网包和网络驱动架构 3705 Q' l; N; _8 Q3 D. c; _7 V. m
16.1.1 以太网包和协议驱动 3700 E1 ^: S; i, |  d
16.1.2 NDIS网络驱动 371
" V. c/ N2 e+ ^16.2 协议驱动的DriverEntry 372
& f$ B3 l6 w) o, L16.2.1 生成控制设备 372
1 O$ a, P( \7 B16.2.2 注册协议 374* j# c$ n9 r' S  F9 }# y$ t
16.3 协议与网卡的绑定 375' F+ H$ x. ]7 I% H; l2 x" ~
16.3.1 协议与网卡的绑定概念 3751 `! N- X; l: R1 e
16.3.2 绑定回调处理的实现 376- m- n5 `' S: r7 e9 `
16.3.3 协议绑定网卡的API 378; }) L  ^/ l, z* ^
16.3.4 解决绑定竞争问题 3798 j6 b6 N: o5 p- A# Q
16.3.5 分配接收和发送的包池与缓冲池 380/ N8 |+ [" J2 q) z; [( M* j
16.3.6 OID请求的发送和请求完成回调 381$ W; ~# H2 w, m) S5 X  _7 d
16.3.7 ndisprotCreateBinding的最终实现 385
# d( G) l' H" X+ ~16.4 绑定的解除 3905 l+ j0 p0 ^6 d2 l2 j5 F
16.4.1 解除绑定使用的API 390. J5 p( g- l- w, @5 O$ ~. k& q
16.4.2 ndisprotShutdownBinding的实现 392
! N# `+ g% ~5 ]  _+ U16.5 在用户态操作协议驱动 395  P5 z6 e8 b# J7 o* L
16.5.1 协议的收包与发包 395
# e" [  ~+ T1 z' @: d+ K16.5.2 在用户态编程打开设备 396; S# w4 C( R- e+ D' S
16.5.3 用DeviceIoControl发送控制请求 397  T+ a) L- X/ J1 x: X# E
16.5.4 用WriteFile发送数据包 399
$ a$ N; e; P1 @9 V5 H$ D: a& _16.5.5 用ReadFile发送数据包 4004 x2 ?" _4 {$ T: ^7 E( Z5 X
16.6 在内核态完成功能的实现 4025 V0 W6 i" e0 j& Z3 w7 Y
16.6.1 请求的分发与实现 4023 j2 O2 n' V2 c1 t
16.6.2 等待设备绑定完成与指定设备名 402
7 A- M: {6 U7 V# V, ]16.6.3 指派设备的完成 403
; x# h# z6 a$ a, |4 H2 E16.6.4 处理读请求 406
8 V: |; r: R/ c* u# q16.6.5 处理写请求 408
4 d6 {+ D, N; m1 _$ K% v. }0 `16.7 协议驱动的接收回调 412& ~3 w8 ?5 e; ?  F. l& p/ h( o
16.7.1 和接收包有关的回调函数 412
* ]% x1 t; H* W3 \+ f16.7.2 ReceiveHandler的实现 413% T  B, A, u$ O$ P
16.7.3 TransferDataCompleteHandler的实现 4178 y/ d/ @$ d! Q& f
16.7.4 ReceivePacketHandler的实现 418: e& Q' `8 d+ E9 o' e7 f2 h
16.7.5 接收数据包的入队 420
, b" Y3 G7 I6 k  ?$ a' v16.7.6 接收数据包的出队和读请求的完成 422
* g( v. f. p' q& v; |% w7 w
, n6 J4 s1 R( o# M  f3 z% n0 S# _! p第17章 NDIS小端口驱动 427
2 G7 [1 _7 `3 P+ x. M
  b3 Y4 L, \/ W17.1 小端口驱动的应用与概述 427" |1 U: `- E# K9 E# }: W
17.1.1 小端口驱动的应用 427
+ U7 h/ S# l! i5 t/ X& `17.1.2 小端口驱动示例 428; f; W3 ~' ^; m5 {; Z
17.1.3 小端口驱动的运作与编程概述 429
) f% R4 [( \3 M) ^17.2 小端口驱动的初始化 4292 u" I8 ]+ `. H. d: w
17.2.1 小端口驱动的DriverEntry 429
+ p! H8 m4 {; H" r5 v17.2.2 小端口驱动的适配器结构 431
! H- w: c3 m. G17.2.3 配置信息的读取 433. i/ R, I+ T4 ]2 M; W: r
17.2.4 设置小端口适配器上下文 4332 k1 D  o; F; L2 T2 o4 H/ o
17.2.5 MPInitialize的实现 434
/ j  n+ Q' ~% d17.2.6 MPHalt的实现 437
3 e* B! k% _( a$ {( `$ W/ R7 _17.3 打开ndisprot设备 4383 g- U5 q7 T5 r/ \
17.3.1 IO目标 438) S" C5 ]6 m5 Z5 A: X/ }" U0 h$ q& P  ?0 D
17.3.2 给IO目标发送DeviceIoControl请求 439
3 l. C" V8 V( N6 _17.3.3 打开ndisprot接口并完成配置设备 441
. A* F) y# H4 O17.4 使用ndisprot发送包 443
3 N1 ^! f5 o. ~' Q1 {" L; s- ~17.4.1 小端口驱动的发包接口 4439 N; |0 N1 Y6 Z+ N3 ]
17.4.2 发送控制块(TCB) 444  [. V: n$ K6 `+ ]3 t
17.4.3 遍历包组并填写TCB 446# R! l$ a9 N7 W& g% c
17.4.4 写请求的构建与发送 4493 d0 T  }$ |: B0 b
17.5 使用ndisprot接收包 451- c6 |. R" t1 Q. x
17.5.1 提交数据包的内核API 451* l* `: q9 E. m5 Q0 C/ N
17.5.2 从接收控制块(RCB)提交包 452
! H/ Q8 M0 _) c* b7 B17.5.3 对ndisprot读请求的完成函数 454
2 S% ?+ }/ C9 t! G17.5.4 读请求的发送 456
# z" ~: A. }+ I* @3 v6 i0 X& s17.5.5 用于读包的WDF工作任务 457
' Z6 w2 c+ i0 m% I* l3 f# c17.5.6 ndisedge读工作任务的生成与入列 459
1 O' T9 w$ C; J7 H5 W17.6 其他的特征回调函数的实现 461
8 j# k# n, V( n3 }+ t. B17.6.1 包的归还 461& X# a* G- C/ L: t$ B
17.6.2 OID查询处理的直接完成 462
  H' w$ p9 B7 S( _17.6.3 OID设置处理 465
2 |3 X) z& j; V* f
4 G: c" v3 v& ~1 c! A第18章 NDIS中间层驱动 467
( E* T! N8 k2 T  q* ?. P: q5 o% X* @: O' g* y) u  _, U
18.1 NDIS中间层驱动概述 467
! b4 L! j! D9 L18.1.1 Windows网络架构总结 467
. I; `* W7 j* X18.1.2 NDIS中间层驱动简介 468
/ t8 q2 Z1 u# C. |1 d18.1.3 NDIS中间层驱动的应用 4695 z. q% ^, ?" K7 e  i' d
18.1.4 NDIS包描述符结构深究 470
3 T  v' U, N# l18.2 中间层驱动的入口与绑定 473
  o* i# [+ i- D; e18.2.1 中间层驱动的入口函数 4734 _$ Z7 M( Q. |- F7 t* y+ m
18.2.2 动态绑定NIC设备 4744 a9 Y% l" F3 y2 E0 U9 I2 x& l
18.2.3 小端口初始化(MpInitialize) 475- x8 b3 h. ?" n: Z2 C2 ~
18.3 中间层驱动发送数据包 4779 ], h# M( ]: u: E" c+ w9 ?+ g  L
18.3.1 发送数据包原理 477
% b1 q8 t6 F  G! ^* d1 v7 |18.3.2 包描述符“重利用” 478
; I' `, f' ?; Z7 o18.3.3 包描述符“重申请” 481* D' o& ]9 l- q2 }) k% k" o( `
18.3.4 发送数据包的异步完成 4825 O! Z4 n2 z" m1 o% m3 B+ w
18.4 中间层驱动接收数据包 4849 a5 ~% K  T; b: t7 }: h
18.4.1 接收数据包概述 484
6 J7 N' N" b, ~: |18.4.2 用PtReceive接收数据包 485
+ D, D) p. o1 ^18.4.3 用PtReceivePacket接收 490
/ D5 N9 X* f* W) o& {9 h18.4.4 对包进行过滤 491
4 u- c3 ^9 |& Z7 w1 A9 \3 G8 ^18.5 中间层驱动程序查询和设置 494# ~$ d' u( ], m3 P
18.5.1 查询请求的处理 4941 B. x$ o! ^& Y
18.5.2 设置请求的处理 496
, A6 ?' y. O! @: B18.6 NDIS句柄 4981 f# t+ A2 Q' H- `6 s1 `* q) {
18.6.1 不可见的结构指针 498$ \6 o) S) D: A7 b( b7 k8 z
18.6.2 常见的NDIS句柄 499* i/ b* i4 H+ J4 z4 S
18.6.3 NDIS句柄误用问题 500
' d& b% m, _" e7 `18.6.4 一种解决方案 502
0 Y; r0 Z1 [1 L) G( q18.7 生成普通控制设备 503
7 ^7 f# y3 r6 }5 O18.7.1 在中间层驱动中添加普通设备 503
' U4 Y/ h* r& W- P18.7.2 使用传统方法来生成控制设备 5050 @8 ^$ t2 x, X

% Y4 |2 p1 @: @% h- O0 n2 d6 i第19章 IA-32汇编基础 511
$ P! p+ v9 f, t, d+ |) J9 P* y8 w' F) `2 G% m% ?' s2 ]2 z" Z8 m: n
19.1 x86内存、寄存器与堆栈 511( H5 I# r0 ]1 ?" l
19.1.1 _asm关键字 511
' W) G$ n& V& `. }; b* A# k19.1.2 x86中的mov指令 512- Y8 c/ K8 @$ H0 @
19.1.3 x86中的寄存器与内存 512
- A/ j7 O5 a  f2 E/ f' t1 D. T" ?, ]19.1.4 赋值语句的实现 5139 e8 @9 j# A# ^; k( m$ u  I- D
19.2 x86中函数的实现 514. k' R. m- R$ Z- I+ n/ {' H& A
19.2.1 一个函数的例子 514
' b' _# {% T! Y19.2.2 堆栈的介绍 515
8 r7 b& u$ O0 j% o19.2.3 寄存器的备份和恢复 516# s% ?* Z$ R0 @" V+ _; w3 G5 E
19.2.4 内部变量与返回值 518( M; n: D3 q: G* o7 f- O. Z* G
19.3 x86中函数的调用与返回 521! M  v! U# e. W# H6 @3 C9 ~8 r
19.3.1 函数的调用指令call 521# }, S& ?2 [5 u1 J" U& M" I. v
19.3.2 通过堆栈传递参数 521
5 l* F5 c* f0 r; A! M7 |& P, c) N19.3.3 从函数返回 523
! i7 q# k) x) z5 d19.3.4 三种常见的调用协议 524+ }4 u% I; J3 P, ?: w% W; U
19.4 从32位汇编到64位汇编 526( F3 d5 b% c! {4 v
19.4.1 Intel 64与IA-32体系架构简介 5269 x- F+ k$ ^) \9 Q
19.4.2 64位指令与32位指令 526
# i7 ~0 c$ o' k: H2 E- ?4 s6 \$ D19.4.3 通用寄存器 527
( v9 R& u+ ~; ~( \& s19.5 64位下的函数实现 528
1 m7 u' m: z5 J0 ?/ g, ^. e+ S19.5.1 函数概览 528
7 @2 |5 ^( l, o/ m19.5.2 32位参数的传递 529' T$ {3 K: B0 k5 Z2 C
19.5.3 64位参数与返回值 530
- {% v  g' T* T1 a+ t19.5.4 栈空间的开辟与恢复 531. o5 e2 Z) R5 X" Q; y9 [7 F& u

/ h6 z9 v( l) ^第20章 IA-32体系中的内存地址 534) F# i! L$ j- C$ ?8 N! p9 I+ o
) s4 O, V' c2 C8 q
20.1 内存的虚拟地址 534+ Q5 d' ]! h( ~: w9 s; }9 Y! ?
20.1.1 C语言中的内存地址 5342 Z" v# A6 N1 d8 {5 x6 X& [+ m6 c
20.1.2 虚拟地址的构成 535  c3 o9 q& j7 u3 E) }+ `
20.1.3 段的选择 536
1 S( D) b4 ?, q, G, ]  H" F20.2 全局描述符表和段描述符 538
4 z. ]- C7 t- J: m20.2.1 全局描述符表 538- u7 D7 E4 a' n9 g8 L0 @7 R
20.2.2 段类型 539
+ u8 D2 L) Y5 {) M( N20.2.3 段寄存器与段选择子 540& J5 I! c/ V0 x7 v
20.2.4 64位模式下的段 541+ E, V1 c3 ?6 C  g! E# R  I# D
20.3 分段编程实践 542. P* X4 [* Y. p+ \! E
20.3.1 系统表寄存器的结构 542: [0 }# S* c3 Z5 U; E/ O
20.3.2 在汇编语言中获取全局描述表的位置 543/ A" {3 C. ]1 z3 k  C9 I2 \- D
20.3.3 调试范例:sgdt指令的错误使用 545
# ?6 F& Z3 q0 {$ q/ K20.3.4 在64位下获得全局描述符表 547* h  {! X) ?% O$ J
20.4 线性地址基础 549
& ]( g  I) Q9 |* p8 L20.4.1 分页控制机制 550
3 D2 t& c7 |& b; K* l20.4.2 线性地址的转换 551( C* v2 }( I$ Y# ]( s% `
20.4.3 混合页面大小 552
' l+ f$ }/ _6 t% a20.4.4 32位物理地址的页目录和页表项 552" S4 R3 ^$ W" _) h$ p- ^
20.5 各种特殊分页方式 555
" S7 ?. F' x3 T4 V/ a9 L6 ?20.5.1 PAE分页方式 555
3 V+ L) B; I: N" \* c* k20.5.2 PSE-36分页机制 558- \" [. p( o' Y; @5 S5 R
20.5.3 IA-32e模式下的线性地址 559
9 O0 S8 P* A; `! F. s20.6 分页编程实践 562
0 ^8 q  ~* m4 s/ @0 O9 A; K20.6.1 页目录和页目录指针表的获取 562/ z; `1 L, T6 C
20.6.2 页表的获取 564
- Q; Z' s7 f& Z! E2 b20.6.3 线性地址的结构 567
; S; c) Q4 S7 a2 n, ?9 q: g- u" U& l2 X8 t9 S" b0 `; H) Y# L8 Y
第21章 处理器权限级别切换 571
0 s% R4 @1 f( C5 N/ J- t
. M$ g, P" G- F. {' P/ z21.1 Ring0和Ring3权限级别 571
7 |: p5 H6 K0 P3 `21.2 保护模式下的分页内存保护 572
* Z5 l0 X6 q' ]% A5 ?21.3 分页内存不可执行保护 574
! [0 l1 {, m) V2 a. E9 G) [8 J21.3.1 不可执行保护原理 574
2 K3 P3 ^+ {: D: w, H21.3.2 不可执行保护的漏洞 575
" {) H# w4 ?' Y6 R; Z21.3.3 上机实践 577
, F. P6 o) ?0 \21.4 权限级别的切换 579: V7 E9 X  [( R% ?$ l8 L
21.4.1 调用门及其漏洞 579
- _: A; m/ N0 _' |" P21.4.2 sysenter和sysexit指令 5818 V' A2 U- ^8 C- }/ Y& W" l
21.4.3 上机实践 583) Y  ?, c) v2 U  ?
+ o' S2 E; t  s* w
第22章 IA-32体系结构中的中断 585( }2 e  b* c3 ^7 d, G

$ N/ B& ]# u( Y2 l( k" N$ S# ?! V7 I22.1 中断基础知识 585  C2 Q* c$ ^6 v
22.1.1 中断描述符表 5859 b4 s% @; t* a+ l) m& _
22.1.2 中断处理过程 587
4 D" G9 E$ a0 I# ]5 j22.1.3 64位模式下的中断处理机制 589
, r' ~( W% b7 S' w" `0 I& C+ N8 O- }22.1.4 多核下的中断 589
! C7 Z4 n' D* s% \0 x8 f22.2 Windows中断机制 593
( L; d5 y* l' O4 i22.3 中断编程实践 596
1 G( j' C4 M4 D3 k! I+ y7 E22.3.1 IDT Hook 5965 w  M' u2 y- c
22.3.2 巧用IDT Hook实现安全防护 598
. c5 \9 o- H( w1 M6 ~# m  r+ o5 @' i2 y4 y5 Z  s1 S
第23章 Windows内核挂钩 601
- R  `& i: f& X9 q0 t, F8 ~/ n: X3 H. O: J$ |0 p
23.1 系统服务描述符表挂钩 602$ ]# _9 X+ M& a% o; s5 T' S- r
23.1.1 系统服务描述符表(SSDT) 602' I" D. j1 o: N- d) e
23.1.2 系统服务描述符表挂钩的意图 603# J8 P# L9 P( T( s' K
23.1.3 寻找要挂钩的函数的地址 6047 C& h. f- f; O* S# d" ?) s
23.1.4 函数被挂钩的过程 605* ~1 F3 s" I. s8 Z- u; n+ v6 T
23.1.5 具体实现的代码 606
" ?4 X) T7 \! ?) g/ k5 u& [" a23.2 函数导出表挂钩 608
2 k+ F0 e- I1 w- T* ]; d- U: [23.2.1 内核函数的种类 608
) I, G6 n5 T7 W6 ^5 S23.2.2 挂钩IoCallDriver 610
" K+ c& p' Z  @& W1 V3 q23.2.3 对跳转地址进行修改 611
# _3 Q7 r* C% p. |$ o" I23.3 Windows 7系统下IofCallDriver的跟踪 612
; `) k" _4 R, v23.4 Windows 7系统下内联挂钩 615
, v$ ^7 e0 j4 p& r0 I' G) Q23.4.1 写入跳转指令并拷贝代码 6151 n* U) M; `5 ]* c
23.4.2 实现中继函数 617: k# _8 i1 P4 S- Z$ N. J7 {
3 P+ ~- U% Q1 E, ?/ f

1 j$ |: T: H/ R; T高 级 篇
0 c, D" E( R2 J, y! ]8 d) \
4 l' S" H2 \, n; k! P4 T  a第24章 Windows通知与回调 620
+ a$ T% B* r9 b: K! Z: [
- g4 a* h$ Y2 a% i0 g6 e0 _! U24.1 Windows的事件通知与回调 6207 J. _6 r( z# v7 I: U# L
24.2 常用的事件通知 620
" m  b/ G* m; b- J+ w24.2.1 创建进程通知 621; P/ L* {7 ?+ P/ ?& d3 y
24.2.2 创建线程通知 6257 d2 o/ {% y. E. u  i0 u7 y3 a6 H
24.2.3 加载模块通知 626
! o& J; A3 E  n( ^% j9 ^/ ?24.2.4 注册表操作通知 629' F( m0 B0 i+ m% Z0 X! \
24.3 Windows回调机制 636
( D" o: q- e8 w7 Y7 }8 G24.3.1 回调对象 636, |+ d+ s* C; z' ]" Q( W
24.3.2 回调对象的创建 637
& l4 @: g; q. Y24.3.3 回调对象的注册 637
1 o# u: B* r- Q! H1 U( a% \24.3.4 回调的通告 638* F+ q) F: @0 l8 o
24.4 安全的死角,回调的应用 6392 Q) v: z8 l9 E9 n1 {' @1 S: b
" ~( ], O: h& ^& Y. T2 I7 W! C' p5 ^/ y& V1 |
第25章 保护进程 6405 a1 q/ j8 m) u3 m
0 s, @( ?+ j9 Y9 p" U0 [3 G3 q# d
25.1 内核对象简介 6409 z4 m7 h" D5 z# @
25.2 内核对象的结构 641" t9 ]9 T* e3 I+ _1 b: Y
25.3 保护内核对象 642! u2 H1 z' [& t1 p3 f
25.3.1 处理对象的打开 643/ q$ f  S0 k; u6 e9 E  U" X. ~
25.3.2 处理句柄的复制 6445 _% Y5 h$ V6 s1 g, k
25.3.3 处理句柄的继承 646
- S' T$ Z( ^. `% e. {9 S25.4 进程的保护 652) D' E+ c# L8 w8 a
25.4.1 保护原理 652
( A4 l+ Z- l* R3 x% ^# S/ |25.4.2 Vista以后的进程对象保护 654! r) h" v/ ~+ T7 u$ P- T6 G5 p
25.4.3 进程的其他保护 6552 c# j9 M' b3 d4 V- j4 i3 k

! ?0 l" ^: D. ^7 [0 S: S6 h附录A 如何使用本书的源码光盘 656
9 O% K1 r" B3 M1 n" j' l; @+ c% m0 z/ O. q
附录B 练习题 6593 o# o$ w3 I& u! L* l3 A

2 G2 H% p5 m5 t  k
$ U5 ?. t# g; j/ n, L. v6 f# K
想知道小甲鱼最近在做啥?请访问 -> 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-4-20 19:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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