引 言……………………………………………………………………………………(Ⅳ)第一章NLM基础 1
熟悉NetWare操作系统环境 1
目 录 1
了解NLM是什么? 2
NLM能做什么? 3
怎样编译一个NLM? 3
NLM程序设计所需内容 3
熟悉NetWare NLM C接口库函数 3
怎样使你的NLM程序设计又快又好? 4
为什么要了解CLIB接口? 4
什么是CLIB中一般类型的函数? 4
怎样使用NLM库APIs? 6
NLM链接程序的差异 7
怎样使用NLM链接程序? 7
什么是PRELUDE.OBJ? 7
链接/装入程序 7
了解NetWare核 8
核是怎样运行的? 8
内存管理 8
NetWare是怎样使用内存的? 8
什么是多线程程序设计的基本内容? 9
什么是多线程程序设计? 9
多线程程序设计 9
怎样分配和使用内存? 9
NetWare提供怎样的内部保护机制以阻止NLMs相互间的破坏? 9
NLM上下文变量 10
什么是NLM上下文? 10
怎样建立NLM上下文? 10
屏幕处理系统 10
什么是屏幕? 10
怎样使用NLM库? 11
怎样建立NLM库? 11
NLM库 11
推荐使用屏幕的方法 11
什么是NLM库? 11
目录服务和装订库 12
什么是目录服务? 12
DIB和装订库之间的区别 12
什么是装订库仿真? 12
怎样访问目录? 13
了解NetWare 4.0文件系统 13
文件系统怎样执行? 13
名字空间 13
什么是名字空间? 13
什么是SPXⅡ? 14
怎样区别SPXⅡ与IPX/IP? 14
怎样使用SPXⅡ? 14
熟悉SPXⅡ 14
怎样使用名字空间? 14
熟悉STREAMS 15
什么是SREAMS? 15
为什么需要了解STREAMS? 15
怎样使用STREAMS? 15
小结 15
单线程的NLMs 17
线程和非优先级环境的定义 17
第二章写多线程NLMs程序 17
多线程的NLMs 18
非优先级环境 18
NetWare OS中的队列 18
线程与作业的比较:它们分别在OS中的工作原理 19
WorkToDoList队列 19
RunList队列 19
DelayedWorkToDoList队列 19
本章讨论的C接口子程序 20
LowPriorityRunList队列 20
一个多线程NLM例子 23
服务器一侧 23
客户方一侧 24
ENGINE NLM的主线程 24
主程序为开始附加线程作准备 27
OPENSEMAPHORE子程序 29
INITMAIN:缺省线程组中的附加线程 29
初始化监听、发送ECB 31
为监听询问设置监听、发送ECB 32
让InitMain睡眠 32
InitMain从睡眠到唤醒 34
InitMain建立线程组 35
EngineMain填写监听ECB(包括SemHandle字段)并且设置它们 35
EngineMain睡眠 36
EngineMain唤醒并得到呼入请求 37
EngineMain处理ECB请求 40
使用BeginThread的选择方法 44
正常地退出engine NLM 44
小结 47
第三章NetWare目录服务 48
目录服务的概念 48
定义目录信息库 49
了解目录纲要 49
解释什么是分区 52
回答访问问题 52
进一步考查目录服务的安全性 53
开始用目录服务函数 58
成为正式的NetWare 4.0客户 60
初始化目录上下文 60
通过注册建立凭证 63
进行证明 63
目录服务的访问控制 65
为目录信息库设置访问安全 65
改变ACL属性 66
安全等效性和组成员 68
改变目标的密钥对 69
查询目录树 70
通过浏览树来找出目标 70
执行黄页查询 72
两种检查属性值的方法 74
目录纲要函数 76
修改目录纲要 77
分区的目录树 79
一个简单的NLM应用 81
学习使用DSSCRIPT 81
介绍DSSCRIPT 82
练习运行DSSCRIPT 82
学习怎样建立一个脚本文件 83
小结 93
第四章基本文件系统程序设计 94
NetWare 4.0文件系统概述 94
文件系统的向下兼容性 94
NetWare卷 94
文件系统高速缓存 96
并发控制 97
事务控制 97
压缩 98
稀疏文件 98
名字空间 98
子地址分配 99
标准文件I/O 99
低级标准I/O 99
高级标准I/O 99
对于NetWare的DIR命令 101
合法的NetWare路径 110
查询目录 111
打印文件的时间和日期信息 112
从目标IDs获得目标名 113
获得子目录信息 114
修改DIR.NLM 114
文件属性处理 115
FLAG.NLM的内容 115
处理命令行参数 122
处理文件属性 123
修改FLAG.NLM 124
用户信息和控制 124
空间消耗控制 124
托管控制 126
修改继承权屏蔽 129
DSPACE.NLM 129
小结 138
对DSPACE.NLM的修改 138
第五章高级文件系统编程 139
高性能文件I/O 139
异步文件I/O注释 141
用FEsopen获得更多的控制 141
转移服务器注释 143
用共享的文件工作 143
标识文件共享 143
sopen和FEsopen 144
在一个可共享文件上加锁 144
对单个文件加锁和解锁 145
对一组文件加锁和解锁 146
加锁和释放单个记录 147
加锁和释放一组记录 149
一些文件或记录解锁,但不清除它们 150
什么是一个事务? 151
什么是一不完整事务? 151
NetWare事务跟踪系统 151
逻辑锁与物理锁 151
隐含事务和明显事务 152
在你的NLM中使用TTS 152
异步文件系统 155
异步地读文件数据 155
释放由AsyncRead所分配的存储区 157
异步地写文件数据 158
FILEIO.NLM 159
文件监视器接口 170
FMON.NLM 171
对FMON.NLM源程序的讨论 191
小结 196
第六章IPX/SPX与SPX Ⅱ通信 197
IPX编程 197
IPX的组成部分 198
Client/Server应用程序的编程 200
事件服务子程序(ESRS)的使用 200
SPX的使用 205
IPX与SPX的比较 205
把采用IPX的应用程序移植到SPX 205
SPX Ⅱ 212
SPX Ⅱ的评价 213
介绍用于SPX Ⅱ中的TLI 213
TLI和IPX 216
TLI和SPX 220
TLI和TCP 226
小结 227
第七章用NCP扩展器编写分布式应用程序 229
NCP扩展器如何工作 229
NCP扩展器的APIs 230
C接口服务器APIs 230
C接口客户APIs 230
服务器一方 231
在一个样本的客户机/服务器NLM中实现NCP扩展器 231
NCP扩展器的优点和缺点 231
客户机一方 253
小结 284
第八章存储管理和保护 285
Netware 4.0存储管理 285
存储管理和处理程序 285
存储管理服务控制命令 287
NetWare 4.0存储保护 288
环保护 288
范围保护 288
开发者选项 290
存储保护演示NLM:Prodemo 290
存储保护命令 290
调试(debugger)命令 292
小结 294
向下兼容性:使用目录库和装订库 295
第九章编写与多种NetWare版本兼容的NLM 295
Broker NLM如何动态地输入目录库服务APIs 296
Broker NLM是如何工作的 301
本章讨论的C接口程序 302
建立一个基于装订库的客户 307
建立一个基于目录库的客户 324
删除一个客户 331
在目录库中生成一个Broker目标(Broker Object) 332
在ENGINE.H中的预处理器语句 346
向下性兼容性:合适的APIs和预处理器指令 346
在ENGINE.C中的预处理器语句 347
编写一个运行于NetWare SFTⅢ上的NLM 351
镜像服务器的工具:IOEngine和MSEngine 351
IOEngine支持C语言接口程序 352
MSEngine支持的NetWare C接口程序 353
小结 353
字节顺序和数据校准 354
第十章NETWARE可移植性 354
指导1:遵循标准的技术说明编写程序(ANSI C) 355
指导2:避免对数据目标值的描述作出假设 355
在结构中引用元素 356
将“字节”指针拼接成“字”或“长字”指针,将“字”指针拼接成“长字”指针 358
把非校准数据用于库程序 359
对于所有的数据长度使用长度操作符 359
寻址数组元素 359
指导3:避免对字节顺序做假设 359
指导4:使用宏指令消除机器字节顺序特性 361
指导5:避免将若干字节组合成一个长字或字 384
指导6:避免通过长字指针分配/初始化字节 386
指导7:避免对堆栈的用法和堆栈的增加方向做假设 387
指导8:不要假设缺省使用的编程语言或计算机 388
使用INT 388
位图 389
使用变参方式来实现那些需要参数数量是变化的函数 389
定义范围与使用局部和全局变量及函数 389
指导9:对依靠环境的程序进行标识、分离和参数化 390
指导10:在每个程序中包括头文件Portable.H文件 391
其它方面的指导 391
尽可能地将特殊的用户接口从程序中分离出来 391
用许多计算机上的各种不同的编译器来测试程序 391
让有不同背景的人来检查程序 391
小结 392
第十一章名字空间、数据流、扩展属性 393
什么是名字空间? 393
什么是数据流? 394
什么是扩展属性? 395
NetWare的名字空间机制的概要 395
文件工具(File Engine)接口的综述 396
AFP(Apple Talk Filing Protocol)API综述 398
小结 399