QQ登录

只需一步,快速开始

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

主题

帖子

荣誉

管理员

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

技术值
查看: 1437|回复: 1

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

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

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

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

x
TB1eC4MIFXXXXaOXpXXXXXXXXXX_!!0-item_pic.jpg_430x430q90.jpg

7 Q& Z/ D1 c* V6 _% i
8 {+ O2 A4 @% @% j+ i; O: J书名:《windows内核安全与驱动开发》$ ?5 F2 `# V9 E/ C4 L0 n1 N' B
作者:谭文;陈铭霖
0 s8 S$ V4 f( U; J- r8 F+ d4 M出版社:电子工业出版社
) A; B8 ]4 e0 t7 }* I- K" S+ k  p( _出版年:2015年6月1日(第1版)
, ?* E1 j$ a/ K2 g( R; ^# J. t定价:139.00元7 I. ^3 n! P: x7 B4 W; z
装帧:平装' W% I4 F4 n& N& f% R( q1 [  f
ISBN:9787121262159
2 i- |7 `) m& d- c! ?4 Q1 Y0 ]& ^5 l8 |% U" i
购买链接:
6 N" C- v5 Q4 ~% z  a. D
# G8 H- X  e' F
0 h* S  Y# s/ r1 G% P* X
亚马逊 -> 传送门
" P1 O5 }! S2 \5 L4 t6 {- ^* Q. ~* E
0 V. s0 O/ v: \2 q) i当当网 -> 传送门
. B. w/ T" S- b: T) H- o) e9 X' V; u( t8 r, f+ z
京东 -> 传送门& l/ `" q& m2 S* V
" P8 H+ K2 R- F0 N' @
天猫 -> 传送门
( \4 }; Q, {, F8 R+ `2 Z" }9 ?: B; G
* j! F# Y# K( z% s( Z/ m3 G/ Q8 B
内容简介:
; p4 r' F2 D8 p% ?
- Z- @& }: K0 }9 U

2 S1 w$ |7 K, P本书的前身是《天书夜读——从汇编语言到Windows内核编程》和《寒江独钓——Windows内核安全编程》。与 Windows 客户端安全软件开发相关的驱动程序开发是本书的主题。书中的程序使用环境从 32 位到 64 位,从 Windows XP 到 Windows 8 都有涉及,大部分程序不经过修改即可在 Windows 10 上运行。同时本书也深入浅出地介绍了进行内核安全编程所需要的操作系统、汇编等基础知识。6 P) {8 R- U( i/ t# a

, w& `9 g8 Y- c; w+ x1 j, o本书共分三篇,基础篇囊括了驱动开发的基础知识,降低了入门的难度;开发篇介绍了在实际工作中可能遇到的各种开发需求的技术实现,包括:串口的过滤、键盘的过滤、磁盘的虚拟、磁盘的过滤、文件系统的过滤与监控、文件系统透明加密、文件系统微过滤驱动、网络传输层过滤、Windows 过滤平台、NDIS 协议驱动、NDIS 小端口驱动、NDIS 中间层驱动、IA-32 汇编基础、IA-32 体系中的内存地址、处理器权限级别切换、IA-32 体系结构中的中断和 Windows 内核挂钩;高级篇包含了汇编语言、操作系统原理、处理器体系架构相关的内容。本书是由长期从事这个行业的工程师自己写的,所以处处以实用为准。对细节的考究主要体现在对实际问题的解决,而不是知识的详尽程度上。
7 E0 X% k0 D9 X, f, h: n* l
% F  M- y7 y! _目录:
$ x" X; ?0 L5 f0 J" m* H1 X" a* }3 A
$ D# I* U' @! g- r+ R- }) j
) [5 e/ [( A7 o9 P
基 础 篇 , B7 |% n, l4 i" a) @, k0 J
8 j" |2 ?' P7 x1 \" x0 K
第1章 内核上机指导2 9 ~' c0 V$ c: t$ Z" h7 ~* U* @* ]

! h! y. I; z5 i. L1.1 下载和使用WDK2 ; T9 B% u3 ?7 s/ u! @& J
1.1.1 下载并安装WDK2 & W# X& C+ A" e. j# L
1.1.2 编写第一个C文件4
, ~5 i' C: b+ W+ d$ O1.1.3 编译一个工程5 , i) l5 h0 i: X/ C/ }9 w
1.2 安装与运行6
* ^( h3 `5 U& t# A0 M1.2.1 下载一个安装工具6 9 x' E% k5 H5 X$ F* W
1.2.2 运行与查看输出信息7 ' Z4 ]# Y# J. w; V- L0 G' G
1.2.3 在虚拟机中运行8
6 X$ U2 J  K& \8 b& Q/ ]* [1 y1.3 调试内核模块9
  ]% {1 i/ \) `1 I1.3.1 下载和安装WinDbg9 / d3 i+ G' v7 }9 a, N, r/ h0 _
1.3.2 设置Windows XP调试执行9 1 u* i( I6 v, c# D) d& ?( \
1.3.3 设置Vista调试执行10
5 D0 M1 Z, a4 r4 V9 R1.3.4 设置VMware的管道虚拟串口11
4 N' E: |! |. C* y) P1.3.5 设置Windows内核符号表12 $ h: V9 V" r+ l2 S
1.3.6 实战调试first13
' J, z6 M# P6 N, O$ x/ I# x8 p4 z9 p3 D* f
第2章 内核编程环境及其特殊性16 % n5 z0 B  j7 w$ B2 u) c

& e' E: f% {2 X; i5 R) ~2.1 内核编程的环境16
2 n3 J. O' o: U& Y! A9 m" [2.1.1 隔离的应用程序16 6 B6 T( M% ?: a* K* s( i
2.1.2 共享的内核空间17
" V0 B" h: L: p( @8 m2.1.3 无处不在的内核模块18
6 D+ p5 s1 J' J3 r& @" h; g2.2 数据类型19
. p. ]4 F$ a; O: ]# l7 c2.2.1 基本数据类型19
; q' }9 W& ^' Q, }% r; {2.2.2 返回状态19
5 l6 z5 D; c! q# U2.2.3 字符串20
$ ]- p. k7 B& I9 ?2.3 重要的数据结构21 ' T/ {  x. c  y9 J" [" T% o
2.3.1 驱动对象21
' Z% K5 ]/ p. F8 U2.3.2 设备对象22
' D% j5 u: _* C5 K/ ?/ Z2.3.3 请求24 2 E  d, _# z3 V& a+ J. x  O5 |" u
2.4 函数调用25 ( R6 c7 y) ^$ W2 ^, ?6 [
2.4.1 查阅帮助25 / |$ Q+ |' V* a- u
2.4.2 帮助中有的几类函数26 3 `  R5 L+ Y- n* F/ [7 g2 E
2.4.3 帮助中没有的函数28 ! ]& ?( o, D. B+ E, n
2.5 Windows的驱动开发模型29
: D7 y( \. t, S6 {2 b& n2.6 WDK编程中的特殊点30
' s3 S+ G) S, Y* B+ D; l2.6.1 内核编程的主要调用源30
. D! M+ _+ c# c0 j: v3 q; h& h4 H& T2.6.2 函数的多线程安全性30
5 P# f! |3 Y5 k+ F* l* M; c# K: b2.6.3 代码的中断级32
/ y6 e. s1 ]$ P; @2.6.4 WDK中出现的特殊代码32 1 T# W. a+ B* i' [

4 ?+ O5 j0 s1 Q+ |# r/ {第3章 字符串与链表35 & K. ]1 K4 t, o2 j; i9 M1 b# S7 ~
2 s! o) Z' f7 o  G: w9 v
3.1 字符串操作35
* B7 l" k% P, I: J% N) E3.1.1 使用字符串结构35
9 ?, ~. M# Y9 Y" q3.1.2 字符串的初始化36 * }0 n0 O' x6 S3 z, R
3.1.3 字符串的拷贝37
7 J9 q" i: L5 O) t( v0 H0 a8 Y3.1.4 字符串的连接38 2 z$ X( D4 L% m8 w0 n
3.1.5 字符串的打印38
0 X0 R0 q8 H+ a8 E7 ]3.2 内存与链表40
. z% l& h+ O  X3.2.1 内存的分配与释放40
: x: c$ H, p5 e/ v4 G) S* q* l/ K# y" `: ]3.2.2 使用LIST_ENTRY41 , Z* G" r4 e. C) h$ h
3.2.3 使用长长整型数据43
& W8 |+ `1 j5 c0 D) x3.3 自旋锁44 # e* G; g: j8 `/ G& |- [: b
3.3.1 使用自旋锁44 7 g% E5 w( h( X/ E- O
3.3.2 在双向链表中使用自旋锁45
8 r, }; G* }; a4 X3.3.3 使用队列自旋锁提高性能46 $ d! n/ [- A; s0 ?! g
/ y2 J9 j0 z9 A7 W4 \
第4章 文件、注册表、线程47
! F0 R$ k0 V% [- n; T, d5 [% W7 k6 \& i) T* h
4.1 文件操作47
% D* P% {0 v2 r: X; r; N! {4.1.1 使用OBJECT_ATTRIBUTES47
0 i) \6 d9 n( {9 K: x8 l4.1.2 打开和关闭文件48 . F' ]9 Q3 T4 v: A0 n
4.1.3 文件读/写操作51 * ^1 ~* l5 q  I* z; v
4.2 注册表操作53
( D2 S2 |. s1 m2 _% ~) F4.2.1 注册表键的打开53
' u6 \" M: \1 V; p$ C! o/ W4.2.2 注册表键值的读55 ( N. ^" K8 i5 ~
4.2.3 注册表键值的写57 3 Z( c! z1 z! ~3 h0 T
4.3 时间与定时器58
- D( J( k1 r0 M3 M4.3.1 获得当前“滴答”数58 ! G1 _5 q: r; B4 d4 Y& L
4.3.2 获得当前系统时间58 9 A6 N, t2 v5 b4 y
4.3.3 使用定时器59 + Q- P6 T4 h! t
4.4 线程与事件62 ( \: ]7 b+ W& k/ o
4.4.1 使用系统线程62
9 R0 C1 ^: x* r) T: `4.4.2 在线程中睡眠63 3 `! k1 d$ |/ f  L* T/ x, C: S9 ]
4.4.3 使用同步事件64
1 ~/ U6 H2 e9 x$ r% {1 U5 O+ @1 _1 O& g7 m5 `3 }6 T* `8 |8 B3 ~
第5章 应用与内核通信67
+ q: j4 S2 U3 k2 F2 K& {; M& O# \4 N+ B, L) b" O! K
5.1 内核方面的编程68
( l' I( z' c- R5.1.1 生成控制设备68
, @/ v; P& O  a/ H' p! R3 d: h5.1.2 控制设备的名字和符号链接70
. {5 V3 J& c6 n% F5.1.3 控制设备的删除71
! b4 k; l8 s4 I& c6 ?5.1.4 分发函数72
, J# n$ m" {/ k5 C5.1.5 请求的处理73 / T3 k% Y, d3 \/ I. |+ u
5.2 应用方面的编程74 - H# U8 K1 ~  G1 R
5.2.1 基本的功能需求74 ) }% a9 T! U7 _) A; d* \
5.2.2 在应用程序中打开与关闭设备75 - j* F/ ~& F' z, r
5.2.3 设备控制请求75
, J; R* m8 Y& L  L* e5.2.4 内核中的对应处理77
+ L) ]1 ^% M# {6 ]/ c" q5.2.5 结合测试的效果79
$ e% ]) E. K4 _2 ^! o/ f5.3 阻塞、等待与安全设计80 ) d% b8 }$ F: a
5.3.1 驱动主动通知应用80 : `; {! P0 M' G
5.3.2 通信接口的测试81
: f% S# x6 M" W" h( A0 ]5.3.3 内核中的缓冲区链表结构83
" g  K/ m6 f+ u: a0 W5.3.4 输入:内核中的请求处理中的安全检查84
( W! m; j* z3 e2 ]. M5 u- Q  {5.3.5 输出处理与卸载清理85
# Q& \9 V. e6 _- d' _6 S$ H. i, g# B" ^) k) C5 j
第6章 64位和32位内核开发差异88
2 M3 ~, e* F5 ?4 O- P* A
& H$ N5 \2 O! A) W  k5 m6.1 64位系统新增机制88 5 l# I- s/ @4 o4 U' O2 @1 i0 a- V
6.1.1 WOW64子系统88
8 T9 B% O  `9 o3 ^6 n# |6.1.2 PatchGuard技术91
' W& L4 v4 y4 f" R, [6.1.3 64位驱动的编译、安装与运行91
& W( l" H% M4 o! g6.2 编程差异92
* {1 ~% Z3 {0 i; t2 `3 V- D6.2.1 汇编嵌入变化92
# }/ g( r: l" t8 W3 t0 r3 Q( x6.2.2 预处理与条件编译93 5 p. }! O9 K& h% g- w
6.2.3 数据结构调整93 - R9 p( {* \: u, b/ ^
# p  }2 ^. {, B9 I; @* J
0 M( ?) w* S8 q) Z" C/ L/ y% a" J
开 发 篇 5 K/ Y$ G9 d5 ^9 s. H; ^

, W6 M% _( @( L6 y% }8 C$ y第7章 串口的过滤96 4 A& x, B5 t9 _, p: A
6 S& S4 X* L; V: Q
7.1 过滤的概念96
! X2 k. \' V# @0 i7.1.1 设备绑定的内核API之一97
! ^. E; [4 J+ _1 G8 f6 {+ r7.1.2 设备绑定的内核API之二98 1 I$ c7 b+ j/ [' ^
7.1.3 生成过滤设备并绑定98
+ P4 U& M* e  C0 Q/ U0 ?$ b7.1.4 从名字获得设备对象100 " o3 o- g& O. ]  M
7.1.5 绑定所有串口101
2 m! z; ?, P0 }7.2 获得实际数据102 3 ]/ o# J5 [+ r& L) V$ N+ S; D: m
7.2.1 请求的区分102
* J# [9 `4 N* z( {, ?: [; ]7.2.2 请求的结局103 1 b1 s$ L: _5 R! @+ W
7.2.3 写请求的数据104
5 O5 {7 c, l0 V9 w$ z7.3 完整的代码105 , n# x/ }( x4 Z+ F2 t
7.3.1 完整的分发函数105 # l) c) \4 f" h# ?5 D
7.3.2 如何动态卸载106 / r' N: l; Z, ~* B' @
7.3.3 代码的编译与运行107
3 ^7 B1 U4 a. N2 J
/ i$ K2 u7 c- y3 Y第8章 键盘的过滤109 6 t4 k; P( E  g3 |( F. \

& G- m8 k6 n  A6 L- h. c9 }8.1 技术原理110
  `! H8 D& {* `8 P1 K) ~. O8.1.1 预备知识110
' H' T6 g8 h6 \% y8.1.2 Windows中从击键到内核110 1 A1 C8 ^* u2 p
8.1.3 键盘硬件原理112
7 z6 n- ^. ?4 {. H; T. l8.2 键盘过滤的框架112 + {3 F+ Y- M. w( x3 y
8.2.1 找到所有的键盘设备112 / T1 O& @; ?5 N7 p
8.2.2 应用设备扩展115
8 X0 F7 m! ?6 P9 y$ z$ L9 I8.2.3 键盘过滤模块的DriverEntry117
/ b9 `+ |! H% d7 F8.2.4 键盘过滤模块的动态卸载117
9 p9 e" d+ {- O8 O, }' @8.3 键盘过滤的请求处理119
, o) T; ?; M, a) _8.3.1 通常的处理119 + ~; x5 x8 {! @+ ?
8.3.2 PNP的处理120
4 E7 b/ P! ?- L2 d1 z7 J9 }0 M8.3.3 读的处理121 ! o2 s0 h! c; J
8.3.4 读完成的处理122
6 z! s& B8 g" m( o" z1 J% g8.4 从请求中打印出按键信息123
4 [6 o9 E3 y1 ]# f9 q, I8.4.1 从缓冲区中获得KEYBOARD_INPUT_DATA123 2 `! n3 _4 [" @; j' n* o
8.4.2 从KEYBOARD_INPUT_DATA中得到键124 ' m& B- F: |1 n8 K
8.4.3 从MakeCode到实际字符124
! @' [3 {5 z3 T; p- k9 }8 z8.5 Hook分发函数126
) M; T; j/ |# ?% R7 T! K0 [8.5.1 获得类驱动对象126
4 ~" q- y3 H& d! v. z+ _# |- j8.5.2 修改类驱动的分发函数指针127 8 \; I6 F5 n0 I
8.5.3 类驱动之下的端口驱动128
& E0 z+ i9 i9 x0 \1 P4 `; x) B0 g8.5.4 端口驱动和类驱动之间的协作机制129
0 U; `, {, y+ G( W  M6 s5 t! k8.5.5 找到关键的回调函数的条件129 ; j# F8 N4 n6 v! v! q3 N# G8 C; H0 ?" @
8.5.6 定义常数和数据结构130
  [  V' C- |1 w' [: X# [  B( V8.5.7 打开两种键盘端口驱动寻找设备131
% g; O2 a3 g! D1 M8.5.8 搜索在KbdClass类驱动中的地址133
, H7 n; J+ h! D# A8.6 Hook键盘中断反过滤135 ( F# W' W1 |" A% {
8.6.1 中断:IRQ和INT136 8 ]$ i# b$ t; }: {& r2 V
8.6.2 如何修改IDT136 + f( B" M4 p! A' @0 T: c
8.6.3 替换IDT中的跳转地址137 0 J8 [1 _" y! ~2 I3 ?3 z4 S
8.6.4 QQ的PS/2反过滤措施139 7 \7 {* r" o) C  j
8.7 直接用端口操作键盘139
. K+ u# M0 h  M* C; Q. {8.7.1 读取键盘数据和命令端口139
" p% w9 Y, w6 d2 m) H1 B0 u8.7.2 p2cUserFilter的最终实现140
. \! e  ^& v# H$ }
/ E, @4 B  f9 [' _+ S第9章 磁盘的虚拟143 ! o: W) W8 u) ^. X

; z; o5 G7 z, W& D9.1 虚拟的磁盘143
1 [+ ?: y. y6 H7 ?: L3 d9.2 一个具体的例子143
& ^0 t* j9 u- l3 ]+ W9.3 入口函数144
4 D3 K  x# u( K, ^" E1 G/ p% J9.3.1 入口函数的定义144
( B0 U% E3 c. q* U9.3.2 Ramdisk驱动的入口函数145 + @" ?9 Z' h' B0 \" U
9.4 EvtDriverDeviceAdd函数146
  y0 U9 P) ]5 @% v8 V& K( n, T' C9.4.1 EvtDriverDeviceAdd的定义146
8 E' ?: C- O5 o  T! s- N* T0 t7 u# P9.4.2 局部变量的声明146 ( F' q1 ^- W: ?- T5 @- v( h
9.4.3 磁盘设备的创建147
1 l9 w. w% G! Z$ e: k9.4.4 如何处理发往设备的请求148
, b' d! z( e7 ?1 O' G1 E9.4.5 用户配置的初始化149
% K( a6 v5 u7 R9.4.6 链接给应用程序151 ( F' t9 g: W! v) r8 ~
9.4.7 小结152
6 c0 }) {/ g- W9.5 FAT12/16磁盘卷初始化152 # H+ N! R) u; `% J" K& B2 ^
9.5.1 磁盘卷结构简介152
& s" g9 ^. g% I) u9.5.2 Ramdisk对磁盘的初始化154
4 ?8 L) [( n1 C, p1 r- ]9.6 驱动中的请求处理160 2 U9 k% v/ o. ?6 y
9.6.1 请求的处理160 ! p: @6 c) _; N/ ~6 I
9.6.2 读/写请求160
3 w+ A& Q; V( y9.6.3 DeviceIoControl请求162
. x. ?; ^  h. z& g) j8 p: G9.7 Ramdisk的编译和安装164 " z2 m5 }4 f9 W
9.7.1 编译164 $ W$ h  e. p4 Z  i; s1 F
9.7.2 安装164
  N, o7 R$ l2 P9.7.3 对安装的深入探究165
6 _4 S# }0 s( b+ `; _& W. I/ p+ o( F9 [% i9 f
第10章 磁盘的过滤167 7 z0 a/ }" ~4 D$ {- U

! q) U4 d  j. p. {& W/ D+ g, a/ V10.1 磁盘过滤驱动的概念167 7 T8 v. U) v! g$ U
10.1.1 设备过滤和类过滤167 " z. R3 W0 d* v, F8 q/ ]
10.1.2 磁盘设备和磁盘卷设备过滤驱动167
0 s4 q4 a, ^: B/ b6 t. _( }10.1.3 注册表和磁盘卷设备过滤驱动168
/ V. {3 n( l; s1 S10.2 具有还原功能的磁盘卷过滤驱动168 $ i! h% F8 \0 V. o$ u$ a
10.2.1 简介168 - F, m# d5 U; s& M
10.2.2 基本思想169 " ]0 y+ H- {$ N+ [8 X
10.3 驱动分析169 2 T; r1 f6 O5 q4 s. _( b/ s
10.3.1 DriverEntry函数169 # F' X6 Y' B  j9 N
10.3.2 AddDevice函数170
9 x. k, o5 t' {  ]7 W9 S' k9 B10.3.3 PnP请求的处理174   V, G& t" J& W" @% n6 [9 o+ J7 @3 w
10.3.4 Power请求的处理178 0 K& R4 @  T+ Q  }
10.3.5 DeviceIoControl请求的处理178 % F, p7 H4 f  F% T
10.3.6 bitmap的作用和分析182 & `8 D/ f& h% k4 R$ R
10.3.7 boot驱动完成回调函数和稀疏文件187 $ t6 ?6 d( r; d* p9 V- R0 h
10.3.8 读/写请求的处理190 2 ~& I+ y9 r+ z. M
# [' [1 \$ s. |( U, l* q& x6 E
第11章 文件系统的过滤与监控199
$ k% h- k1 \: ^; }
$ D3 F, K# m0 p11.1 文件系统的设备对象200
: R  X: H9 z9 Q* P4 l11.1.1 控制设备与卷设备200 " K8 L- ^2 K: l) \0 y0 l, f- K
11.1.2 生成自己的一个控制设备201
2 Y! D: }6 D9 L! g; v9 |, v! Z11.2 文件系统的分发函数202 * ]# T. c' Q( x5 l# z
11.2.1 普通的分发函数202
& q/ x  Y) X6 d: J11.2.2 文件过滤的快速IO分发函数203
8 j6 x/ u3 t' i; R0 A3 D, p) o4 e, t+ p11.2.3 快速IO分发函数的一个实现205 5 R2 Q; h1 f3 n; W9 n+ q+ r, U( P
11.2.4 快速IO分发函数逐个简介206 0 S/ U5 f: }6 q8 |/ A9 Q: U
11.3 设备的绑定前期工作207 ; _+ F, m, P) ]7 r4 O: D
11.3.1 动态地选择绑定函数207
' y. ^2 K5 B% }% P* N5 Z11.3.2 注册文件系统变动回调208 1 u3 J3 W5 X; a3 Z; E! e
11.3.3 文件系统变动回调的一个实现209 + V6 ?7 }0 C, K* T9 z
11.3.4 文件系统识别器211 ( w( }3 E6 N2 s! Z/ Z9 f- d
11.4 文件系统控制设备的绑定212
! z! J( n  e) `5 h0 a  `11.4.1 生成文件系统控制设备的过滤设备212
6 }) s! r2 ^/ g: r. ~11.4.2 绑定文件系统控制设备213 4 H! \2 v3 k2 L4 O
11.4.3 利用文件系统控制请求215 + ^3 h+ a: g& b; A
11.5 文件系统卷设备的绑定217 $ q4 l6 I- w. N- }! M. V
11.5.1 从IRP中获得VPB指针217 1 R: T: V6 q" Y) Z' Y' \# z9 E
11.5.2 设置完成函数并等待IRP完成218 - Y1 z" _' Z0 o
11.5.3 卷挂载IRP完成后的工作221
+ O# Y$ F! G  Y* X% t11.5.4 完成函数的相应实现223 8 N: Q( `  V3 w3 A9 j3 j
11.5.5 绑定卷的实现224 0 _9 H& \- ~$ S* J: |0 e
11.6 读/写操作的过滤226
' [8 a$ v- ^1 @11.6.1 设置一个读处理函数226 , L9 y9 h. K; J2 j& W1 [
11.6.2 设备对象的区分处理227 ' a: A9 Y8 ^# G1 s' ]
11.6.3 解析读请求中的文件信息228 " O: s/ N+ h' R) q
11.6.4 读请求的完成230 / V& }0 ?$ ?6 B3 Y# P% u( d
11.7 其他操作的过滤234 2 E( n; n' U) H2 [, |+ L
11.7.1 文件对象的生存周期234 ; X9 e; G5 U; s9 \# t: j) U
11.7.2 文件的打开与关闭235 1 v: E7 h2 F+ W. [: ~
11.7.3 文件的删除237 / n$ \/ D. p2 H0 m
11.8 路径过滤的实现238 ! t1 X3 v/ I( o8 v
11.8.1 取得文件路径的三种情况238
4 O: |/ m4 l7 J1 s! ?- L3 k& W11.8.2 打开成功后获取路径238
! N, k' u9 a5 T, v* y$ s& y, ]11.8.3 在其他时刻获得文件路径240
. f& J  y8 o) U, f) V/ _; n' y11.8.4 在打开请求完成之前获得路径名240
) D( L  w$ x7 t11.8.5 把短名转换为长名242 9 p7 I# E1 {9 C) F0 _
11.9 把sfilter编译成静态库243 7 `! t4 G2 @5 X* c
11.9.1 如何方便地使用sfilter243 % v* U! F& C0 @6 E
11.9.2 初始化回调、卸载回调和绑定回调244
" u9 ~1 s* S& u8 q- @! x11.9.3 绑定与回调245 8 u4 w- N) e+ L1 a, F. k
11.9.4 插入请求回调246 " I6 t8 z) x8 k1 L9 S
11.9.5 如何利用sfilter.lib249
6 y! a/ U  _8 q9 }7 d: G: R1 }
+ e  e% K, Y# L, n' u, v/ A第12章 文件系统透明加密252
  y% |) K2 p; W" K. Q: w0 B% }- q2 V
12.1 文件透明加密的应用252
0 u8 t4 X7 L3 ~! w2 Z12.1.1 防止企业信息泄密252
$ ~# x3 l, W1 N' {7 X5 D' |12.1.2 文件透明加密防止企业信息泄密253
; E' ?2 J9 x  F6 q( D  z4 a12.1.3 文件透明加密软件的例子253 ( i5 Q( B5 }9 j
12.2 区分进程254 9 X" A0 A$ ^0 M6 b4 |
12.2.1 机密进程与普通进程254 . j9 y0 t8 `" O3 [
12.2.2 找到进程名字的位置255 9 w" z4 c" Y2 Z( \9 U
12.2.3 得到当前进程的名字256
* V& W# _6 A% P: P) D  `% |12.3 内存映射与文件缓冲257
9 J) ~5 a( u; R* r9 H12.3.1 记事本的内存映射文件257
- ^& f% ^5 y6 J  U# e. Y- G0 m12.3.2 Windows的文件缓冲258 / [/ i; J/ G1 u3 w8 a
12.3.3 文件缓冲:明文还是密文的选择259
" _  A# H, w& g/ ^+ d12.3.4 清除文件缓冲260 * O. `8 K3 O1 T' g4 F
12.4 加密标识263
- @9 k% B8 P0 k12.4.1 保存在文件外、文件头还是文件尾 263) C. X/ W( _6 M* L+ s
12.4.2 隐藏文件头的大小 264
& K; d6 M6 ^0 L* @9 d7 J+ D12.4.3 隐藏文件头的设置偏移 266
& n9 l# V2 R! T12.4.4 隐藏文件头的读/写偏移 267
+ p% [2 u. O1 L  X8 Z12.5 文件加密表 267
4 \/ M4 l! j. g5 ?! P) E12.5.1 何时进行加密操作 2672 A7 B# n2 d8 e! p  |& ^7 N
12.5.2 文件控制块与文件对象 268
; {( |5 Y4 j- i12.5.3 文件加密表的数据结构与初始化 2694 P1 c, f0 O/ y) U
12.5.4 文件加密表的操作:查询 2704 K0 N8 r$ r$ f) x/ E- _
12.5.5 文件加密表的操作:添加 2717 m0 k; B3 s# z* g3 Z: \) m- l
12.5.6 文件加密表的操作:删除 272
" s- R; w% ~" |1 j4 R+ m8 K" F0 C12.6 文件打开处理 273- Z' M3 |+ N: c8 c) y* [8 A
12.6.1 直接发送IRP进行查询与设置操作 2746 H" r1 X  p& x' a& s5 N+ w% m( A/ C
12.6.2 直接发送IRP进行读/写操作 276* i! Y) D9 N% N- v9 P/ ~  ^; V
12.6.3 文件的非重入打开 277, s8 y0 g, B5 b; A
12.6.4 文件的打开预处理 280
* i6 j( D4 U) `! e& N" H12.7 读/写加密和解密 2856 N/ p5 ~) w6 G( V
12.7.1 在读取时进行解密 285
) \3 }% A' K: ^) d* |12.7.2 分配与释放MDL 286( }: b$ {7 D, H6 J: D
12.7.3 写请求加密 287% x* X( r- m' T7 Z
12.8 crypt_file的组装 289! D7 @9 @4 t/ z- e
12.8.1 crypt_file的初始化 289. l" E- H; Z$ A; R" I
12.8.2 crypt_file的IRP预处理 290
' H) \5 m4 R. p: l9 x12.8.3 crypt_file的IRP后处理 293/ m" ~+ |9 b4 Z" `& c( m7 k$ ~

* r" w, s& v3 H+ A/ o第13章 文件系统微过滤驱动 297
! s& X  }/ A; m$ p3 r/ L2 f  w$ Z$ k- b; _3 R- y2 ^
13.1 文件系统微过滤驱动简介 297; g8 E/ a. v# w
13.1.1 文件系统微过滤驱动的由来 2975 p9 W5 }5 w% ~0 A2 k0 w
13.1.2 Minifilter的优点与不足 298/ D, t! `2 W- U; _. B6 ]
13.2 Minifilter的编程框架 2986 X* `4 w& ~/ V4 ?2 y1 _2 J
13.2.1 微文件系统过滤的注册 299. v# y# ]: \& W1 [! q5 h- y
13.2.2 微过滤器的数据结构 300
7 A- ^4 j% \1 d: T/ X13.2.3 卸载回调函数 3031 f# U  s, W9 V; }
13.2.4 预操作回调函数 303. A+ B! z7 z% m; _
13.2.5 后操作回调函数 3066 P) M# q5 J2 C# ?- L
13.2.6 其他回调函数 3076 p5 G! q: J) A6 n6 O; J
13.3 Minifilter如何与应用程序通信 3098 j  D  y8 z$ |3 A
13.3.1 建立通信端口的方法 310* o; Q+ {. c# m3 g- f; [+ R
13.3.2 在用户态通过DLL使用通信端口的范例 311. C6 V& Z; ?+ F( ]: ~& o! [  n
13.4 Minifilter的安装与加载 314$ K  N" H- u: w5 m! P
13.4.1 安装Minifilter的INF文件 314- W, `/ H+ J2 l4 d
13.4.2 启动安装完成的Minifilter 316
3 W6 C# E& F% p2 m- O
) a1 q7 f5 K1 A第14章 网络传输层过滤 3176 L# u( S6 M9 q
, q* H+ V+ W; _& V& l! D( J6 |
14.1 TDI概要 317
) C7 a$ H3 i4 E  `# r14.1.1 为何选择TDI 317; D% l' V, E3 H7 C* |
14.1.2 从socket到Windows内核 318
( M7 W: f2 a1 s14.1.3 TDI过滤的代码例子 319
& ~$ _( I) E8 X0 d14.2 TDI的过滤框架 3195 Q8 a* G4 H2 t: Y5 i" i
14.2.1 绑定TDI的设备 319- B: B7 ~. |7 L( j/ z. _
14.2.2 唯一的分发函数 320
: G" R' s3 x6 l* k" N8 r6 Q14.2.3 过滤框架的实现 322
; m, C% U9 f' n; o- f% r14.2.4 主要过滤的请求类型 3239 R. U9 n- z7 M5 l9 C7 O* ?2 i) {
14.3 生成请求:获取地址 324" u3 [9 ?6 R5 _, z3 d, v- k
14.3.1 过滤生成请求 324
4 k: ]* B: N& k1 p* E  Y14.3.2 准备解析IP地址与端口 3263 w( F2 H- [4 W* c, |
14.3.3 获取生成的IP地址和端口 3275 O1 d& l/ F, F  P2 G: `7 d
14.3.4 连接终端的生成与相关信息的保存 329
: i5 G2 ?8 `, W) n14.4 控制请求 330+ k% T  a1 @! z6 M& o
14.4.1 TDI_ASSOCIATE_ADDRESS的过滤 330
" R7 e* R$ V6 N1 ?- ^' |1 ]0 q14.4.2 TDI_CONNECT的过滤 3322 U+ f- V0 O5 `0 n/ d
14.4.3 其他的次功能号 333
1 s4 o/ o  G% g. ?. V  b3 F6 }14.4.4 设置事件的过滤 3344 a% a$ S* D' b* a
14.4.5 TDI_EVENT_CONNECT类型的设置事件的过滤 336/ {1 x6 V! ], d, {) C% C
14.4.6 直接获取发送函数的过滤 337
1 K+ ]8 V" T5 a4 g14.4.7 清理请求的过滤 339& p# k6 y( t% b; G
14.5 本书例子tdifw.lib的应用 341
3 a  G. e9 a# u! r0 O! ]' y- D14.5.1 tdifw库的回调接口 341
8 c* u: H/ {. M; w: Y$ T14.5.2 tdifw库的使用例子 342
9 k, ]' ^  w  B9 r$ I% q" A
* ?6 Q/ d* T: x: z第15章 Windows过滤平台 345% ?, i# K& K" y2 F9 w9 a; w

2 q2 A* c  e' R- q15.1 WFP简介 3453 l! n) {) P! c" u
15.2 WFP框架 345
0 p; v% f! V: n. S( R; ], o15.3 基本对象模型 347
4 m: Q, ~* J5 H+ g& B$ q15.3.1 过滤引擎 347' c0 u" R. P0 P* w3 f- [
15.3.2 垫片 347
! X8 n0 _9 J4 d% ?15.3.3 呼出接口 347
9 W9 l( @+ V; O0 G- V15.3.4 分层 348& D+ v, ^2 F" `  ^$ {
15.3.5 子层 3499 Z) K' h* q, \0 b6 I2 }
15.3.6 过滤器 350
1 h% h5 l9 I0 I; c15.3.7 呼出接口回调函数 354/ b+ E8 o* X3 L5 N, d9 ?
15.4 WFP操作 359& M9 c2 W+ b, C" [. G& J9 |
15.4.1 呼出接口的注册与卸载 360
" N: Y# {4 ?; `15.4.2 呼出接口的添加与移除 360. J. `% E" l/ c+ ~
15.4.3 子层的添加与移除 361# c3 C9 P% I& ?  T+ T( [2 W
15.4.4 过滤器的添加 362! a+ s0 G6 C8 U0 e
15.5 WFP过滤例子 362
( {6 q7 ], c8 O
2 U  x3 X" L8 P. \9 D+ L5 D第16章 NDIS协议驱动 370
0 F2 g4 ]2 }  r. e& ^) H1 Z" P3 z& B$ E/ a' w9 k$ @
16.1 以太网包和网络驱动架构 3706 |0 x+ B& v; {9 @
16.1.1 以太网包和协议驱动 370
1 R1 G+ D7 s' ^2 ~16.1.2 NDIS网络驱动 371% F/ h7 s  A( C" M) {7 g' Y
16.2 协议驱动的DriverEntry 372
* U$ C. |# R8 f0 D0 M16.2.1 生成控制设备 372  I7 n5 i" H: k# V9 q
16.2.2 注册协议 374- a, M, p# c8 ~$ b4 r" a
16.3 协议与网卡的绑定 3759 L; w- P. w; b7 @
16.3.1 协议与网卡的绑定概念 375
) o1 R4 t% H1 G2 U, ~/ g16.3.2 绑定回调处理的实现 376
( x% e1 J; Q! u, R9 X- H5 m16.3.3 协议绑定网卡的API 378
) [, v% ^; Y+ B16.3.4 解决绑定竞争问题 3796 z2 T  F$ _) k; g' i* @, l
16.3.5 分配接收和发送的包池与缓冲池 3808 p. j& E' ~( @6 L! A1 ~0 D9 V
16.3.6 OID请求的发送和请求完成回调 3817 z* [. w. ?/ f8 J" g0 `
16.3.7 ndisprotCreateBinding的最终实现 385* `) J- S% S* b; K( D8 ^* H
16.4 绑定的解除 390
% F2 K" Q$ E: i& j16.4.1 解除绑定使用的API 390
6 d5 b: y6 i9 s0 j) F$ Q16.4.2 ndisprotShutdownBinding的实现 392+ ?' I+ L" ~. `! X. u2 o; T  C
16.5 在用户态操作协议驱动 395
& m) G# u% p; Q  y5 d$ g16.5.1 协议的收包与发包 395/ s3 ?2 v* O2 R- B/ t  Q5 @: C
16.5.2 在用户态编程打开设备 3966 h6 e; ~) m- n; {) J4 c& f
16.5.3 用DeviceIoControl发送控制请求 397
$ l$ z0 D  ~+ m$ g; t16.5.4 用WriteFile发送数据包 399# m' S  r# E* d: w" _" o
16.5.5 用ReadFile发送数据包 400- w0 M" h" m! I- C7 n
16.6 在内核态完成功能的实现 402
# ~) @+ N  u7 G# S" w% \16.6.1 请求的分发与实现 402+ F+ t" t- l5 Y+ C
16.6.2 等待设备绑定完成与指定设备名 402
7 L$ E# k7 }" n/ O) i$ T. a' p16.6.3 指派设备的完成 403- {% V+ i8 |7 k5 W/ @8 R1 Z
16.6.4 处理读请求 406& l, Z! `5 @6 V( H4 ~) r+ A9 E! @
16.6.5 处理写请求 408* H3 h! s/ F% R6 z. b- g# Q
16.7 协议驱动的接收回调 412/ C5 W0 p# E% A* i7 C
16.7.1 和接收包有关的回调函数 412
7 q8 U8 b, S2 y. m; V) C16.7.2 ReceiveHandler的实现 413
3 ]2 f$ K; [/ c. i2 c: L# v5 X16.7.3 TransferDataCompleteHandler的实现 417
; Q4 l/ v6 H6 U/ Q+ @8 U3 J& X' h16.7.4 ReceivePacketHandler的实现 4180 C- ?7 Z# ^0 L& J0 H6 i& A
16.7.5 接收数据包的入队 420
6 m+ k$ J3 V0 _2 l+ D16.7.6 接收数据包的出队和读请求的完成 422/ K# X, j+ d1 a& r6 E+ |

8 T& y. S+ L: P7 ?; Q* C2 p第17章 NDIS小端口驱动 427$ K: Y+ W, G+ k4 O

/ A3 w6 c9 N0 a  c0 v17.1 小端口驱动的应用与概述 427
1 d* ~2 f5 v0 u17.1.1 小端口驱动的应用 427# N, |" t, e2 ^9 ~7 ]5 d7 ?+ T  X" F0 G6 ]
17.1.2 小端口驱动示例 428- l) o2 v, ]4 ?) M0 ?# s
17.1.3 小端口驱动的运作与编程概述 4290 O" U' u! T+ S3 E+ [' B- J5 W, {& X
17.2 小端口驱动的初始化 429
. R* Q* s3 k3 S8 x% z) a( P5 Z17.2.1 小端口驱动的DriverEntry 429- P; H0 U& u2 r  f7 C% s& x* e
17.2.2 小端口驱动的适配器结构 431
, `9 t0 o! o& M4 W17.2.3 配置信息的读取 433; k' W+ m( w" C' |2 t" a4 T
17.2.4 设置小端口适配器上下文 433! h, z) d! h( |- ]
17.2.5 MPInitialize的实现 434
8 q! s9 a) B/ D17.2.6 MPHalt的实现 437
( q! H( Q* k! I17.3 打开ndisprot设备 438
5 U" Z' e$ t6 _  J: L) e- y3 J17.3.1 IO目标 438, O; }# h1 y- C$ D- k) j$ m
17.3.2 给IO目标发送DeviceIoControl请求 439
/ R6 i7 L& B7 j. O17.3.3 打开ndisprot接口并完成配置设备 441+ ~3 ^& _) X. D1 z6 H
17.4 使用ndisprot发送包 443
  Y2 h2 ^0 j0 z5 ]17.4.1 小端口驱动的发包接口 4430 b5 E* |+ `! i! Y2 @) w
17.4.2 发送控制块(TCB) 444# {: O7 S! @7 `; }% h) c; @
17.4.3 遍历包组并填写TCB 4465 H1 f" t' d  J6 M" C: G
17.4.4 写请求的构建与发送 449, O) U6 b4 {; ?) e
17.5 使用ndisprot接收包 451+ k5 @, f( f3 Q- n
17.5.1 提交数据包的内核API 451
* ~) f7 z, a4 _, s17.5.2 从接收控制块(RCB)提交包 452
" s' {+ g4 F4 ~! u) z17.5.3 对ndisprot读请求的完成函数 454
  q/ h4 Q  e2 H9 e3 e17.5.4 读请求的发送 4561 X( `' u; R* {7 Z. J: ?! N
17.5.5 用于读包的WDF工作任务 457
. x, D8 X7 d; `0 }/ A17.5.6 ndisedge读工作任务的生成与入列 459' k  U5 v/ Y" q0 Z4 y* k
17.6 其他的特征回调函数的实现 461! Q* ^: r1 e7 ]) a1 y1 f
17.6.1 包的归还 461
9 k" W9 p3 `" |% h  _17.6.2 OID查询处理的直接完成 462. U, X# O* q" n% z; q
17.6.3 OID设置处理 465
! L, [) F# p3 K- `7 f7 x0 p( U8 c
第18章 NDIS中间层驱动 4672 n4 G* O: [+ c; X( W' k! l" @' x

& H- d" }0 ~  V2 G( C. Q18.1 NDIS中间层驱动概述 467
/ b5 i3 b( }0 v9 d18.1.1 Windows网络架构总结 467
( o5 p7 r( y% P. Q  ?18.1.2 NDIS中间层驱动简介 468- o* g4 k3 a0 G& L; J
18.1.3 NDIS中间层驱动的应用 469+ f8 Y1 R+ a5 p+ S  q
18.1.4 NDIS包描述符结构深究 470  D" ]4 l4 y2 Z: K
18.2 中间层驱动的入口与绑定 473( o2 H. v" \4 N) {, _9 b2 G: p
18.2.1 中间层驱动的入口函数 4739 Q! I8 }, z; ~, x7 D
18.2.2 动态绑定NIC设备 474
% Z: v/ [9 C% }18.2.3 小端口初始化(MpInitialize) 475$ t9 U# ^0 N$ L8 ^1 s5 w
18.3 中间层驱动发送数据包 477( n2 Z0 v" j1 v0 q, z
18.3.1 发送数据包原理 477
  O$ z9 a6 h5 }$ A, a18.3.2 包描述符“重利用” 4789 z6 S/ k( i+ o* l# K' r
18.3.3 包描述符“重申请” 481, S5 R, |' E' w8 f) r
18.3.4 发送数据包的异步完成 482  a' }+ _6 R. X* H) }7 h) J
18.4 中间层驱动接收数据包 484
& h" ^0 @- u* m% s18.4.1 接收数据包概述 4849 c. f. |5 F6 a
18.4.2 用PtReceive接收数据包 485
" ^" z/ F4 ?. \4 M7 N& O1 U18.4.3 用PtReceivePacket接收 4906 P9 U% m3 Q8 P; X6 I! W- g
18.4.4 对包进行过滤 491" @3 p( U, a$ W' f# ?7 `
18.5 中间层驱动程序查询和设置 494; p! F! ^( `, l; m
18.5.1 查询请求的处理 494
" H. L6 O  l2 J( n, b+ q18.5.2 设置请求的处理 496
1 v6 ?1 v' c9 i  E5 W. h6 }* _18.6 NDIS句柄 498
" a1 v+ p+ \* |  ]6 D, _* w$ g18.6.1 不可见的结构指针 498# M  e/ @" }, E( F& C$ B) m( H- c. x
18.6.2 常见的NDIS句柄 499) S: @( ~2 i8 g$ u! K6 n1 Z  _
18.6.3 NDIS句柄误用问题 500  Q2 |9 c  Z7 I8 Q& Q0 |1 Z. |
18.6.4 一种解决方案 502  U5 F/ M- F+ W! B, d' m* [
18.7 生成普通控制设备 503
& d' D5 B. Z  {' _( q18.7.1 在中间层驱动中添加普通设备 503
6 F6 O% c7 t) r) `. }4 O18.7.2 使用传统方法来生成控制设备 505$ Y  ^4 q) P  L: I( u

/ \5 A! ?* A( R2 G1 w4 U& Z第19章 IA-32汇编基础 511
' a9 H$ a- F% j: K5 S5 ~% e$ s$ S' F' z, E  {
19.1 x86内存、寄存器与堆栈 5113 O$ q/ l& v' u/ F6 E" T1 f
19.1.1 _asm关键字 511
1 [1 |1 h* N9 B$ w: @9 S1 J19.1.2 x86中的mov指令 512# m, i3 i4 r6 f4 j
19.1.3 x86中的寄存器与内存 512
6 L- _/ p0 E( i19.1.4 赋值语句的实现 513; p5 }, u# S: p; I  ]
19.2 x86中函数的实现 514# Y6 P; K# k* d4 m/ T. f# s
19.2.1 一个函数的例子 514
8 S) K$ K6 [4 P) L% V19.2.2 堆栈的介绍 5159 W. L3 _/ P9 v4 q8 U
19.2.3 寄存器的备份和恢复 516
- _7 k' D, L6 f: B7 q19.2.4 内部变量与返回值 518, [: \9 N9 z5 b# ^
19.3 x86中函数的调用与返回 521! z6 }) x" L/ k  W" G9 V, V* j8 p
19.3.1 函数的调用指令call 521
7 t0 `- E0 `. }) M/ J; [19.3.2 通过堆栈传递参数 521& t9 O. y# C; e" l2 p
19.3.3 从函数返回 523& g( W) |0 V3 J# S4 B
19.3.4 三种常见的调用协议 524
" Y0 L8 ~; L2 e( x19.4 从32位汇编到64位汇编 526
* g' r, T7 Y7 w9 u19.4.1 Intel 64与IA-32体系架构简介 5261 {  c( L1 {( [# L0 _
19.4.2 64位指令与32位指令 526% i  ]3 V3 q3 K
19.4.3 通用寄存器 527
/ L$ A& n9 j0 f4 m% }+ ^3 l19.5 64位下的函数实现 528
7 E# O+ I! `) J+ M" [3 J( Q19.5.1 函数概览 5281 x9 z* b' K- }/ d* ^
19.5.2 32位参数的传递 529  O0 L0 x/ H* E3 S! Z
19.5.3 64位参数与返回值 530
8 Q+ _% |8 Z, i1 ^19.5.4 栈空间的开辟与恢复 531
% n! _) |0 W0 [' n# t( V1 R: v9 _) w  Q: }
第20章 IA-32体系中的内存地址 534
# L  C) q" {* M0 [
' Y5 Y0 ~" P3 C. g6 D( |' O8 _/ a. E20.1 内存的虚拟地址 534# D. n( Q( J. c# ?! l1 ]3 R0 D
20.1.1 C语言中的内存地址 534
( y; J; O6 g% ~6 N/ {7 e20.1.2 虚拟地址的构成 535
; j/ p  ^  U) p+ C% g* w; _20.1.3 段的选择 536
$ C7 u+ V" e- H3 |/ L  s. z20.2 全局描述符表和段描述符 5388 W8 a* S+ e% y) x
20.2.1 全局描述符表 538
$ e5 Q- ]$ B- @( d: q% B20.2.2 段类型 539
$ F: j' z% R% p3 n% I  u20.2.3 段寄存器与段选择子 540" L2 I7 D  T: R; P. ?- U  r; b( |, C
20.2.4 64位模式下的段 541: u* c9 c; H- b1 K
20.3 分段编程实践 542
$ C2 \6 w0 _1 n. `20.3.1 系统表寄存器的结构 542* g% q$ }5 Y' c+ q
20.3.2 在汇编语言中获取全局描述表的位置 543( P2 a) L7 @$ h$ Y) j
20.3.3 调试范例:sgdt指令的错误使用 545% }, |4 L) _4 \5 a2 Z
20.3.4 在64位下获得全局描述符表 547
$ W" o4 E5 i) O( W" _; N+ f20.4 线性地址基础 549
0 C: W+ B# G+ c  b% G# ?. p20.4.1 分页控制机制 550, @$ N( @( y6 T4 q0 |2 F4 x; E; a
20.4.2 线性地址的转换 551! b) A% d* }5 H$ I0 L! D. P
20.4.3 混合页面大小 552
# d( L3 v) p( p* E# y20.4.4 32位物理地址的页目录和页表项 5527 q% h. `8 _9 G) ~
20.5 各种特殊分页方式 555
( u9 B: G% C4 O7 N2 A/ D9 G20.5.1 PAE分页方式 555" ^/ c& c8 H  {* `2 K4 O
20.5.2 PSE-36分页机制 558
* w; K; {: n& Z, i20.5.3 IA-32e模式下的线性地址 559$ N% Y: G. ]7 c+ x& s
20.6 分页编程实践 562% J) V/ @3 e. O6 Q
20.6.1 页目录和页目录指针表的获取 562
2 o4 m; m* E& K* T5 w, k; O4 X1 q, S$ j20.6.2 页表的获取 564
4 \  t" B% ?; r2 ~20.6.3 线性地址的结构 567
/ n. r  r2 @, Z. u; b! `6 j# i1 W) j7 ~+ t
第21章 处理器权限级别切换 571
6 f* ~" k+ h- f. V- v. B' J$ l* `4 n$ F: X
21.1 Ring0和Ring3权限级别 571
% v$ N' w# l$ C! }; E" Y4 ~2 z21.2 保护模式下的分页内存保护 572
2 _. G8 H$ N. W2 |/ {0 [0 q2 `: [21.3 分页内存不可执行保护 574
* L) X' I% \4 _& w) p0 y' K! p7 T- _2 W21.3.1 不可执行保护原理 574
! Q0 O% m+ x% Y6 `+ _2 _21.3.2 不可执行保护的漏洞 575
) H! K4 N4 S9 h- H+ F21.3.3 上机实践 577
# C5 f2 }- \& s$ K21.4 权限级别的切换 579
4 O- V5 O2 A  b% O, F. K& r, O. j21.4.1 调用门及其漏洞 579+ c. @. Q; U8 L* x/ A* q
21.4.2 sysenter和sysexit指令 581
0 U* {$ T  u- y* }: z, [* s& T: Q21.4.3 上机实践 583
$ ~4 t% p3 p- z
  t" ^0 c3 M7 L7 d! u6 }% D# j! v, k第22章 IA-32体系结构中的中断 585  S. o3 y) f1 B9 o5 o: I9 m

2 l# E6 N2 e$ H& j" o6 S) J22.1 中断基础知识 585
* G( X: {" |7 E' V1 H: c6 D/ m  I% L22.1.1 中断描述符表 585
  F! G9 p* A, x22.1.2 中断处理过程 587
  i/ O: M+ J7 z& a0 O$ D22.1.3 64位模式下的中断处理机制 589
! Y# a$ [5 S# u" G- F, h2 a1 ~( M9 S22.1.4 多核下的中断 589" t5 ~# y6 b" t' P+ @/ E0 M
22.2 Windows中断机制 593
/ L$ W8 J. j% P$ X22.3 中断编程实践 596; D: d7 J$ y; z, C
22.3.1 IDT Hook 596
0 k: S4 S2 @, d22.3.2 巧用IDT Hook实现安全防护 598, {: Q; w- w$ w6 X

5 ^& M- Y/ d$ M第23章 Windows内核挂钩 601
( m: F, B/ a0 l2 A
$ s/ b# o* `2 c! ~0 q8 y" y" B5 U23.1 系统服务描述符表挂钩 602
5 t/ Z1 S! G1 j; U23.1.1 系统服务描述符表(SSDT) 602& o  i+ N* J2 p* W$ y  W
23.1.2 系统服务描述符表挂钩的意图 603
7 X$ ?4 K7 L/ e( a: W. G23.1.3 寻找要挂钩的函数的地址 604
' d8 z( t0 h6 L; r7 N23.1.4 函数被挂钩的过程 605$ _& @. U7 ^, y  z; l
23.1.5 具体实现的代码 606* |' E: G/ C. S+ s* \% K
23.2 函数导出表挂钩 6083 C- w7 _6 q$ k9 _6 e
23.2.1 内核函数的种类 608
+ y' j/ i! F7 y. A% Q- [% E7 k% C$ k23.2.2 挂钩IoCallDriver 610
; j, G5 l5 G' \" U0 U23.2.3 对跳转地址进行修改 611
+ F/ ?# i/ d- w9 ]( B2 v. t23.3 Windows 7系统下IofCallDriver的跟踪 6126 U: ?( H- \  V; v
23.4 Windows 7系统下内联挂钩 615
! i1 S" ^0 t- m9 U3 t23.4.1 写入跳转指令并拷贝代码 6151 N3 t+ Y* W. U7 ]8 g9 {6 n
23.4.2 实现中继函数 617
' G1 N$ b- X$ |& v
: ^" x& c  w4 d7 M3 c; V1 m8 Z" v4 p. I/ y, V
高 级 篇2 ^" G$ b! p# M) }

6 p/ u+ O/ d8 E8 l2 W第24章 Windows通知与回调 6200 {( e; s5 `1 v/ _! w: S) J
! k$ B) o! @0 L2 R0 J* {) R
24.1 Windows的事件通知与回调 620
4 f" }5 _4 M; T* r- V24.2 常用的事件通知 6207 W/ W7 ^' Y6 [) D2 q
24.2.1 创建进程通知 621; z6 O( E. v; c- E8 X: J' g
24.2.2 创建线程通知 6253 a1 M0 N% g% A- V: h4 y) [4 t/ W7 Q
24.2.3 加载模块通知 626
% D' }. L0 s1 K9 U: u* L24.2.4 注册表操作通知 629! r7 W8 h1 `7 |2 L2 y4 w" p
24.3 Windows回调机制 636' U/ A% x' D7 G4 X+ L7 |& }( E
24.3.1 回调对象 636
& p+ k9 C5 L) s0 L( S; x' A5 s24.3.2 回调对象的创建 637& A/ @+ p1 ^$ n" J
24.3.3 回调对象的注册 637$ q1 L( |5 e* b
24.3.4 回调的通告 638( v- M$ a* u+ u5 P1 J) T$ _$ T
24.4 安全的死角,回调的应用 639
6 y- j% i$ o6 t" S6 Z# U5 O9 d" z+ m: J1 w. q8 O8 X" i  N
第25章 保护进程 6408 Y& r- S. _/ m8 A' I  I3 S
0 F+ @; L/ ~& d2 ?0 o* a0 d, H- @
25.1 内核对象简介 640
5 d; u' x* @& ^, q8 ~. R4 E1 N25.2 内核对象的结构 641' X. `( Q- Q$ n% M: w$ e1 U
25.3 保护内核对象 6425 q( H. C( ~0 k* f9 Q) X1 @
25.3.1 处理对象的打开 6438 a5 f9 n' M# I! E0 B# `
25.3.2 处理句柄的复制 644
, q& p, Z9 D+ d* J' |1 a25.3.3 处理句柄的继承 6460 x; ~6 h+ w. m$ i
25.4 进程的保护 652/ O: I% z0 ]" t+ I" W% V1 s
25.4.1 保护原理 652
5 Z. E% g3 r% y; a) `5 J9 ?9 t9 y8 ]0 d25.4.2 Vista以后的进程对象保护 654
$ P2 C$ m7 @2 r$ \; A4 z25.4.3 进程的其他保护 655' Q7 O1 E, I: M$ p( Z4 g

2 t% W" l% a6 A- I& ~' ~! f! G附录A 如何使用本书的源码光盘 656
7 G" E, r8 s2 T5 t* z: V
5 k6 N# p1 J# N1 h' B& p1 n附录B 练习题 6594 H& [- l2 [* |3 Y! b+ u

+ A9 [( l8 }, F! T9 t# h- J; ]7 Y7 h; O/ A* B7 p5 S
楼层
跳转到指定楼层
最佳答案
27 
累计签到:838 天
连续签到:1 天
康小泡 发表于 2016-11-25 11:01:33 | 显示全部楼层
会驱动的都是大神啊。

发表回复

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

本版积分规则

关闭

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

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

小黑屋|手机版|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-1-23 21:53

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