鱼C论坛

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

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

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

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

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

x
TB1eC4MIFXXXXaOXpXXXXXXXXXX_!!0-item_pic.jpg_430x430q90.jpg

9 c8 C* s1 }: |6 o1 j& ?* Q* A( Z. E3 [+ ]( g; A7 i6 s
书名:《windows内核安全与驱动开发》
7 K7 @2 n: ?  r( o. q  r% b! X作者:谭文;陈铭霖- y5 X0 W$ g" v: P1 [+ O
出版社:电子工业出版社% r& V' [$ T, L2 U1 T: e
出版年:2015年6月1日(第1版)1 H& j! R! X' r/ ^, C& a7 b
定价:139.00元, P0 e1 h- ]: g6 t6 v
装帧:平装6 n0 g/ r4 R/ }1 j& S  Y( K, J5 \/ o
ISBN:9787121262159. Q% z/ b- U2 |, L9 u
! ?3 I( f2 N9 O# y/ i
购买链接:$ f- e0 f- R& Q
  B3 w2 }4 Y2 y


" X' G, q" U, d7 o( L; S" s亚马逊 -> 传送门
* w: t7 [7 q5 g1 R8 h) Q
8 b' K4 m) |% `1 Q# j0 @当当网 -> 传送门* Q5 |0 ~" x9 m  h5 l. b) l
$ h1 m" J8 S% p$ r
京东 -> 传送门
; R4 S' i1 G* h4 l% J8 v6 ~4 ?/ Q' \6 e6 f
天猫 -> 传送门- s$ I3 q' }1 Q; {, N
' y3 p  U% s% C' p, ?1 S4 _
# Q! _# O, _* u$ m% o
内容简介:
) U/ `, f( K/ X' W* z  T/ S8 q% G1 Y7 J4 [( L! G


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

% R1 t! n: e0 V: z3 u2 V- c8 `目录:+ T# E$ p! d# e) M2 A9 g* l
2 d* {% I* @$ @0 I4 ^# R% G) ]

) m/ {1 w- |. M& L
基 础 篇
  P& x; m" _2 v  }. q% o; c
4 V; I  ~: U* N0 Y9 X第1章 内核上机指导2 3 C/ U- r' h' z  }) W/ \
" G  q, a6 r' M1 \" o& h
1.1 下载和使用WDK2 ) c: y+ d) a6 S  A! }" t/ G
1.1.1 下载并安装WDK2
/ j0 i2 Q! R, {8 m1 M$ c0 t1.1.2 编写第一个C文件4
& d4 A, @1 C" T! d/ ?, O1.1.3 编译一个工程5
7 H; A6 y8 y4 D7 U1 J1.2 安装与运行6 # E+ r8 J9 r9 Z1 O8 S+ s7 o5 [
1.2.1 下载一个安装工具6
+ X" m/ U  H# E* J1 l3 o) B1.2.2 运行与查看输出信息7 1 t* i: ]; _& l3 H
1.2.3 在虚拟机中运行8 ' @* I; J3 P- S6 T1 P. @
1.3 调试内核模块9
: U1 f3 K( b& d! }" j1.3.1 下载和安装WinDbg9 % ?# D8 d. z8 |
1.3.2 设置Windows XP调试执行9
( a. s" c7 o2 L2 `5 ~/ c1 _1.3.3 设置Vista调试执行10
6 v  f, L2 [  I' Y& b/ X1.3.4 设置VMware的管道虚拟串口11
0 ]" \+ R9 `. [1.3.5 设置Windows内核符号表12
/ w) Y& ]8 G7 n- ~) a7 ?& `1.3.6 实战调试first13 ( C: T- r# {1 q' W/ }

% ?( s: z' r, b$ H% s第2章 内核编程环境及其特殊性16 2 g1 @! p1 u2 C8 N9 t
& m; _# Y4 c0 I. o( c7 H, Q
2.1 内核编程的环境16
4 w' P! E) M+ j( D& J/ Y2 G2.1.1 隔离的应用程序16
2 P9 d1 Y- J) w2.1.2 共享的内核空间17 8 h" L" P5 H5 [3 d9 n( u
2.1.3 无处不在的内核模块18 8 \0 N7 `+ }  T* k  W
2.2 数据类型19 1 ~; J# t: E2 O, I8 Q* c# \
2.2.1 基本数据类型19
6 E4 X# ^, y, T2.2.2 返回状态19 + F; n- Z. W) b/ F: g+ q2 Y
2.2.3 字符串20
5 {) {8 p" r& l7 W9 g7 z9 x( P2.3 重要的数据结构21
: A. g! {: T9 u5 Z. a! B2.3.1 驱动对象21 ( M! \  ]3 J  P6 s
2.3.2 设备对象22
  b! ^3 F5 J( b7 V2.3.3 请求24
  q& n. C2 L) u& h$ P" }* h2.4 函数调用25 0 _* d" j7 P9 b3 @+ K/ l5 N# j; v
2.4.1 查阅帮助25
6 Y5 W7 k) T1 a( ]. W. \0 C1 i2.4.2 帮助中有的几类函数26
/ U, h5 Z: o5 [  G- E: p  D3 i2.4.3 帮助中没有的函数28 . O( C2 g, R; K' s- `
2.5 Windows的驱动开发模型29
  o% D* I- W, f" F0 E6 V2.6 WDK编程中的特殊点30
. l! C0 [6 q2 f+ d: R& z! O$ i2.6.1 内核编程的主要调用源30
/ Q- T/ K; b8 ^, p2 `5 O2.6.2 函数的多线程安全性30
% P( h6 N& |5 n4 T2 M" Y5 K3 U2.6.3 代码的中断级32
! `* [* t7 c0 u6 e- A2.6.4 WDK中出现的特殊代码32
% K! `* B5 V+ K: s$ S# K; ^( B9 y# p% k, j* ?" S
第3章 字符串与链表35
" B- i; S2 f4 i4 _
& o  O9 w7 S* S4 ~  ]6 M% E3 U3.1 字符串操作35
- x) |6 ~7 w8 J! z! A; V4 n3 e3.1.1 使用字符串结构35 % F8 ]7 O1 P) N6 T& y( A
3.1.2 字符串的初始化36 & W/ h/ T! T1 j, K7 i+ ?
3.1.3 字符串的拷贝37 9 ~1 b1 F" @3 Y5 I. Q5 w+ K# h5 g+ D
3.1.4 字符串的连接38 ; y; w& s3 p2 e8 B: y. E! n
3.1.5 字符串的打印38 5 l$ T1 h" O. q& I" R/ F+ v; V7 I
3.2 内存与链表40 4 F% O6 `8 i+ |, y0 D9 Q
3.2.1 内存的分配与释放40 % [4 k  V, c, Y+ `; C5 R3 q  t
3.2.2 使用LIST_ENTRY41 : ~6 f% c$ h" ^) _# M- \8 s0 `
3.2.3 使用长长整型数据43
+ Z/ d% C( B5 g3.3 自旋锁44
. \+ S0 {4 `& ^0 [) g3.3.1 使用自旋锁44
2 ]8 A! e! J% a# }4 s- g3.3.2 在双向链表中使用自旋锁45 ) Q; L+ f! f8 w/ E
3.3.3 使用队列自旋锁提高性能46 . v* s' L: K. S0 `

+ h& U/ F6 B, w, @; S) w第4章 文件、注册表、线程47 ! z/ j8 A2 Z/ o; c: I) X- \" H

5 ~5 p0 O. H8 E: p7 B0 ]4.1 文件操作47
( i$ u( W8 o8 d' Z5 I5 f4.1.1 使用OBJECT_ATTRIBUTES47 % W' o. B, A2 R
4.1.2 打开和关闭文件48 8 A- T6 N) d7 o& R- o" |
4.1.3 文件读/写操作51
9 h1 s. c8 R) F% Q! H# S1 i% [" N9 u4.2 注册表操作53 . S$ y7 f$ b3 n+ }7 `5 i7 |0 @9 r
4.2.1 注册表键的打开53
8 o  ^) x6 [! w8 I+ Y4.2.2 注册表键值的读55
% ^3 S$ @0 b' M% T% D3 A4.2.3 注册表键值的写57 9 N. O& W$ M- a& L
4.3 时间与定时器58 . l$ p; N9 {' G" a# Z7 B% T+ t) N
4.3.1 获得当前“滴答”数58
- D) I% R3 m' k4.3.2 获得当前系统时间58 ) m' C+ k- S! X  _6 o& p
4.3.3 使用定时器59
% J% H; s3 S9 y9 k; Q$ d5 K4.4 线程与事件62 8 O1 Q9 Z! z+ n, A
4.4.1 使用系统线程62
" r& p  l! ^" |" `4.4.2 在线程中睡眠63 2 [: z/ B: H; q- R, Y% i9 X. i
4.4.3 使用同步事件64 , P# z" H6 O$ ?4 l' |8 L' l

1 W3 j( l$ {2 ~" T2 H: j8 w9 J第5章 应用与内核通信67
% {( G; D+ s0 Z! W( x+ q
8 s7 a3 o, l& P# u) \5.1 内核方面的编程68 " O5 ^7 f! C6 N. Z, k$ C3 L
5.1.1 生成控制设备68   ^7 n) u* d+ W2 f4 |* ?5 r' n- ~
5.1.2 控制设备的名字和符号链接70
/ |$ j- M# q4 O5 S, B" f5.1.3 控制设备的删除71 # H4 B. o, k& X, b* \
5.1.4 分发函数72
2 B1 W: V  Q1 z+ i  W4 I: O9 H5.1.5 请求的处理73
; _( M2 \, g/ m' w, |5.2 应用方面的编程74
. c0 |4 L& u) g5.2.1 基本的功能需求74
/ f6 N3 K* V+ k* w' P' }, Q5.2.2 在应用程序中打开与关闭设备75
0 P& s; w& Z: z7 v5.2.3 设备控制请求75 $ m9 I( e: X4 G6 a' |* |7 D
5.2.4 内核中的对应处理77 " H% a9 P% V% K
5.2.5 结合测试的效果79
6 b& s7 f$ G/ O7 o- x5 k+ F/ T5.3 阻塞、等待与安全设计80
" N+ D/ o0 A& }3 |- E5.3.1 驱动主动通知应用80
, o. H1 V5 u0 {, H4 {( p- y( D6 y5.3.2 通信接口的测试81
, b. Q8 n8 n) E) w  U/ ?5.3.3 内核中的缓冲区链表结构83
, n: d6 h6 @; W  u6 ^6 T5.3.4 输入:内核中的请求处理中的安全检查84 % a. G: k3 p- O! a. @
5.3.5 输出处理与卸载清理85
3 Z6 L/ [, ?( T
8 K+ F0 I9 |( v% w' ^: y第6章 64位和32位内核开发差异882 e5 c  X5 ?5 U. i  T
4 @5 I9 e& ~4 S$ `, C! q0 Y' o
6.1 64位系统新增机制88 , }; ?% @3 z/ N: `& t
6.1.1 WOW64子系统88 0 P. R* O( v" ]0 ], s
6.1.2 PatchGuard技术91 + g* L! J+ Z& r3 |% Z. O* w( v" W
6.1.3 64位驱动的编译、安装与运行91 . g' l2 o5 `6 c0 v6 \
6.2 编程差异92 8 Z- y+ B( k" E
6.2.1 汇编嵌入变化92 1 T/ P7 I& s9 I3 O2 K
6.2.2 预处理与条件编译93
0 c8 M4 T. }& T4 K6.2.3 数据结构调整93
  Y' Q$ B! Y" G% t- w5 ]8 l* t5 O6 {8 q6 p' d/ e3 n$ |/ D
8 n4 ]) _5 B8 ?& ^
开 发 篇
% q8 X4 V3 n$ q
  B1 O* S+ G, L3 G  c2 J2 t9 M- _第7章 串口的过滤96 . ~5 E$ w' S# ^9 S

; `( m7 z: k4 Y5 ?; B  |( u/ l7.1 过滤的概念96
: u' R' N' u- J$ M& i* M7.1.1 设备绑定的内核API之一97
' ~9 h" z% Y+ v& M' ^7.1.2 设备绑定的内核API之二98
& \' }/ |% M, r, l6 `: o7.1.3 生成过滤设备并绑定98
* ?$ {( o/ @8 S: O) o& z7.1.4 从名字获得设备对象100 * G8 r" v7 j/ F) ~6 ~4 Q' c
7.1.5 绑定所有串口101
7 r  e0 w8 V* h  ]( n) q% ?7.2 获得实际数据102
. j! A: `4 {, `+ j9 H7.2.1 请求的区分102 5 R! l, R9 j, X3 u1 t' M
7.2.2 请求的结局103 2 s/ q/ t( J% \9 j/ D2 i! S8 z* G: O
7.2.3 写请求的数据104 3 D; q+ \1 r, ~8 l
7.3 完整的代码105
' e4 F7 O/ H. c7.3.1 完整的分发函数105
8 h' L; P2 n% W: ^- x2 Q, [' u7.3.2 如何动态卸载106
1 Y) t3 P8 G1 K$ Q7.3.3 代码的编译与运行107 % d0 s: R8 w4 _: d3 T6 p0 w
* r/ p1 J/ o, h, Y; {( |) b. p+ p$ [
第8章 键盘的过滤109 ) a8 S4 p' N& F$ K! }. e
* f- A1 b# O  y: X" C! [" \
8.1 技术原理110 + k+ U4 ^8 @8 i, I5 N% e
8.1.1 预备知识110 + c/ i, S, h- L+ C
8.1.2 Windows中从击键到内核110 : a5 [4 B4 G7 p% k3 M, O9 a) c
8.1.3 键盘硬件原理112
; R& Z& z- w1 q8.2 键盘过滤的框架112
! s! E! b1 g$ q# I% k3 t8.2.1 找到所有的键盘设备112
5 A" m7 \- h5 z; g8.2.2 应用设备扩展115
: W* X* T' p/ c% M7 L8.2.3 键盘过滤模块的DriverEntry117
$ _* _5 Z, x1 F2 y( \$ {. d8.2.4 键盘过滤模块的动态卸载117
( {7 O/ {# t0 U' Z5 y$ \0 ^8.3 键盘过滤的请求处理119
: a1 d. n3 p( v* |  `: w8.3.1 通常的处理119 ' f! R: N) V- Z* ~$ }
8.3.2 PNP的处理120
  N* G, u& p. z! w/ [8 z8.3.3 读的处理121 1 K, V! }+ z& I9 J# [; d  E! r5 ?
8.3.4 读完成的处理122
! X" ?$ c! a2 Q' z/ o8.4 从请求中打印出按键信息123
! M) t, {  w3 ^6 b2 p2 Q& _3 \8.4.1 从缓冲区中获得KEYBOARD_INPUT_DATA123
, ~& p) x/ C( K- o; R8.4.2 从KEYBOARD_INPUT_DATA中得到键124
" V! t$ i! s/ L9 P$ h% a" k8.4.3 从MakeCode到实际字符124 5 a$ X% _! U; ~# E+ q0 F
8.5 Hook分发函数126 * q$ F5 y; k) |8 W& x
8.5.1 获得类驱动对象126
# V; D5 Q) {, H4 n, [8.5.2 修改类驱动的分发函数指针127
8 j4 K( p- z) D  f' z7 g8.5.3 类驱动之下的端口驱动128
( V" ?$ Z- n7 F- p8 d8.5.4 端口驱动和类驱动之间的协作机制129 : A$ M3 a/ Z6 ^
8.5.5 找到关键的回调函数的条件129
$ r* f8 t& b5 z8.5.6 定义常数和数据结构130 ! B7 x/ R9 |. e' d3 O! _
8.5.7 打开两种键盘端口驱动寻找设备131 ; |9 y8 P4 M3 h( [. H; R
8.5.8 搜索在KbdClass类驱动中的地址133 0 O, @: n) L, H0 v# B- W
8.6 Hook键盘中断反过滤135 ! Y4 u5 c6 \" e& U' h- Y
8.6.1 中断:IRQ和INT136
: m! d2 _3 w  }$ F. C8.6.2 如何修改IDT136 7 j3 s& P; y- t
8.6.3 替换IDT中的跳转地址137
3 k7 D+ h- [, h8.6.4 QQ的PS/2反过滤措施139 + D! P" t* A! y
8.7 直接用端口操作键盘139
8 B7 `  I6 c  V2 c1 K+ L% r8.7.1 读取键盘数据和命令端口139 & H: I8 t) l* N8 a7 ^# a1 M/ a
8.7.2 p2cUserFilter的最终实现140 ) }4 ~& O, F8 N+ |9 i

# x4 C9 f; {3 l7 M/ j第9章 磁盘的虚拟143 5 M4 Y0 @1 [4 Q& u8 n
4 h4 Z# Y! |+ a9 P
9.1 虚拟的磁盘143 . M8 J" v+ v6 q' g+ J% I
9.2 一个具体的例子143
' v+ f: S* g& I* k- \9.3 入口函数144 ; P1 o/ {# R. G" R9 H. W
9.3.1 入口函数的定义144
6 I4 ?* j9 }  z% S# ]9.3.2 Ramdisk驱动的入口函数145
1 A- w! k4 g7 }; p$ I% B+ i6 T  \9.4 EvtDriverDeviceAdd函数146
' F7 z8 E' d- c7 [1 F0 J9.4.1 EvtDriverDeviceAdd的定义146 , g4 c- s5 q0 K! e) L
9.4.2 局部变量的声明146 0 [! w+ g+ h& M% r2 {
9.4.3 磁盘设备的创建147 $ C8 I8 c5 [7 w  \' X
9.4.4 如何处理发往设备的请求148 9 ]( ?5 ~/ }3 }7 S9 ~; h6 f
9.4.5 用户配置的初始化149 ' L! ?* |  d' Y7 r  s/ f) w; R
9.4.6 链接给应用程序151 8 @/ S, v0 g/ c) v* t
9.4.7 小结152 . U4 R, _2 m7 J. b+ V+ N2 f- J7 q
9.5 FAT12/16磁盘卷初始化152
) S" s4 P; P- Y: d9 C9.5.1 磁盘卷结构简介152
/ t9 }0 }& E, Z; E* ~1 X9.5.2 Ramdisk对磁盘的初始化154 0 A' m( W2 G! E  A$ {2 r  a# n* V$ \
9.6 驱动中的请求处理160
+ g% V. ]) C% F: h5 N# k" S" K  [9.6.1 请求的处理160 * i/ `. r9 e# F
9.6.2 读/写请求160 4 P) O; t5 {5 d  T% S
9.6.3 DeviceIoControl请求162
: u" ~1 A9 f6 x; ?. f9.7 Ramdisk的编译和安装164 ( Q3 y# \+ s1 z" Y+ T
9.7.1 编译164 , Z. M, F6 I' l& {% Q3 L2 i' y. F
9.7.2 安装164
3 |: ?' w! ~8 w; ]9.7.3 对安装的深入探究165
8 R& w; }. Y$ B) `3 a8 J- _+ }$ I: v% ^( n+ F+ }
第10章 磁盘的过滤167 " Q5 A/ h  o/ q
' f7 C1 p: `' a- j0 S* q. n
10.1 磁盘过滤驱动的概念167 3 b: f' o" r- a5 V" T9 Z2 ~1 j
10.1.1 设备过滤和类过滤167
- }% ]  {3 x8 h# F10.1.2 磁盘设备和磁盘卷设备过滤驱动167
: v, y$ i3 i! V- d* y( m10.1.3 注册表和磁盘卷设备过滤驱动168
# ^1 ~4 A% w& Z3 d& A10.2 具有还原功能的磁盘卷过滤驱动168
8 n+ f7 Q- k" a5 H$ j! T10.2.1 简介168 # b4 g- F3 a$ y0 x
10.2.2 基本思想169 ) @) B" S: H8 {* ?3 X
10.3 驱动分析169
4 Q4 z+ n6 E& o; l+ q10.3.1 DriverEntry函数169
2 b0 F7 t% H& M( Z, p10.3.2 AddDevice函数170 4 _  F) w. M6 r
10.3.3 PnP请求的处理174 - C3 D; P- f* \5 }
10.3.4 Power请求的处理178 ! w3 _2 t' V, x* T& f
10.3.5 DeviceIoControl请求的处理178   O+ Z5 u8 V7 ~6 ~
10.3.6 bitmap的作用和分析182 - t" y  w1 H; l" J2 O
10.3.7 boot驱动完成回调函数和稀疏文件187
. Z) X% F3 ]" N! R10.3.8 读/写请求的处理190
3 t6 }8 b7 C! r
3 E1 L" f* G. N& M; a* f0 G第11章 文件系统的过滤与监控199
* C$ c8 F) F& S
# |9 s' k4 c' P11.1 文件系统的设备对象200
  d: W; _2 j) L# D& k* o11.1.1 控制设备与卷设备200
8 z' Q. s. a# p2 i6 L' ^" t11.1.2 生成自己的一个控制设备201 9 j- a+ B) Q* R& L) }' _% M% @
11.2 文件系统的分发函数202
0 y5 i* U$ L0 d4 |11.2.1 普通的分发函数202
, F' W0 }+ |) A- s  f: G11.2.2 文件过滤的快速IO分发函数203
2 L5 }: u3 e9 v- F! k# G11.2.3 快速IO分发函数的一个实现205 9 ^6 }: }- V' }1 i& L
11.2.4 快速IO分发函数逐个简介206
7 Q: A  h' Y) s* e11.3 设备的绑定前期工作207
8 r7 E  V' M# _11.3.1 动态地选择绑定函数207 * G  o3 P/ L5 ~
11.3.2 注册文件系统变动回调208 ! G( L# j% P1 z3 C; u' u) W
11.3.3 文件系统变动回调的一个实现209 * M# P7 f% ^; r6 I/ F' x
11.3.4 文件系统识别器211 & r: z& r- q+ R" T% ]
11.4 文件系统控制设备的绑定212
9 Z. @" A# U7 F2 P6 |11.4.1 生成文件系统控制设备的过滤设备212 6 I9 q5 I5 F+ x, S
11.4.2 绑定文件系统控制设备213
7 e  _, R- n: n' P% A1 f11.4.3 利用文件系统控制请求215
( H# r3 }- p  _/ |! d11.5 文件系统卷设备的绑定217 * l, h7 J' c4 v) }% w9 n
11.5.1 从IRP中获得VPB指针217 6 B6 W$ Z( [7 k% ]
11.5.2 设置完成函数并等待IRP完成218
) |! R& b; Y  h. h9 O11.5.3 卷挂载IRP完成后的工作221 / X/ a! H5 @2 J# f) o
11.5.4 完成函数的相应实现223 7 s# `% Q! D# E; }
11.5.5 绑定卷的实现224 . v6 K2 H/ p+ f. L* d) {. O
11.6 读/写操作的过滤226 8 [% s2 _. O" z6 }: F) \3 D
11.6.1 设置一个读处理函数226
6 |5 D4 ]" A: N- R& I11.6.2 设备对象的区分处理227 1 J. C. u9 W" ]) s/ ]1 [% e: t- |
11.6.3 解析读请求中的文件信息228 0 ]6 `. {: Z2 D2 @3 Q  H1 R: g) @& @
11.6.4 读请求的完成230 . G% W8 U% ?5 `$ c+ }
11.7 其他操作的过滤234
: T" b6 G! g1 B5 T11.7.1 文件对象的生存周期234 ! ~+ ?4 h3 @  r; G/ `) F% x
11.7.2 文件的打开与关闭235
! `1 x# S) W4 k: i  Y11.7.3 文件的删除237
' w7 I$ }6 w& S8 a9 q/ l  b11.8 路径过滤的实现238
+ M5 e+ E$ `; ?; G8 D3 W11.8.1 取得文件路径的三种情况238
4 o2 l9 S0 l% S  D5 M0 a11.8.2 打开成功后获取路径238   a& Q. ~" Z4 A# I/ |& ]+ u
11.8.3 在其他时刻获得文件路径240 ) p% T  O6 n1 F7 F" V. \! @! P1 d1 s
11.8.4 在打开请求完成之前获得路径名240
+ l8 q% ]: m; V& s11.8.5 把短名转换为长名242 0 l) F8 D8 D1 _' A
11.9 把sfilter编译成静态库243
, |# n* B& X- v4 J( J6 l# X11.9.1 如何方便地使用sfilter243
, v1 ~( p) _1 i11.9.2 初始化回调、卸载回调和绑定回调244
3 e! E* [/ l# ]9 J/ }/ o9 n11.9.3 绑定与回调245
1 g+ B, g+ N' P+ ]% q; {( U1 A11.9.4 插入请求回调246 2 b7 }/ _( j) C1 j! o
11.9.5 如何利用sfilter.lib249 % }" t6 l1 h( R, M6 P1 S
% j+ Z: ~$ G) \+ z5 C  v
第12章 文件系统透明加密252 5 C' T9 J1 D8 ^! B0 e  ^% i

. s- W7 w/ X. [2 w% |* V* p12.1 文件透明加密的应用252 7 g7 `# g8 V8 a) z6 k2 @' X
12.1.1 防止企业信息泄密252 - g; Z9 J/ B3 ?! r& P9 a
12.1.2 文件透明加密防止企业信息泄密253
$ G& \4 k$ _+ o5 h7 i9 o3 s12.1.3 文件透明加密软件的例子253 . O9 H. N- h* H9 K! w
12.2 区分进程254
/ H0 d; M- ]7 ?; u0 |' L' }5 w2 s12.2.1 机密进程与普通进程254
/ X9 V' i% Z: K: \. r, |$ S$ M1 d12.2.2 找到进程名字的位置255 8 Y, y- s& |8 Z7 z
12.2.3 得到当前进程的名字256 " m' T+ x) q% c0 t: v! O; t; d" D
12.3 内存映射与文件缓冲257
+ I! v6 I3 Y4 m) J# J' p: Q12.3.1 记事本的内存映射文件257 $ D' Z! G1 H# V- c, o  P
12.3.2 Windows的文件缓冲258
1 \$ A' E$ M& t& _, u12.3.3 文件缓冲:明文还是密文的选择259 ! X/ Y, h/ w+ k7 s
12.3.4 清除文件缓冲260
; f! c+ Q3 Q. c. h" a12.4 加密标识263
$ S* r$ ?6 K7 N$ J: {5 @, I; Z/ ?7 p12.4.1 保存在文件外、文件头还是文件尾 263
  P8 ^* P7 h* D, x2 \12.4.2 隐藏文件头的大小 264
/ f0 X! W* l7 Z0 \2 y( _12.4.3 隐藏文件头的设置偏移 266
3 G9 }0 U  ~7 x6 ?8 K' ~5 Y4 }12.4.4 隐藏文件头的读/写偏移 2679 U# U- V( r/ ?( e
12.5 文件加密表 267) K7 ]$ t/ j6 E' _) c- j
12.5.1 何时进行加密操作 267  f" K' {" D4 j4 r' `2 z
12.5.2 文件控制块与文件对象 2685 L$ L' ^9 K1 R2 W' n+ Y
12.5.3 文件加密表的数据结构与初始化 269- ]' _% J1 ^/ N6 M6 F
12.5.4 文件加密表的操作:查询 270: K/ V1 `$ R* V
12.5.5 文件加密表的操作:添加 271
8 F0 ^( I- m# P2 {12.5.6 文件加密表的操作:删除 272
2 M7 K$ t1 K, {9 @. `6 q. h  O12.6 文件打开处理 2730 e4 _$ U7 B  n& Q( j
12.6.1 直接发送IRP进行查询与设置操作 274
/ a6 G" ^' Z$ r( J12.6.2 直接发送IRP进行读/写操作 276! I1 t  H# y+ f' b- m) Z) M
12.6.3 文件的非重入打开 277
7 U1 }. @- ]$ K7 ~3 R3 q% d2 ]7 ~12.6.4 文件的打开预处理 280
8 I  i0 x: R( s1 o/ I12.7 读/写加密和解密 285& k: i2 n4 P8 `
12.7.1 在读取时进行解密 285
( g/ Z3 \! R7 I2 l. m" a12.7.2 分配与释放MDL 286
2 K0 e& F* A- F% u6 }& f12.7.3 写请求加密 287) ]8 R3 X. z1 b3 {8 k3 Q; J
12.8 crypt_file的组装 289* y! {' ~. l0 q$ N
12.8.1 crypt_file的初始化 289
" g1 e9 w- L; r4 p5 f12.8.2 crypt_file的IRP预处理 290! {6 j. I% J$ L4 r# w
12.8.3 crypt_file的IRP后处理 293# _1 Y# X) f) Y

2 K! X2 F# Z, i, d, `4 o: ^6 P第13章 文件系统微过滤驱动 297- z; m" e; ?( e" U; w. Y
; S3 i4 a: U) ^' G
13.1 文件系统微过滤驱动简介 2977 y0 v; v$ {0 h4 q  Y4 x+ o
13.1.1 文件系统微过滤驱动的由来 297: l2 A' Z7 X0 b7 u! p9 i
13.1.2 Minifilter的优点与不足 298
" H! {( {% n. \9 A5 h+ V13.2 Minifilter的编程框架 298
. r' f7 V. d, u" S# F* o: C! U# v13.2.1 微文件系统过滤的注册 299: L9 `6 [; u$ B! e' t
13.2.2 微过滤器的数据结构 300
  E: U) U* w* W0 X/ \13.2.3 卸载回调函数 303  b% P/ l* Q" N; d
13.2.4 预操作回调函数 303, D' h5 z9 B3 M- g4 k' [
13.2.5 后操作回调函数 306
8 A1 ^0 X* u# ?6 o. I9 u13.2.6 其他回调函数 3071 L/ I, N; J5 m
13.3 Minifilter如何与应用程序通信 309: n: j4 V  A9 C
13.3.1 建立通信端口的方法 310
' T+ B7 \) ?6 w13.3.2 在用户态通过DLL使用通信端口的范例 311( i9 s; a: f. x* f
13.4 Minifilter的安装与加载 314; i% O( h/ P. Y# i
13.4.1 安装Minifilter的INF文件 314) j  `7 Q9 I* k- t; |0 q$ J. x8 a: m
13.4.2 启动安装完成的Minifilter 316
& K" i% O7 u3 i% a, W7 ?. R
9 M  U( }" K* `( O- W' R9 {  E8 M第14章 网络传输层过滤 317
7 Y! {/ D$ S/ n* D- k  |" ~- b9 p$ r9 Y' r! b. L  ?
14.1 TDI概要 317
. B% k2 }) \: Y4 a2 J$ H" Z+ {14.1.1 为何选择TDI 317- L; g0 J) O. S% n% E
14.1.2 从socket到Windows内核 318
, g& I- L2 D5 m+ q' _4 n, f2 R! [14.1.3 TDI过滤的代码例子 319
! ]1 A' \. `( ~0 @14.2 TDI的过滤框架 319
+ e' b, Y, B. E) ~14.2.1 绑定TDI的设备 319  @, B5 H: D6 L) ?
14.2.2 唯一的分发函数 3205 ~, [* D* f0 j/ ^( {6 ?
14.2.3 过滤框架的实现 322
1 W- q6 n4 u+ Y( e14.2.4 主要过滤的请求类型 3237 d1 c5 M& V" i* }' i' g5 F: x. r
14.3 生成请求:获取地址 324
1 r' {5 h6 i9 a* d6 c0 }14.3.1 过滤生成请求 324' s8 h: [5 }0 p3 K' }
14.3.2 准备解析IP地址与端口 326. u2 j  F$ m6 X
14.3.3 获取生成的IP地址和端口 327- k# X7 r& P/ P8 \. d3 ^& e
14.3.4 连接终端的生成与相关信息的保存 329
% t2 f% z8 R* |+ P* t7 }14.4 控制请求 330
9 h$ f# L5 C4 Z7 _  `1 B& h14.4.1 TDI_ASSOCIATE_ADDRESS的过滤 3300 W; T6 c, _0 u/ G& }0 B
14.4.2 TDI_CONNECT的过滤 332
: x& ~' z9 U  Q* L4 z14.4.3 其他的次功能号 3336 \5 B8 g0 _- S" N5 L6 a
14.4.4 设置事件的过滤 334  i) a5 ]/ A7 _, E) N# s
14.4.5 TDI_EVENT_CONNECT类型的设置事件的过滤 336
* @6 V; Z( z0 s/ {$ j5 E14.4.6 直接获取发送函数的过滤 337
4 U2 {# e$ }0 J$ _: V( v$ [14.4.7 清理请求的过滤 339
; j( k+ R1 C( N& a14.5 本书例子tdifw.lib的应用 3416 i) l4 Q% X3 q3 Y
14.5.1 tdifw库的回调接口 3410 X; \% J1 l- p+ {1 p: y
14.5.2 tdifw库的使用例子 342- `& E: I* W/ i' a5 Y- I8 J
1 U$ n6 r! P4 t9 W- N! N$ }
第15章 Windows过滤平台 345
- f0 i9 m, C  U- i- t% C
+ J- q5 j3 L+ Q/ ]4 r$ W& Y15.1 WFP简介 345( @3 q( u6 I! T, `% b( l* |& Q1 L4 W
15.2 WFP框架 345- z! b6 x, n% h+ @" W
15.3 基本对象模型 347
/ |8 _" \6 K9 d: W, E15.3.1 过滤引擎 3478 _  B# Z* g. G/ s8 \. z
15.3.2 垫片 347
* d7 H: A! Y+ a- m2 x5 A$ A15.3.3 呼出接口 347
7 O# B! _8 M9 Q# f& ~4 [) W15.3.4 分层 348
* L' Z6 U$ [! ?6 l& n- ~/ v. A* g* ?. z15.3.5 子层 349
8 A. e, L1 b& v$ K) q9 S4 H15.3.6 过滤器 350  t; D' m$ z+ J1 @1 N- c
15.3.7 呼出接口回调函数 354- a+ l! ]% b- g
15.4 WFP操作 359/ B* @4 J/ C. p4 k$ l. n4 a
15.4.1 呼出接口的注册与卸载 360; q* U" g/ Q, l# G! `% E
15.4.2 呼出接口的添加与移除 360
4 Q$ F/ ]1 o" y: U5 C% z1 c, G. Q- r15.4.3 子层的添加与移除 361' b0 W/ Z1 q0 _3 B
15.4.4 过滤器的添加 362. |: |$ Z. _; U
15.5 WFP过滤例子 362
" O+ @. N. x" \  q
; Y- V; f, Z2 ^7 T# Y/ ]; U2 |5 s第16章 NDIS协议驱动 370
9 _( c2 _4 Y, b: w1 B5 X5 t! s6 ?2 c# C0 u* ]
16.1 以太网包和网络驱动架构 370
: w/ s" ^8 G! v' h16.1.1 以太网包和协议驱动 370
, [4 `* D2 o2 t16.1.2 NDIS网络驱动 3712 L# Q/ k/ [  i! e1 T% c
16.2 协议驱动的DriverEntry 372
, y# g* E' V8 t. a" g) r" C/ I16.2.1 生成控制设备 3729 y& x3 a5 A) ~/ z# Y. v
16.2.2 注册协议 374) x+ p) P9 F7 p& y; k& h* x
16.3 协议与网卡的绑定 375
2 M# ~, ?/ D3 n9 f16.3.1 协议与网卡的绑定概念 375& u0 a8 a) L; Z) \9 V: F+ P
16.3.2 绑定回调处理的实现 376
0 |0 D& f5 k7 S. |, i1 U/ y% ~16.3.3 协议绑定网卡的API 378
5 Y+ `7 E8 G) D- H" U& `16.3.4 解决绑定竞争问题 379
1 e* D; w' {0 y4 o16.3.5 分配接收和发送的包池与缓冲池 380
7 z/ [6 n) @' d! L1 ^/ m6 f1 T16.3.6 OID请求的发送和请求完成回调 381( }2 C2 K$ C# N! r# t8 s
16.3.7 ndisprotCreateBinding的最终实现 385
* O1 H1 A% `3 f- x1 s16.4 绑定的解除 390
+ {: g- d+ H9 \0 a( I16.4.1 解除绑定使用的API 390/ I$ i' Z/ S) c6 R% z4 U" h
16.4.2 ndisprotShutdownBinding的实现 392
4 G& W  e: S9 C3 ]1 A; ^16.5 在用户态操作协议驱动 3955 o0 o3 T+ f4 ?8 R: K& D. X
16.5.1 协议的收包与发包 3957 j  q8 Q' ]) x
16.5.2 在用户态编程打开设备 396
, A: H+ Q! ^$ J4 d6 `8 C16.5.3 用DeviceIoControl发送控制请求 397
1 [( o  ]1 z$ y0 w) U8 T16.5.4 用WriteFile发送数据包 399+ R0 E2 D* w8 w/ P
16.5.5 用ReadFile发送数据包 400
: T1 y9 w2 e- B: S( A/ Y16.6 在内核态完成功能的实现 402
6 o1 n* c+ K. y16.6.1 请求的分发与实现 402# Z0 A# x8 c# M. U
16.6.2 等待设备绑定完成与指定设备名 402
, Y: B0 u! \" \8 ?: T2 Y( k5 h$ D" v16.6.3 指派设备的完成 403
2 b: ^2 L" U3 E- M+ j16.6.4 处理读请求 406
7 B# w. G: L1 E  J- L4 p16.6.5 处理写请求 408
" C- R0 ]3 a. @2 q16.7 协议驱动的接收回调 412
8 X! r( Y* a) B0 T; D$ e16.7.1 和接收包有关的回调函数 4121 J) A( A9 w# O% f: Z
16.7.2 ReceiveHandler的实现 413
- N& v0 ^* I* ?) g$ @/ Y/ R16.7.3 TransferDataCompleteHandler的实现 417
9 G3 Z6 N0 g& J- f: f16.7.4 ReceivePacketHandler的实现 418& R; d3 ]/ C  O3 W8 k. g
16.7.5 接收数据包的入队 420
" y( o  T6 H1 N) }/ f! i16.7.6 接收数据包的出队和读请求的完成 422. i( J2 W* l- g" N. c* q

0 J. A1 X2 u; d! J6 h2 p0 k1 W2 |第17章 NDIS小端口驱动 427/ Z6 {5 ~, ^" i' a

2 C3 c: V+ [/ E, r17.1 小端口驱动的应用与概述 427
8 Q& O8 f; r+ x9 j+ Z17.1.1 小端口驱动的应用 4274 E' B2 w- t' `
17.1.2 小端口驱动示例 428
/ j: _+ N  i6 o7 I17.1.3 小端口驱动的运作与编程概述 4292 {5 s3 |. }/ g
17.2 小端口驱动的初始化 4298 q' K' Q: ?5 n$ b# |) I
17.2.1 小端口驱动的DriverEntry 429
* J# r- o; d# F$ v- i2 D17.2.2 小端口驱动的适配器结构 431% |0 s2 T) b) ]. Q/ {# J
17.2.3 配置信息的读取 433
( T! E; u3 j* m: x, Q17.2.4 设置小端口适配器上下文 433$ n! x6 B7 C9 K, M3 X# C; d
17.2.5 MPInitialize的实现 434; F# z# w6 G% j! y* d: _
17.2.6 MPHalt的实现 437* [3 O3 o2 S3 r$ B
17.3 打开ndisprot设备 4381 ^  ?- ^1 I" [
17.3.1 IO目标 438
0 d* Z' G7 C9 ^9 ^2 B2 Z$ W# D17.3.2 给IO目标发送DeviceIoControl请求 439
8 o) b7 T4 y7 y/ \0 z17.3.3 打开ndisprot接口并完成配置设备 441! `& D" v- R- ?
17.4 使用ndisprot发送包 4430 N$ B: R6 `8 F! O* Y& y$ \1 m/ O
17.4.1 小端口驱动的发包接口 443
' A3 G! X; D' i7 {17.4.2 发送控制块(TCB) 444( n# U2 ^2 S0 S, M1 g' f+ t0 _
17.4.3 遍历包组并填写TCB 446
0 O% ~/ E) a7 z17.4.4 写请求的构建与发送 449
# u' z1 r/ l% B" l; C17.5 使用ndisprot接收包 451# \+ U; d' M$ z" q* G
17.5.1 提交数据包的内核API 451
# G9 i! `7 l3 W, F: n7 n17.5.2 从接收控制块(RCB)提交包 452
! f; Q' g8 c$ U! T3 h2 C+ b2 r4 i9 S17.5.3 对ndisprot读请求的完成函数 454
/ j5 _8 p& r& S: D+ b: i! c1 q17.5.4 读请求的发送 456" Q& d# v# ?6 v! _* u
17.5.5 用于读包的WDF工作任务 457) ?# ?- T6 E% }( u( _2 k4 h
17.5.6 ndisedge读工作任务的生成与入列 459
" m! ]- \: a+ ^" }17.6 其他的特征回调函数的实现 461* h1 F! z: {) z- h
17.6.1 包的归还 4611 f7 D$ Q/ G$ t2 p
17.6.2 OID查询处理的直接完成 462
; Z0 @+ c* A) B17.6.3 OID设置处理 4659 Q! X4 E9 T  {7 C9 ?, X; d
# S! T3 q/ Z9 l: J" X8 X
第18章 NDIS中间层驱动 467* T) A/ R' d$ N4 X2 g
& `+ s( y7 V3 X& p
18.1 NDIS中间层驱动概述 467
; H1 [& ~8 z" C7 @8 R18.1.1 Windows网络架构总结 467
" M. w, w5 ~% w$ f- w  \" z18.1.2 NDIS中间层驱动简介 468
+ n1 M. E5 I' [$ g18.1.3 NDIS中间层驱动的应用 469
# i& l7 U. ?3 O1 O) @18.1.4 NDIS包描述符结构深究 470! @: K; C! C+ H9 i5 o
18.2 中间层驱动的入口与绑定 4733 Y" F1 Y+ ^  h3 Q& L
18.2.1 中间层驱动的入口函数 473/ T/ d& J7 f% D% R$ v- G+ \1 u; Q
18.2.2 动态绑定NIC设备 474
, d3 \9 [3 f  U. S# i* h18.2.3 小端口初始化(MpInitialize) 475
. I) ]/ w; P. V% r18.3 中间层驱动发送数据包 477
- F3 l8 ]4 p+ f18.3.1 发送数据包原理 477
$ y5 X; d( o' O6 s9 T18.3.2 包描述符“重利用” 478
/ d1 l$ I- M6 L' g18.3.3 包描述符“重申请” 481
, h! K% f/ h2 C  b$ }0 T. n$ o18.3.4 发送数据包的异步完成 4824 ^  B! X7 c0 ~
18.4 中间层驱动接收数据包 484
/ {, l$ l, O% l18.4.1 接收数据包概述 484  @# M- T' }' z5 T3 r
18.4.2 用PtReceive接收数据包 485' |: V. f4 ?# f, K: u: m! Z
18.4.3 用PtReceivePacket接收 490
0 I) q9 m- F8 W4 g3 G2 K18.4.4 对包进行过滤 491
/ P* b1 ?( [2 O( S9 @4 Z: M0 A18.5 中间层驱动程序查询和设置 494& U8 }& i4 n& z4 v& J1 Z! d7 F% T, p
18.5.1 查询请求的处理 494
6 d! o0 U. B+ `2 L3 Y7 M; G9 B9 N% f18.5.2 设置请求的处理 496* L7 ^- a" d! t; o, A
18.6 NDIS句柄 498) H5 U% Q  {" B' p+ N8 o
18.6.1 不可见的结构指针 498( f% q3 b! r7 T: J8 r- _) Q( P
18.6.2 常见的NDIS句柄 499
8 z+ ]$ z: ?; B+ R: A9 s5 d* b1 [18.6.3 NDIS句柄误用问题 5008 r. |& J8 e% C4 f, ]
18.6.4 一种解决方案 502
8 t* [; D, W+ ]  E' \18.7 生成普通控制设备 503
! p/ I" O1 l0 F& ]2 E5 O( y18.7.1 在中间层驱动中添加普通设备 503+ w' I* F0 I, V8 {- w% T- V
18.7.2 使用传统方法来生成控制设备 505
. Q  m2 n! w! j. d
7 e5 S" z! {6 \: w/ @第19章 IA-32汇编基础 511! m' g# c5 R/ j; H2 _* L

+ X: K- c9 N' W2 K& z19.1 x86内存、寄存器与堆栈 5113 t6 ~6 g' S! C& S. S, X) Z& E, r
19.1.1 _asm关键字 511
  V- }9 B2 z1 r6 @4 b& F$ n! i19.1.2 x86中的mov指令 512
4 x! A3 A+ Y; [19.1.3 x86中的寄存器与内存 512
" Y! @1 b1 G) N; N- K19.1.4 赋值语句的实现 513
2 f, p6 l( w" ^  T2 `# j, a19.2 x86中函数的实现 514
9 d, |6 C* Q: J19.2.1 一个函数的例子 5142 ]  R7 p; B4 E' S5 n% |7 u" c9 }
19.2.2 堆栈的介绍 515" u, R9 I9 t# B( S4 Q9 Q
19.2.3 寄存器的备份和恢复 516
" C# M3 ^  F7 \19.2.4 内部变量与返回值 518
- _! g+ R( [& b0 B& y19.3 x86中函数的调用与返回 521
8 Y, A$ j/ A) a! M19.3.1 函数的调用指令call 521: l$ A0 p' |1 M& J& _- Z. x
19.3.2 通过堆栈传递参数 521
, ^- I+ H! G7 T* B: h: t19.3.3 从函数返回 523
! Q+ A, p! k) @8 y  {7 v9 Z9 m/ z. d19.3.4 三种常见的调用协议 5248 a3 D' u$ _% i$ C* R8 K: r% Q
19.4 从32位汇编到64位汇编 526
" S% r$ @% j" X% @+ P, F  B! `% {19.4.1 Intel 64与IA-32体系架构简介 526
! G# x% |5 |9 O) ?19.4.2 64位指令与32位指令 526
- h' X8 T7 d2 z* z8 N, [19.4.3 通用寄存器 527
6 u  b( w! V+ y2 Y; c19.5 64位下的函数实现 528, z/ Z, Y( t7 t/ F
19.5.1 函数概览 528
0 k# [3 O. A% S; u: }2 L+ h- h8 S19.5.2 32位参数的传递 529
* w9 R7 D. z( ~19.5.3 64位参数与返回值 530- ~  ^8 v, U* t4 \, x" W, X- y
19.5.4 栈空间的开辟与恢复 531# |* S; ?6 K) Z) o9 j
' s) }; x9 ^5 D8 ]! @
第20章 IA-32体系中的内存地址 534
: M/ @' p' z* m' u1 ~7 J" [% D  v3 v4 y, F2 j
20.1 内存的虚拟地址 5343 m7 `- x# E3 s6 m+ A. t
20.1.1 C语言中的内存地址 534
# T8 ^. z$ \" x* K; c20.1.2 虚拟地址的构成 535
2 @, y# K! B# i/ r" w5 p20.1.3 段的选择 536" f6 u+ h  q; B' U- ]. |
20.2 全局描述符表和段描述符 5389 N) t, ?/ u  u# Q- H: c
20.2.1 全局描述符表 538
' e& d5 A8 L2 m+ `# A20.2.2 段类型 539
& X# s' S0 k# @3 t9 ^5 r% p20.2.3 段寄存器与段选择子 540
- K; N2 L5 n# ^5 h20.2.4 64位模式下的段 541
3 [- n0 }0 p1 p* Q20.3 分段编程实践 542
. d4 E8 M" a/ E6 J1 L20.3.1 系统表寄存器的结构 5427 P5 D0 U  T8 X) \8 G, r; }' l( q
20.3.2 在汇编语言中获取全局描述表的位置 543
) N3 }: f5 a) e; {) I20.3.3 调试范例:sgdt指令的错误使用 545
  f9 s4 W8 j$ o# A* q6 J20.3.4 在64位下获得全局描述符表 547. m6 B4 X7 U( H+ Z% T* Z. d
20.4 线性地址基础 549: }- L( q% x# b4 z5 l* b$ ?
20.4.1 分页控制机制 550
' v0 B; y0 h7 X20.4.2 线性地址的转换 551
8 V8 R: c% z$ ^) o3 R' c$ Q20.4.3 混合页面大小 552
' ~/ D( S' e5 _: Q( \/ o$ b20.4.4 32位物理地址的页目录和页表项 552
( K3 }& ~, M3 F* V) A; e( v20.5 各种特殊分页方式 5552 H( _7 u% [# c- T) F( D! y
20.5.1 PAE分页方式 5550 W$ D$ v5 F; F. t
20.5.2 PSE-36分页机制 5587 Z0 M. U6 s. |5 J
20.5.3 IA-32e模式下的线性地址 559
5 y# M0 D2 ^- o7 f8 p+ m20.6 分页编程实践 562
( M* e2 g1 L4 a. v& G20.6.1 页目录和页目录指针表的获取 5623 a. h8 {" q( x# L+ r) w
20.6.2 页表的获取 564# C$ N+ Q: f2 b! O
20.6.3 线性地址的结构 567
4 `" V1 n3 E+ E. s8 W  T: l- X. E' P7 q5 R
第21章 处理器权限级别切换 571
8 w! T9 f! i# i" }% K' |
% C7 N4 \/ J7 f8 m9 p5 J  s: L( L9 g1 \21.1 Ring0和Ring3权限级别 571: |( G+ ]! h, Y' }, Z3 D( j% ^
21.2 保护模式下的分页内存保护 572. c/ L* J  \5 t2 b9 \: O
21.3 分页内存不可执行保护 574
7 p3 i: K" ^: y% n21.3.1 不可执行保护原理 5744 N( h& V) V+ Z9 U* \1 L
21.3.2 不可执行保护的漏洞 5759 C5 [* t5 E' U# f; i# Z
21.3.3 上机实践 577  Q5 M* E, C  Z1 L* y* K
21.4 权限级别的切换 579# d3 a9 J; j$ {0 z* C0 i, r' }
21.4.1 调用门及其漏洞 579! |4 J/ ^7 D- |$ E5 ^" q2 B
21.4.2 sysenter和sysexit指令 581
1 K0 {, e; L4 z' _, |: S" H! K21.4.3 上机实践 5833 `: @( K, ?! P, q5 L6 e

# U, M1 {( L3 H0 {4 Z第22章 IA-32体系结构中的中断 585  b7 X# v$ P* v0 P( T

/ A6 J4 ^, b1 q2 h* w$ B' x22.1 中断基础知识 585
" ^2 |0 a9 A' L+ d4 T22.1.1 中断描述符表 585' k, b! l! l1 [0 \/ ^9 k
22.1.2 中断处理过程 587' ~) G. Y7 P4 D9 E0 L. v
22.1.3 64位模式下的中断处理机制 5891 J# I, n. U. \" z& c
22.1.4 多核下的中断 589: `3 _, v+ I4 K8 y8 ^) k  q
22.2 Windows中断机制 593" S2 E" c1 r$ P5 @/ f/ P8 E" Z
22.3 中断编程实践 596
7 z% P/ q6 j# f' H" G: s* D  z! M22.3.1 IDT Hook 596; I2 `8 o# i; O. t0 M5 I4 D4 ]
22.3.2 巧用IDT Hook实现安全防护 598
8 T% L; Z% r8 ~% n* G! h$ I5 e
3 k, e7 h" C( |& P" V2 ?第23章 Windows内核挂钩 601
2 G$ ]' ~+ i% V& m
) [$ o* @* |6 O23.1 系统服务描述符表挂钩 6026 D+ X1 c+ T& Q" p
23.1.1 系统服务描述符表(SSDT) 602
8 U6 k8 f# V$ [8 d: R4 I" U  k# O23.1.2 系统服务描述符表挂钩的意图 603& W1 u2 q) s9 y- f1 Z2 C
23.1.3 寻找要挂钩的函数的地址 604* ^& v8 D8 ]2 S8 x( j- \8 s
23.1.4 函数被挂钩的过程 6059 T- L# D$ z( f/ D) I. x
23.1.5 具体实现的代码 606
% s' z& b& {- k0 j% j  n23.2 函数导出表挂钩 608
  J, b% m, z6 Q/ G' ?23.2.1 内核函数的种类 608  \, S% N: v, _" W( P
23.2.2 挂钩IoCallDriver 610/ j' O0 T# u; d( n% E- v0 W
23.2.3 对跳转地址进行修改 6115 g7 r9 O' j$ n$ s
23.3 Windows 7系统下IofCallDriver的跟踪 612
/ Y! `" b' {0 q: }2 X3 L23.4 Windows 7系统下内联挂钩 6159 |9 _  L* Z! @$ K' H! S
23.4.1 写入跳转指令并拷贝代码 6152 O' G( O, m4 [& O0 Y
23.4.2 实现中继函数 617
/ I( [: n$ i4 Y: Z" @; a0 e7 o8 T1 e) _& J' _! G# [( o

7 U5 P7 ^' Z; t0 N! v' S高 级 篇- J$ g  O9 ?8 ^( o. G2 E# p0 ?

% s. C7 b* \; p7 K. J! Y+ k第24章 Windows通知与回调 620/ a9 v' z5 f& Q) o' p4 [

! m- l9 D: B# G1 Y24.1 Windows的事件通知与回调 620
. j% V+ |1 K: m2 L  a24.2 常用的事件通知 620
7 B  M" u* v$ n# H) d  B24.2.1 创建进程通知 621
$ B6 E9 T2 P8 E8 Z2 C24.2.2 创建线程通知 625% {/ Y+ S* \7 S8 y! K
24.2.3 加载模块通知 626
+ _, K  @. h4 A5 g# P) w24.2.4 注册表操作通知 6290 M  E2 n7 d" u; j/ v3 O7 l
24.3 Windows回调机制 636
& d5 |" D1 H. a24.3.1 回调对象 636. [' ~2 u2 k; @* s  |" d# b7 v) i
24.3.2 回调对象的创建 637. P. F- m' I8 R! i/ J
24.3.3 回调对象的注册 637
2 O; z5 H4 {3 n7 F! ^24.3.4 回调的通告 638. b& |0 e" M; U$ `
24.4 安全的死角,回调的应用 639# _* _9 j) @& v1 q

: y* ]# D5 Z2 x9 J  z第25章 保护进程 640
+ Y+ t5 }' u' A  M. Q+ B6 Q$ C- h, ]' d& C
25.1 内核对象简介 640
- b9 z) g) H- C; n- E, Z25.2 内核对象的结构 641, l2 o+ t& u/ n; Q1 Y7 Y
25.3 保护内核对象 642
- B8 }+ q# ?) n25.3.1 处理对象的打开 6438 L) E3 O5 ~7 `; B. d! `
25.3.2 处理句柄的复制 644: {/ Z. H+ p8 r0 X) D3 L
25.3.3 处理句柄的继承 646# t, ]. v/ x, W8 \9 {0 u
25.4 进程的保护 6521 S6 u) a% a. R! J; ^
25.4.1 保护原理 6525 B2 ^: v9 i( E  L4 [: W
25.4.2 Vista以后的进程对象保护 654, _7 y6 r# q3 @& |& F9 {/ H1 r( S: J
25.4.3 进程的其他保护 655
# b2 t; G7 B5 I( ^! ^, {" N' }! i/ H4 k1 ~
附录A 如何使用本书的源码光盘 656
* l2 H$ \- {$ X+ f1 N
: R% r. T6 s' M. s% r附录B 练习题 659; y5 [6 y! e, V( m  n9 w

0 D( k' O$ m- x8 y1 q6 F  i
8 C& M' F1 _) 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-4-20 12:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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