鱼C论坛

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

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

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

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

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

x
TB1eC4MIFXXXXaOXpXXXXXXXXXX_!!0-item_pic.jpg_430x430q90.jpg

7 J* N/ p; T# \8 y1 Q$ V$ X* H, B! A3 }% [7 X  q7 ~3 g
书名:《windows内核安全与驱动开发》
; N' j1 c& t9 Q+ K9 f作者:谭文;陈铭霖
9 l7 ]' O1 c% e: ^9 u5 n0 @5 ]出版社:电子工业出版社$ _8 Q. ]; Q$ K  P: Q2 A
出版年:2015年6月1日(第1版)6 l! z- T% T) L% T& h1 O+ n
定价:139.00元: R6 H" r0 Y  }1 A* X0 I
装帧:平装& S: o# _: E0 U9 x9 {5 x
ISBN:9787121262159( I# ^- g; z9 c+ _' `' V

4 u' A. C$ ~" R; ^0 i购买链接:
" z$ V( Q: v3 z
4 C- @3 q4 ^0 E+ N

5 Y7 Q% u' _. G) f3 x亚马逊 -> 传送门5 a: y; c% c, k4 _
+ w" w0 G9 v8 ^1 S* I% I
当当网 -> 传送门
9 {% M# F6 }# ?; F/ |
5 W1 \1 T6 S, S  r" q京东 -> 传送门1 E, i5 Q+ o0 l3 p7 y
! E! t7 D9 O# _. g! K" a$ N7 h4 A4 }
天猫 -> 传送门
0 n" i% z2 S3 G, x1 @
+ u2 x: B0 r. a5 O5 s! v* Z
0 r! h2 e) P' b3 {# u4 r内容简介:
, w- o+ b7 U  {0 ?$ Q, X$ l) Q  [3 U! B

4 M& M& [: S" }9 ^9 L& A* {+ T
本书的前身是《天书夜读——从汇编语言到Windows内核编程》和《寒江独钓——Windows内核安全编程》。与 Windows 客户端安全软件开发相关的驱动程序开发是本书的主题。书中的程序使用环境从 32 位到 64 位,从 Windows XP 到 Windows 8 都有涉及,大部分程序不经过修改即可在 Windows 10 上运行。同时本书也深入浅出地介绍了进行内核安全编程所需要的操作系统、汇编等基础知识。$ j# K/ Z6 s, d4 e7 r
7 z; s! D: D$ i* ~" k0 J& S
本书共分三篇,基础篇囊括了驱动开发的基础知识,降低了入门的难度;开发篇介绍了在实际工作中可能遇到的各种开发需求的技术实现,包括:串口的过滤、键盘的过滤、磁盘的虚拟、磁盘的过滤、文件系统的过滤与监控、文件系统透明加密、文件系统微过滤驱动、网络传输层过滤、Windows 过滤平台、NDIS 协议驱动、NDIS 小端口驱动、NDIS 中间层驱动、IA-32 汇编基础、IA-32 体系中的内存地址、处理器权限级别切换、IA-32 体系结构中的中断和 Windows 内核挂钩;高级篇包含了汇编语言、操作系统原理、处理器体系架构相关的内容。本书是由长期从事这个行业的工程师自己写的,所以处处以实用为准。对细节的考究主要体现在对实际问题的解决,而不是知识的详尽程度上。
; q3 C' J" y1 W0 l+ O5 e8 F3 W4 U/ ~( V7 g; _' C% W- e" z$ p% m) Q5 c
目录:" x+ F/ s- H- _* @- q0 m
* @, `* \# w9 L" T- \+ f

( J/ c; G+ ]) o& E, h
基 础 篇 , {  ^# }  F1 ?$ W

( D& W: f; h) G5 n! r0 Z第1章 内核上机指导2
0 l/ T: R" j  D1 @0 B! N0 _+ M
* B) K3 G7 h+ y6 f( \
1.1 下载和使用WDK2
0 D. M- j1 y! o# S) y1.1.1 下载并安装WDK2 & i4 V: A  h, c; o1 T9 s1 Y" @
1.1.2 编写第一个C文件4
* D! A1 v0 n1 ^7 s! s1.1.3 编译一个工程5
- W$ w1 R1 M; w6 v- j0 Q: y. Z1 Y1.2 安装与运行6 2 @% j# e4 t8 z- d
1.2.1 下载一个安装工具6 ! b4 x6 Y% _" {; d- f( r0 E( r
1.2.2 运行与查看输出信息7
$ n# U6 {6 S6 Y6 I5 k# c  A1.2.3 在虚拟机中运行8
0 J7 R0 T3 Z# |1.3 调试内核模块9 9 x7 h! y, p/ t  x4 R* f8 G9 D
1.3.1 下载和安装WinDbg9   V# ?/ C" d4 V7 D) W8 ]0 d
1.3.2 设置Windows XP调试执行9 ! k" [' n& E2 b! B7 y
1.3.3 设置Vista调试执行10 % k" Z' r( z3 M! X9 p5 i( `
1.3.4 设置VMware的管道虚拟串口11
4 `' m# M( X8 n& I' @' g1.3.5 设置Windows内核符号表12 ; Y, L: T' }# U; H; `* h$ J
1.3.6 实战调试first13 4 l. ?* [& `) U7 P4 `- ]  j5 V
& y. f6 T% m0 V7 ^9 l/ g0 U
第2章 内核编程环境及其特殊性16
+ @9 t8 A9 H& d* M; H: ?. m+ W$ ~" i8 G0 }  T
2.1 内核编程的环境16 & B8 l! q$ x# z! J# ^& l* L
2.1.1 隔离的应用程序16
. I8 G0 t0 s$ i+ Q1 |2.1.2 共享的内核空间17
+ B8 U8 j4 ?! i% a2.1.3 无处不在的内核模块18 - E1 {0 H0 D% z; z% Z# l4 t
2.2 数据类型19 , {# H8 E6 T$ U+ g- X: D6 t5 W
2.2.1 基本数据类型19
5 s. I* P' t# F5 i- {2.2.2 返回状态19 - v$ z. q2 [3 Y( a
2.2.3 字符串20 3 t7 T4 E5 ?3 k# j7 g) P( r
2.3 重要的数据结构21 1 A, _* B- y1 m, y# d
2.3.1 驱动对象21 $ e$ N! S/ c0 f) x7 O
2.3.2 设备对象22
9 Y+ ?. \' S% X! A& L+ C2 {2.3.3 请求24 % R( Q* S8 |0 I8 p1 J
2.4 函数调用25 & w) |' B( g1 E7 Q+ O0 X5 L. U
2.4.1 查阅帮助25 " m3 a/ d, ~/ a+ p% \! f( B1 \
2.4.2 帮助中有的几类函数26
* t5 `1 [* l# l) A' {; G( O2.4.3 帮助中没有的函数28
) @# I. i2 {6 P' i; z2.5 Windows的驱动开发模型29
7 c7 y* y7 q1 U6 }* D( i( I( ?2.6 WDK编程中的特殊点30
8 W+ ]( U$ y* \5 w2.6.1 内核编程的主要调用源30
5 k% n! W1 A: d: X2.6.2 函数的多线程安全性30
; V2 Z5 `) q1 N; R: X/ X4 u2.6.3 代码的中断级32 " M* M. F' r$ k( ^
2.6.4 WDK中出现的特殊代码32 3 K1 h. @' S: |  Y0 x

9 y7 P6 k6 ~. j7 o1 Z第3章 字符串与链表35
! V- D' V( [( d! p/ W3 Y
5 e3 _+ h, W+ T$ I3.1 字符串操作35 2 J& K$ m, V2 ^5 L
3.1.1 使用字符串结构35 - P( o) j* }) X
3.1.2 字符串的初始化36
3 O8 A* @- b# X3.1.3 字符串的拷贝37
: \$ P6 Z- Y0 V" r4 s3.1.4 字符串的连接38
; h8 Z1 N8 H: l- M3.1.5 字符串的打印38 7 F! X/ P, {5 Z2 G1 u; q. u
3.2 内存与链表40
; {8 D5 J  f+ I3.2.1 内存的分配与释放40
* f$ n& b4 V& P0 d+ m3.2.2 使用LIST_ENTRY41
6 U& W# G7 G$ `8 y9 V" q  M3.2.3 使用长长整型数据43
) f8 L6 P; d8 ^" d" m% ~3.3 自旋锁44 0 D! ?' t0 T2 n
3.3.1 使用自旋锁44 7 G6 ^  K0 J1 G! o0 Z9 B
3.3.2 在双向链表中使用自旋锁45
) M& }: Z6 k! w; Y, m' I! @3.3.3 使用队列自旋锁提高性能46 1 f$ ]5 V1 f& @; \7 H
" g' W7 B* d+ k/ a+ Y( {  y5 U
第4章 文件、注册表、线程47
, h: k) u4 m+ A7 I  H9 R0 w+ ?! J7 A& G& `" x; L
4.1 文件操作47 " Y6 U* u6 L- u! o
4.1.1 使用OBJECT_ATTRIBUTES47 * `) K5 T/ Z. C- y
4.1.2 打开和关闭文件48
, z! ^8 ~* R% y9 `$ ~& M; g" O4.1.3 文件读/写操作51 + m# z7 i7 T8 O4 {/ R- O! T& ^
4.2 注册表操作53 + t; v2 m. B3 \! ~% g
4.2.1 注册表键的打开53
* K& U5 P- ^. `4.2.2 注册表键值的读55
) ]* N6 @6 Z6 w2 P( I4.2.3 注册表键值的写57
- J  {. \6 R: i4 }5 k2 L8 V5 O4.3 时间与定时器58
4 T  z* w, x1 Q; u" f1 l& R) O2 j4.3.1 获得当前“滴答”数58
! R" ^# U0 {) Y& x4.3.2 获得当前系统时间58 8 R7 O0 C$ k1 k1 G
4.3.3 使用定时器59 7 h6 c9 @6 h# g. \. F/ n
4.4 线程与事件62 2 z' U4 }; J$ d% G6 S4 O( F
4.4.1 使用系统线程62 4 b+ U8 ?% Y: ^8 P" c
4.4.2 在线程中睡眠63
; N3 G( s. D; V0 t6 R4.4.3 使用同步事件64
/ x* p$ Q) x9 W* T; n" ^( p" z+ Y5 m& p! h! w
第5章 应用与内核通信67
2 J8 u+ D& v6 F/ c5 a/ Q0 r. c" e6 u( Q+ f4 ~& i; X% U4 L# W# \7 x
5.1 内核方面的编程68
% r- j% N, L; {) x5 Q5.1.1 生成控制设备68
  s( E0 L/ U0 u. `; z: [/ A5.1.2 控制设备的名字和符号链接70
- r- D* r  `3 K2 ?* a9 o( L- C# w5.1.3 控制设备的删除71
4 G1 `- ?0 p5 h* L$ P, S5.1.4 分发函数72 * ]& ~" o! Z! Q8 J1 _+ B; |+ R
5.1.5 请求的处理73 2 N! z' K7 g8 C9 N: N
5.2 应用方面的编程74 2 n# g* j4 V5 A/ t9 @" T
5.2.1 基本的功能需求74
- |3 Y0 F, [1 Y9 x: Q1 D/ O- b" H/ z5.2.2 在应用程序中打开与关闭设备75
: q6 x( ], b: j! g- y) r- D5.2.3 设备控制请求75
! V* u* L0 o* r) B1 _5.2.4 内核中的对应处理77 % `- h0 m. ?5 G. ?0 F) F
5.2.5 结合测试的效果79
4 m4 h0 ~# L- O8 f6 [5.3 阻塞、等待与安全设计80
7 Y' h# w% e0 S+ q( V6 P5.3.1 驱动主动通知应用80 7 \* e, Q3 F: G9 v
5.3.2 通信接口的测试81
" m" e% ?$ f) A- H- L  j* `- p' w5.3.3 内核中的缓冲区链表结构83
8 C0 F% r  _5 }; H7 G5.3.4 输入:内核中的请求处理中的安全检查84
. r# l4 b6 a3 x5 o4 H; r5 O5.3.5 输出处理与卸载清理85 : S: k0 a& l* j

' h. y, x- I3 X' w* G第6章 64位和32位内核开发差异88
# c4 I8 x5 l6 v" \3 q 1 G/ O6 {. l& Q: i4 e
6.1 64位系统新增机制88   Z' m0 h7 T4 ]0 [5 l
6.1.1 WOW64子系统88 3 E2 W3 H) r( ]4 D! Z3 z( t
6.1.2 PatchGuard技术91
" }3 F* E/ z! }: y2 H6.1.3 64位驱动的编译、安装与运行91 ( X& z2 J( i2 r) y
6.2 编程差异92
: k% z8 O0 I9 c- z/ @6 A. }6.2.1 汇编嵌入变化92
- A( I( Y9 t5 W- m. U; b6.2.2 预处理与条件编译93
. r, F0 B3 P% P3 M2 u- e6.2.3 数据结构调整93
. E& {' g( u4 ~: D0 \# B" ]& H; h8 {/ S

  a  p$ R" N4 C) v; d4 J开 发 篇 . {' K8 {! {3 K; P2 S# r
' n5 I$ E3 ]# \7 O* i3 p
第7章 串口的过滤96 ( g' z9 W/ m% N" P8 k9 M" ]

* |4 ~) X( l0 q) Z7.1 过滤的概念96 9 u8 }' c; s% D) Z' R# ~2 X+ [# a
7.1.1 设备绑定的内核API之一97
0 G4 }, X! O4 e: G7.1.2 设备绑定的内核API之二98
% V% n( P& {6 U% W: I" w7.1.3 生成过滤设备并绑定98 8 J9 \  m* w- E# _* G
7.1.4 从名字获得设备对象100
; G2 W& W' e! J; p2 M% S0 `7.1.5 绑定所有串口101 4 c. e7 R" N- u7 R+ l
7.2 获得实际数据102
3 m0 p0 O8 E* h% i7.2.1 请求的区分102   h: Q- L% a* ~! y
7.2.2 请求的结局103 ! ~4 c4 }8 y% s2 O* J" }( b
7.2.3 写请求的数据104 3 V( Y0 K7 i  x( j6 X2 P! _6 v
7.3 完整的代码105 + p1 r+ c0 }% ?% J6 T$ U
7.3.1 完整的分发函数105 $ ~1 [$ O* H3 B$ H4 R4 l
7.3.2 如何动态卸载106
% B2 q' H0 x1 u+ {6 H8 i7.3.3 代码的编译与运行107
6 t0 w' Z8 e, j* q8 I. n+ ]# y' c& _9 q& r" H8 Z2 a0 z
第8章 键盘的过滤109 ( G7 |7 k/ k5 I* C( `1 d
! G5 x! y7 M( ?7 u9 b
8.1 技术原理110 & O: y8 [% A, a, k9 D
8.1.1 预备知识110 6 i1 z; G/ K% r$ N
8.1.2 Windows中从击键到内核110
, `% }4 ~6 `) K* L& w% W/ G8.1.3 键盘硬件原理112 ) i" c& W+ ?& f; {
8.2 键盘过滤的框架112
+ k  l+ _% n8 Z- E8.2.1 找到所有的键盘设备112 , z' N( ]2 G1 Q* B; y4 e
8.2.2 应用设备扩展115 1 [, t  F& x& Q" X4 f1 C$ r
8.2.3 键盘过滤模块的DriverEntry117 ! U: |; x9 u0 r& f" a
8.2.4 键盘过滤模块的动态卸载117
% J5 M1 K& M! J' x+ N8.3 键盘过滤的请求处理119
# y& u. d8 t* q1 D& ^* b* O2 g* E8.3.1 通常的处理119
) |4 _! m* l+ k6 {8.3.2 PNP的处理120 - t0 S9 a0 Q( A& l- c
8.3.3 读的处理121 ) B+ X5 A5 g# ^% G& Y# v
8.3.4 读完成的处理122 " V- d& @" ]9 L! R# L
8.4 从请求中打印出按键信息123 5 l3 c( ]8 k# z+ \0 X2 }4 J3 R
8.4.1 从缓冲区中获得KEYBOARD_INPUT_DATA123
% Z# a8 H0 i3 t( H, V: E3 F8.4.2 从KEYBOARD_INPUT_DATA中得到键124
$ Q! m* t5 l& i( g8.4.3 从MakeCode到实际字符124
1 S0 n8 M* \8 k" u8.5 Hook分发函数126
% m! q5 m0 A9 e0 v$ I8 v" d8.5.1 获得类驱动对象126 - L3 ~9 q' U, j- E' v2 l: n
8.5.2 修改类驱动的分发函数指针127
6 r2 E( ~/ E: ]# y; {8.5.3 类驱动之下的端口驱动128 ! I1 |2 N1 \) s& Y3 @
8.5.4 端口驱动和类驱动之间的协作机制129
, s2 P3 w' e3 S$ E/ ~1 e8.5.5 找到关键的回调函数的条件129
' @2 O4 |# v# b8 g* f8.5.6 定义常数和数据结构130 - R- F' W# \3 {  b
8.5.7 打开两种键盘端口驱动寻找设备131
- e' }3 m6 s5 \& E8.5.8 搜索在KbdClass类驱动中的地址133
  Y2 T4 N* l2 N! ]; |" D8.6 Hook键盘中断反过滤135
% o' w& {. _( y. T- r; o8.6.1 中断:IRQ和INT136
: U( s+ A& g7 F8 [( E# \& [  i8.6.2 如何修改IDT136 + V5 @" z( {, o  m; E6 I9 i
8.6.3 替换IDT中的跳转地址137
+ d/ M5 H3 g9 w. X2 [/ X6 Q8 ^7 K9 X8.6.4 QQ的PS/2反过滤措施139 , y9 I6 K$ d1 v; k* h
8.7 直接用端口操作键盘139
  J! e9 k% D  A* ]+ B8.7.1 读取键盘数据和命令端口139 % \* L! \* M1 C6 M0 ~4 `
8.7.2 p2cUserFilter的最终实现140 . N9 f* l9 m# \+ s8 E7 v$ K8 c5 f

; Q# d/ x% p4 \  i3 y- \! _, ~: \第9章 磁盘的虚拟143 7 j4 ]. f! Y. E' q: R+ C

% n3 L, S( b/ h5 o9.1 虚拟的磁盘143
0 H+ _1 A! g! i; D# [+ V& N0 M9.2 一个具体的例子143 $ Y5 f9 B4 H; S# M
9.3 入口函数144 ; X( N8 q  Z3 X% P! q
9.3.1 入口函数的定义144 - L" c2 b. }. `* G( f1 i2 J
9.3.2 Ramdisk驱动的入口函数145 # I% Q5 F5 C% m. R' ~" H
9.4 EvtDriverDeviceAdd函数146 0 i  x& ?$ x. w- G
9.4.1 EvtDriverDeviceAdd的定义146
  ^) N! j. T4 n) }& E+ F7 N  \9.4.2 局部变量的声明146 " b3 D3 i& j. j* @. Y5 t
9.4.3 磁盘设备的创建147
, s8 n  z3 v- M. t9.4.4 如何处理发往设备的请求148 9 b2 p9 j0 o% v
9.4.5 用户配置的初始化149 8 I" Z& P9 N0 v8 H4 r
9.4.6 链接给应用程序151 7 g- J3 z+ \! a/ q; W( c8 a# k
9.4.7 小结152   Y. S) o8 x( q  l- q0 U
9.5 FAT12/16磁盘卷初始化152
$ L  h) l- w# r6 t& o. j9.5.1 磁盘卷结构简介152
# v( b/ y1 V& y4 E9.5.2 Ramdisk对磁盘的初始化154
) ^# }) ]% c8 z  X4 U9.6 驱动中的请求处理160
, w7 f3 P$ n; h. V# @9.6.1 请求的处理160 # ~* y$ c8 |0 o3 P
9.6.2 读/写请求160
: o! d, i. @& p- r( ?$ b2 h9.6.3 DeviceIoControl请求162
( Z4 K, I: Q- o6 c9.7 Ramdisk的编译和安装164
4 [, Z* D9 a( o9.7.1 编译164
$ R9 v9 t9 F5 [9 }9.7.2 安装164
5 R+ V& |0 [! N2 r5 n& N9.7.3 对安装的深入探究165
( n) }+ f8 X1 G/ w; f4 y, v6 X
# Y" q2 p+ u% f' q第10章 磁盘的过滤167
. F0 B, {; _2 r" ?7 I' P5 ?2 O1 E4 R* ~/ X+ R
10.1 磁盘过滤驱动的概念167
8 g* v: }' x) \: j5 u! Q10.1.1 设备过滤和类过滤167 ( [, b5 L% d+ Z3 y$ n3 Z% x2 k
10.1.2 磁盘设备和磁盘卷设备过滤驱动167
% f) K) P8 n2 W10.1.3 注册表和磁盘卷设备过滤驱动168
+ d$ j0 {) h1 i7 ]. S+ n10.2 具有还原功能的磁盘卷过滤驱动168
$ |% {% n: p1 g: F) S/ R! O* Y- Z10.2.1 简介168 2 L( H3 w) E) ?+ s8 v4 e& a& g) s
10.2.2 基本思想169
% P/ s+ ]$ g3 k' \% r10.3 驱动分析169 6 s0 ?2 |( P0 F% U9 x
10.3.1 DriverEntry函数169
9 ]5 c0 `( \* R- b/ _) h& G2 M( c10.3.2 AddDevice函数170 ' D6 F5 z- g" i9 X  _8 X
10.3.3 PnP请求的处理174
: K$ }6 H( C0 F10.3.4 Power请求的处理178 7 R6 K+ s. F3 U1 m3 S
10.3.5 DeviceIoControl请求的处理178
6 W6 h' L& r+ `4 |6 W7 P' @$ q* ~10.3.6 bitmap的作用和分析182
: H6 S% n; ]' L! e10.3.7 boot驱动完成回调函数和稀疏文件187 , _% {0 v  P- b# N
10.3.8 读/写请求的处理190
! }& o- b0 m# R' h1 @. T: ?0 l. l6 d$ s& y0 Z" E
第11章 文件系统的过滤与监控199
% R$ [7 G$ s# o! v7 o9 E& e1 l3 N9 N0 B/ C( z
11.1 文件系统的设备对象200 + X' Q8 ]3 B1 i) ?
11.1.1 控制设备与卷设备200 1 i6 u4 @9 C& B0 e: K/ c! ]. v
11.1.2 生成自己的一个控制设备201 - O0 a1 a  p9 U6 S  Z
11.2 文件系统的分发函数202 ; Q/ m& ^" D, i) m/ p9 N9 e9 ~
11.2.1 普通的分发函数202 $ s* O7 }, i# w! p$ V" A/ k
11.2.2 文件过滤的快速IO分发函数203
8 P$ j4 f- B% c; Z11.2.3 快速IO分发函数的一个实现205 4 z7 z4 Y. \% S2 R2 a
11.2.4 快速IO分发函数逐个简介206 3 l) Z8 p$ C+ @$ V3 W
11.3 设备的绑定前期工作207 7 |1 w+ \2 }: F( S. j! {
11.3.1 动态地选择绑定函数207
, d4 i' d8 }/ p1 c11.3.2 注册文件系统变动回调208
- o0 `8 d: e1 O6 h" y11.3.3 文件系统变动回调的一个实现209
" p, @- X9 X2 D: X11.3.4 文件系统识别器211 ! X: u2 [* S4 ]3 f5 s3 {0 _- n
11.4 文件系统控制设备的绑定212
# A) X; m/ L9 F+ z: @  P9 b11.4.1 生成文件系统控制设备的过滤设备212
# y) c  N" p/ {4 T" @0 p- U. z11.4.2 绑定文件系统控制设备213
* Z- \6 z7 _+ I11.4.3 利用文件系统控制请求215
: ?) R5 P& ]# u7 q4 z/ q  t, R11.5 文件系统卷设备的绑定217 5 y. w) N- K+ D# v5 m) a  |0 a. ^
11.5.1 从IRP中获得VPB指针217
# k  q1 z% G4 Z11.5.2 设置完成函数并等待IRP完成218 $ _5 K' l! M$ H4 \) d
11.5.3 卷挂载IRP完成后的工作221
0 s3 b& F; }/ L9 g9 q8 J11.5.4 完成函数的相应实现223 $ V' g# x5 \/ f( i' x5 ?" S
11.5.5 绑定卷的实现224 6 D5 G0 S1 Y. X1 b/ Z5 F
11.6 读/写操作的过滤226
( k4 Y% {1 `3 n$ V3 D8 \11.6.1 设置一个读处理函数226 2 ^+ F! E/ B& T) Y1 d2 m. j
11.6.2 设备对象的区分处理227 $ P$ [, G- x! A- u: ?
11.6.3 解析读请求中的文件信息228
% E# e- R' F8 g3 [7 c1 ~0 I11.6.4 读请求的完成230 * I* }$ d: ]- _1 V5 f' p; W% F
11.7 其他操作的过滤234
" h4 h8 Y: r. t) X- Z# c2 i. [1 k11.7.1 文件对象的生存周期234
  o1 h( x; u  N, K4 A4 G11.7.2 文件的打开与关闭235 9 s3 E/ a6 S1 P0 B' l8 B0 U/ P
11.7.3 文件的删除237
6 M+ E# u4 s7 z( ~/ I$ K& }11.8 路径过滤的实现238
0 E' R* J4 r/ D2 T* d: O11.8.1 取得文件路径的三种情况238 & k9 \8 k9 D' ~- j+ G) w& y
11.8.2 打开成功后获取路径238
. |& Y2 g  \  H& j& t11.8.3 在其他时刻获得文件路径240 $ o- Q6 ~5 M0 N  U. N# x9 p$ d
11.8.4 在打开请求完成之前获得路径名240
$ Q( q! V9 ]( x2 N; K+ E0 B11.8.5 把短名转换为长名242
3 P- Q5 L, X- z11.9 把sfilter编译成静态库243 7 Z+ ~1 Q, a4 ^
11.9.1 如何方便地使用sfilter243 - E% O+ ^& D& U. m" R  h
11.9.2 初始化回调、卸载回调和绑定回调244
/ P- Q* ^2 j" t' w( M+ C0 d, Z11.9.3 绑定与回调245
5 t3 D# h, n3 ~; b11.9.4 插入请求回调246 6 A# c3 y9 H, A8 |. P
11.9.5 如何利用sfilter.lib249
( U& h. w, {: V& k6 y6 b% g+ G: A7 V! S/ k8 U; U- `& G: N
第12章 文件系统透明加密252 * @$ b& F! h5 ]: W8 q
3 G, G( M  A: _9 M. C
12.1 文件透明加密的应用252
4 G3 u) C3 e# u7 B9 p, n12.1.1 防止企业信息泄密252
6 |8 f' O9 a" G" X# m12.1.2 文件透明加密防止企业信息泄密253 * p2 M- f/ n6 M0 b; ?; W
12.1.3 文件透明加密软件的例子253
9 Q& a5 L1 u, m& Z! X1 a) W* ^12.2 区分进程254
: G+ D; G, G! m! z0 e9 h12.2.1 机密进程与普通进程254
7 R( b0 Z, p* S: w# c12.2.2 找到进程名字的位置255
' D$ Q0 I$ [8 r, \) l% s- j12.2.3 得到当前进程的名字256   v3 _: D. M0 O; A
12.3 内存映射与文件缓冲257
4 J  L, W, L4 Y( P" k( I12.3.1 记事本的内存映射文件257
9 v5 c, O9 c3 T6 A$ S/ F12.3.2 Windows的文件缓冲258
6 W4 @/ H, N7 p12.3.3 文件缓冲:明文还是密文的选择259 ) |  ^  C, u/ B. ?: T1 H
12.3.4 清除文件缓冲260 ( P- I8 f* z$ V! ~) @
12.4 加密标识263! e: |  H9 E9 g' s6 s
12.4.1 保存在文件外、文件头还是文件尾 263
' [" ?) [+ Y5 A; u12.4.2 隐藏文件头的大小 264* H, o  w* Q' t$ B7 d
12.4.3 隐藏文件头的设置偏移 266
( z2 X7 p0 T5 E6 }" ~, m6 q& G: M12.4.4 隐藏文件头的读/写偏移 267
; X4 V1 Q* t4 {9 v: E! V/ U12.5 文件加密表 267
$ u' y+ z+ ^- W* A( \4 G+ d12.5.1 何时进行加密操作 267
3 H: Q; s  y0 x5 `+ w# }( N12.5.2 文件控制块与文件对象 2687 l# F1 q3 E) Q
12.5.3 文件加密表的数据结构与初始化 269
# i' I4 N3 b2 m; I$ J" u5 [12.5.4 文件加密表的操作:查询 270
3 }7 e( X2 ]; V12.5.5 文件加密表的操作:添加 271% G! j. o: v7 @) i
12.5.6 文件加密表的操作:删除 2723 D, _# F* h) Z! J" i
12.6 文件打开处理 273
$ \! H# @9 q4 L/ p: K( l0 [/ m/ k3 j12.6.1 直接发送IRP进行查询与设置操作 274
( P* |: i4 W5 W2 @" w12.6.2 直接发送IRP进行读/写操作 276
( D: F: C+ a1 F$ ~" X12.6.3 文件的非重入打开 2772 s5 j( y* t; ^, [7 A$ {
12.6.4 文件的打开预处理 280
$ t8 Z# J' x% {/ `12.7 读/写加密和解密 285, Q7 W/ ]% N; M9 N# x
12.7.1 在读取时进行解密 285
# E3 [2 ^3 i, @/ y( a0 T5 Z12.7.2 分配与释放MDL 286) A9 d1 e$ U7 ?, A" G' ]8 |
12.7.3 写请求加密 287* Q6 T1 i3 f5 j: [4 ?$ O$ \6 g
12.8 crypt_file的组装 289+ r6 d# |/ S6 E( m% ^- ^, h
12.8.1 crypt_file的初始化 289
! H! V0 N4 x; ?8 T' Q& U! C# \$ L12.8.2 crypt_file的IRP预处理 2907 L6 Q+ V- x+ V" l5 J. c* u8 R, h/ F2 ^
12.8.3 crypt_file的IRP后处理 293  r6 L6 ]1 E) S3 F+ R

% h& h! d) u3 p* q3 y9 q2 W- r第13章 文件系统微过滤驱动 297# m& f1 s  r- B

8 E# P3 y* R4 z8 W13.1 文件系统微过滤驱动简介 297
! F7 X* A- F* p9 I, B$ s3 o+ U13.1.1 文件系统微过滤驱动的由来 2978 {! v: t# B- U% ?4 w' T
13.1.2 Minifilter的优点与不足 298; x* C/ a( X, ?# V2 b0 ~) u1 ~! {4 Y9 a
13.2 Minifilter的编程框架 298* X$ n( P! |: m/ J9 B8 K2 r% A
13.2.1 微文件系统过滤的注册 299( x) [# b, _9 m
13.2.2 微过滤器的数据结构 300
' ^- B( W/ d+ y13.2.3 卸载回调函数 3034 E( W$ b* j$ J2 x
13.2.4 预操作回调函数 3032 }/ c/ a" q% m) G4 r. Z
13.2.5 后操作回调函数 306
* [  _6 d' u- ^2 M" ^- t# _* w13.2.6 其他回调函数 307' T4 J* l+ E4 d! M( ?
13.3 Minifilter如何与应用程序通信 309% `/ O$ y# k  o7 E5 @
13.3.1 建立通信端口的方法 3106 Y$ D; p2 j* `, |* }6 d
13.3.2 在用户态通过DLL使用通信端口的范例 311
6 T, \  A! N7 o4 a& P. m' M; J& |13.4 Minifilter的安装与加载 314
! H1 i0 h7 g  y, l2 ^$ L; A2 Z/ i13.4.1 安装Minifilter的INF文件 314
3 Q  a& R# {5 X# E! Q13.4.2 启动安装完成的Minifilter 316) _& H( m& A# `5 X3 l! S  N8 [
9 p% p5 M6 f& D4 s
第14章 网络传输层过滤 317: p, k- Y+ [1 i
5 R( O8 t) f/ W# v2 H
14.1 TDI概要 317/ g" f" W, S! s8 D! e
14.1.1 为何选择TDI 317
# }8 v, n- b; y* e14.1.2 从socket到Windows内核 318$ \- ~6 ?+ D( H3 J
14.1.3 TDI过滤的代码例子 319
6 }! W4 c: o" q1 S) h5 Z1 \5 ~! o14.2 TDI的过滤框架 319
6 n3 x8 l2 s8 T* B. {0 L14.2.1 绑定TDI的设备 319" e% g; a/ d8 x$ |4 N4 E
14.2.2 唯一的分发函数 320
! q) o" K" t- A( Q* p14.2.3 过滤框架的实现 322
5 \4 A' m* {) i; I" Y14.2.4 主要过滤的请求类型 323
3 l7 i; N- C4 _' B& _' [14.3 生成请求:获取地址 324
+ ?% {9 d8 y; f& R14.3.1 过滤生成请求 324( v5 }3 X0 ^4 G+ s5 h
14.3.2 准备解析IP地址与端口 326; ~2 o% t1 p! H9 G) E  v
14.3.3 获取生成的IP地址和端口 3279 ?9 \9 `7 t: ?  V8 f/ Z. B! ~
14.3.4 连接终端的生成与相关信息的保存 3297 L/ E5 `0 x* |1 n5 B! [* x2 Z
14.4 控制请求 330
8 \% z  Y7 ?3 }+ w" T14.4.1 TDI_ASSOCIATE_ADDRESS的过滤 330
4 @# [3 |& b, U/ ]) o  C6 w14.4.2 TDI_CONNECT的过滤 3321 Q$ [+ m7 ]' ~! ^
14.4.3 其他的次功能号 3332 b' `5 J, T( ~4 _$ {
14.4.4 设置事件的过滤 334
: {: [4 y* O7 w8 }: T% m. y( H14.4.5 TDI_EVENT_CONNECT类型的设置事件的过滤 336
, \7 A& n: i' @! t% i, Z& i; }14.4.6 直接获取发送函数的过滤 3379 D7 @( b+ o' q
14.4.7 清理请求的过滤 339
) `! ?7 ?) V. W14.5 本书例子tdifw.lib的应用 341
; ]0 T8 {/ C0 ^3 n. `14.5.1 tdifw库的回调接口 341
& e! I& \4 K# ?) Z0 E14.5.2 tdifw库的使用例子 342/ [  w- C& t* b' ~& d: L! t! H9 [

2 ~8 u1 k5 `. `3 c5 f% L第15章 Windows过滤平台 345
- m8 H# f3 G* C3 C9 V
4 b, N; o5 ~4 j5 H% R6 K15.1 WFP简介 345
; ]% s" v9 L3 ?% `- \15.2 WFP框架 3459 w7 ~/ D7 o4 S0 a# _
15.3 基本对象模型 347
/ y8 o$ h! v9 s* f1 {' U) k* X& a5 w15.3.1 过滤引擎 347
; Q. r4 A4 P  W/ \  Z( s4 |15.3.2 垫片 347! u5 v2 p* }- q
15.3.3 呼出接口 347
7 g, \' S; E. i* h) _- b15.3.4 分层 348) ^7 h) @6 k3 W  h
15.3.5 子层 3497 ]$ S$ f8 p, ^9 n# U
15.3.6 过滤器 350% l: a* T" n. ]( R; v+ d  K
15.3.7 呼出接口回调函数 354
6 o6 J$ L* P. p) @% [" p- J. i6 L) @15.4 WFP操作 359
( S* d/ g6 O) R+ w% K15.4.1 呼出接口的注册与卸载 360
  N% I% I0 @, {) ~, h% E" A) o15.4.2 呼出接口的添加与移除 360
' e2 C) c. g% J) V% t' @15.4.3 子层的添加与移除 3610 u3 Y) M% K1 a
15.4.4 过滤器的添加 362' N) n0 I2 i, H( K3 j
15.5 WFP过滤例子 3629 Z, i# c$ ^! E9 X0 c  G' G. Z9 E" ]
0 ~" u8 f  G6 j- F& o) I9 @$ _
第16章 NDIS协议驱动 370
, i2 @! M* |! o" V$ W7 }
* j/ L" z: t( T, S  ~' B16.1 以太网包和网络驱动架构 370
% d- p3 l8 ]  e, Q+ F16.1.1 以太网包和协议驱动 3704 T  F0 C7 Q9 g4 ~# ]
16.1.2 NDIS网络驱动 371, P  i: z1 F: ?: {* Q
16.2 协议驱动的DriverEntry 372
, ~' i7 j( G/ t: I4 c$ T7 p5 T  p16.2.1 生成控制设备 3729 P  v2 B, Y3 K/ s( l
16.2.2 注册协议 374
6 Y  c" G  H( l' c0 q* Y% q16.3 协议与网卡的绑定 375: R( y' j) O( Y
16.3.1 协议与网卡的绑定概念 375
: N; B0 s& C/ G0 o, \* U16.3.2 绑定回调处理的实现 3763 e- P. g, v. r- m5 |
16.3.3 协议绑定网卡的API 378
! E. F) A* @5 f  G8 O$ |# N16.3.4 解决绑定竞争问题 3797 ], d5 O  d6 S
16.3.5 分配接收和发送的包池与缓冲池 380
; Y, b+ w. @. K' t6 {! f16.3.6 OID请求的发送和请求完成回调 381
1 [% Q) J- x. i6 b16.3.7 ndisprotCreateBinding的最终实现 385
) ?  S+ m5 c/ q3 a6 F7 i* c( r16.4 绑定的解除 390
' s5 j7 j& e9 D: E/ ?, z3 J16.4.1 解除绑定使用的API 390+ z( t" C( N; y4 [5 C
16.4.2 ndisprotShutdownBinding的实现 392, d* K# V/ D2 t, Y- Y# w8 d7 I% z2 g  F
16.5 在用户态操作协议驱动 395. o. x0 H" c* P" v" b6 }
16.5.1 协议的收包与发包 395
5 a$ @3 I8 U  t16.5.2 在用户态编程打开设备 396) s& Y# e/ e# @8 q  a5 w
16.5.3 用DeviceIoControl发送控制请求 397
1 s! [) u+ g4 n0 r, @16.5.4 用WriteFile发送数据包 3998 K) `% l5 ~0 `' U
16.5.5 用ReadFile发送数据包 400
1 M- W  q# Z6 f+ v& d2 \) D; f# |7 }16.6 在内核态完成功能的实现 402
7 m# L2 x" j8 l6 R16.6.1 请求的分发与实现 402% m* \, n) Z0 t$ N. j: S9 h
16.6.2 等待设备绑定完成与指定设备名 402
  [$ ?/ R+ J9 J% h% [16.6.3 指派设备的完成 403) u# d$ w8 q3 V7 ]3 G/ H0 o
16.6.4 处理读请求 406
7 G- S, r) d( ?2 l4 D7 B16.6.5 处理写请求 408
# v4 v' r7 J& {4 a5 w7 s) z16.7 协议驱动的接收回调 412' O% y) i: }$ z! n) H% d" w+ X
16.7.1 和接收包有关的回调函数 412
: l2 U9 M! W  t/ c/ Q7 a  ]16.7.2 ReceiveHandler的实现 413
% w! l% G) s  ?) e16.7.3 TransferDataCompleteHandler的实现 417
( Y6 G% m+ [- g* ]$ j9 i16.7.4 ReceivePacketHandler的实现 418. x; r, F/ e& x) g5 R/ K/ N
16.7.5 接收数据包的入队 420
5 J3 a1 w) d8 g6 R1 s16.7.6 接收数据包的出队和读请求的完成 422
5 t: z3 P9 t3 t, L. z: U% I; H5 l' f
第17章 NDIS小端口驱动 427
" }0 r/ k& s/ o4 r4 {% P8 X" Y( Y; s+ F% H7 M& F* O
17.1 小端口驱动的应用与概述 427
1 d% y' U9 |% u7 ?5 {8 O! e, b17.1.1 小端口驱动的应用 4270 B' t# [$ ^2 Z" f; e- o
17.1.2 小端口驱动示例 4284 p, I$ |* R  E! E7 n5 J7 L8 l
17.1.3 小端口驱动的运作与编程概述 429
( C7 k7 h/ G" T: s  w3 E17.2 小端口驱动的初始化 4290 r% G! o0 Z0 U: y8 h
17.2.1 小端口驱动的DriverEntry 429- }0 m6 X9 P% n; F9 O2 C
17.2.2 小端口驱动的适配器结构 431$ p" B+ _# O# g( p9 T6 Y0 X9 B
17.2.3 配置信息的读取 433
' q- p6 S$ ^; D& f17.2.4 设置小端口适配器上下文 433
2 O* @/ T) ?2 A" z3 }! {17.2.5 MPInitialize的实现 4347 I# J, g6 w! ]) {4 t
17.2.6 MPHalt的实现 437
7 V* Q, J, _  {: R3 f9 E17.3 打开ndisprot设备 438
, b" q* G$ L1 C4 h$ f* Q17.3.1 IO目标 4380 }5 e4 R' I) _8 s1 {) T
17.3.2 给IO目标发送DeviceIoControl请求 439/ D7 O. ?8 ]: R* M( k
17.3.3 打开ndisprot接口并完成配置设备 441
* \9 |1 |8 R( e, U( r. k# R17.4 使用ndisprot发送包 443
( |, }9 j$ F7 V$ @- X6 I0 H: }# x" \17.4.1 小端口驱动的发包接口 443
# R* S+ v, g, K17.4.2 发送控制块(TCB) 444
3 `# U; S7 }: G# G7 e: b17.4.3 遍历包组并填写TCB 4461 H! `% q8 E3 F& ]7 A& v! Y' Q
17.4.4 写请求的构建与发送 449
2 i* o. N# m2 c, `1 F$ T17.5 使用ndisprot接收包 451: y4 `, y: `' z) Q
17.5.1 提交数据包的内核API 451
% S% }3 K, @2 l( j* V2 G17.5.2 从接收控制块(RCB)提交包 452
: y; I' }$ P; X* U* s17.5.3 对ndisprot读请求的完成函数 454
3 K; E/ \8 i+ R17.5.4 读请求的发送 456
1 w) |8 u- M, t/ v* S17.5.5 用于读包的WDF工作任务 457
8 @2 I7 L3 G$ \" R" w17.5.6 ndisedge读工作任务的生成与入列 459
/ l& }- |/ Q8 F3 a+ N- V% `17.6 其他的特征回调函数的实现 461
" n5 `4 ~" y- D0 K* V- l17.6.1 包的归还 461
# B* X# a* P4 Q7 h7 V" g17.6.2 OID查询处理的直接完成 462
/ d) `' F# i$ |6 {17.6.3 OID设置处理 465
0 I8 f7 x+ _: u8 k! v; f3 S, p
% F6 H- Z4 @' I9 W6 ~, C第18章 NDIS中间层驱动 467  X) S2 A7 E3 E0 C0 \! `! L

) g4 ^, r8 h. X1 L9 Y3 ]18.1 NDIS中间层驱动概述 467
1 D7 i# `" y* L, r& v18.1.1 Windows网络架构总结 467
" ~8 j- s% X' r& D18.1.2 NDIS中间层驱动简介 468
9 {( K4 P4 h9 @' j18.1.3 NDIS中间层驱动的应用 469
6 Q; O5 X0 L) J1 R18.1.4 NDIS包描述符结构深究 470' G- _& P. b8 z& L( c9 W+ T
18.2 中间层驱动的入口与绑定 473$ f" p8 D* Z" ^. m, M) Z
18.2.1 中间层驱动的入口函数 4733 M% O) ^8 q- s; R# u
18.2.2 动态绑定NIC设备 474
- _. i" y- W0 T" I+ k( U18.2.3 小端口初始化(MpInitialize) 475
- C+ A1 z$ S; @) a, h. G7 F/ X1 {4 Q2 a18.3 中间层驱动发送数据包 4778 H9 `! K" A" O: s" c6 x
18.3.1 发送数据包原理 477
, J/ y2 _4 ^5 u* a3 \) ]# m( G18.3.2 包描述符“重利用” 478
! F) ~1 m$ G  Y+ Q18.3.3 包描述符“重申请” 481
6 N' [* S7 C5 G* ?9 L  y4 G18.3.4 发送数据包的异步完成 482' Y& b7 [3 h" K+ R% X
18.4 中间层驱动接收数据包 484
8 ]- R6 w& b/ r- a: _. s/ I18.4.1 接收数据包概述 484! K4 n3 Q8 K8 J+ c" K7 w' J2 S
18.4.2 用PtReceive接收数据包 4850 w* e- m: v, w! e4 }( h' W* e: {
18.4.3 用PtReceivePacket接收 490
4 O. ]/ ?6 K+ F/ o# L, v18.4.4 对包进行过滤 491! u" ]# N- |- _+ r
18.5 中间层驱动程序查询和设置 494: Q! C5 P# `) _- N. m
18.5.1 查询请求的处理 494
% S+ e5 e$ A$ Q, o4 F3 Z/ O18.5.2 设置请求的处理 4962 J6 @7 T# D/ i! S0 X
18.6 NDIS句柄 498
$ L& P1 J2 s) W/ `: z% k18.6.1 不可见的结构指针 498
& H3 d4 X; k, {4 A18.6.2 常见的NDIS句柄 499# n! r3 t; L" o4 F2 y. }
18.6.3 NDIS句柄误用问题 500: T1 E: ^1 C. r+ Z0 E
18.6.4 一种解决方案 502
0 `5 O6 @5 b1 K  \) h: i8 ^% c18.7 生成普通控制设备 5031 y& l* L2 Y8 Y3 P6 R. B+ K
18.7.1 在中间层驱动中添加普通设备 503
$ R/ q; b2 P/ v0 O4 I& M  s18.7.2 使用传统方法来生成控制设备 505" W3 ^* K0 F& U3 b

: i. _3 n2 I' G- d, p; j第19章 IA-32汇编基础 5119 L6 q6 g  g$ Z3 Q% ^/ @  w
' D# F4 b& L, K0 L
19.1 x86内存、寄存器与堆栈 511
: z% B9 P1 {' J; K19.1.1 _asm关键字 511& \* X3 K. F+ @# q1 C. V$ O2 B, y
19.1.2 x86中的mov指令 512/ r$ y: U2 u0 E6 N+ c* F
19.1.3 x86中的寄存器与内存 512
/ ?4 F5 x; q8 n) h19.1.4 赋值语句的实现 5137 d' w5 [1 ~/ O" ?" i
19.2 x86中函数的实现 514' g+ B" O- s* P3 ?  S' `2 R" Q
19.2.1 一个函数的例子 514. |( j0 |) S: o: Z+ ], W/ q6 X3 R
19.2.2 堆栈的介绍 515
7 ?, t/ Z% g  O; c" Q19.2.3 寄存器的备份和恢复 5168 q7 A5 K2 p+ D$ M3 q' l
19.2.4 内部变量与返回值 518
0 d; B) s$ J+ K. C+ v/ g( t19.3 x86中函数的调用与返回 521
: b. K0 Q4 q* l: a# d( N5 ]19.3.1 函数的调用指令call 521  X6 x, R; G+ g0 ~/ _
19.3.2 通过堆栈传递参数 5218 G. T, e5 I& b( b+ T
19.3.3 从函数返回 5237 R/ v4 G+ D/ R: w# B. M3 m
19.3.4 三种常见的调用协议 524& d7 g1 l9 v6 V
19.4 从32位汇编到64位汇编 526
( b, _) m" D/ h' `19.4.1 Intel 64与IA-32体系架构简介 526
3 H4 W# f; p* x; [$ h6 T: r. k% n19.4.2 64位指令与32位指令 526, ^; o1 m. Y/ w: _
19.4.3 通用寄存器 527
3 M, h2 p8 ^4 B) Y: n5 q  z1 e2 d, w19.5 64位下的函数实现 528
. Z% f& A) g$ T4 z6 v" o  s19.5.1 函数概览 528
; R1 M* F" h5 n19.5.2 32位参数的传递 529
, H# Z7 l- B. G1 y. `6 m19.5.3 64位参数与返回值 5302 \9 d9 c5 w: J; N
19.5.4 栈空间的开辟与恢复 531) p6 y2 G0 m) }5 [

# y9 w0 W5 \9 K/ x& {- I4 I4 D" {第20章 IA-32体系中的内存地址 5344 O' q7 z3 x0 }4 {' L* C
( \: A* O2 s# }2 \; S
20.1 内存的虚拟地址 534  Z2 z, q8 T1 S0 Q* T- k" F
20.1.1 C语言中的内存地址 534
  u1 d% ?* R0 I6 O' c- u20.1.2 虚拟地址的构成 535( y. r2 S. m0 t1 y
20.1.3 段的选择 536
6 U' v/ p. C& H1 p' D6 i  R% J7 e20.2 全局描述符表和段描述符 538! w+ m. C  H, H, ?6 @% X% q
20.2.1 全局描述符表 538
$ S( A6 S7 O# R" X: q# j+ U20.2.2 段类型 539( ^: M$ ?- v8 B' N9 x6 f# J/ A+ J
20.2.3 段寄存器与段选择子 540
' }0 b4 ^* Y  j  a4 J20.2.4 64位模式下的段 541" t2 J- Z- {' C7 d8 ]
20.3 分段编程实践 542
% f* [; R/ d6 @- ~20.3.1 系统表寄存器的结构 5424 N! E3 W- u% n: B. E9 {
20.3.2 在汇编语言中获取全局描述表的位置 543
! e5 z; \# y7 v; Q" {1 e. y20.3.3 调试范例:sgdt指令的错误使用 545+ b1 k9 q! A5 h1 m; U
20.3.4 在64位下获得全局描述符表 5474 h7 R# @9 E8 `+ q, H2 Y
20.4 线性地址基础 549' r% Y9 G0 k" P9 X$ n8 T. C6 l
20.4.1 分页控制机制 550
" {* ]3 h9 I4 G8 e. R( @20.4.2 线性地址的转换 551
3 E# e( |$ I) Y( s20.4.3 混合页面大小 552" ?( L2 K' ~; f
20.4.4 32位物理地址的页目录和页表项 552/ n( Q! X; [) X( o5 e$ C5 ]
20.5 各种特殊分页方式 555* ~. I: @- }! y: r3 V/ W. O
20.5.1 PAE分页方式 555
9 G$ z9 ?7 ]# f( c) |) T1 a5 r20.5.2 PSE-36分页机制 558
# x" w& u9 C+ @# k4 W" N20.5.3 IA-32e模式下的线性地址 559
5 x7 @  s$ n  A# L+ ^20.6 分页编程实践 562, R2 U8 j4 D$ q4 ]5 V/ q
20.6.1 页目录和页目录指针表的获取 5623 b% w' d3 {0 U% w# A8 u
20.6.2 页表的获取 564, X5 ]5 o1 k; A  w
20.6.3 线性地址的结构 5672 T3 u" E8 F+ D: U

: k& _0 P5 H! S# f) X& [1 \; j% q第21章 处理器权限级别切换 571
# @5 J5 W4 g. b7 B! Q! b7 I0 M) P; Y  U4 q9 D1 T6 H; y3 b
21.1 Ring0和Ring3权限级别 571
0 P6 n) ]- n/ [: Q* m" R21.2 保护模式下的分页内存保护 572
) E: r9 _2 `) a$ |2 Z21.3 分页内存不可执行保护 574$ J+ Y& H  H& f9 a3 d
21.3.1 不可执行保护原理 574
: [5 p) }( w- h' ~( f# R, ~21.3.2 不可执行保护的漏洞 575" n+ O, Z$ C8 C' d' _! _
21.3.3 上机实践 577
7 _8 V% E+ s5 E21.4 权限级别的切换 5792 ~5 n2 @9 |8 p( o! m! ~8 r
21.4.1 调用门及其漏洞 579
/ N+ k0 d  [" d: C! \! [) T. n3 [6 w21.4.2 sysenter和sysexit指令 581; R0 m0 W% L  u5 Z, z
21.4.3 上机实践 583
1 y5 s% ?8 @7 }) I5 y# G4 E3 z# A' y+ z. ^& X# V
第22章 IA-32体系结构中的中断 585) w, h+ Y* j/ N  Q- J1 U+ d" v2 A5 R
8 d4 I9 ]. T6 {7 g) I! i) ?: ]
22.1 中断基础知识 585) p, q1 |& n8 r% o5 n
22.1.1 中断描述符表 585
* j* G! B7 \; U! q; x4 d22.1.2 中断处理过程 587
, X0 h/ p3 g+ Q: P* F$ |' A$ ?+ |22.1.3 64位模式下的中断处理机制 589
2 L, P9 @0 {$ G, o8 _22.1.4 多核下的中断 589
5 c6 y& M% ^7 Q- C% E6 T& z0 n22.2 Windows中断机制 593; R/ q; L2 Q# [! ^
22.3 中断编程实践 5966 R8 }  n- r! q4 t& d6 K6 j. Y  S
22.3.1 IDT Hook 596. e' c7 N: U. ]1 b4 N
22.3.2 巧用IDT Hook实现安全防护 5988 |1 p# `0 W, |- `3 e5 h* F6 Y4 W4 u

% [. G* h8 d$ N% V% y/ U% y第23章 Windows内核挂钩 601
1 P3 }. D, F$ O) K! O+ x: f
# V8 V9 Z/ ?% l( I2 N0 h6 f23.1 系统服务描述符表挂钩 602( Z1 h: ?4 [* I: k' m' [3 f
23.1.1 系统服务描述符表(SSDT) 6025 w; B  Z  f7 i/ f& @  R
23.1.2 系统服务描述符表挂钩的意图 6031 j$ i1 U7 F( p2 j% L
23.1.3 寻找要挂钩的函数的地址 604
  Q8 K5 r3 C/ Y% ]3 A; E23.1.4 函数被挂钩的过程 605
6 X: Q6 Y/ s! x23.1.5 具体实现的代码 606
* V' O7 O2 d1 w9 Z7 a23.2 函数导出表挂钩 608
1 s1 y' n  p6 u% c( K23.2.1 内核函数的种类 6085 i9 \2 k! L" T/ T, W; |
23.2.2 挂钩IoCallDriver 610/ n: f% h, \1 C. d/ V6 t$ B
23.2.3 对跳转地址进行修改 611
5 b, S9 }1 W0 b, v23.3 Windows 7系统下IofCallDriver的跟踪 612
" a6 M8 v4 w* U9 ^% S3 i, v23.4 Windows 7系统下内联挂钩 615
$ x/ _# q6 y+ @: B: [8 ]6 W23.4.1 写入跳转指令并拷贝代码 615
- y' @: C* c6 G) n23.4.2 实现中继函数 6173 j. M) T  y2 w5 X/ e" ?1 ~
9 |3 n& F. ~# L" L# x5 E+ @

1 p) ~& ?$ A4 B' c高 级 篇; q/ o4 d  Y  T7 F
# T7 b5 y, V- I4 f  K" L- L
第24章 Windows通知与回调 620+ R3 O+ b: R- G4 ^* N) r3 ^9 r
. w2 f+ ]& y$ y% L1 U2 \
24.1 Windows的事件通知与回调 620
* g8 l$ l9 V6 O24.2 常用的事件通知 620
' I  u* A8 c& T  M2 ]" U24.2.1 创建进程通知 621$ h9 g- i/ @3 q1 \2 X
24.2.2 创建线程通知 625. e1 q* x" F* ?2 F
24.2.3 加载模块通知 6265 L2 I: K" s9 [/ H6 h
24.2.4 注册表操作通知 6296 |$ g. Y1 t3 p  D% o) y+ M+ R( o
24.3 Windows回调机制 636/ ^; G# e- j- L' l8 b3 A: D$ J- E5 w
24.3.1 回调对象 636
0 }2 [" W  i. k1 F24.3.2 回调对象的创建 637
/ T) F# N8 q+ t% F& Z24.3.3 回调对象的注册 637
. {! g* u1 X5 I/ R- O24.3.4 回调的通告 638" W- K& E- U  W
24.4 安全的死角,回调的应用 6396 e0 X$ x* ^/ I

/ j) [3 O# y3 r, P第25章 保护进程 6409 ?/ E4 j( g  C( W/ x5 U% i4 D) c9 B
$ e* W/ M& e7 W/ C* Y( W: W
25.1 内核对象简介 640
; B6 ]9 \2 o, C" ^' P1 e- i" ]25.2 内核对象的结构 641
7 m9 }; D: T; J% I/ E' O; z, J- z25.3 保护内核对象 642' i5 M3 @/ i8 K5 K* a( p2 I
25.3.1 处理对象的打开 643
* c, V1 w1 O  Q' z% t4 k1 V25.3.2 处理句柄的复制 644, c& l1 t2 O/ m/ a# Z
25.3.3 处理句柄的继承 646
! y* E! l* n7 l+ h25.4 进程的保护 652
: p) g4 r7 ^5 C# ?7 p* D25.4.1 保护原理 652" ~- |5 i/ K5 |
25.4.2 Vista以后的进程对象保护 6547 N/ q9 Q( V- U4 b( X4 }
25.4.3 进程的其他保护 655
" P* J3 n7 J' o3 D, u
, I+ B- S0 \" V% F( O% S9 P* ^5 k附录A 如何使用本书的源码光盘 656
/ m4 O0 M% B: V. r  ^4 C  U. |  L0 P/ x
附录B 练习题 659% a- v8 |$ {  M( y; g

  O' j  ?4 B( o) T: U. ?8 w; `! X+ t  N& s
想知道小甲鱼最近在做啥?请访问 -> 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 23:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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