第一部分 概述 1
第1章 套书概述 1
1.1 套书的组织结构 1
1.2 套书的设计思想 2
第2章 本书内容 4
第3章 使用微软参考资源 6
3.1 微软开发人员网络 6
3.1.1 MSDN与在线MSDN的比较 7
3.1.2 MSDN订阅 9
3.1.3 使用MSDN 10
3.1.4 使用在线MSDN 15
3.2 Windows编程参考系列 24
第4章 查找你需要的开发人员资源 25
4.1 开发人员支持 25
4.2 联机资源 27
4.3 Internet标准 27
4.4 学习产品 28
4.5 会议 29
4.6 其他资源 30
第5章 避免常见的RPC编程错误 31
5.1 解决方法概述 31
5.2 常见的RPC编程错误 31
5.2.1 Pointer_default(unigue)和嵌套指针 32
5.2.2 在一个支持RPC的结构里,有效的SWitch_is值并不保证指针是非NULL的 32
5.2.3 NULL DACL不提供任何保护 33
5.2.4 在进行任何与安全有关的操作前调用Rpclmpersonate Client() 33
5.2.5 开始和结束假冒 34
5.2.6 只有在idl文件中使用string说明的字符串才是以零结尾的 35
5.2.7 不能将任意长度的数据拷贝到固定长度的缓冲区中 35
5.2.8 size_is可能导致一个长度为0的结构 36
5.2.9 size_is或Length_is说明中的算术表达式很容易溢出 37
5.2.10 严格的上下文句柄 37
6.1 编程模型 39
第二部分 RPC与WNet编程参考 39
第6章 微软RPC模型 39
6.2 客户机-服务器模型 41
6.3 计算-服务器模型 42
6.4 RPC是如何工作的 42
6.5 RPC的OSF标准 43
6.6 微软RPC组成部分 44
6.7 RPC扩展了客户机-服务器计算模型 45
第7章 安装RPC编程环境 46
7.1 开发32位Windows应用程序 46
7.2 开发Macintosh客户应用程序 47
第8章 创建RPC应用程序 49
8.1 一般的创建过程 49
8.1.1 开发接口 49
8.1.2 开发服务器程序 53
8.1.3 开发客户机程序 54
8.3 异常处理 55
8.2 环境、编译器和API集合的选择 55
第9章 连接客户机与服务器 57
9.1 基本的RPC绑定术语 57
9.2 服务器如何准备连接 57
9.2.1 注册接口 58
9.2.2 创建绑定信息 59
9.2.3 登记服务程序 59
9.2.4 注册端点 60
9.2.5 侦听客户机调用 60
9.3 客户机如何建立连接 61
9.3.1 发出远程过程调用 61
9.3.2 寻找服务器宿主计算机 61
9.3.3 寻找服务程序 63
9.3.4 创建一个绑定 63
10.2 定义接口 64
10.1 单机版的应用程序 64
第10章 简单教程 64
10.3 生成UUID 65
10.4 IDL文件 65
10.5 ACF文件 66
10.6 生成码桩文件 66
10.7 客户应用程序 68
10.8 服务应用程序 70
10.9 终止服务应用程序 71
10.10 编译和链接 72
10.11 运行应用程序 73
第11章 IDL和ACF文件 75
11.1 接口定义语言文件 75
11.1.1 IDL接口头 76
11.1.2 IDL接口主干 76
11.2.2 ACF主干 77
11.2.1 ACF头 77
11.2 应用程序配置文件 77
11.3 MIDL编译器的输出 78
第12章 数据和语言特点 79
12.1 强类型 79
12.1.1 基本数据类型 80
12.1.2 有符号和无符号类型 80
12.1.3 宽字符类型 80
12.1.4 结构 81
12.1.5 联合 81
12.1.6 枚举类型 82
12.1.7 数组 82
12.1.8 函数属性 82
12.1.9 域属性 82
12.1.10 三种指针类型 83
12.1.11 类型属性 84
12.2 方向属性 84
12.3 数据的表示 86
12.3.1 transmit_as和represent_as属性 87
12.3.2 wire_marshal和user_marshal属性 94
第13章 数组与指针 100
13.1 数组和RPC 100
13.1.1 数组的种类 100
13.1.2 数组属性 103
13.1.3 多维数组 106
13.2 指针和RPC 108
13.2.1 指针类型 108
13.2.2 指针和内存分配 111
13.2.3 缺省指针类型 112
13.2.4 指针属性类型的继承 112
13.3 数组、字符串和指针的使用 113
13.3.1 计数字符数组 114
13.3.2 字符串 116
13.3.3 多层指针 117
第14章 管道 119
14.1 基本的管道术语 119
14.2 管道的状态 119
14.3 在IDL文件中定义管道 119
14.4 客户端管道的实现 120
14.4.1 实现客户端的输入管道 121
14.4.2 实现客户端的输出管道 123
14.5 服务器端管道的实现 125
14.5.1 实现服务器端的输入管道 125
14.5.2 实现服务器端的输出管道 126
14.6 多管道的规则 127
14.7 管道与非管道参数的组合 128
第15章 绑定与句柄 129
15.1 绑定句柄 129
15.1.1 绑定句柄的类型 129
15.1.2 客户端绑定 134
15.1.3 服务器端绑定 140
15.1.5 解释绑定信息 150
15.1.4 完全和部分绑定句柄 150
15.1.6 微软RPC对绑定句柄的扩展 151
15.1.7 绑定句柄函数 153
15.1.8 RPC名字服务数据库 153
15.2 上下文句柄 158
15.2.1 使用上下文句柄开发接口 158
15.2.2 使用上下文句柄开发服务器 159
15.2.3 使用上下文句柄开发客户机 161
15.2.4 服务器上下文关闭例程 162
15.2.5 客户机上下文的重置 163
15.2.6 多线程客户机和上下文句柄 163
16.1 RPC内存管理简介 164
16.2 内存是如何分配和回收的 164
第16章 内存管理 164
16.2.1 midl_user_allocate函数 165
16.2.2 midl_user_free函数 166
16.2.3 RpcSs内存管理包 166
16.3 内存管理模式 167
16.3.1 单个节点的分配和回收 167
16.3.2 码桩分配的缓冲区 167
16.3.3 应用程序分配的缓冲区 168
16.3.4 服务器上的永久性存储区 169
16.4 谁来管理内存 169
16.4.1 顶层和嵌入指针 169
16.4.2 参数的方向属性 170
16.4.3 长度、大小和方向属性 170
16.4.4 参数的指针属性 171
16.4.5 指针与方向属性的组合 171
16.4.6 函数返回值 172
16.6 内存分配规则总结 173
16.5 内存泄漏 173
第17章 串行化服务 175
17.1 使用串行化服务 175
17.2 过程串行化 176
17.3 类型串行化 177
17.4 串行化句柄 178
17.4.1 隐式与显式句柄 178
17.4.2 串行化样式 178
17.4.3 获取编码标识符 183
第18章 安全 184
18.1 RPC安全的基本要点 184
18.1.1 主体名 184
18.1.2 认证级别 185
18.1.3 认证服务 185
18.1.4 客户机认证证书 185
18.1.5 授权服务 185
18.1.8 密钥获取函数 186
18.1.6 服务质量 186
18.1.7 授权函数 186
18.1.9 客户机假冒 187
18.2 安全方式 187
18.2.1 安全支持提供者接口 188
18.2.2 Windows NT和Windows2000的传输层安全 192
第19章 安装和配置RPC应用程序 195
19.1 配置名字服务提供者 195
19.1.1 为Windows95配置名字服务 195
19.1.2 为Windows NT或Windows2000配置名字服务 196
19.1.3 为Windows 3.x或MS-DOS配置名字服务 197
19.1.4 启动和终止微软定位器 197
19.2 注册表信息 198
19.2.1 使用RPC注册表条目 198
19.2.2 为端口分配和选择性绑定配置Windows NT和Windows 2000注册表 199
19.3 利用Winsock代理使用RPC 200
19.4.1 为SPX/IPX配置RPC 201
19.4 SPX/IPX上的安装 201
19.4.2 配置SAP和RPC 202
19.5 配置安全服务器 203
第20章 异步RPC 205
20.1 声明异步函数 205
20.2 客户端的异步RPC 206
20.2.1 发出异步调用 206
20.2.2 等待异步答复 208
20.2.3 接收异步答复 209
20.3 服务器端的异步RPC 210
20.3.1 处理异步调用 210
20.3.2 接收取消请求 210
20.3.3 发送异步答复 210
20.3.4 异步I/O和异步RPC 212
20.4 异步调用的因果顺序 212
20.6 在有名管道协议上的异步RPC 213
20.5 错误处理 213
20.7 使用DCE管道的异步RPC 214
20.7.1 异步管道 214
20.7.2 声明异步管道 214
20.7.3 客户端的异步管道处理 215
20.7.4 服务器端的异步管道处理 216
20.8 异步DCOM 219
第21章 RPC消息队列 220
21.1 消息队列服务体系结构概述 220
21.2 消息和消息队列的特征 221
21.3 使用MSMQ作为RPC的传输层 221
21.4 RPC-MQ应用程序的系统需求 222
21.5 开发RPC-MQ应用程序 222
21.6 MSMQ安全服务 224
第22章 使用HTTP的远程过程调用 225
22.1 使用HTTP作为一个RPC传输层 225
22.2 HTTP RPC的安全机制 227
22.3 HTTP RPC的系统需求 228
22.4 为HTTP RPC配置计算机 228
第23章 RPC程序示例 229
第24章 RPC数据类型、结构和常量 231
24.1 RPC结构 231
24.2 RPC枚举类型 245
24.3 其他RPC类型 246
24.4 RPC常量 255
24.5 RPC返回值 260
第25章 RPC函数参考 264
第26章 RPC回调与通知函数 434
第27章 RPC宏 439
第28章 Windows连网 445
28.1 关于Windows连网 445
28.1.1 WNet函数 446
28.2.1 使用连接对话框 447
28.2 Windows连网的使用 447
28.1.2 Windows连网操作 447
28.2.2 枚举网络资源 448
28.2.3 添加网络连接 451
28.2.4 为共享资源分配驱动器号 452
28.2.5 确定共享资源的位置 453
28.2.6 检索连接名 455
28.2.7 检索用户名 456
28.2.8 取消网络连接 457
28.2.9 检索网络错误 457
28.3 Windows连网参考 459
28.3.1 Windows连网的函数 459
28.3.2 过时的函数 460
28.3.3 Windows连网的结构 491
第三部分 附录 501
网络连接服务编程元素索引 501
RPC术语表 522