返 回 总 目 录
目 录
第 |
14 章 |
安 全 性 设 计 4 |
---|---|---|
14 .1 | 精通 W indo w s 的安全 A P I 9 | |
14 .2 | 使用 W indo w s N T 的 安全性 1 4 | |
14 .3 | 蛮荒不化 的互联网 5 3 | |
14 .4 | 确保 In te rn e t 下载代码 的安全 6 0 | |
14 .5 | 安 全 标 准 7 1 | |
第 |
15 章 |
建 立 帮 助 文 件 8 6 |
15 .1 | 确定要创 建帮助文件的 类型 8 9 | |
15 .2 | 组织帮助 文件 9 2 | |
15 .3 | 使用 M ic ro s o f t H e lp C o m p i le r 9 8 | |
15 .4 | 使用 M ic ro s o f t H e lp W o rk s h o p 1 2 1 | |
15 .5 | 为应用程 序增加标准帮 助 1 4 5 | |
15 .6 | 建立基于 HT M L 的帮助文 件集 1 5 2 | |
15 .7 | 向应用程 序增加基于 HT M L 的帮助 1 5 8 | |
第 |
16 章 |
打 包 应 用 程 序 1 7 1 |
第 14 章 安 全 性 设 计
网 络 管 理 员 在 极 力 推 行 网 络 安 全 性 时 将 要 面 临 很 多 问 题 我 们 都 知 道使 用 公 用 的 或 太 短 的 保 密 字 用 户 不 懂 得 安 全 操 作 以 及 对 管 理 的 完 全 忽 视 都将 直 接 威 胁 局 域 网 的 安 全 幸 运 的 是 由 于 有 了 类 似 W ind ow s N T 这 样 的 操 作系 统 使 得 我 们 无 论 在 本 机 还 是 在 局 域 网 内 实 施 安 全 性 时 都 变 得 非 常 容 易 学 会 如 何 使 用 这 些 安 全 特 性 并 将 它 们 置 入 你 的 应 用 程 序 中 对 确 保 数 据 和 应 用程 序 的 安 全 都 是 非 常 重 要 的
在 建 立 In te rn e t 站 点 或 是 In tran et 站 点 时 安 全 性 也 是 人 们 争 论 的 主 要 焦 点之 一 公 司 可 以 通 过 建 立 一 个 In te rn e t 站 点 来 获 得 公 共 的 访 问 也 可 以 建 立In tran et 站 点 来 尽 量 隐 藏 其 身 份 但 现 在 很 难 知 道 哪 一 种 会 更 好 不 管 你 工 作 在什 么 样 的 环 境 中 市 场 上 已 经 有 很 多 公 司 开 发 的 各 类 工 具 以 满 足 那 些 需 要 保护 他 们 的 数 据 不 受 损 害 的 用 户 然 而 令 人 遗 憾 的 是 当 你 建 造 自 己 的 控 件 和应 用 程 序 时 所 有 这 些 华 丽 的 工 具 实 际 上 并 不 能 从 根 本 上 保 护 你 当 你 用 错 误的 方 式 使 用 它 时 这 些 工 具 也 不 能 很 好 地 工 作 再 次 强 调 学 会 W ind ow s N T 提 供 的 安 全 特 征 比 如 A c tiv e X 将 会 帮 助 你 提 高 远 程 访 问 技 术 的 安 全 性
在 这 一 章 中 你 不 应 该 去 寻 找 那 些 定 位 在 你 特 定 工 作 环 境 中 的 具 体 答 案 如 果 想 在 一 章 之 中 囊 括 当 今 所 有 的 实 用 技 术 或 甚 至 囊 括 你 曾 遇 上 的 每 个 安 全问 题 那 都 将 是 非 常 愚 蠢 可 笑 的 我 们 的 重 点 是 从 编 程 者 的 角 度 来 看 待 安 全问 题 并 讨 论 那 些 对 编 程 人 员 实 用 的 技 术 但 我 们 不 针 对 具 体 的 问 题 给 出 答 案
你 最 后 所 决 定 采 用 的 方 案 应 基 于 自 己 公 司 的 需 要 以 及 你 所 使 用 的 工 具
虽 然 In te rn e t 的 安 全 性 固 然 重 要 但 从 整 体 上 看 事 实 上 我 们 将 更 加 集 中精 力 关 注 W ind ow s N T 的 安 全 性 我 们 也 将 关 注 那 些 使 用 远 程 访 问 所 必 须 精 通的 技 术 如 A c tiv e X 控 件 分 布 式 组 件 对 象 模 型 DC OM 组 件 对 象 模 型 加 CO M + 等 这 一 章 将 要 解 答 的 一 个 问 题 是 编 程 人 员 可 以 采 用 什 么 手 段 来 防 止 数 据 和 应 用 程 序 代 码 受 损 从 编 程 者 的 角 度 来 看 一 个 A c tiv e X 控 件 不 止是 一 个 新 的 浏 览 器 资 源 它 也 可 能 是 一 个 潜 在 的 病 毒 源 在 保 护 控 件 方 面 除非 是 浏 览 器 编 程 者 和 In te rn e t 站 点 允 许 你 更 好 地 使 用 局 域 网 资 源 否 则 哪 怕 你做 出 了 最 仔 细 的 努 力 也 将 是 枉 费 心 机 这 也 意 味 着 你 将 有 可 能 因 为 一 个 笨 拙的 用 户 而 暴 露 了 自 己 的 服 务 器 进 而 导 致 潜 在 的 破 坏 另 外 因 为 CO M + 还 是
— 个 海 市 蜃 楼 所 以 你 在 使 用 这 个 新 技 术 时 应 该 特 别 小 心
微 软 为 编 写 各 类 应 用 程 序 提 供 了 各 种 AP I 和 开 发 工 具 我 们 要 做 的 第 一 件事 就 是 花 点 时 间 学 习 一 下 这 些 AP I 其 中 包 括 远 程 的 和 本 地 的 你 至 少 应 该 看一 点 安 全 方 面 的 AP I 尤 其 是 要 看 看 类 似 W ind ow s N T 这 样 的 产 品 所 提 供 的 本地 安 全 性 既 然 你 已 经 完 全 使 用 了 操 作 系 统 为 何 不 充 分 利 用 它 所 提 供 的 安 全性 呢 在 一 般 的 应 用 环 境 中 操 作 系 统 安 全 性 带 来 的 好 处 对 任 何 人 来 说 都 是 显而 易 见 的 除 非 你 正 关 注 的 是 In te rn e t 请 牢 记 你 可 以 使 用 A c t iv e X 控 件 来做 一 些 事 如 巧 妙 地 处 理 注 册 登 记 或 至 少 是 用 来 询 问 用 户 和 公 司 名 称 之 类 的 信息 如 果 你 可 以 使 用 A c tiv e X 控 件 从 注 册 中 获 取 用 户 名 和 公 司 名 那 么 通 过 微软 提 供 的 操 作 系 统 服 务 你 也 可 以 使 用 它 来 辅 助 实 现 其 安 全 性 不 难 看 出 你在 In te rn e t 站 点 上 所 附 加 的 那 些 安 全 性 将 会 分 担 很 大 一 部 分 的 安 全 压 力
我 们 在 这 一 章 要 关 注 的 另 一 个 主 题 是 编 程 者 在 安 全 性 方 面 所 必 须 考 虑 的各 类 问 题 也 就 是 了 解 有 谁 进 入 了 In te rn e t 站 点 是 如 何 进 入 的 了 解 你 的 组 织结 构 中 的 脆 弱 部 分 以 及 随 意 从 In te rn e t 下 载 控 件 将 会 产 生 什 么 样 的 危 害 这 些都 是 非 常 重 要 的 要 实 施 安 全 性 你 首 先 应 该 知 道 你 所 保 护 的 对 象 是 谁 你 所防 止 的 东 西 又 是 什 么 否 则 你 的 努 力 从 一 开 始 就 是 做 无 用 功
我 们 抛 开 了 那 些 对 In te rn e t 安 全 性 的 世 俗 顾 虑 后 将 开 始 关 注 如 何 去 实 现 它的 安 全 性 这 里 有 个 问 题 当 Su n 公 司 开 始 创 建 Ja v a 小 应 用 程 序 J a va a pp le ts 时 它 在 安 全 性 方 面 采 用 了 一 种 称 为 S a ndbox 沙 箱 的 方 法 即 一 个 Ja v a 程 序 只 能 在 它 自 己 的 S a ndbox 中 使 用 如 果 越 过 了 Su n 规 定 的 这 个 严 格 区 域
程 序 将 不 能 访 问 操 作 系 统 或 者 甚 至 不 能 访 问 硬 件 系 统 为 了 使 用 Ja v a 小 应 用程 序 你 需 要 一 些 运 行 策 略 来 确 保 访 问 是 被 严 格 控 制 的 这 种 方 法 的 好 处 非 常清 楚 越 少 的 访 问 意 味 着 越 少 的 安 全 顾 虑 遗 憾 的 是 它 也 严 酷 地 束 缚 了 Ja v a 处 理 工 作 的 能 力 这 尤 其 表 现 在 不 同 类 型 的 数 据 要 进 行 交 换 之 时
注 Java 在 安 全 性 方 面 采 用 了 Sandbox 的 方 法
Web 链 接 即 使 Java 也 不 是 防 弹 bulletproo f 的 黑 客 已 经 发 现了 它 执 行 代 码 中 的 漏 洞 这 使 得 Java 也 并 非 是 一 个 完 美 的 解 决 方 案 例 如 在 1996 年 3 月 2 2 日 在 普 林 斯 顿 大 学 计 算 机 科 学 系 的 Drew Dean ddean@ICS.Princeton
.EDU 和 EDFelton felten@ICS .Princeton.EDU 发 现 一 个 Java 臭 虫 bug 这 个 臭 虫 允 许 他 们 创 建 一 个 程 序 来 删 除 用 户 本 地 盘 的某 个 文 件 他 们 通 过 Netscape 的 缓 存 机 构 下 载 一 个 文 件 到 用 户 的 机
器 上 然 后 让 Java 来 执 行 这 个 程 序 并 以 此 来 嘲 弄 Java 幸 运 的 是在 Netscape 的 2.01 版 本 中 已 经 修 复 了 这 个 漏 洞 通 过 访 问http ://www .cs. prin ceton. edu/sip /pub/s ecure96
.html 站 点 你 可 以 找 到 有 关 Java 安 全 问 题 的 其 它 信 息
微 软 提 出 的 另 外 一 个 方 案 是 A c tiv e X 控 件 它 被 称 作 是 s h r ink- w ra p 方法 使 用 A c tiv e X 就 像 你 可 以 使 用 软 件 的 任 何 一 个 s h r in k - w rap ed 片 一 样 你也 可 以 完 全 访 问 操 作 系 统 这 意 味 着 你 可 以 写 出 一 些 非 常 灵 活 的 控 件 他 们可 以 充 分 利 用 系 统 提 供 的 资 源 这 里 也 没 有 任 何 来 自 从 访 问 数 据 方 面 的 限 制 然 而 从 安 全 的 角 度 来 看 A c tiv e X 也 能 导 致 恶 梦 一 样 的 恐 怖 有 什 么 东 西 能够 保 护 你 下 载 的 控 件 并 防 止 它 对 你 的 系 统 进 行 破 坏 呢 微 软 还 有 另 一 个 手 段厂 商 认 证 当 你 在 某 个 商 店 买 下 一 个 软 件 时 你 便 能 知 道 它 的 制 造 公 司 如 果软 件 中 有 病 毒 甚 至 有 险 恶 的 臭 虫 你 也 知 道 和 谁 联 系 微 软 提 出 的 A c tiv e X 控件 的 认 证 方 式 也 和 你 在 商 店 买 的 软 件 一 样 它 的 包 装 也 确 切 地 标 识 出 了 软 件 的生 产 厂 家
Web 链 接 所 有 同 时 使 用 VBScript 和 JavaScript 的 开 发 厂 家 正 持 续 不 断地 提 高 这 两 种 脚 本 语 言 的 安 全 性 不 幸 的 是 要 发 现 VBScript 的 未来 发 展 方 向 还 有 点 困 难 通 过 访 问http://www .osf.org/ ∼ loverso/ja vascript/ 站 点 你 能 够 读 阅 读 有关 JavaScript 的 著 名 安 全 问 题
脚 本 语 句 是 很 容 易 被 监 视 的 我 们 现 在 关 注 一 下 运 行 脚 本 语 言 的 安 全 性
不 论 是 VB S c r ip t 还 是 J a va S c r ipt 他 们 的 近 期 版 本 都 不 是 非 常 安 全 的 虽 然 已做 了 许 多 工 作 来 寻 找 J a va S c r ipt 的 漏 洞 下 文 介 绍 了 三 个 最 常 见 的 问 题
欺 骗 用 户 上 载 某 个 文 件 尽 管 J a va S c r ipt 在 上 载 一 个 文 件 时 必 须 征 得用 户 的 同 意 但 黑 客 却 能 够 通 过 多 种 途 径 来 绕 过 这 种 限 定 黑 客 真 正 需要 的 只 是 一 个 含 有 趣 味 标 题 的 按 钮 对 使 用 W ind ow s 95 / 98 的 用 户 来 说上 载 他 们 的 用 户 保 密 字 文 件 是 非 常 容 易 的 这 使 得 黑 客 闯 进 你 的 操 作 系统 变 得 更 加 容 易
获 得 文 件 的 目 录 在 上 载 你 机 器 中 的 一 个 目 录 时 J a va S c r ipt 没 有 要 求必 须 征 得 用 户 的 同 意 事 实 上 它 也 可 以 上 载 其 它 网 络 驱 动 器 中 的 目 录黑 客 如 果 知 道 了 你 硬 盘 的 组 织 结 构 便 能 够 更 容 易 地 闯 入 你 的 系 统 了
跟 踪 访 问 的 站 点 黑 客 通 过 跟 踪 你 访 问 的 站 点 便 能 够 对 你 进 行 一 些 识别 而 J a va S c r ipt 使 得 黑 客 更 容 易 这 样 做 它 能 够 跟 踪 你 访 问 的 每 个UR L 并 将 它 们 的 地 址 发 送 到 黑 客 的 机 器 中 就 像 上 载 文 件 时 出 现 的 问题 一 样 用 户 必 须 给 出 许 可 而 黑 客 却 几 乎 可 以 用 任 何 一 个 东 西 来 掩 码这 种 许 可
本 章 也 将 关 注 一 下 安 全 标 准 一 些 编 程 者 把 这 些 标 准 当 成 累 赘 因 为 它 们与 编 程 没 有 直 接 的 关 系 我 们 并 不 在 这 些 标 准 的 全 部 内 容 上 浪 费 时 间 但 是 知道 它 们 的 存 在 以 及 如 何 找 到 它 们 也 是 非 常 重 要 的 你 们 中 许 多 人 也 都 认 为没 有 什 么 理 由 要 对 一 个 已 经 安 全 实 用 的 东 西 再 作 重 新 改 造 如 果 有 人 已 经 发 现了 一 种 能 防 止 访 问 中 受 到 危 害 的 方 法 而 且 这 种 方 法 所 有 人 都 可 以 采 用 那 有何 理 由 不 采 纳 这 个 标 准 的 方 法 呢 而 这 些 也 就 是 在 安 全 标 准 这 一 节 中 所 关 注
的 它 让 你 知 道 这 些 标 准 中 什 么 东 西 有 用 且 让 你 学 会 如 何 去 使 用 它 们
1 4. 1 精 通 Wi nd ow s 的 安 全 AP I
W indow s N T 提 供 的 安 全 级 别 对 一 个 操 作 系 统 来 说 几 乎 有 点 倾 向 于 偏 执它 允 许 你 用 很 多 的 方 式 来 设 置 安 全 性 包 括 既 是 日 常 用 户 又 是 文 件 级 别 的 用 户你 也 可 以 创 建 用 户 组 并 通 过 组 来 分 配 安 全 性 而 不 是 对 单 独 的 用 户 来 分 配 安全 级 别 另 外 你 也 可 以 通 过 使 用 各 种 警 报 和 登 记 文 件 来 监 视 系 统 的 安 全 情 况W ind ow s N T 擅 长 于 实 时 在 地 监 视 系 统 的 活 动 情 况 任 何 事 件 都 逃 不 出 其 审 查的 范 围 事 实 上 即 便 是 从 一 个 进 程 到 另 一 个 进 程 的 信 息 传 送 都 要 经 过 系 统某 一 级 别 的 审 查
对 应 用 程 序 来 说 W ind ow s N T 提 供 的 安 全 级 别 却 是 一 把 双 刃 剑 一 方 面应 用 程 序 不 能 做 太 大 的 破 坏 大 多 数 情 况 下 在 造 成 安 全 破 坏 之 前 W ind ow s N T 便 能 够 简 单 地 中 断 错 误 的 应 用 程 序 另 一 方 面 对 一 些 在 W ind ow s 95 / 98 中 运 行很 好 的 应 用 程 序 施 加 这 么 严 格 的 安 全 限 制 将 会 对 程 序 的 运 行 造 成 破 坏
W ind ow s N T 提 供 的 安 全 性 从 本 质 上 说 确 实 影 响 了 你 的 机 器 本 身 所 能 提 供的 兼 容 性
技 巧 如 果 只 是 想 设 计 一 个 一 般 的 应 用 程 序 而 没 有 什 么 与 安 全 性 相 关 的服 务 你 也 许 潜 意 识 想 用 Windows95/ 98 来 做 可 另 一 方 面 Windows NT 提 供 了 那 么 多 的 安 全 服 务 以 至 于 你 可 以 创 建 一 个 界 面 几 乎 不 能 让 人接 受 的 应 用 程 序 然 而 要 付 出 的 代 价 是 你 的 应 用 将 不 能 在 许 多 机
器 上 运 行 因 为 Windows NT 和 Windows 95 在 安 全 性 上 几 乎 处 于 两 种完 全 不 同 的 极 端 — — Windows NT 具 备 了 几 乎 太 多 的 安 全 性 而 Window 9 5 却 几 乎 没 有
W indow s N T 提 供 的 大 量 安 全 特 性 使 In te rn e t 站 点 和 用 户 得 到 了 极 大 的 便利 它 的 本 地 安 全 性 使 W ind ow s N T 成 为 了 W e b 站 点 中 的 优 秀 平 台 另 外 如果 你 在 使 用 W ind ow s N T 提 供 的 标 准 特 性 来 编 写 代 码 时 遇 上 了 什 么 麻 烦 你 也可 以 改 进 这 些 特 性 例 如 在 第 13 章 中 你 能 编 写 一 个 IS A P I 过 滤 器 来 监 视 后台 的 事 件 如 果 将 IS A P I 过 滤 器 和 W ind ow s N T 的 安 全 特 性 结 合 起 来 便 能 够提 供 至 少 在 跟 踪 重 要 安 全 事 件 中 所 需 要 的 任 何 东 西 也 就 是 说 即 便 你 不 能 阻止 黑 客 对 你 的 安 全 性 进 行 破 坏 你 至 少 还 能 够 跟 踪 黑 客 做 了 些 什 么 以 将 其 破坏 减 至 最 小 另 外 识 别 黑 客 闯 入 的 地 方 也 将 是 提 高 安 全 性 的 一 种 方 法
安 全 特 性 并 不 局 限 于 IS A P I 过 滤 器 或 桌 面 应 用 你 也 能 够 将 W ind ow s N T 的 安 全 性 纳 入 A c tiv e X 控 件 或 扩 展 IS A P I 中 例 如 你 可 以 编 写 一 个 A c tiv e X 控 件 并 用 它 来 检 测 登 录 你 的 系 统 的 用 户 是 否 真 正 获 得 了 访 问 许 可 你 甚 至 还可 以 编 写 一 个 扩 展 IS A P I 它 可 以 根 据 系 统 允 许 用 户 的 不 同 访 问 级 别 发 送 给用 户 不 同 类 型 的 HT M L 网 页
从 理 论 上 说 你 也 可 以 将 W ind ow s N T 的 安 全 性 加 入 D LLs 中 通 过 DC OM 的 使 用 它 们 能 被 客 户 机 器 所 访 问 甚 至 可 以 是 W ind ow s 95 / 9 8 的 客 户 因为 DL L 将 在 W ind ow s N T 服 务 器 上 运 行 而 不 是 像 常 规 一 样 下 载 到 客 户 端 所以 客 户 实 际 上 受 到 了 服 务 器 安 全 特 性 的 保 护 实 践 证 明 在 应 用 中 加 入 此 类 安全 特 性 并 不 增 加 多 少 网 络 负 载 和 服 务 器 处 理 时 间 相 比 之 下 你 当 然 宁 愿 通
过 DC OM 实 施 安 全 性
既 然 W ind ow s N T 已 经 提 供 了 这 么 多 的 安 全 性 那 么 为 什 么 还 要 在 你 的 应用 中 努 力 去 创 建 附 加 的 安 全 性 呢 第 一 个 原 因 是 目 前 为 In te rn e t 安 全 性 设 计 的AP I 标 准 还 存 在 着 漏 洞 例 如 我 们 已 经 说 过 的 In te rn e t 部 件 下 载 服 务 的 漏 洞 在第 8 章 中 我 们 可 以 看 到 In te rn e t 下 载 过 程 的 部 分 论 述 因 为 当 前 市 场 上 的 各种 浏 览 器 提 供 的 安 全 防 线 还 存 在 着 漏 洞 所 以 一 些 神 通 广 大 的 人 可 以 通 过 各 种手 段 绕 过 我 们 的 安 全 防 线 我 们 将 集 中 讲 述 In te rn e t E x p lo re r 当 然 N e ts c a p e 和其 它 浏 览 器 也 肯 定 存 在 这 样 或 那 样 的 毛 病 这 些 安 全 漏 洞 并 非 存 在 于 AP I 本身 而 是 存 在 于 过 去 为 In te rn e t 设 计 的 一 些 解 决 方 案 中 实 质 上 这 些 过 去 设 计的 解 决 方 案 到 现 在 已 经 过 时 了 以 下 将 告 诉 你 In te rn e t 部 件 下 载 服 务 中 的 三 个 漏洞 当 然 肯 定 还 有 其 它 漏 洞
HT M L < A HR E F > 标 志 人 们 有 办 法 通 过 使 用 <A H R E F > 标 志 来 下 载 和 运行 一 个 可 执 行 文 件 在 In te rn e t E x p lo re r 的 3 .x 或 4 .x 版 本 中 对 代 码 的检 测 过 程 中 存 在 这 个 问 题 它 当 前 的 做 法 是 使 用 UR L 名 字 直 接 下 载代 码 然 后 调 用 W in V e r if y T ru s t 来 检 测 代 码 的 合 法 性 这 与 第 8 章 中 的描 述 一 样 这 种 方 法 100% 安 全 吗 回 答 是 否 定 的 因 为 你 使 用 了 标准 进 程 以 外 的 一 些 东 西 来 检 验 文 件 的 内 容 在 这 里 你 将 依 赖 于 这 个HT M L 分 析 器
脚 本 现 在 的 脚 本 对 所 有 安 全 检 测 来 说 是 完 全 自 由 的 没 有 什 么 方 法能 检 测 出 是 谁 创 建 了 这 些 脚 本 或 它 将 会 对 你 的 机 器 做 些 什 么 更 严 重的 是 没 有 什 么 方 法 能 检 测 出 这 些 脚 本 将 会 从 你 的 机 器 中 取 回 些 什 么 信
息 在 这 一 章 开 始 我 们 看 到 了 J a va S c r ipt 能 从 你 的 机 器 中 取 回 的 两种 信 息 用 户 硬 盘 中 的 目 录 和 用 户 访 问 的 站 点 微 软 正 在 创 造 一 些 脚本 的 认 证 一 旦 脚 本 认 证 变 成 了 现 实 浏 览 器 便 可 在 运 行 代 码 前 先 调 用W in V e r if y T ru s t 来 检 测 这 些 脚 本
完 整 应 用 程 序 的 下 载 或 其 它 更 复 杂 的 下 载 情 况 IE 目 前 在 为 检 测 特 殊类 型 的 下 载 做 了 许 多 很 好 的 工 作 例 如 在 下 载 一 个 OC X 时 将 插 入一 个 W in V e r if y T ru s t 进 程 如 果 下 载 的 参 数 超 出 了 IE 的 检 测 限 制 范 围将 会 发 生 什 么 情 况 呢 例 如 某 一 用 户 可 能 想 下 载 并 安 装 一 个 D oom 或其 它 的 游 戏 而 在 安 装 中 可 能 发 生 一 些 不 可 预 料 的 事 情 如 申 请 注 册 或重 启 系 统 等 而 此 时 的 IE 却 不 能 控 制 它 微 软 正 打 算 在 以 后 组 件 下 载版 本 中 加 强 其 健 壮 性 使 它 能 控 制 这 类 事 件
Web 链 接 作 为 保 护 策 略 中 的 一 部 分 你 也 应 该 测 试 多 种 浏 览 器 并 检 测 它们 的 反 应 尤 其 在 你 创 建 一 个 公 共 访 问 站 点 时 编 程 人 员 在 与 多 种产 品 一 起 工 作 时 应 该 在 头 脑 中 形 成 一 种 基 本 观 念 那 就 是 不 断 地 跟踪 你 访 问 过 的 所 有 W e b 站 点 一 种 名 叫 NavEx 的 产 品 允 许 你 将 I E 的收 藏 站 点 复 制 成 Netscape 的 书 签 反 之 它 也 能 将 Netscape 的 书 签复 制 成 I E 的 收 藏 站 点 通 过 访 问http://mac h5.ocs.drexel.edu/na vex/ 你 可 以 下 载 到 这 个 产 品
注 释 在 这 一 章 我 们 也 将 探 讨 Internet 技 术 中 的 其 它 漏 洞 例 如 表 14.1
列 出 了 一 些 为 填 补 这 些 漏 洞 而 设 计 的 新 标 准 如 果 没 有 出 现 安 全 问题 SHTTP S/WAN 和 其 它 类 似 的 技 术 将 是 不 必 要 的 MIME 有 一 种 新技 术 叫 S/MIME 它 能 确 保 其 它 人 无 法 偷 窥 你 的 电 子 邮 件 mail
为 了 精 通 W ind ow s N T 是 如 何 增 强 In te rn e t 站 点 安 全 性 的 我 们 首 先 要 来 看看 操 作 系 统 本 身 提 供 的 安 全 特 性 W ind ow s N T 提 供 的 所 有 安 全 特 性 如 映 射网 络 驱 动 器 都 能 被 应 用 程 序 所 访 问 许 多 编 程 人 员 好 象 忘 记 了 使 用 A c tiv e X 控 件 也 能 够 访 问 这 些 特 性 例 如 你 可 以 像 在 第 10 章 中 创 建 一 个 按 钮 一 样 来 调用 它 其 目 的 是 显 示 一 个 网 络 映 射 对 话 框 以 供 用 户 选 择 一 个 驱 动 器 来 进 行 网络 映 射
当 然 W ind ow s N T 也 有 一 些 安 全 特 性 并 没 有 涉 及 In te rn e t 的 安 全 领 域 如映 射 网 络 驱 动 器 在 应 用 程 序 中 你 可 以 通 过 创 建 一 个 按 钮 来 调 用 它 但 它 并 没有 In te rn e t 的 安 全 保 护 然 而 如 果 你 在 一 个 A c t iv e X 控 件 中 增 加 上 W ind ow s N T 的 一 些 其 它 安 全 特 性 则 可 以 实 现 它 的 In te rn e t 安 全 性 例 如 你 可 以 在 一 个A c tiv e X 控 件 中 增 加 上 W ind ow s N T 的 口 令 保 护 这 样 用 户 每 次 想 要 访 问 你 的站 点 时 将 显 示 一 个 登 录 对 话 框 要 求 用 户 输 入 用 户 名 和 口 令
在 一 个 In te rn e t 的 应 用 程 序 中 通 过 A c t iv e X 控 件 来 显 示 登 录 对 话 框 实 际上 完 成 了 两 件 事 第 一 W ind ow s N T 提 供 口 令 保 护 的 安 全 性 比 W ind ow s 95 /98 要 强 黑 客 如 果 没 有 猜 出 正 确 的 保 密 字 将 要 周 旋 很 长 时 间 才 能 通 过 这 个 对 话框 第 二 你 可 以 让 服 务 器 登 记 下 所 有 的 访 问 记 录 请 谨 记 W ind ow s N T 提 供 给 了 你 监 视 任 何 事 件 的 能 力 万 一 实 在 有 人 闯 入 了 你 的 系 统 你 至 少 也 可以 知 道 这 个 黑 客 使 用 了 哪 个 帐 户 并 根 据 这 个 帐 户 的 安 全 等 级 评 估 黑 客 对 你
的 系 统 可 能 造 成 的 破 坏 程 度
W indow s N T 提 供 的 安 全 性 AP I 函 数 将 帮 助 你 创 建 一 个 更 加 安 全 的 In te rn e t 环 境 要 使 用 这 些 安 全 特 性 在 客 户 站 点 端 你 可 以 使 用 A c tiv e X 控 件 而 在服 务 器 端 你 可 以 使 用 扩 展 的 IS A P I 并 通 过 在 后 台 运 行 的 IS A P I 过 滤 器 来 监视 事 件 的 安 全 性
1 4. 2 使 用 Wi nd ow s NT 的 安 全 性
在 上 一 节 我 们 已 经 阐 述 了 推 荐 使 用 W ind ow s N T 做 W e b 服 务 器 的 一 些 理由 其 最 重 要 的 一 点 是 能 够 使 用 W ind ow s N T 的 安 全 性 AP I 然 而 懂 得 为什 么 要 存 在 W ind ow s N T 的 安 全 性 AP I 只 是 一 个 起 步 现 在 我 们 将 要 关 注 的是 在 现 实 中 你 是 如 何 实 施 这 些 安 全 特 性 的 在 这 一 章 中 我 们 实 际 上 讲 述 了五 种 不 同 类 型 或 等 级 的 安 全 特 性 下 面 将 对 每 种 类 型 进 行 定 义
注 使 用 Windows NT 作 为 Internet 服 务 器 的 一 个 主 要 原 因 是 你 能 使 用它 的 安 全 性 A P I
内 置 安 全 性 作 为 一 个 操 作 系 统 W ind ow s N T 有 一 定 级 别 的 安 全 性 在W ind ow s N T 中 每 个 对 象 都 对 应 着 一 定 的 安 全 性 我 们 将 关 注 这 些 安全 性 的 实 施 方 法 使 用 对 象 级 别 的 安 全 性 意 味 着 如 果 没 有 正 确 的 授 权几 乎 没 人 能 有 机 会 访 问 操 作 系 统 的 任 何 部 分 或 任 何 数 据 当 然 也 不 是一 点 机 会 也 没 有 我 们 总 是 假 设 你 的 安 全 性 不 是 最 完 美 的
私 有 通 讯 技 术 PCT PC T 是 微 软 和 IETF 一 起 创 建 的 一 种 特 殊 的 In te rn e t
安 全 性 技 术 在 近 期 版 本 中 PC T 将 允 许 客 户 和 服 务 器 建 立 私 有 的 通 讯以 保 证 通 讯 不 会 被 人 窃 听 到 这 种 安 全 性 的 实 现 依 赖 于 数 字 签 名 和 加 密方 法
Windows NT 通 过 HTTP 进 行 身 份 认 证 许 多 人 都 错 误 地 认 为 使 用 这 些 安全 性 来 工 作 将 是 非 常 繁 琐 和 复 杂 的 但 有 时 候 看 似 烦 杂 的 东 西 却 可 以通 过 一 个 简 单 的 方 案 做 到 尽 善 尽 美 我 们 从 In te rn e t 的 角 度 来 看 在W ind ow s N T 中 进 行 身 份 认 证 有 两 种 形 式 一 种 形 式 是 简 单 地 询 问 用 户的 用 户 名 和 口 令 并 和 服 务 器 内 的 访 问 列 表 进 行 对 照 这 种 形 式 又 可 通过 两 种 方 法 实 现 一 种 是 在 对 W ind ow s N T 进 行 标 准 登 录 时 进 行 的 询 问和 回 答 另 一 种 则 基 于 当 前 会 话 的 设 置 它 也 要 求 客 户 提 供 必 要 的 用 户名 和 口 令 或 者 说 让 用 户 使 用 客 户 提 供 的 信 息 登 录 到 机 器 上 另 一 种形 式 相 对 简 单 些 它 依 赖 于 一 种 叫 安 全 套 接 层 SSL 的 技 术 SSL 又是 依 靠 加 密 和 数 字 认 证 来 工 作 的 如 果 你 过 于 担 心 安 全 性 问 题 你 甚 至可 以 将 这 两 种 形 式 结 合 起 来 使 用 它 们 彼 此 间 并 没 有 什 么 相 互 的 制 约关 系
数 字 签 名 它 是 指 发 送 人 对 他 发 送 的 文 档 或 可 执 行 文 件 进 行 签 名 通 过检 测 签 名 你 可 以 判 断 其 真 伪 数 字 签 名 用 一 系 列 的 私 有 或 公 开 密 钥 来 实现 这 个 安 全 等 级
加 密 API 有 些 类 型 的 安 全 性 依 靠 多 个 保 护 层 来 工 作 也 就 是 说 如 果 一个 黑 客 闯 过 了 你 的 第 一 个 安 全 保 护 层 则 另 一 个 保 护 层 将 阻 止 他 进 一 步的 访 问 这 就 是 加 密 AP I 也 叫 C ry p to A P I 所 有 要 做 的 它 是 一 个 附
加 的 保 护 层 附 加 在 所 有 已 经 存 在 的 保 护 层 上 它 能 保 护 你 免 受 黑 客 更深 层 次 的 攻 击
在 本 章 的 下 几 节 中 我 们 将 阅 读 到 几 种 新 的 技 术 你 将 发 现 它 既 嵌 入 在
W ind ow s N T 中 也 嵌 入 在 新 型 的 浏 览 器 中 作 为 In te rn e t 服 务 器 中 的 一 种
W ind ow s N T 支 持 如 微 软 的 In te rn e t 信 息 服 务 或 对 等 网 信 息 服 务 在 W in dow s NT 4 . 0 和 W ind ow s 95 / 98 的 OS R 2 版 本 中 免 费 提 供 我 们 将 有 趣 地 发 现 和 新版 本 的 N e ts c a p e 转 接 器 一 样 微 软 的 IE 3 .x /4 .x 中 也 提 供 了 内 置 SSL 的 支 持 你也 将 发 现 PC T 至 少 也 支 持 IE 我 们 也 将 关 注 数 字 认 证 码 即 数 字 签 名 技 术现 在 的 许 多 软 件 厂 家 已 经 采 用 了 它 它 允 许 编 程 人 员 对 其 作 品 进 行 数 字 化 签 名当 你 下 载 这 些 经 过 数 字 化 签 名 的 程 序 时 程 序 代 码 在 签 名 后 的 任 何 损 坏 都 将 显示 出 来 它 带 来 的 好 处 是 你 不 会 轻 易 下 载 到 一 个 病 毒 感 染 过 的 程 序
Web 链 接 通 过 访 问http://www .microsoft.com/iis/g uide/pws.asp?A=2&B=5 你 可 以 为你 的 Windows 95 下 载 某 个 版 本 的 个 人 W e b 服 务 器 PWS Person Web Server Windows 98 的 安 装 包 中 自 带 了 P W S 这 个 版 本 的 P W S 也与 Windows 95 的 OSR2 版 本 以 及 微 软 的 Windows NT 可 选 包 随 同 销 售 Windows 95 /98 也 有 其 可 选 包 虽 然 P W S 不 会 去 满 足 制 造 W e b 站点 的 需 求 但 它 能 够 让 开 发 者 很 好 地 检 测 Internet 应 用 程 序 要 知道 因 为 Windows 95 /98 没 有 提 供 与 Windows NT 一 样 的 安 全 性 所以 如 果 使 用 Windows95/ 98 的 PWS 版 本 你 将 检 测 不 到 应 用 程 序 的任 何 安 全 特 性 幸 运 的 是 在 与 Windows NT 4.0 Workstation 一
同 销 售 的 P W S 中 将 允 许 你 完 全 检 测 这 些 安 全 特 性
加 密 也 是 保 护 你 的 数 据 的 另 一 个 可 行 方 法 让 我 们 参 看 一 下 下 述 微 软 已 经开 发 的 加 密 函 数 C ry p to A P I 这 部 分 的 技 术 至 少 是 在 In te rn e t E x p lo re r 内 的 一 种主 要 形 式 然 而 不 管 你 现 在 能 够 使 用 它 做 什 么 工 作 C ry p to A P I 确 实 在 程 序内 工 作 着 另 外 对 C ry p to A P I 的 开 发 环 境 进 行 扩 展 只 在 美 国 和 加 拿 大 是 有效 的
内 置 的 安 全 特 性
在 安 全 性 方 面 W ind ow s N T 几 乎 是 当 前 市 场 上 最 超 前 的 操 作 系 统 如 果你 对 微 软 的 这 种 地 位 还 有 什 么 怀 疑 的 话 那 么 请 去 看 看 W ind ow s N T 获 得 的 各种 证 书 吧 你 可 以 通 过 使 用 它 的 安 全 性 能 来 获 取 很 多 便 利 例 如 你 可 以 在 一个 OC X 中 使 用 这 些 高 级 功 能 或 通 过 In te rn e t 获 得 一 些 特 殊 功 能 的 访 问 在 做这 些 事 时 你 必 须 受 到 一 些 限 制 以 免 破 坏 你 的 网 络 安 全 使 用 一 些 来 自 In te rn e t 的 特 性 是 不 切 实 际 的 因 为 它 们 并 不 重 要
幸 运 的 是 A c tiv e X 控 件 却 不 必 对 In te rn e t 进 行 限 制 没 有 什 么 条 令 规 定你 不 能 在 你 的 应 用 程 序 中 创 建 一 个 有 特 殊 用 途 的 控 件 在 数 据 库 或 其 它 应 用 程序 中 的 A c tiv e X 控 件 能 被 网 络 管 理 员 或 其 他 有 相 同 权 利 的 人 正 常 地 使 用这 使 应 用 程 序 的 工 作 变 得 更 加 简 单 和 可 靠 事 实 上 如 果 你 需 要 的 话 A c tiv e X 控 件 也 可 以 设 计 为 多 种 个 性 化 用 途 你 甚 至 可 以 给 它 增 加 检 测 控 件 当 前 位 置 的能 力 或 增 加 一 个 指 定 的 位 置 作 为 特 性 页 面 配 置 的 一 部 分 一 些 人 可 以 选 择 其
用 于 In te rn e t 的 特 性 子 集 而 另 外 一 些 人 则 可 以 选 择 其 用 于 局 域 网 LA N 的特 性 子 集 还 有 一 些 特 性 集 则 是 用 于 本 地 的
也 许 你 们 中 许 多 人 会 问 需 要 什 么 类 型 的 管 理 员 来 管 理 安 全 性 且 不 需 使用 网 络 操 作 系 统 NOS 附 加 的 工 具 呢 W ind ow s N T 确 实 提 供 了 大 量 的 管 理工 具 而 且 这 些 工 具 都 非 常 容 易 使 用 所 以 一 些 编 程 者 认 为 再 附 加 一 些 工 具是 不 值 得 的 这 个 问 题 不 好 回 答 但 是 当 大 部 分 人 在 考 虑 W ind ow N T 下 的 安全 性 时 几 乎 总 是 这 么 想 如 果 管 理 应 用 程 序 的 人 不 是 网 络 管 理 员 而 是 练 习使 用 网 络 操 作 系 统 的 某 个 人 这 又 该 如 何 处 理 呢 我 们 说 这 个 人 可 能 是 一 个 工作 组 管 理 员 或 其 他 独 立 的 个 体 他 没 有 必 要 看 到 整 个 网 络 图 而 只 需 要 足 够 的信 息 来 维 护 他 所 负 责 的 应 用 程 序 你 将 发 现 这 种 情 况 是 经 常 发 生 的 尤 其 是 一个 拥 有 许 多 小 工 作 组 的 大 公 司 更 是 属 于 此 类 情 况 尽 管 网 络 管 理 员 不 懂 得 正确 管 理 应 用 程 序 但 也 不 愿 让 工 作 组 管 理 员 自 由 地 访 问 整 个 网 络
注 ActiveX 在 局 域 网 环 境 的 一 个 最 好 的 应 用 是 它 提 供 一 定 的 子 网 安 全 管理 能 力
不 管 你 是 在 为 In te rn e t 还 是 为 局 域 网 LA N 或 是 为 广 域 网 W A N 创建 控 件 你 都 将 发 现 懂 得 网 络 底 层 的 安 全 构 造 是 非 常 重 要 的 W ind ow s 95 /98 没 有 提 供 像 W ind ow s N T 一 样 多 的 安 全 特 性 所 以 在 W ind ow s 95 / 98 中 你有 时 会 发 现 自 己 没 有 增 加 上 应 用 程 序 的 安 全 性 然 而 尽 管 W ind ow s 95 / 9 8 没有 为 应 用 程 序 提 供 某 个 安 全 特 性 但 有 时 它 们 和 W ind ow s N T 使 用 同 样 的 安 装程 序 所 以 应 用 程 序 安 全 模 块 将 同 时 为 这 两 种 操 作 系 统 工 作 在 其 它 情 形 下
你 可 以 干 脆 为 W ind ow s N T 使 用 单 独 的 安 全 模 块 以 增 强 其 安 全 性 能 请 看 下
面 的 具 体 注 释
注 释 与 Windows 95 /98 相 比 Windows NT 确 实 提 供 了 更 多 的 安 全 A P I 函数 因 为 它 的 安 全 性 更 加 强 壮 现 实 中 因 为 Windows 95 /98 缺 少 对Windows NT 安 全 函 数 的 支 持 所 以 在 使 用 它 时 你 会 经 常 遇 到 一 些障 碍 例 如 在 Windows 95/98 下 你 不 能 调 用 GetUserObj ectSecurity 函 数 而 在 下 一 节 中 我 们 将 会 看 到 的 操 作 访 问 令 牌 的 函 数 也 大 多不 能 在 Windows 95 /98 中 使 用 弄 清 一 个 函 数 是 否 被 支 持 的 最 好 方 法就 是 直 接 检 测 它 如 果 你 在 调 用 它 时 收 到 一 个
ERROR_CALL _NOT_IMPLEMENTED(val ue 120) 的 信 息 则 你 便 知 道它 只 能 在 Windows NT 中 使 用 了
在 W ind ow s N T 和 W ind ow s 95 / 9 8 中 对 象 O b ject 这 一 名 词 的 使用 更 加 宽 松 我 们 说 在 事 物 的 背 后 确 实 潜 伏 着 许 多 对 象 但 你 可 能 发 现 对象 这 个 名 词 的 定 义 已 经 不 能 完 全 符 合 C+ + 的 习 俗 了 在 下 几 节 中 我 们 把 对象 大 体 看 成 是 在 运 行 一 个 指 定 的 安 全 任 务 时 所 需 的 代 码 和 数 据 的 总 和 或 者说 每 个 安 全 对 象 自 身 包 含 了 一 个 为 充 当 某 个 角 色 而 设 计 的 单 元 在 W ind ow s NT 和 W ind ow s 95 / 98 的 许 多 地 方 微 软 主 要 选 用 C+ + 中 对 象 的 定 义 因 为作 为 M F C 的 一 部 分 它 提 供 了 所 需 的 机 能 然 而 在 阅 读 本 章 或 微 软 的 其 它 文档 时 你 不 应 该 把 对 象 看 成 是 一 个 严 格 的 C+ + 对 象 而 应 该 多 加 点 CO M 的 意识
知 道 了 所 有 东 西 都 是 对 象 后 我 们 将 更 容 易 理 解 安 全 性 这 至 少 是 一 个起 点 当 然 对 象 本 身 也 就 是 一 个 起 点 对 象 是 被 用 户 所 访 问 的 所 以 在 W ind ow s
中 安 全 性 是 指 将 对 象 所 受 的 保 护 与 用 户 的 访 问 权 进 行 比 较 如 果 用 户 拥 有 足够 的 访 问 权 访 问 权 等 于 或 超 过 对 象 所 受 的 保 护 则 用 户 能 够 使 用 这 个 对 象在 W indow s 的 文 档 中 将 对 象 所 受 保 护 的 级 别 称 作 安 全 描 述 符 s ecu r i ty de s c r ip tor 这 是 一 种 结 构 它 能 告 诉 安 全 系 统 用 户 需 要 什 么 样 的 权 力 才 能访 问 这 个 对 象 而 用 户 则 有 一 个 访 问 令 牌 A cce s s T o k e n 它 是 另 一 种 结 构 它 能 告 诉 安 全 系 统 在 一 个 给 定 的 位 置 用 户 有 什 么 样 的 访 问 权 用 户 将 访 问令 牌 交 给 W ind ow s N T 系 统 并 以 此 获 得 对 对 象 的 访 问 如 果 把 访 问 对 象 看作 是 一 辆 公 共 汽 车 把 W ind ow s N T 看 作 是 驾 驶 员 则 车 票 是 访 问 令 牌 的一 个 很 好 的 比 喻 乘 客 只 有 出 示 车 票 才 能 搭 车 图 14 .1 描 述 了 这 两 种 结 构
图 14 .1 访问令牌 定义了用户的 权利 而安全 描述符则定义 一个进程的保 护级别
以 上 你 只 是 稍 微 了 解 了 一 点 W ind ow s 95 / 9 8 或 W ind ow s N T 的 安 全 性
简 单 地 知 道 了 它 有 安 全 对 象 和 用 户 访 问 令 牌 这 与 帮 助 你 理 解 和 使 用 W ind ow s
安 全 AP I 函 数 还 相 差 很 远 在 下 面 几 节 中 我 们 将 细 致 地 学 习 访 问 令 牌 是 如 何工 作 的 我 们 也 将 关 注 一 下 安 全 描 述 符 如 果 你 只 是 对 In te rn e t 感 兴 趣 的 话 在你 使 用 A c tiv e X 实 施 安 全 性 时 可 以 完 全 不 必 懂 得 这 些 知 识 然 而 学 会 它将 会 帮 助 你 设 计 出 更 加 符 合 心 意 的 A c tiv e X 控 件
理 解 访 问 令 牌
在 W ind ow s 中 你 将 发 现 有 两 种 方 法 可 以 查 看 用 户 的 权 限 而 且 两 者 都 是通 过 这 样 或 那 样 的 形 式 与 对 象 关 联 的 用 户 的 访 问 令 牌 有 一 个 安 全 标 识 符 S ID 它 在 整 个 网 络 中 识 别 用 户 — — 它 就 像 是 一 个 帐 户 号 安 全 识 别 符 表 示 了 用 户 归 属 的 组 和 拥 有 的 优 先 权 每 个 组 也 有 一 个 安 全 识 别 符 所 以 用 户 的安 全 识 别 符 也 包 含 了 他 所 属 各 个 组 的 S ID 并 将 引 用 这 些 S ID 在 W ind ow s N T
下 要 想 改 变 用 户 访 问 令 牌 的 内 容 你 应 该 正 规 地 使 用 用 户 管 理 器
注 Windows NT 支 持 两 种 类 型 的 安 全 标 识 符 SID 用 户 SID 和 组 SID
那 么 访 问 令 牌 的 优 先 权 是 指 什 么 呢 首 先 是 用 户 拥 有 特 权 数 不 是 用 户所 归 属 的 组 的 数 目 而 是 指 访 问 令 牌 内 指 定 的 特 权 入 口 数 这 部 分 还 包 括 特 权入 口 的 阵 列 每 个 特 权 入 口 还 包 括 一 个 局 部 唯 一 的 标 识 符 LU ID 和 一 个 属 性掩 码 A trrib u te m a s k LU ID 实 质 上 是 一 个 指 向 对 象 的 指 针 而 属 性 掩 码 能表 述 用 户 对 对 象 的 权 力 组 的 安 全 识 别 符 也 与 此 雷 同 它 们 包 括 一 个 特 权 计 数和 特 权 入 口 的 阵 列
技 巧 现 在 你 可 以 去 看 看 Visual C++ 软 件 提 供 的 Windows AP I 帮 助 找一 找 与 安 全 标 识 符 或 访 问 令 牌 相 关 的 A P I 函 数 例 如 与 SID 相 关 的
函 数 包 括 CopySID 和 AllocateAn dInitializeSID 你 会 发 现OpenProces sToken 和 GetTokenIn formation 函 数 也 是 非 常 重 要 的它 能 在 任 何 语 言 下 保 证 应 用 程 序 安 全 正 常 工 作
高 级 技 巧
观 察 访 问 权 限 传 递
你 还 该 知 道 的 一 件 事 是 有 些 类 型 的 对 象 如 果 它 的 权 限 没 有 被 其 它SID 终 止 则 可 能 会 继 承 到 它 的 最 低 节 点 例 如 如 果 你 让 一 个 用 户对 硬 盘 的 \Temp 目 录 有 读 写 的 权 限 则 用 户 对 该 目 录 的 子 目 录
\Temp\Stuf f 也 有 相 同 的 权 限 除 非 你 分 配 给 这 个 子 目 录 别 的 权限 对 于 容 器 对 象 也 是 如 此 如 果 分 配 一 个 用 户 对 容 器 对 象 的 权 限 如 一 个 Word 文 档 则 它 允 许 用 户 查 看 这 个 容 器 下 的 所 有 内 容 很 多情 况 下 甚 至 还 有 别 的 文 件 由 此 看 来 因 为 你 可 能 会 不 经 意 地 分 配 给用 户 过 多 的 权 限 所 以 使 用 安 全 审 察 来 跟 踪 用 户 对 服 务 器 中 各 类 对 象的 确 切 权 限 是 非 常 重 要 的
使 用 访 问 令 牌
因 为 访 问 令 牌 函 数 是 你 实 施 安 全 性 前 必 须 了 解 的 第 一 个 难 点 下 边 就 让我 们 简 要 地 谈 论 一 下 W ind ow s 提 供 的 访 问 令 牌 函 数 对 用 户 的 帐 户 做 任 何 工作 哪 怕 是 找 出 谁 在 访 问 指 定 的 工 作 站 都 必 须 了 解 访 问 令 牌 正 如 前 面 所 讲
的 访 问 令 牌 是 安 全 等 式 用 户 方 的 中 心 部 分 在 对 一 个 用 户 的 帐 户 进 行 访 问 时你 几 乎 总 要 用 到 的 一 个 函 数 是 O p e n P roc e s s T oke n 请 注 意 这 个 函 数 的 名 字 它能 够 处 理 的 对 象 可 以 是 任 何 类 型 的 进 程 线 程 或 用 户 等 等 该 函 数 的 作 用 是 获取 附 加 在 这 个 进 程 上 的 令 牌 句 柄 例 如 如 果 你 查 询 一 个 用 户 的 帐 户 你 必 须有 T OKE N _ QUE R Y 优 先 权 你 的 访 问 令 牌 中 必 须 包 括 系 统 委 托 的 一 些 必 要的 权 限 这 就 是 为 什 么 管 理 员 能 访 问 某 个 令 牌 而 其 它 用 户 却 不 能 访 问 的 原 因 而 对 用 户 的 帐 户 要 做 任 何 改 动 时 你 必 须 拥 有 T OKE N _ AD JUS T _ P R IV IL E G E S 优 先 权 还 有 许 多 其 它 的 访 问 权 限 我 们 在 这 里 不 再 一 一 表 述 了
— 旦 你 拥 有 了 一 个 访 问 令 牌 的 句 柄 你 需 要 决 定 将 对 它 做 些 什 么 如 果 你想 改 变 用 户 做 某 事 的 优 先 权 则 你 将 需 要 这 个 优 先 权 的 局 部 唯 一 标 识 符
LU ID 所 有 这 些 优 先 权 在 W INNT . H 文 件 中 都 是 以 SE _ 开 头 的 例 如S E _ S Y S TEM _ P R O F ILE _ N A M E 优 先 权 允 许 你 收 集 这 个 系 统 的 配 置 信 息 有 些SE 的 值 与 用 户 无 关 例 如 S E _ L OC K _ M E M O R Y _ NAM E 特 权 允 许 进 程 锁 定 内存 中 的 物 理 页 面 通 过 调 用 L ookupP r iv ile g e V a lu e 函 数 你 可 以 获 取 对 应 局 部系 统 上 的 优 先 权 的 LU ID 一 般 而 言 你 将 使 用 A d ju s t T o ke nP r iv ile g e s 函 数 来 实现 你 所 需 要 的 修 改
注 在 WINNT.H 文 件 中 查 看 一 下 Windows NT 定 义 的 优 先 权 列 表 这 些 优先 权 是 你 能 修 改 的
查 询 用 户 帐 户 或 访 问 令 牌 的 其 它 信 息 是 直 接 了 当 的 你 可 以 调 用G e t T oke nInform a tio n 函 数 来 获 取 你 需 要 的 信 息 这 个 函 数 需 要 一 个 令 牌 类 参 数它 把 你 所 需 信 息 的 类 型 告 诉 W ind ow s 系 统 例 如 如 果 你 想 知 道 一 个 指 定 用 户
的 信 息 你 应 该 使 用 T oke nU s e r 类 参 数 你 也 将 需 要 提 供 相 应 的 结 构 以 让
W ind ow s 保 存 你 请 求 的 信 息 这 一 点 与 基 于 令 牌 类 的 请 求 不 一 样
了 解 安 全 描 述 符
现 在 让 我 们 来 关 注 一 下 安 全 描 述 符 在 图 14 .1 中 每 个 安 全 描 述 符 包 括 五个 主 要 的 部 分 第 一 部 分 是 一 个 标 志 列 表 这 些 标 志 指 明 了 描 述 符 的 版 本 号格 式 和 访 问 控 制 列 表 AC L 的 状 态
接 下 来 的 两 部 分 包 含 了 多 个 安 全 标 识 符 S ID 所 有 者 标 识 符 表 述 了 对 象的 拥 有 者 这 不 必 是 一 个 单 独 的 用 户 W ind ow s 也 允 许 你 在 这 里 使 用 组 的 S ID 有 一 点 是 受 限 制 的 即 组 的 S ID 必 须 出 现 在 想 要 改 变 入 口 的 人 的 访 问 令 牌 中 组 标 识 符 允 许 一 组 人 拥 有 某 个 对 象 这 两 种 标 识 符 中 只 有 所 有 者 标 识 符 在W ind ow s 下 是 重 要 的 组 的 标 识 符 作 为 一 个 部 分 用 于 M a c in tos h 和 PO S IX 的 安全 环 境
最 后 两 部 分 包 含 了 各 种 访 问 控 制 列 表 AC L 安 全 访 问 控 制 列 表 SA C L 控 制 了 W ind ow s 的 审 计 功 能 用 户 或 组 每 次 访 问 一 个 对 象 时 这 个 审 计 功 能 便启 动 了 W ind ow s 在 审 计 记 录 中 产 生 一 个 登 记 项 全 权 访 问 控 制 列 表 DAC L 控 制 了 谁 能 真 正 使 用 某 个 对 象 你 可 以 将 一 个 组 或 用 户 分 配 给 一 个 指 定 的 对 象
注 释 实 际 上 有 两 种 型 号 的 安 全 描 述 符 绝 对 安 全 描 述 符 和 自 身 安 全 关联 描 述 符 绝 对 安 全 描 述 符 在 它 的 结 构 中 包 含 了 每 个 A C L 的 真 正 拷贝 这 种 类 型 的 安 全 描 述 符 用 于 需 要 指 定 句 柄 的 对 象 而 自 身 关 联 安全 描 述 符 只 包 括 了 指 向 SACL 和 DACL 的 指 针 这 种 描 述 符 在 改 变 组 的
权 限 时 节 省 了 内 存 并 减 少 了 所 需 时 间 当 某 个 特 定 组 内 所 有 对 象需 要 同 一 级 别 的 安 全 性 时 你 应 该 使 用 它 来 处 理 例 如 通 过 这 种 方式 你 能 将 单 个 进 程 内 的 所 有 线 程 赋 予 安 全 性 在 你 要 保 存 安 全 描 述符 或 将 它 传 送 给 别 的 进 程 前 Windows 要 求 你 把 一 个 自 身 安 全 关 联 描述 符 转 换 成 绝 对 安 全 描 述 符 通 过 A P I 函 数 获 取 的 描 述 符 都 是 自 身 关联 类 型 的 你 必 须 在 保 存 它 之 前 将 其 转 换 通 过 对 MakeAbsolu teSD 和 MakeSelfRe lativeSD 两 个 API 函 数 的 调 用 你 可 以 在 这 两 种 类 型的 描 述 符 之 间 转 换
— 个 AC L 由 两 种 类 型 的 表 项 组 成 第 一 个 表 项 是 个 结 构 头 它 列 出 了 AC L 包 含 的 访 问 控 制 表 项 AC E S 个 数 W ind ow s 使 用 这 个 数 字 检 测 是 否 到 达 了 AC E 列 表 的 末 端 这 里 没 有 任 何 其 它 记 录 或 手 段 能 够 检 测 每 个 AC E 的 准 确 大 小
第 二 个 表 项 是 个 AC E 数 组
警 告 不 要 手 工 直 接 修 改 A C L 或 S I D 的 内 容 因 为 在 以 后 的 Windows 版 本中 微 软 可 能 改 变 它 们 的 结 构 Windows API 为 改 变 这 些 结 构 的 内 容提 供 了 丰 富 的 功 能 如 果 要 对 某 种 结 构 进 行 任 何 的 改 变 请 通 过 调 用A P I 函 数 来 实 现 以 免 不 必 要 的 冲 突
那 么 什 么 是 访 问 控 制 项 呢 AC E AC E 定 义 了 单 个 用 户 或 用 户 组 在 一 个对 象 上 的 权 限 每 个 AC E 由 三 部 分 组 成 首 先 是 一 个 结 构 头 它 定 义 了 这 个 AC E 的 类 型 大 小 和 一 些 标 志 接 着 是 一 个 访 问 标 志 它 定 义 了 一 个 用 户 或 组 对 这
个 对 象 的 权 限 最 后 是 用 户 或 组 的 安 全 访 问 标 识 符 S ID 的 项
— 共 有 四 类 AC E 头 其 中 有 三 类 已 用 于 当 前 的 W ind ow s 版 本 中 其 中acc es s - allo w e d 类 出 现 在 DAC L 中 它 认 可 用 户 的 权 限 你 可 以 使 用 它 增 加 用 户对 一 个 对 象 的 权 限 例 如 虽 然 你 想 通 过 禁 止 用 户 修 改 系 统 时 间 以 使 网 络 上所 有 机 器 的 时 间 同 步 但 白 天 还 是 可 以 修 改 时 间 而 用 户 需 要 有 这 个 权 限 你可 以 通 过 使 用 一 个 acc es s - allo w e d 类 的 AC E 来 给 予 用 户 改 变 时 间 的 权 限 另 一类 是 acc es s - d e n ied 类 它 废 除 用 户 对 某 一 对 象 的 权 限 在 一 个 指 定 的 系 统 事 件中 你 能 够 使 用 它 来 拒 绝 对 某 一 对 象 的 访 问 例 如 当 你 对 某 一 远 程 终 端 进 行某 些 更 新 时 你 可 以 取 消 其 他 人 对 它 的 访 问 权 限 还 有 一 类 是 sys te m - a u d it 类AC E 它 与 SA C L 一 起 作 用 它 定 义 了 指 定 的 用 户 对 哪 些 事 件 进 行 审 查 当 前还 未 使 用 的 是 系 统 警 报 AC E 它 允 许 SA C L 或 DAC L 设 置 一 个 指 定 事 件 发 生 时的 警 报
注 在 当 前 的 Windows N T 版 本 中 使 用 的 三 类 访 问 控 制 项 ACE 是access-all owed access-den ied 和 system aud it
技 巧 现 在 你 可 以 翻 阅 一 下 Windows AP I 的 帮 助 文 件 看 看 Windows 提供 了 什 么 类 型 的 访 问 权 限 为 了 获 得 这 些 信 息 你 应 该 更 关 注 各 种 类结 构 尤 其 是 ACL 和 ACE 的 结 构 看 看 ACE 标 志 它 决 定 了 在 一 个 容器 下 的 对 象 是 如 何 作 用 的 例 如 查 一 下 CONTAINER_ INHERIT_ACE 常数 它 允 许 子 目 录 继 承 父 目 录 的 安 全 特 性
使 用 安 全 描 述 符
到 现 在 你 只 是 了 解 了 什 么 是 安 全 描 述 符 以 及 它 包 含 的 各 类 结 构 是 如 何相 互 作 用 的 你 还 应 该 知 道 怎 样 开 始 一 个 实 际 的 访 问 进 程 并 使 用 安 全 描 述 符来 写 一 个 程 序 你 必 须 首 先 了 解 的 是 安 全 描 述 符 不 同 于 访 问 令 牌 它 没 有 普及 开 所 以 你 不 能 使 用 一 个 标 准 的 函 数 集 来 访 问 它 们 实 际 上 一 共 有 五 类 安全 描 述 符 每 类 安 全 描 述 符 都 使 用 不 同 的 函 数 集 来 访 问 对 象 你 必 须 拥 有S E _ S E C UR IT Y _ N A M E 特 权 才 能 使 用 这 些 函 数
注 Windows NT 支 持 五 类 安 全 描 述 符 每 类 都 需 要 不 同 的 函 数 集 来 访 问 描述 符
文 件 目 录 管 道 和 邮 件 槽 通 过 使 用 G e t F ileS ecu r ity 和 S e t F i leS ec u r ity
函 数 可 以 访 问 这 种 类 型 的 对 象
注 释 只 有 Windows NT 下 的 NTFS 文 件 系 统 提 供 了 安 全 特 性 Windows 95/98 下 的 VFAT 文 件 系 统 只 提 供 了 很 少 的 安 全 特 性 你 不 能 从 HPFS 或 FAT 文 件 系 统 中 分 配 或 获 取 安 全 描 述 符 F A T 文 件 系 统 没 有 提 供 任 何 扩 展属 性 的 空 间 而 这 些 空 间 是 增 加 安 全 性 所 必 须 的 HPFS 文 件 系 统 虽然 提 供 了 扩 展 属 性 但 它 们 没 有 任 何 安 全 特 性 在 上 述 的 这 些 文 件 系统 中 NTFS 是 最 安 全 的 然 而 不 要 错 误 地 认 为 会 有 完 全 安 全 的 文件 系 统 在 Internet 上 有 一 些 应 用 程 序 能 够 读 取 NTFS 分 区 的 内 容即 便 用 户 没 有 正 确 地 登 录 到 Window NT 中
要 访 问 进 程 线 程 访 问 令 牌 和 同 步 对 象 你 必 须 使 用
G e t K ern e l O b jectS ecu r i ty 和 S e t K ern e l O b ject S ecu r ity 函 数 所 有 的 这 些 对象 都 是 内 核 对 象 为 了 更 好 地 保 护 这 些 对 象 它 们 也 都 有 自 己 的 安 全 描述 符
要 访 问 W ind ow s 站 点 桌 面 窗 口 和 菜 单 你 可 以 使 用G e t U s e r O b ject S ecu r ity 和 S e t U s e r O b ject S e cu r ity 函 数 一 个 W in dow s 站点 包 括 键 盘 鼠 标 和 屏 幕 即 你 用 来 访 问 系 统 的 所 有 硬 件 桌 面 包 括 窗口 和 菜 单 这 四 个 对 象 按 此 次 序 依 次 从 前 一 个 对 象 继 承 权 限 也 就 是 说桌 面 将 继 承 站 点 的 权 限
要 访 问 系 统 注 册 键 你 必 须 使 用 R e g G et K e y S ecu r ity 和 R e g S etK e yS ec u r ity
函 数 注 意 W ind ow s 提 供 的 所 有 注 册 类 的 函 数 都 是 以 R e g 开 头 的
可 执 行 服 务 对 象 Q u eryS erv ic e O b jectS e c u r i ty 和 S e t S erv ice O b je c t S ecu r i ty 函 数 用 于 可 执 行 的 服 务 对 象 奇 怪 的 是 在 W ind ow s 的 AP I 帮 助 文 件中 这 两 个 函 数 都 没 有 出 现 在 其 它 安 全 函 数 的 引 用 中 你 在 寻 找 这 些 函数 之 前 必 须 已 知 道 有 这 么 两 个 函 数 可 执 行 服 务 是 W ind ow s 提 供 的 后台 任 务 如 UP S 的 监 视 功 能 通 过 双 击 控 制 面 板 中 的 服 务 程 序 你 将找 到 你 的 系 统 所 支 持 的 服 务
— 旦 你 获 得 对 某 个 对 象 的 访 问 权 限 你 将 发 现 通 过 使 用 一 般 的 AP I 函 数集 你 便 能 够 处 理 很 多 任 务 例 如 G e tS e c u rity D e s c rip to r D A C L 能 够 从 任 何 类的 描 述 符 中 获 取 一 份 DAC L 的 拷 贝 换 句 话 说 这 些 对 象 的 描 述 符 跟 随 一 个 同样 的 格 式 — — 即 便 大 部 分 成 分 的 描 述 符 长 度 不 同 导 制 这 些 长 度 不 同 的 原 因 之一 是 它 们 各 自 包 含 了 不 同 数 量 的 访 问 控 制 项 AC E 另 外 安 全 标 识 符 S ID
的 长 度 也 不 同
要 查 询 或 修 改 一 个 安 全 描 述 符 的 下 一 步 工 作 是 分 离 这 些 成 分 例 如 通 过使 用 G ETA C E A P I 函 数 你 能 够 查 看 在 一 个 DAC L 或 SA C L 中 单 独 的 AC E 通 过 使 用 与 S ID 相 关 的 函 数 你 也 可 以 使 用 所 有 者 标 识 符 或 组 标 识 符 我 们 已经 在 本 章 的 访 问 令 牌 部 分 阐 述 了 这 些 函 数 可 以 满 意 地 说 只 要 按 指 定 的 步骤 做 你 便 能 够 使 用 一 般 的 函 数 集 来 操 作 安 全 描 述 符 大 致 上 说 对 安 全 描 述符 的 任 何 访 问 一 般 都 要 经 过 下 述 三 个 步 骤
1. 获 取 描 述 符 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
要 修 改 安 全 描 述 符 你 应 该 按 相 |
反 方 向 执 行 |
这 |
些 |
步 |
骤 |
换 而 |
言 |
之 |
你 |
先 |
使 |
用 类 似 A ddA C E 函 数 来 增 加 一 个 新 的 AC E 至 一 个 AC L 然 后 使 用S e tS e c u rity D e s c rip to r S A C L 来 改 变 一 个 描 述 符 中 的 SA C L 最 后 使 用 类 似S e t F ileS ecu r ity 的 函 数 假 设 你 想 要 修 改 一 个 文 件 对 象 来 保 存 安 全 描 述 符
Windows 中 的 ACEing 安 全 性
当 你 开 始 考 虑 W ind ow s 在 DAC L 中 计 算 AC E 的 方 法 时 你 也 许 会 发 现 一 些潜 在 的 存 在 问 题 的 地 方 虽 然 W ind ow s 的 系 统 应 用 程 序 会 自 动 关 注 这 些 问 题但 你 必 须 在 自 己 应 用 程 序 中 编 制 好 了 才 能 运 算 出 同 样 的 结 果 SA C L 也 有同 样 的 问 题 但 它 只 是 影 响 审 查 从 系 统 安 全 的 角 度 看 它 不 是 那 么 要 求 苛 刻的
W indow s 是 按 照 AC E S 在 AC L 中 出 现 的 次 序 来 计 算 访 问 控 制 结 果 的 首
先 它 可 能 不 是 一 个 很 好 算 法 而 且 在 某 些 情 况 下 它 还 会 产 生 一 些 问 题 例如 如 果 你 想 废 除 所 有 用 户 对 某 一 区 域 的 权 限 但 是 在 他 或 她 的 访 问 控 制 列 表中 包 含 了 一 个 能 够 访 问 这 一 区 域 的 组 即 他 或 她 是 这 一 组 的 成 员 这 种 情 况的 结 果 会 如 何 呢 如 果 你 将 acc es s - allo w e d 访 问 项 放 在 列 表 的 第 一 位 则 这 个用 户 将 能 够 访 问 这 一 区 域 — — 一 旦 W ind ow s 发 现 第 一 个 满 足 用 户 所 需 权 限 的AC E 时 或 者 一 个 禁 止 所 需 的 权 限 的 AC E 时 它 将 停 止 继 续 搜 寻 许 可 的权 限 是 累 加 的 如 果 一 个 AC E 允 许 对 一 个 文 件 进 行 读 的 权 限 而 另 一 个 允 许 写的 权 限 则 当 用 户 询 问 读 和 写 的 权 限 时 W ind ow s 将 综 合 这 两 个 AC E 并 允 许用 户 进 行 读 写 下 面 的 注 中 表 示 你 应 该 将 所 有 acc es s - d e n ied 访 问 控 制 项 放 置 列表 前 端 以 防 止 安 全 上 的 潜 在 漏 洞
注 A C E 在 A C L 中 排 列 的 先 后 次 序 是 非 常 重 要 的 因 为 Windows 按 次 序 对它 们 求 值 并 一 旦 发 现 第 一 个 A C E 允 许 或 拒 绝 对 某 一 对 象 的 访 问 时 便停 止 继 续 搜 索
你 也 必 须 注 意 组 的 安 全 标 识 符 S ID 的 排 列 次 序 因 为 用 户 从 他 或 她 所 属 的 组 获 取 的 权 限 是 相 累 加 的 这 意 味 着 如 果 一 个 用 户 属 于 两 个 组 其 中一 个 组 对 某 个 文 件 有 访 问 的 权 限 而 另 一 个 没 有 假 如 允 许 访 问 的 组 在 列 表 中 排列 在 前 那 么 用 户 可 以 访 问 这 个 文 件 否 则 不 能
显 而 易 见 为 了 将 组 排 列 成 最 好 的 次 序 你 将 花 费 很 多 的 时 间 当 用 户 拥有 的 组 的 权 限 和 独 立 的 权 限 数 增 加 时 则 可 能 出 现 无 意 识 的 安 全 漏 洞 所 以仔 细 地 创 建 一 个 组 并 严 格 限 制 用 户 单 独 的 权 限 是 非 常 重 要 的
其 它 安 全 考 虑
当 你 关 注 在 W ind ow s 95 / 9 8 或 W ind ow s N T 下 的 安 全 性 时 还 有 两 方 面 需要 考 虑 数 据 保 护 和 服 务 器 保 护 前 者 对 付 客 户 的 这 种 能 力 当 客 户 通 过 服 务器 这 里 不 是 指 文 件 服 务 器 而 是 某 些 类 型 的 DDE 或 其 它 应 用 服 务 访 问 数据 时 访 问 了 那 些 没 有 获 准 访 问 的 数 据 我 们 用 这 种 方 式 思 考 一 下 如 果 客 户对 某 一 指 定 类 型 的 数 据 没 有 访 问 权 限 但 是 通 过 调 用 他 有 权 访 问 的 DDE 服 务 器访 问 了 这 些 数 据 这 将 会 有 什 么 后 果 呢 服 务 器 又 应 该 如 何 保 护 它 们 的 数 据 而 不 是 被 迫 成 为 造 成 安 全 破 坏 的 同 谋 呢
W indow s 提 供 了 一 些 AP I 函 数 允 许 服 务 器 模 仿 一 个 客 户 大 体 上 是 为 了检 测 出 客 户 是 否 对 一 个 数 据 或 进 程 有 过 多 的 权 限 这 些 函 数 允 许 一 个 服 务 器 假扮 成 客 户 所 受 的 安 全 限 制 例 如 W ind ow s 的 一 个 W o rd 用 户 可 能 需 要 访 问 Ex c e l 的 一 个 数 据 文 件 而 这 个 用 户 可 以 通 过 DDE 来 获 得 这 个 文 件 的 访 问 在 这 种 情况 下 服 务 器 需 要 检 测 一 下 这 个 用 户 是 否 有 权 访 问 这 个 文 件 然 后 才 传 送 所 需的 数 据 当 用 户 使 用 这 种 技 术 时 服 务 器 甚 至 能 找 出 客 户 的 优 先 权 服 务 器 唯一 关 心 的 是 对 它 所 管 理 的 数 据 资 源 和 环 境 的 保 护
这 个 AP I 函 数 集 支 持 三 种 不 同 类 型 的 通 信 DDE 命 名 管 道 和 RP C S 对每 种 通 信 类 型 你 必 须 使 用 不 同 的 AP I 函 数 例 如 要 模 仿 一 个 DDE 客 户你 应 该 使 用 D D E Im pe rs ona te C l ie nt 函 数 W indow s 目 前 在 模 仿 这 方 面 所 提 供 的支 持 还 有 一 些 限 制 例 如 它 现 在 还 不 支 持 TC P / IP 连 接 所 以 在 这 种 情 况 下 你 必 须 依 靠 别 的 手 段 来 检 测 一 个 用 户 是 否 有 合 适 的 访 问 权 限
另 一 个 安 全 考 虑 是 如 何 保 护 服 务 器 自 身 在 一 个 W ind ow s W o rd 用 户 调 用
Ex c e l 服 务 时 用 什 么 方 法 来 防 止 这 个 用 户 对 E x cel 服 务 器 本 身 进 行 破 坏 呢 请确 信 对 文 件 和 其 它 有 名 字 的 结 构 服 务 器 自 动 会 附 加 上 一 个 安 全 描 述 符 到 这些 对 象 上 并 进 行 严 格 的 保 护 一 个 DDE 服 务 器 如 Ex c e l 在 这 种 情 况 下 不需 要 任 何 安 全 描 述 符 因 为 文 件 已 在 文 件 服 务 器 的 控 制 之 下 然 而 大 多 数DDE 或 应 用 服 务 器 的 私 有 对 象 没 有 命 名 它 们 需 要 另 外 的 保 护 W ind ow s 也 提供 了 一 些 AP I 函 数 来 帮 助 服 务 器 保 护 自 身 例 如 C reateP r iv a te O b je c t S e cu r ity 函 数 允 许 服 务 器 附 加 安 全 描 述 符 到 它 的 任 何 私 有 对 象 上 如 线 程 或 其 它 进程 这 些 安 全 描 述 符 能 够 防 止 除 服 务 器 外 任 何 人 访 问 其 私 有 对 象
私 有 通 信 技 术 PCT
微 软 和 IETF 正 携 手 开 发 一 个 名 叫 PC T 的 新 的 底 层 协 议 和 安 全 套 接 层 SSL 一 样 PC T 是 用 来 防 止 黑 客 窃 听 服 务 器 和 客 户 间 的 通 信 的 它 通 过 加 密 身 份 认 证 和 数 字 签 名 技 术 来 实 现 通 信 的 安 全 性 由 于 可 以 使 用 SSL 所 以
客 户 身 份 认 证 可 以 根 据 需 要 进 行 选 择
Web 链 接 如 果 想 了 解 有 关 P C T 当 前 的 进 展 情 况 请 访 问http ://www .lne.co m/
eric m/pct.html 这 个 文 档 中 包 括 了 P C T 的 第 二 个 版 本 的 当 前 草 案另 外 通 过 访 问 http://www .w3.org/security/ 你 也 可 以 参 考 一 下W 3 C 的 W e b 站 点 上 有 关 当 前 Internet 安 全 技 术 的 详 细 情 况 其 中 包括 PCT 和 SSL
P C T 假 设 你 有 一 个 可 靠 的 传 输 协 议 它 能 取 代 类 似 TC P 的 协 议 有 些 人 把TC P / IP 看 成 是 一 种 唯 一 的 协 议 但 这 是 错 误 的 TC P 只 是 这 些 协 议 中 的 传 输 部分 而 IP 才 是 数 据 传 输 部 分 IP 不 支 持 任 何 形 式 的 数 据 加 密 所 以 当 你 使 用TC P / IP 时 你 的 数 据 对 任 何 想 看 它 的 人 都 是 开 放 的 使 用 如 T C P /PC T 或 T C P /SSL 协 议 将 使 你 的 通 信 安 全 化 PC T 的 第 一 个 版 本 修 正 了 在 SSL 中 出 现 的 一 些 问 题现 陈 述 如 下
简 化 了 的 消 息 和 记 录 结 构 如 果 你 没 有 使 用 客 户 身 份 验 证 那 么 会 话 的重 新 连 接 在 每 个 地 址 上 需 要 一 个 唯 一 的 消 息 即 便 使 用 客 户 身 份 验 证重 新 连 接 在 每 个 地 址 上 也 只 需 要 两 个 消 息
扩 展 的 加 密 算 法 PC T 提 供 了 比 SSL 更 丰 富 的 算 法 这 意 味 着 它 能 支 持更 广 阔 的 协 议 特 性 而 且 这 些 协 议 特 性 的 交 涉 是 相 互 独 立 的 例 如 公共 特 性 包 括 加 密 类 型 服 务 验 证 类 型 散 列 函 数 类 型 和 密 钥 字 交 换 类 型改 进 的 消 息 验 证 密 钥 在 PC T 中 消 息 验 证 密 钥 和 加 密 密 钥 是 相 互 独立 的 这 意 味 着 即 便 加 密 密 钥 是 短 的 或 不 存 在 的 只 要 消 息 能 使 用 一个 很 长 的 密 钥 也 能 保 证 传 输 的 安 全 导 制 这 一 特 性 的 主 要 原 因 是 因为 美 国 政 府 把 管 理 安 全 传 输 的 密 钥 限 定 为 最 长 为 40 位
修 补 了 安 全 漏 洞 PC T 在 会 话 中 的 客 户 身 份 验 证 是 基 于 加 密 算 法 的 这防 止 了 某 些 人 通 过 捕 获 客 户 的 验 证 密 钥 并 切 断 原 客 户 的 会 话 而 使 用窃 取 的 密 钥 来 建 立 重 新 连 接 客 户 只 有 知 道 了 密 文 和 密 钥 才 能 获 得 服务 器 的 访 问
附 加 的 提 前 检 验 区 域 客 户 和 服 务 器 在 最 初 的 握 手 对 话 过 程 中 其 通 信
是 透 明 的 这 个 附 加 的 区 域 使 得 客 户 和 服 务 器 可 以 检 测 在 这 种 通 信 中 可能 出 现 的 任 何 损 害
注 释 虽 然 S S L 在 版 本 3 中 也 提 供 了 提 前 检 验 区 域 但 黑 客 也 能 够 通 过 将协 议 版 本 号 修 改 成 2 来 绕 过 它 因 为 版 本 2 中 没 有 提 供 这 一 功 能 而版 本 3 完 全 兼 容 版 本 2 所 以 客 户 和 服 务 器 都 不 会 注 意 到 这 个 变 化
微 软 当 前 正 在 开 发 PC T 的 第 二 个 版 本 这 个 版 本 与 第 一 个 版 本 完 全 兼 容但 提 供 第 一 个 版 本 所 不 具 有 的 几 个 重 要 特 性 以 下 是 这 些 特 征 的 简 单 概 述
新 的 数 据 报 记 录 类 型 单 独 的 记 录 作 为 数 据 报 独 立 地 发 送 从 本 质上 看 这 意 味 着 协 议 不 会 保 证 数 据 发 送 的 次 序 或 到 达 目 的 地 址 的 次 序这 要 求 客 户 将 接 收 到 的 数 据 进 行 排 序 然 后 检 验 它 们 是 否 全 部 到 达 这种 方 法 的 最 大 好 处 是 提 高 了 传 输 速 度
可 重 新 识 别 的 记 录 类 型 记 录 的 头 包 含 了 一 些 信 息 它 告 诉 接 收 者 将 接收 什 么 类 型 的 记 录
连 续 记 录 PC T 版 本 1 中 允 许 数 据 跨 越 多 个 记 录 即 便 是 记 录 头 没 有 指明 连 续 的 任 何 形 式 版 本 2 的 记 录 头 中 增 加 了 连 续 区 它 也 允 许 协 议 信息 跨 越 多 个 记 录
数 据 记 录 的 中 间 处 理 数 据 记 录 是 封 装 的 它 允 许 发 送 者 对 数 据 做 一 些中 间 处 理 比 如 压 缩
数 据 报 记 录 的 独 立 解 密 由 于 发 送 的 数 据 报 记 录 可 能 会 通 过 一 个 不 可 靠的 传 输 通 道 所 以 这 部 分 特 性 对 安 全 通 信 是 非 常 重 要 的 每 个 记 录 分 别加 密 使 得 接 收 者 可 以 立 即 对 数 据 报 解 密 而 不 管 接 收 数 据 报 是 否 打 乱
了 次 序
新 的 密 钥 管 理 记 录 类 型 这 个 记 录 类 型 允 许 发 送 者 在 会 话 中 临 时 改 变 加密 或 消 息 验 证 密 钥 重 要 的 是 这 允 许 了 PC T 来 传 送 预 先 加 密 的 数 据新 的 关 闭 连 接 密 钥 管 理 消 息 这 是 一 个 特 定 的 消 息 它 告 诉 其 它 参 与 者关 闭 连 接 因 为 这 个 消 息 是 加 密 的 所 以 黑 客 很 难 发 送 一 条 伪 装 的 消 息来 关 闭 这 些 连 接
增 强 型 消 息 验 证 消 息 验 证 现 在 也 包 括 了 记 录 头
改 进 的 握 手 协 议 客 户 和 服 务 器 端 的 验 证 都 包 括 了 更 加 丰 富 的 选 项 其中 有 密 钥 交 换 签 名 公 共 密 钥 和 证 书
新 的 私 有 验 证 特 性 这 个 特 性 允 许 客 户 和 服 务 器 使 用 预 先 一 致 共 享 的 私有 密 钥 进 行 验 证 而 不 是 使 用 公 共 密 钥
既 然 我 们 对 PC T 有 了 一 些 基 本 的 了 解 那 就 让 我 们 看 看 PC T 是 如 何 工 作的 PC T 使 用 可 变 长 度 的 记 录 作 为 通 信 的 方 法 每 个 记 录 包 括 一 个 记 录 头 它定 义 了 记 录 内 的 信 息 类 型 一 共 有 两 类 信 息 应 用 信 息 和 协 议 信 息 应 用 信 息总 是 包 含 数 据 它 们 可 以 用 标 准 的 PC T 格 式 或 数 据 报 格 式 协 议 信 息 包 含 了 密钥 管 理 错 误 或 握 手 信 息 PC T 使 用 两 种 附 加 的 层 记 录 总 是 使 用 一 个 连 接 传送 客 户 和 服 务 器 间 一 般 只 有 一 个 连 接 但 没 有 任 何 理 由 不 能 有 更 多 的 连 接每 个 连 接 只 是 会 话 的 一 部 分 再 强 调 一 次 虽 然 你 一 般 只 能 看 到 客 户 和 服 务 器间 的 一 个 会 话 但 你 确 实 可 以 用 多 个 会 话 多 会 话 可 能 需 要 客 户 和 服 务 器 间建 立 多 个 物 理 连 接
P C T 协 议 的 连 接 由 一 个 握 手 信 号 开 始 这 就 是 握 手 管 理 消 息 类 型 开 始 工 作
的 地 方 客 户 和 服 务 器 交 换 多 个 信 息 首 先 是 连 接 会 话 密 钥 的 握 手 或 者 说 是客 户 和 服 务 器 决 定 一 个 用 于 相 互 对 话 的 保 密 字 此 时 客 户 和 服 务 器 也 彼 此 进行 验 证 如 果 彼 此 认 为 对 方 不 可 信 时 便 不 会 进 行 这 种 握 手 一 旦 客 户 和 服 务器 都 认 为 对 方 可 信 时 它 们 便 约 定 好 了 一 个 用 于 信 息 加 密 的 主 密 钥
HTTP 上 的 Windows NT 认 证
W indow s N T 的 认 证 一 般 不 是 编 程 者 要 考 虑 的 问 题 更 重 要 的 是 网 络 设 置时 要 考 虑 的 问 题 但 作 为 程 序 员 你 确 实 应 该 了 解 一 下 认 证 问 题 特 别 是 如 果你 计 划 使 用 In te rn e t 或 In tran et 工 作 时 更 是 如 此 W indow s N T 现 在 支 持 两 种 基本 类 型 的 认 证 虽 然 没 有 任 何 东 西 阻 止 一 些 人 使 用 其 它 方 法
技 巧 如 果 你 想 使 用 Windows NT 的 质 问 / 回 答 challenge/ response 特性 你 必 须 使 用 Internet E xplorer 2.0 或 更 高 版 本 的 浏 览 器 其 它浏 览 器 当 前 还 不 支 持 这 种 实 施 安 全 特 性 的 方 法
第 一 种 认 证 的 方 法 是 W ind ow s N T 的 质 问 / 回 答 这 种 认 证 方 法 依 赖 于 服 务器 和 客 户 密 钥 的 通 信 而 没 有 用 户 输 入 的 任 何 形 式 在 客 户 初 始 登 录 到 系 统 时服 务 器 要 求 客 户 输 入 用 户 名 和 保 密 字 客 户 提 供 一 个 特 殊 加 密 的 用 户 名 和 保 密字 他 还 必 须 提 供 一 个 域 名 因 为 客 户 必 须 在 服 务 器 的 域 内 或 在 一 个 服 务 器 所信 任 的 域 内 由 于 W ind ow s N T 的 质 问 / 回 答 在 客 户 和 服 务 器 间 自 动 使 用 加 密 通信 所 以 它 比 服 务 器 提 供 的 基 本 认 证 更 加 安 全
注 Windows NT 提 供 的 两 种 形 式 的 认 证 是 基 本 认 证 和 质 问 / 回 答 使 用 质 问
/ 回 答 认 证 是 最 安 全 的
Web 链 接 有 时 你 顺 手 便 可 阅 读 到 有 关 Windows NT 针 对 Internet 安 全性 方 面 的 信 息 其 中 一 个 信 息 源 是 Rick 的 Windows NT 信 息 中 心 即http://ric k.wzl.rwth-aachen.de /cgi-bin/isindex3.cm d 这 个W e b 站 点 涉 及 的 一 些 内 容 是 你 在 微 软 的 用 户 手 册 中 所 看 不 到 的 例如 你 将 学 会 怎 样 使 用 Windows NT 的 各 类 第 三 方 产 品 在 微 软 的 方案 中 没 有 预 先 考 虑 到 时 有 些 知 识 很 值 得 学 习
那 么 客 户 是 如 何 知 道 需 要 发 送 用 户 名 和 保 密 字 到 服 务 器 的 呢 服 务 器 要 求这 些 信 息 作 为 头 的 一 部 分 实 际 上 服 务 器 发 送 了 一 个 错 误 信 息 401 A c c e s s D e n ie d 即 访 问 拒 绝 它 告 诉 用 户 需 要 一 个 安 全 访 问 浏 览 器 中 实 际 上 没 有 包括 从 服 务 器 来 的 所 有 信 息 懂 得 这 一 点 是 很 重 要 的 因 为 你 在 浏 览 器 中 看 到 的只 是 服 务 器 想 要 你 看 到 的 信 息 它 已 经 过 浏 览 器 筛 去 了 头 信 息 例 如 服 务 器一 般 必 须 告 诉 浏 览 器 它 正 接 收 什 么 类 型 的 信 息 这 样 如 果 需 要 的 话 浏 览 器 便能 够 激 活 一 个 帮 助 知 道 有 这 些 头 信 息 对 你 了 解 在 客 户 和 服 务 器 间 的 动 态 数据 传 输 是 非 常 重 要 的
警 告 如 果 你 在 你 的 站 点 上 选 择 基 本 认 证 方 式 来 实 施 安 全 性 你 必 须 使 用S S L 来 确 保 用 户 名 和 保 密 字 传 输 的 安 全 性 否 则 这 些 信 息 很 容 易 被 人破 解 并 利 用 它 获 得 你 的 站 点 的 访 问
第 二 种 方 法 依 赖 于 诸 如 SSL 的 数 字 签 名 技 术 实 质 上 W ind ow s N T 将 需要 一 个 从 客 户 机 来 的 数 字 认 证 客 户 也 需 要 W ind ow s N T 的 数 字 认 证 这 些 数
字 认 证 可 以 从 第 三 方 厂 家 如 V e r i S ig n 获 得 它 能 够 保 证 双 方 的 一 致 性 我们 将 会 在 本 章 的 另 一 节 中 看 到 数 字 签 名 技 术 的 确 切 过 程 你 现 在 应 该 知 道 的 是数 字 签 名 是 一 种 安 全 手 段 它 能 够 标 识 试 图 访 问 你 机 器 的 另 一 方
当 使 用 SSL 时 实 质 上 是 W ind ow s N T 服 务 器 需 要 客 户 的 标 识 W ind ow s N T 所 获 取 的 是 由 第 三 方 厂 家 如 V e r i S ig n 发 布 的 认 证 和 随 同 的 一 个 公 共 的 密 钥SSL 在 进 行 认 证 时 一 共 有 以 下 六 个 步 骤
-
客
户 发 送 给 W ind ow s N T 一 个 没 有 加 密 的 随 机 消 息 并 伴 随 一 个 它 的V e r i S ig n 发 布 的 认 证 它 包 含 了 客 户 的 公 共 密 钥 V e r i S ig n 发 布 的 认 证 是 使用 V e r i S ig n 的 公 共 密 钥 加 密 的 因 为 每 人 都 有 V e r i S ig n 的 公 共 密 钥 所 以W ind ow s N T 能 够 将 整 个 认 证 解 开 并 准 确 地 检 查 它 同 样 没 有 人 能 够 伪 造 一个 他 们 自 己 的 公 共 密 钥 他 们 必 须 从 V e r i S ig n 那 里 获 得
-
一
旦 W ind ow s N T 确 认 它 从 客 户 那 里 接 收 到 了 一 个 有 效 的 证 书 和 公 共 的密 钥 它 将 告 诉 客 户 发 送 一 个 它 最 开 始 发 送 的 消 息 的 加 密 版 本
-
客
户 计 算 机 计 算 原 始 随 机 消 息 的 摘 要 然 后 使 用 公 共 密 钥 对 它 进 行 加 密
-
W
indow s N T 使 用 客 户 的 公 共 密 钥 对 这 个 摘 要 进 行 解 密
-
W
indow s N T 将 解 开 的 摘 要 和 客 户 原 始 发 送 的 随 机 消 息 进 行 对 比
-
如
果 两 个 摘 要 匹 配 这 个 客 户 便 认 证 成 功
在 这 里 你 可 能 会 关 心 与 管 理 员 有 关 的 问 题 虽 然 W ind ow s N T 自 身 提 供了 这 两 种 内 建 的 方 法 来 控 制 服 务 器 的 访 问 但 它 并 不 阻 止 你 创 建 IS A P I 过 滤 器来 扩 编 或 替 代 这 种 标 准 的 安 全 机 制 我 们 在 第 13 章 看 到 了 一 些 非 常 基 本 的 过 滤器 但 你 也 可 以 干 脆 使 用 其 它 的 方 法 你 所 应 该 做 的 就 是 监 视 那 些 由 服 务 器 产
生 的 安 全 事 件 这 些 事 件 中 最 关 键 的 是 客 户 的 认 证 请 求 在 监 视 客 户 认 证 请 求过 程 中 允 许 你 增 加 任 何 必 要 的 措 施 来 确 认 谁 在 访 问 你 的 站 点
注 ISAPI 过 滤 器 允 许 你 改 变 W e b 服 务 器 认 证 用 户 的 方 法
使 用 数 字 签 名
要 精 通 数 字 签 名 的 技 术 是 比 较 困 难 的 虽 然 可 以 做 到 但 很 少 有 人 愿 意 去 尝试 你 首 先 必 须 懂 得 的 是 数 字 签 名 也 可 以 看 成 是 授 予 证 书 你 可 以 把 它 想 象成 驾 驶 执 照 因 为 它 们 之 间 有 类 似 的 功 能 数 字 签 名 能 标 识 一 些 In te rn e t 对 象以 及 创 建 它 的 人 和 创 建 的 时 间 也 能 潜 在 地 提 供 很 多 其 它 信 息 如 果 这 个 对 象正 好 是 客 户 或 服 务 器 数 字 签 名 将 显 示 对 象 的 当 前 拥 有 者 和 驾 驶 执 照 一 样 数 字 签 名 也 有 过 期 的 时 候 — — 它 迫 使 提 供 商 不 断 地 实 现 它 们 的 承 诺 这 些 过 期的 数 据 也 使 得 黑 客 在 篡 谋 窃 取 证 书 上 浪 费 许 多 无 用 的 时 间 因 为 每 个 证 书 都 是一 个 分 立 的 条 款 所 以 黑 客 只 学 会 如 何 窃 取 其 中 之 一 是 没 什 么 用 的 使 用 数
字 签 名 将 帮 助 人 们 保 持 诚 实 因 为 它 迫 使 每 个 人 通 过 一 个 中 心 核 查 点 在 In te rn e t 上 使 用 数 字 签 名 做 期 货 交 易 还 避 免 了 一 大 堆 的 问 题 它 不 依 赖 于 某 个 人 来 维护 机 器 的 安 全 性 现 在 你 可 直 接 对 那 些 获 得 访 问 的 人 进 行 投 资 这 也 意 味 着 要对 用 户 做 某 些 级 别 的 训 练 让 他 们 真 正 学 会 如 何 去 使 用 这 个 特 性
注 虽 然 代 码 符 号 处 理 将 在 这 一 节 的 下 载 Internet 部 件 部 分 进 行 讲 述 现 在 还 不 是 数 字 签 名 但 最 终 也 将 合 并 到 数 字 签 名 中 来
实 施 数 字 签 名 是 非 常 直 接 而 简 单 的 尤 其 是 对 客 户 端 在 大 多 数 情 况 下商 家 提 供 了 标 准 的 证 书 它 能 被 所 有 浏 览 器 或 服 务 器 所 识 别 但 在 授 予 证 书 的
实 际 过 程 中 它 们 使 用 的 方 式 却 有 不 同 例 如 在 图 14 .2 中 的 W e b 页 中 便 显示 了 其 中 的 一 个 潜 在 的 问 题 如 果 你 想 要 获 得 一 个 客 户 的 证 书 你 将 选 择 哪 个等 级 呢 因 为 C la s s 1 D ig ita l ID 证 书 的 价 格 便 宜 所 以 许 多 人 将 会 首 选 它
图 14 .2 客户端的 认证将是未来 In te rn e t 安全性的 一个重要部分但到底选 择哪种认证并 不容易
从 实 施 的 立 场 来 看 你 获 得 了 C la ss 1 还 是 C la ss 2 证 书 对 你 的 安 全 实 施 并不 重 要 即 便 是 厂 家 也 不 真 正 重 视 它 然 而 为 了 兼 容 性 你 可 能 仍 然 想 坚 持用 V e r i S ig n 其 实 不 然 事 实 上 不 同 厂 家 使 用 数 字 签 名 的 方 法 是 非 常 相 似的 因 为 它 们 的 界 面 都 是 由 W e b 服 务 器 或 浏 览 器 所 定 义 的 你 将 要 做 的 只 是 接受 一 个 应 用 程 序 当 厂 家 核 查 了 你 的 身 份 后 你 将 会 在 e- m a i l 中 获 得 一 个 P IN 或 其 它 方 式 的 证 明 关 键 是 要 按 照 浏 览 器 或 W e b 服 务 器 的 提 示 安 装 这 个 证 书 例 如 V e r i S ig n 公 司 你 进 入 它 的 W e b 站 点 并 输 入 你 的 P IN 后 浏 览 器 将 自 动关 注 下 载 和 安 装 的 细 节 下 述 段 落 对 V e r i S ig n 的 证 书 等 级 作 了 一 个 概 述
C la ss 1 证 书 它 在 一 个 资 源 库 内 提 供 用 户 唯 一 的 名 字 和 地 址 V e r i S ig n
或 你 选 择 的 任 何 其 它 厂 家 将 能 够 核 查 这 个 人 的 姓 名 和 地 址 回 发 e- m a i l 是 V e r i S ig n 用 来 发 授 证 书 的 唯 一 手 段 要 接 收 这 个 证 书 你 必 须 拥有 一 个 e- m a i l 地 址 这 种 方 式 使 得 黑 客 很 难 伪 造 这 个 证 书 这 种 级 别 的证 书 每 年 需 花 费 9 .95 美 元 你 也 可 以 获 得 一 个 C la ss 1 证 书 的 免 费 测 试版
C la ss 2 证 书 要 获 得 C la ss 2 证 书 必 须 由 第 三 方 认 证 你 的 身 份 目 前只 对 美 国 和 加 拿 大 人 授 予 C la ss 2 证 书 C la ss 2 和 C la ss 1 的 最 大 区 别是 V e r S ig n 公 司 实 际 通 过 E qu iF a x 公 司 提 供 的 用 户 数 据 库 来 检 测 你 的 信息 你 也 通 过 一 个 硬 件 签 名 处 理 它 需 要 多 个 密 钥 这 种 级 别 的 证 书 每年 需 花 费 19 .95 美 元
如 果 你 想 获 得 一 个 证 书 并 希 望 它 能 和 多 种 软 件 协 同 工 作 那 么 你 不 能 只 看它 对 浏 览 器 的 兼 容 性 因 为 数 字 签 名 技 术 有 很 多 的 标 准 规 范 请 参 看 表 14 .1
你 将 发 现 大 部 分 的 数 字 签 名 认 证 厂 商 已 接 近 这 些 标 准 了
如 果 你 已 经 有 了 一 个 数 字 签 名 的 证 书 并 分 配 给 了 你 的 A c tiv e X 控 件 W e b 服 务 器 或 浏 览 器 或 以 上 所 有 的 部 件 那 么 你 怎 样 鉴 别 其 他 人 有 没 有 证 书 呢 在 你 访 问 不 安 全 的 站 点 时 你 总 看 到 一 些 警 告 对 话 框 而 访 问 一 个 有 数 字 签 名证 书 的 站 点 也 与 之 类 似 你 将 看 到 一 个 如 下 图 所 示 的 数 字 签 名 证 书
注 意 这 个 对 话 框 还 给 了 你 一 些 优 化 选 项 首 先 你 要 检 测 证 书 的 有 效 性例 如 检 测 它 显 示 的 厂 商 是 否 是 你 所 期 望 的 那 一 家 检 测 其 日 期 来 判 断 是 否 过期 其 次 如 果 你 想 要 到 这 个 厂 商 那 里 去 你 应 该 有 能 力 通 过 其 审 计 在 证 书下 的 第 一 个 检 测 框 总 是 允 许 你 在 列 表 中 增 加 一 些 由 W in V e r if y T ru s t 检 测 过 的 指定 的 公 司 我 们 在 第 8 章 讲 述 下 载 过 程 中 提 到 过 W in V e r if y T ru s t 如 果 你 选择 这 个 厂 商 则 每 次 需 要 在 这 个 指 定 的 公 司 下 载 东 西 时 系 统 将 不 再 提 问 这 对访 问 某 些 站 点 来 说 可 能 有 点 冒 险 但 也 许 没 比 这 更 好 方 法 了 它 完 全 决 定 于 你对 这 个 公 司 的 信 任 度 第 二 个 检 测 框 允 许 你 对 所 有 授 予 了 指 定 证 书 代 理 权 的 商家 进 行 访 问 如 V e r i S ig n 如 果 你 的 认 证 过 程 很 舒 适 你 可 以 不 选 中 这 个 检 测框
你 也 许 正 为 要 对 A c tiv e X 控 件 所 做 的 这 些 事 而 感 到 惊 讶 用 户 和 W e b 的 主人 一 样 如 果 你 决 定 使 你 的 站 点 公 共 化 你 将 发 现 自 己 在 某 些 地 方 需 要 这 些 证书 因 为 人 们 不 愿 下 载 一 个 未 经 数 字 化 标 识 或 看 不 到 厂 商 证 书 的 控 件 取 得 证书 的 过 程 应 该 与 我 们 刚 看 到 的 浏 览 器 用 户 获 取 证 书 的 过 程 没 有 太 大 的 区 别 你现 在 不 必 立 即 拥 有 一 个 证 书 来 标 识 你 的 控 件 但 在 不 久 的 将 来 它 是 必 不 可 少的 我 们 将 在 本 章 有 关 下 载 In te rn e t 部 件 的 部 分 介 绍 标 识 A c t iv e X 控 件 的 实 际过 程
理 解 加 密 API
到 此 为 止 防 止 某 些 人 偷 阅 你 的 数 据 一 直 是 本 章 所 有 内 容 的 主 题 我 们 已经 学 习 了 一 些 安 全 协 议 和 技 术 它 们 能 帮 助 你 将 黑 客 拒 之 门 外 然 而 只 要 有
充 分 的 时 间 任 何 一 把 坚 固 锁 都 可 能 被 人 撬 开 事 实 上 这 就 是 为 何 要 使 用 128 位 的 密 钥 代 替 40 位 密 钥 的 原 因 由 于 解 开 128 位 的 密 码 锁 需 要 太 多 的 时 间 至 少 现 在 是 这 样 所 以 包 含 在 这 个 记 录 内 的 数 据 对 黑 客 几 乎 没 有 吸 引 力
黑 客 当 然 也 能 打 开 这 把 锁 但 非 常 困 难
保 护 层
增 加 保 护 层 是 针 对 黑 客 的 另 一 种 利 器 对 数 据 进 行 多 种 级 别 的 加 密 并 加 上防 盗 门 黑 客 要 获 得 数 据 必 须 通 过 这 些 门 只 要 在 你 的 数 据 和 黑 客 之
间 放 置 足 够 多 的 门 黑 客 便 很 难 攻 破 它
微 软 的 加 密 AP I 或 加 密 应 用 程 序 接 口 增 加 了 保 护 层 类 它 意 味 着 你 又可 以 对 敏 感 数 据 增 加 一 个 保 护 层 了 这 里 支 持 的 加 密 技 术 虽 然 并 非 坚 不 可 摧但 黑 客 要 解 开 它 读 取 你 的 数 据 确 实 需 要 花 费 更 多 的 时 间 使 用 加 密 AP I 函 数将 帮 助 你 更 好 地 保 护 服 务 器 和 客 户 间 的 数 据 传 输
Web 链 接 对 于 其 它 涉 及 Internet 的 东 西 来 说 加 密 API CryptoAPI 是 全 新 的 东 西 并 且 还 在 不 断 地 发 展 之 中 在 撰 写 本 书 时 加 密 API 只 是 作 为 ActiveX SD K 的 一 部 分 来 叙 述 的 你 应 该 通 过 Internet 下载 它 的 一 个 详 细 说 明 虽 然 本 书 在 这 一 部 分 提 供 了 最 好 的 叙 述 但 你还 是 应 该 访 问 一 下 加 密 A P I 站 点http://www .microsoft.com/secur ity/tech/misf6.htm 以 获 得 最 新信 息
加 密 AP I 还 有 其 它 一 些 用 途 因 为 加 密 AP I 是 作 为 一 个 通 用 工 具 而 设 计 的
所 以 它 允 许 在 任 何 环 境 下 对 数 据 进 行 加 密 而 不 只 限 于 W e b 服 务 器 例 如 你可 以 创 建 一 个 应 用 程 序 将 所 有 存 储 数 据 使 用 相 同 的 加 密 格 式 这 些 数 据 可 以 是存 储 在 本 地 的 通 过 m o d e m 传 输 的 上 载 到 一 个 W e b 站 点 的 或 是 通 过 邮 件发 送 的 这 将 给 你 的 公 司 带 来 很 多 的 好 处 对 敏 感 数 据 进 行 随 时 加 密 使 得 黑客 即 便 闯 进 了 你 的 系 统 也 很 难 破 解 你 的 数 据 然 而 使 用 加 密 技 术 也 会 给你 的 用 户 带 来 一 些 不 便 可 以 预 料 只 要 加 密 操 作 变 得 更 加 方 便 和 自 动 化 你的 用 户 肯 定 会 喜 欢 上 它 的 让 攻 击 者 的 攻 击 变 得 困 难 摸 不 着 头 绪 或 者 简 单地 要 他 们 花 费 更 长 的 攻 击 时 间 都 是 吸 引 用 户 的 最 佳 途 径 这 样 麻 烦 不 断 的 用 户就 会 确 信 应 该 在 你 的 系 统 中 保 护 他 们 的 数 据
注 释 Windows NT 4.0 内 建 了 加 密 API 1.0 CryptoAPI 1.0 支 持 当 你安 装 完 服 务 器 修 补 包 3 后 其 支 持 的 等 级 将 升 级 至 2 . 0 这 两 个 版 本的 最 大 区 别 是 加 密 API 2.0 支 持 核 心 加 密 它 允 许 开 发 者 在 应 用 程序 内 纳 入 加 密 而 且 加 密 API 2.0 还 支 持 X.509 证 书 ASN.1 编 码PKCS#7 和 PKCS#10 压 缩 你 将 发 现 Visual C + + 需 要 有 W I N C R Y P T . H 和 C RY PT 32 .D LL 文 件 才 能 提 供 C r y p t o A P I 2 . 0 的 支 持
C ry p to A P I 是 模 块 化 的 这 并 不 足 以 为 奇 因 为 在 过 去 的 几 年 里 微 软 将它 的 操 作 设 计 转 移 到 了 模 块 化 的 方 式 上 我 们 可 以 拿 C ry p to A P I 与 W ind ow s 下的 GDI 图 形 设 备 接 口 AP I 相 比 较 任 何 厂 商 都 能 够 增 加 新 的 设 备 驱 动 程 序来 告 诉 GDI 如 何 和 指 定 的 显 示 卡 工 作 C ry p to A P I 也 是 如 此 它 采 用 了 加 密 服务 提 供 者 CS P 的 思 想 虽 然 W ind ow s 本 身 已 有 微 软 提 供 的 CS P 然 而 如
果 它 的 加 密 特 性 还 不 能 满 足 你 的 需 求 时 你 也 可 以 自 己 设 计 一 个 新 的 CS P 或 从别 的 公 司 购 买 一 个 CS P 的 安 装 过 程 就 像 是 增 加 一 个 设 备 驱 动 程 序 一 样 事 实上 这 种 设 备 驱 动 程 序 的 方 式 使 得 在 你 的 机 器 上 可 以 混 合 加 密 硬 件 和 加 密 软 件这 是 一 个 真 正 的 提 高 点 因 为 你 通 常 是 将 硬 件 和 软 件 作 为 分 立 的 实 体 来 安 装 的
Web 链 接 微 软 已 经 为 CryptoAPI 开 发 了 一 个 DDK 设 备 驱 动 程 序 开 发 工具 Cryptograp hic Service Pro vider Developer's Kit CSPDK 你 可 以 通 过ht tp :// ww w.m ic ors of t.c om /de vn ews /n ovd ec 96/ c ryp to 5_6 .h tm 获 取 更多的信 息
加 密 一 个 文 件
为 了 显 示 一 下 C ry p to A P I 提 供 的 机 能 下 面 举 一 个 加 密 文 件 的 例 子 加 密文 件 是 相 当 简 单 的 微 软 直 接 依 照 八 个 步 骤 处 理 其 中 六 步 含 有 特 定 的 加 密 函数 最 开 始 你 象 在 其 它 编 程 中 一 样 打 开 一 个 源 文 件 和 目 标 文 件 例 子 中的 这 部 分 代 码 用 语 言 编 写 你 也 很 容 易 在 其 它 语 言 中 实 现 在 你 拥 有 一 个有 效 的 文 件 句 柄 后 你 必 须 像 下 边 的 例 子 一 样 获 得 一 个 CS P 句 柄
//给默 认提 供者 提取句 柄
if ( ! C r y p t A c qu ire C on te x t(& h p ro v ,N U L L , N U L L ,P R O V _ R S A _ F U L L ,0 ) )
{
M e s s a g e B o x (" E rro r d u r in g C ry p t A c q u ire C o n te x t" ,N U L L , M B _ O K |M B _ IC ONE XC L A M A T ION );
P o st Q u i t M e s sa g e ( 1 ) ;
}
注 释 在 WINCRYPT.H 文 件 中 你 能 看 到 与 加 密 有 关 的 函 数 结 构 和 定 义 的完 整 列 表
C ry p t A c q u ire C o n te x t( ) 能 够 接 收 五 个 参 数 但 在 这 个 例 子 中 只 有 两 个 是 重 要的 第 一 个 参 数 保 存 CS P 的 句 柄 第 二 个 参 数 指 定 你 要 查 找 的 CS P 类 型 每 个CS P 都 有 一 个 名 字 和 类 型 例 如 当 前 随 W ind ow s 一 起 发 布 的 名 叫 M ic ros oft B a s e C ry p togra ph ic P rov id e r v1 .0 的 类 型 是 P R OV _ R S A _ F U L L 每 个 提 供 商 的 名 字 是唯 一 的 而 类 型 却 不 是 唯 一 的 第 二 个 参 数 包 含 了 密 钥 的 容 器 名 如 果 你 在 这里 输 入 一 个 值 W ind ow s 将 寻 找 一 个 指 定 的 密 钥 容 器 厂 商 可 以 在 硬 件 里 注册 表 中 或 硬 盘 里 保 存 一 个 密 钥 容 器 所 以 你 一 般 不 会 知 道 密 钥 容 器 的 名 字 如果 使 用 NUL L 值 如 例 子 中 所 示 将 告 诉 W ind ow s 返 回 默 认 的 密 钥 容 器 第 三个 参 数 包 含 了 CS P 的 名 字 你 可 以 通 过 使 用 C ry p t G etP ro v P ara m ( ) 函 数 来 取 回 这个 值 填 写 NUL L 值 将 返 回 默 认 的 CS P 最 后 的 参 数 包 含 了 一 个 或 多 个 标 志
如 果 CS P 没 有 提 供 指 定 的 标 志 值 你 可 将 这 个 参 数 设 置 为 0 微 软 只 为 管 理 方面 提 供 了 一 些 默 认 的 标 志 值
下 一 步 可 以 是 使 用 一 个 随 机 密 钥 或 由 口 令 产 生 的 密 钥 来 加 密 文 件 随 机 密钥 方 式 在 A c tiv e X 控 件 中 使 用 的 可 能 最 为 频 繁 所 以 在 此 加 以 描 述 口 令 方 式也 与 之 类 似 而 实 际 需 要 的 步 骤 比 随 机 密 钥 更 少
//创建一个 会话的随机密 钥
if ( ! C r y p t G e n K e y ( h P ro v ,EN C R Y P T_ A L G O R ITH M , C R Y P T_ EX P O R T A B L E ,& h K EY ) )
{
M e s s a g e B o x (" E r ro r d u rin g C ry p t G e n K e y " , N U L L , M B _ O K | M B _ IC ONE XC L A M A T IO N ) ;
P o st Q u i t M e s sa g e ( 1 ) ;
}
C r y p t G e n K e y ( ) 函 数 提 供 给 你 一 个 唯 一 的 密 钥 注 意 第 一 个 参 数 是 CS P 句柄 第 二 个 参 数 包 含 了 加 密 算 法 名 微 软 提 供 了 两 种 加 密 算 法 CA L G _ RC2 块密 码 和 CA L G _ RC4 流 密 码 算 法 名 会 随 着 厂 商 的 不 同 而 变 化 所 以 知 道用 户 打 算 使 用 哪 家 厂 商 的 CS P 是 很 重 要 的 第 三 个 参 数 包 含 了 标 志 一 共 有 三个 默 认 的 标 志 值 CRY P T _ E X P O R T A BL E 告 诉 W ind ow s 能 够 输 出 一 个 随 机 的密 钥 到 一 个 b lob 我 们 将 在 随 后 看 到 它 CRY P T _ CRE A T E _ S A L T 告 诉 W ind ow s 给 随 机 密 钥 种 子 值 使 用 一 些 其 它 大 于 0 的 值 最 后 C R Y PT _ U SE R _ PR O T E C T E D 告 诉 W ind ow s 在 某 个 动 作 发 生 时 提 醒 用 户 最 后 一 个 参 数 是 存 储 返 回 随 机 密 钥的 一 个 容 器
在 获 取 一 个 证 书 的 过 程 中 用 户 将 接 收 到 一 个 公 共 密 钥 CS P 将 这 个 密 钥保 存 在 一 个 中 心 位 置 用 它 标 识 用 户 为 了 保 证 数 据 传 输 的 绝 对 安 全 在 加密 过 程 中 获 取 用 户 公 共 密 钥 的 一 份 拷 贝 来 使 用 是 很 重 要 的 这 就 是 下 一 步 所要 做 的 工 作
//获得用于 交换密钥的公 共密钥句柄
if ( ! C r y p t G e t U s e r K e y ( h P ro v , A T _ K E Y E X C HANG E ,& h X c h g k e y ) )
{
M e s s a g e B o x (" E r ro rd w rin g C ry p t G e t U s e r K e y " , NU L L ,M B _ OK |
M B _ IC ONE XC L A M A T IO N ) ;
P o st Q u i t M e s sa g e ( 1 ) ;
}
我 们 提 供 给 C ry p t G et U s er K e y ( ) 的 第 一 个 参 数 是 CS P 的 句 柄 第 二 个 参 数 是表 示 从 提 供 者 那 里 获 取 什 么 类 型 的 密 钥 每 个 CS P 将 支 持 两 种 密 钥
AT _ K E Y E X C H A NGE 这 个 交 换 的 公 共 密 钥 是 为 应 用 程 序 中 的 个 人 认 证 而 提 供的 或 AT _ S IGNAT UR E 与 随 后 的 A c tiv e X 控 件 获 取 数 字 签 名 密 钥 一 样
第 三 个 参 数 提 供 存 储 返 回 密 钥 的 空 间
我 们 现 在 进 入 了 一 个 有 趣 的 部 分 我 们 获 取 随 机 密 钥 和 用 户 的 公 共 密 钥并 将 其 混 合 使 用 这 意 味 着 即 便 用 户 的 密 钥 在 某 些 方 面 被 破 译 了 数 据 还 仍有 另 一 种 方 式 的 加 密 它 迫 使 黑 客 又 得 重 头 开 始 破 译 随 机 因 素 使 得 加 密 技 术至 少 在 安 全 上 超 过 了 其 它 方 式 的 加 密
//决定键 b lob 的大小并 分配内存
if ( ! C r y p t E xport K e y ( h K e y ,h X c h g K e y ,S IM P L E B L O B ,0 ,N U L L ,& d w K e y B lo b L e n ) )
{
M e s s ag eB o x (" E r ro r co m p u t in g b lo b s iz e " , N U L L ,M B _ O K | M B _ IC ONE XC L A M A T IO N ) ;
P o st Q u i t M e s sa g e ( 1 ) ;
}
if ( ( p b K e y B lo b = m a llo c ( ( d w K e y B lo b L e n ) ) = = N U L L )
{
M e s s a g e B ox (" E r ro r a l lo c a t ing m e m o ry fo r b lob " ,N U L L ,M B _O K | M B _ IC ONE XC L A M A T IO N ) ;
P o st Q u i t M e s sa g e ( 1 ) ;
}
//将会话的 密钥输出到一 个简单的密钥 b lo b 中
if ( ! C r y p t E xport K e y ( h K e y ,h X c h g K e y ,S IM P L E B L O B ,0 ,pbK e y B lob ,& d w K e y B lobL e n ) )
{
M e s s a g e B ox (" E r ro r du r ing C ry p t E xport K e y " , N U L L ,M B _ O K | M B _ IC ONE XC L A M A T IO N ) ;
P o st Q u i t M e s sa g e ( 1 ) ;
}
注 意 输 出 B lo b 密 钥 用 户 的 公 共 密 钥 和 随 机 密 钥 的 组 合 的 过 程 实 际 上有 三 步 处 理 我 们 调 用 了 C ry p t E xport K ey ( ) 函 数 两 次 头 两 个 参 数 值 是 我 们 创 建的 密 钥 随 机 密 钥 和 用 户 密 钥 第 三 个 参 数 告 诉 W ind ow s 创 建 什 么 类 型 的 b lob 大 部 分 CS P 支 持 两 种 值 S IM P LEB LO B 或 P U B L IC KE YB L O B 第 四 个 参 数 是一 些 标 志 除 非 CS P 为 别 的 目 的 而 使 用 它 否 则 这 个 参 数 总 设 置 为 0 第 五 个参 数 是 指 向 存 储 b lob 的 缓 冲 区 的 指 针 如 果 你 在 调 用 C ry p t E xport K ey ( ) 时 将 它
设 置 为 NUL L 它 将 简 单 返 回 缓 冲 区 的 大 小 这 个 大 小 在 第 六 个 参 数 中 将 用 到这 就 是 我 们 在 第 一 次 调 用 它 的 目 的 第 六 个 参 数 一 般 包 含 了 你 实 际 调 用C ry p t E xport K ey ( ) 创 建 b lob 时 所 需 缓 冲 区 的 大 小 这 里 的 源 代 码 也 包 含 了 一 个内 存 分 配 函 数 的 调 用
既 然 我 们 已 经 获 取 了 一 个 b lob 那 么 现 在 该 关 注 一 下 后 续 工 作 了 你 马 上要 做 的 工 作 是 销 毁 用 户 的 公 共 密 钥 因 为 黑 客 可 以 从 你 的 内 存 中 搜 寻 到 你 的 密钥 并 破 坏 你 的 代 码 所 以 从 内 存 中 将 密 钥 删 除 无 论 从 内 存 的 角 度 还 是 从 编 码练 习 的 角 度 来 看 这 都 是 一 个 很 好 的 策 略 它 对 维 护 你 的 安 全 系 统 来 说 是 必不 可 少 的 下 面 的 代 码 是 调 用 C ry p tD e s tro y K e y ( ) 函 数 来 删 除 公 共 密 钥
//释放键交 换密钥的句柄
C ry p t D es tro y K e y ( h X ch g K ey 0 ; hX c h gK e y = 0;
在 这 时 你 可 以 将 b lob 数 据 保 存 到 磁 盘 或 硬 盘 内 的 一 个 文 件 中 b lob 实 际上 组 织 了 一 个 头 接 收 的 机 器 将 使 用 它 对 文 件 进 行 解 密 然 而 一 个 没 有 数 据的 头 并 不 好 这 就 是 我 们 下 一 步 所 关 注 的 你 要 做 的 第 一 件 事 就 是 定 义 数 据 块的 大 小 如 果 你 使 用 块 加 密 方 式 CS P 将 提 供 块 大 小 块 加 密 一 般 需 要 你 在 文件 的 尾 部 增 加 一 个 附 加 的 空 白 块 当 使 用 流 加 密 时 你 可 以 定 义 任 何 大 小 的 加密 块 尽 管 微 软 推 荐 使 用 1 ,000 字 节 的 块 大 小 现 在 你 将 数 据 一 块 一 块 读 取到 缓 存 并 使 用 以 下 代 码 对 它 进 行 加 密 然 后 将 数 据 块 写 入 目 标 文 件 中
//对数据进 行加密
if ( ! C r y p t E n c ry p t( hK e y ,0 ,e of, 0 ,p bB u f fe r ,& d w C o u n t, d w B u f fe r L e n ) )
{
M e s s ag eB o x (" E r ro r du r ing
C ry p t E n c r y p t" , N U L L ,M B _ OK |M B _ IC ON E X C L AM AT ION );
P o st Q u i t M e s sa g e ( 1 ) ;
}
你 可 以 设 计 一 个 循 环 来 不 断 地 处 理 数 据 直 到 读 完 数 据 块 为 止 确 认 你 填充 了 所 有 不 满 的 块 C ry p to A P I 甚 至 将 块 大 小 作 为 加 密 处 理 的 一 部 分
1 4. 3 蛮 荒 不 化 的 互 联 网
— 些 人 把 In te rn e t 看 作 是 计 算 机 的 现 代 野 蛮 西 部 因 为 在 In te rn e t 上 实 施 的标 准 实 在 太 少 几 乎 没 有 什 么 安 全 手 段 虽 然 在 In te rn e t 上 出 售 商 品 的 人 正 以 指数 方 式 增 长 但 不 幸 的 是 蛮 荒 不 化 的 In te rn e t 环 境 使 许 多 慎 重 的 行 业 如 银 行和 大 型 零 售 商 场 都 不 敢 问 津 造 成 这 种 情 况 的 原 因 很 简 单 它 们 不 愿 意 承 受 可能 出 现 安 全 漏 洞 的 风 险 所 以 就 在 许 多 新 兴 的 公 司 如 CD - N o w 正 高 兴 地 迎接 In te rn e t 的 同 时 另 一 些 需 要 In te rn e t 的 老 牌 公 司 却 对 它 持 观 望 的 态 度
虽 然 In te rn e t 技 术 在 不 断 成 长 革 新 但 它 还 是 招 致 了 现 代 野 蛮 西 部 的 雅称 In te rn e t 是 内 部 技 术 新 技 术 和 老 技 术 的 结 合 体 然 而 这 正 是 威 胁 In te rn e t 的 最 大 原 因 例 如 当 前 版 本 的 IP 协 议 互 联 网 协 议 不 支 持 任 何 方 式 的 加 密数 据 至 少 在 协 议 级 没 有 支 持 问 题 是 如 果 人 们 想 通 过 加 密 的 形 式 在 In te rn e t 上 传 送 数 据 将 没 有 工 具 来 确 认 其 安 全 性 是 完 全 可 靠 的 新 版 本 的 IP 将 解 决 这
个 问 题 但 现 在 还 尚 未 出 台 随 着 时 代 的 发 展 In te rn e t 必 定 会 在 这 方 面 取 得 成功 现 在 虽 然 有 那 么 多 这 样 或 那 样 的 升 级 承 诺 但 是 很 少 有 实 现 的 对 于 某 些人 来 说 在 In te rn e t 上 冲 浪 是 非 常 有 趣 的 因 为 它 是 那 么 自 由 自 在 无 拘 无束
Web 链 接 通 过 浏 览 http://www .genome.wi.mit.edu/w ww/faqs/www- security-f aq.html 你 可 以 看 到 在 运 行 W e b 服 务 器 时 所 要 担 负 的 一些 安 全 风 险 它 包 括 了 使 用 某 种 浏 览 器 或 服 务 器 时 所 冒 的 风 险 其 中包 含 了 当 前 的 Windows NT Unix 和 Macintosh 服 务 器 最 后 它 倾 向于 使 用 Unix 服 务 器 该 站 点 也 给 出 了 许 多 通 用 问 题 的 答 案 比 如如 何 在 你 的 严 格 监 视 和 保 护 用 户 的 隐 私 之 间 找 到 一 个 平 衡 它 甚 至 还告 诉 你 文 档 文 件 是 如 何 随 着 Internet 的 发 展 而 变 化 的
就 像 野 蛮 的 美 国 西 部 最 终 发 展 成 了 现 代 文 明 国 度 一 样 In te rn e t 也 将 最 终 走向 辉 煌 类 似 A c tiv e X 控 件 这 样 的 技 术 将 使 In te rn e t 最 终 变 成 一 个 安 全 的 商 务场 所 这 些 技 术 也 将 把 In te rn e t 变 得 更 加 友 好 就 像 汽 车 和 高 速 公 路 把 美 国 西 部变 得 更 加 容 易 旅 行 一 样 这 些 技 术 也 将 加 快 人 们 从 一 个 地 方 到 另 一 个 地 方 的 交流 速 度
我 们 必 须 要 解 决 的 一 个 难 题 就 是 安 全 问 题 只 有 在 一 个 安 全 的 环 境 内 人们 才 能 够 安 心 高 效 地 工 作 否 则 人 们 将 在 与 敌 人 的 死 死 纠 缠 中 花 费 太 多 的 时间 和 精 力 下 述 各 节 将 讨 论 隐 藏 在 In te rn e t 安 全 问 题 背 后 的 相 关 课 题 你 在 应 用程 序 内 处 理 安 全 问 题 之 前 应 该 先 弄 清 楚 有 什 么 样 的 安 全 问 题 如 果 你 现 在 已经 明 确 了 所 有 安 全 问 题 并 想 实 施 安 全 策 略 时 请 看 看 讲 述 In te rn e t 安 全 标 准 的
那 一 节 否 则 如 果 你 想 把 In te rn e t 作 为 一 个 工 具 应 用 于 你 的 公 司 你 应 该 先 花点 时 间 来 思 考 一 下 将 要 面 临 的 一 些 安 全 问 题
从 商 业 角 度 看 Internet
就 像 前 面 提 到 的 许 多 人 为 毫 无 限 制 的 In te rn e t 感 到 不 安 你 确 实 可 以 在In te rn e t 上 看 到 几 乎 任 何 东 西 因 为 没 人 对 它 进 行 规 划 美 国 政 府 最 近 对 In te rn e t 在 线 服 务 的 规 定 并 没 有 奏 效 如 果 你 是 一 个 编 程 人 员 In te rn e t 这 个 无 拘 无束 的 环 境 也 许 还 有 某 种 魅 力 但 你 不 是 在 为 自 己 编 程 你 必 须 考 虑 到 商 业 人 员的 需 求 商 业 人 员 当 然 不 希 望 花 了 钱 却 买 回 了 不 安 四 面 漏 风 的 工 作 环 境 对 他们 来 说 就 像 是 一 场 噩 梦 他 们 希 望 每 件 事 都 井 然 有 序 有 条 不 紊 最 重 要 的 是要 安 全 可 靠
急 速 膨 胀 的 In te rn e t 并 没 有 对 商 业 用 户 注 入 多 少 信 心 在 一 些 商 业 用 户 的 眼里 新 的 和 未 经 考 验 的 技 术 只 会 在 茫 茫 的 等 待 中 发 生 考 虑 一 下 A c tiv e X 控 件的 潜 在 得 失 它 确 实 加 快 了 商 业 用 户 的 办 事 速 度 但 还 是 有 一 些 安 全 因 素 值 得担 忧 因 为 任 何 一 个 具 有 少 量 编 程 经 验 的 人 就 可 以 创 建 一 个 潜 伏 破 坏 性 的 控 件并 把 公 司 的 一 切 搞 得 一 团 糟
最 近 的 商 业 调 查 报 告 显 示 大 公 司 在 In te rn e t 上 变 得 审 慎 了 他 们 采 用 审 慎方 案 的 一 个 最 大 原 因 是 缺 乏 安 全 感 这 些 公 司 希 望 能 证 实 技 术 的 可 靠 性 并 保证 它 们 的 数 据 在 任 何 通 信 中 都 很 安 全 建 立 这 种 值 得 信 赖 的 In te rn e t 的 一 种 方 法是 在 内 部 编 写 优 良 的 应 用 程 序 也 就 是 说 创 建 A c tiv e X 控 件
注 释 商 业 用 户 需 要 处 理 的 主 题 很 多 它 们 一 般 与 编 程 人 员 无 关 例 如是 否 允 许 职 员 访 问 Internet 以 及 允 许 进 行 什 么 层 次 的 访 问 这 些 当然 是 个 热 门 的 话 题 但 我 们 在 这 里 不 做 全 部 的 描 述 我 们 只 是 讲 述 一些 与 编 程 人 员 相 关 的 主 题
那 么 你 该 如 何 处 理 这 些 安 全 问 题 呢 你 可 以 与 公 司 的 主 管 交 谈 如 果 你 发现 了 他 们 最 担 心 的 只 是 你 编 写 的 应 用 程 序 那 么 你 应 该 说 服 他 们 作 为 应 用 的一 部 分 安 全 也 是 非 常 重 要 的 例 如 我 们 可 以 使 用 一 些 方 法 来 访 问 W ind ow s N T 服 务 器 内 部 提 供 的 安 全 性 这 种 方 法 的 缺 点 是 访 问 安 全 特 性 将 需 要 许 多 附 加 的代 码 使 得 应 用 程 序 的 运 行 变 慢 并 使 用 户 也 更 辛 苦 你 也 应 该 在 程 序 的 设 计阶 段 告 诉 主 管 对 其 所 进 行 的 权 衡 应 用 程 序 最 终 将 在 W e b 站 点 上 应 用
注 要 实 现 公 司 各 阶 层 间 的 通 信 必 须 建 立 一 个 安 全 的 Internet 或Intranet 环 境
定 义 要 保 护 的 对 象 数 据
那 么 我 们 需 要 保 护 的 到 底 是 什 么 东 西 呢 你 也 许 会 得 到 许 多 答 案 但 它们 实 质 上 都 是 指 向 一 个 东 西 所 有 说 的 和 做 的 都 是 为 了 保 护 数 据 的 安 全 数 据所 牵 连 的 影 响 甚 至 超 过 了 硬 件 和 软 件 硬 盘 丢 失 了 你 还 可 以 替 换 它 软 件 配置 破 坏 了 你 还 可 以 重 新 安 装 它 可 是 公 司 的 财 经 周 报 丢 了 你 就 得 重 新 处 理它 了 数 据 是 计 算 机 环 境 中 最 精 确 的 部 分 因 为 它 一 旦 丢 失 便 很 难 再 修 复
保 护 数 据 的 安 全 是 所 有 人 在 使 用 中 最 应 该 关 心 的 事 很 多 网 络 管 理 员 在 照
顾 安 全 事 务 上 花 费 的 时 间 最 多 在 大 多 数 情 况 下 安 全 性 关 系 到 了 谁 做 了 访 问访 问 了 什 么 数 据 以 及 访 问 的 原 因 等 随 便 翻 翻 任 何 一 家 商 业 出 版 物 你 都 能 看到 一 篇 又 一 篇 的 文 章 讲 述 数 据 的 安 全 性 我 们 每 时 每 刻 都 在 用 计 算 机 处 理 数 据这 些 数 据 对 你 公 司 的 重 要 性 是 毋 庸 置 疑 的 当 你 创 建 一 个 A c tiv e 控 件 并 连 接到 HT M L 页 面 上 此 时 你 最 大 的 安 全 顾 虑 就 是 你 将 要 提 供 的 数 据
数 据 安 全 涉 及 到 了 访 问 的 问 题 不 管 是 访 问 本 地 机 器 还 是 访 问 网 络 有 一个 目 标 是 相 同 的 那 就 是 防 止 非 授 权 的 访 问 在 本 地 机 器 建 立 一 个 安 全 的 环 境是 相 当 容 易 的 除 了 有 各 种 软 件 技 术 外 许 多 计 算 机 还 允 许 B IO S 层 次 的 口 令保 护 如 果 这 还 不 够 你 还 能 依 靠 物 理 的 安 全 保 护 来 保 证 别 人 访 问 不 了 你 的 系统 然 而 要 在 网 络 上 实 施 这 些 安 全 性 就 比 较 困 难 了 但 你 还 是 不 用 花 太 多 的努 力 就 可 以 做 到 流 行 的 网 络 操 作 系 统 产 品 如 N ove ll 的 N e t W a re 和 微 软 的W ind ow s N T 都 提 供 了 各 种 安 全 手 段 来 保 护 本 地 数 据 除 非 有 人 在 网 络 的 物 理电 缆 上 安 装 上 了 网 络 监 听 器 在 广 域 网 上 W A N 实 施 安 全 性 简 直 就 是 做 恶梦 尤 其 是 当 你 还 有 许 多 拨 号 上 网 的 机 器 不 管 连 接 的 距 离 如 何 由 于 它 们 使得 软 件 和 硬 件 的 项 目 变 得 更 丰 富 了 所 以 某 些 人 便 更 容 易 偷 偷 闯 进 你 的 网 络有 些 人 甚 至 断 言 在 In te rn e t 上 实 施 安 全 性 是 不 可 能 的 事 不 只 是 广 域 网 带 来 了这 个 重 大 的 问 题 In te rn e t 自 身 提 供 的 公 共 访 问 也 带 来 了 一 些 问 题 任 何 人 只要 看 过 最 近 的 商 业 杂 志 便 知 道 那 些 软 件 公 司 是 如 何 倾 尽 全 力 地 来 修 补 他 们 的 产品 中 的 安 全 漏 洞 的
建 立 某 些 形 式 的 保 护
即 便 你 现 在 尽 量 忽 视 In te rn e t 方 面 的 安 全 问 题 数 据 保 护 还 是 有 许 多 其 它 方面 的 主 题 例 如 你 将 提 供 什 么 类 型 的 数 据 保 护 让 我 们 暂 时 从 非 In te rn e t 的 角度 来 探 讨 一 下 在 这 里 你 能 够 从 硬 件 或 软 件 的 角 度 来 看 待 安 全 保 护 一 些 公司 为 了 保 护 那 些 需 要 特 殊 照 顾 的 数 据 他 们 把 工 作 站 从 其 它 项 目 中 分 离 出 来与 网 络 的 物 理 分 离 意 味 着 任 何 人 如 果 想 要 访 问 机 器 内 部 的 数 据 必 须 实 际 地使 用 这 个 工 作 站 必 要 的 话 你 还 可 以 通 过 使 用 加 锁 来 防 止 别 人 访 问 它 有 的公 司 还 通 过 使 用 数 据 加 密 或 执 行 安 全 审 计 来 解 决 这 个 问 题 这 些 都 是 用 软 件 实现 的 安 全 策 略
不 幸 的 是 在 In te rn e t 上 你 不 可 能 把 自 己 的 机 器 锁 在 房 间 内 来 达 到 保 护 数据 的 目 的 这 意 味 着 随 着 In te rn e t 的 发 展 过 去 使 用 硬 件 方 式 保 护 数 据 的 方 法将 会 被 淘 汰 硬 件 级 保 护 的 失 去 增 加 了 编 程 人 员 的 负 担 作 为 一 个 编 程 人 员你 必 须 负 责 在 应 用 软 件 中 增 加 一 些 安 全 手 段 包 括 一 些 产 品 如 A c tiv e X 控 件
IS A P I filte rs /e x te n s io n s 幸 运 的 是 你 能 够 参 考 许 多 新 的 安 全 方 法 例 如 文件 加 密 已 经 是 一 个 实 用 的 保 护 技 术 无 论 在 广 域 网 上 还 是 In te rn e t 站 点 上 加 密文 档 的 安 全 特 性 都 一 样 只 是 允 许 访 问 的 人 数 不 一 样
我 们 已 经 讲 述 了 工 作 站 的 一 些 安 全 问 题 让 我 们 再 来 关 注 一 下 服 务 器 从In te rn e t 的 角 度 来 看 有 些 公 司 把 自 己 的 站 点 和 网 络 从 物 理 上 完 全 脱 离 开 来 这限 制 了 你 将 这 个 站 点 用 于 公 司 内 部 需 求 的 方 法 使 用 一 个 分 离 的 W e b 服 务 器是 保 护 你 网 络 安 全 性 的 一 种 物 理 方 法 没 有 人 能 够 通 过 这 个 W e b 服 务 器 来 窥 探你 网 络 内 部 的 数 据 防 火 墙 是 一 种 软 件 的 保 护 方 式 这 种 方 式 的 登 录 过 程 实
质 上 在 局 域 网 上 已 使 用 过 多 年 了
你 当 前 使 用 的 或 以 后 将 要 实 施 的 计 划 都 有 一 些 实 际 的 极 限 其 中 你 最 应该 考 虑 的 是 In te rn e t 访 问 的 发 展 将 越 来 越 灵 活 当 然 你 可 以 关 闭 你 的 站 点 来 防止 任 何 人 来 访 问 它 但 你 此 时 又 能 做 什 么 呢 采 取 顽 固 和 粗 糙 的 策 略 来 实 施 你的 安 全 性 可 能 不 会 有 太 大 的 效 果 为 了 让 人 在 W e b 站 点 上 学 习 加 强 安 全 性 的 新方 法 而 不 分 配 给 他 们 访 问 的 级 别 将 是 你 面 临 的 一 个 挑 战 从 编 程 者 的 角 度来 看 这 意 味 着 你 应 该 学 习 安 装 在 网 络 上 的 硬 件 和 软 件 的 应 用 能 力 已 避 免 陷入 In te rn e t 的 安 全 顾 虑 中
实 施 方 案
要 创 建 一 个 安 全 网 络 环 境 是 一 个 庞 大 的 项 目 即 便 是 系 统 地 陈 述 一 个 基 本的 安 全 方 案 你 也 要 花 费 许 多 时 间 和 精 力 而 要 具 体 实 施 它 则 需 要 更 长 的 时 间尤 其 是 为 了 减 少 对 工 作 环 境 的 冲 击 而 使 用 阶 段 性 的 实 施 方 案 时 时 间 就 更 长了 即 便 你 制 定 了 一 个 非 常 安 全 的 计 划 并 尽 己 所 能 地 考 虑 到 了 所 有 的 意 外 你也 不 能 完 全 确 信 已 经 面 面 俱 到 了 当 最 后 有 人 闯 进 了 你 的 安 全 系 统 并 破 坏 了 一些 数 据 时 你 便 只 能 打 道 回 府 了
— 旦 考 虑 到 所 有 这 些 潜 在 的 问 题 时 你 不 难 得 出 为 什 么 网 络 管 理 员 要 经 常地 对 用 户 的 权 限 进 行 分 配 哪 怕 他 是 在 做 一 件 无 关 痛 痒 的 事 例 如 一 些 网 络管 理 员 强 烈 地 反 对 公 司 进 行 任 何 形 式 的 In te rn e t 访 问 而 另 外 一 些 网 络 管 理 员 则一 旦 证 实 有 In te rn e t 访 问 便 要 像 老 大 哥 一 样 监 视 用 户 的 活 动 情 况
不 管 建 设 什 么 形 式 的 W e b 站 点 你 面 临 的 将 不 止 是 网 络 管 理 和 数 据 保 护 的
问 题 考 虑 用 户 的 提 问 也 很 重 要 如 果 有 人 告 诉 你 连 接 是 安 全 的 而 你 发 现 它并 非 如 此 你 又 怎 会 喜 欢 它 呢 许 多 信 用 卡 用 户 真 不 愿 意 这 样 冒 险 从 计 算 机到 W e b 站 点 的 一 个 不 安 全 的 连 接 可 能 意 味 着 信 用 卡 内 数 千 元 的 损 失
在 实 施 一 个 安 全 方 案 之 前 你 应 该 已 经 完 成 了 这 些 工 作 确 认 你 创 建 的 应用 程 序 能 够 长 时 间 保 证 客 户 和 服 务 器 间 数 据 交 换 的 安 全 如 果 你 想 把 你 的 W e b 站 点 作 成 防 弹 b u lle tp ro o f 形 式 你 应 该 考 虑 到 所 有 使 用 In te rn e t 人 的 需 求
以 及 可 能 产 生 的 冲 突 当 一 些 没 有 考 虑 到 的 事 情 发 生 并 且 确 实 有 人 闯 进 了 你的 网 络 时 你 便 能 够 立 即 制 定 一 个 安 全 计 划 来 修 补 这 些 网 络 安 全 漏 洞
1 4. 4 确 保 In te rn et 下 载 代 码 的 安 全
许 多 公 司 正 承 诺 把 它 们 的 应 用 软 件 当 作 一 系 列 A c tiv e X 控 件 上 载 到 In te rn e t 上 例 如 Lo tu s 计 划 将 一 系 列 N o te s_ sp e c if ic 阅 读 器 以 A c tiv e X 控 件 方 式 迁 移至 In te rn e t 上 Q u arte rd ec k 公 司 也 计 划 把 它 们 的 整 个 应 用 系 统 程 序 转 换 成 A c t iv e X 控 件 形 式 并 上 载 到 In te rn e t 上 你 很 快 就 能 够 直 接 通 过 浏 览 器 查 看 各 种 类 型 的 数据 在 某 些 情 况 下 你 还 可 以 直 接 对 它 进 行 编 辑 要 得 到 它 们 成 熟 的 产 品
我 们 也 许 还 得 等 待 一 段 时 间
如 果 商 家 没 有 计 划 对 下 载 的 代 码 进 行 检 验 用 户 在 不 能 确 认 代 码 是 否 受 到过 病 毒 的 侵 害 时 就 盲 目 将 其 保 存 将 会 带 来 很 大 的 危 害 我 们 已 经 在 第 8 章中 阐 述 了 W ind ow s V e r ify T rus t A P I 用 于 连 接 W ind ow s T rus t P rov ide r S e rv ic e 背 后 的 一 些 技 术 在 这 一 节 中 我 们 将 关 注 这 些 AP I 你 将 对 这 些 技 术 的 运 作
方 式 有 一 个 总 体 的 了 解
在 这 一 节 中 我 们 也 将 关 注 一 下 W indow s S o f tw a re P u b lis h ing T ru s t P rov ide r 它 实 际 上 是 W ind ow s V e r ify T rus t A P I 的 一 个 附 加 系 统 它 用 来 检 验下 载 的 软 件 部 件 是 否 值 得 信 赖 其 检 验 的 方 法 有 多 种 其 中 包 括 检 验 本 地 的 规则 如 在 浏 览 器 上 与 安 全 相 关 的 检 查 框 和 检 验 文 件 自 身 的 加 密 信 息 如 数 字签 名
最 后 我 们 将 关 注 对 A c tiv e X 控 件 签 名 的 过 程 将 签 名 过 的 控 件 放 置 到 W e b 服 务 器 上 将 使 用 户 在 下 载 它 时 不 会 再 提 示 not trus te d 不 能 信 赖 的 信息 这 部 分 也 将 让 你 学 会 如 何 为 测 试 而 清 理 自 己 的 机 器 你 将 学 会 如 何 卸 载 一个 A c tiv e X 控 件 这 样 你 不 必 在 每 次 测 试 控 件 的 签 名 以 及 在 你 的 W e b 站 点 下载 其 它 特 性 时 都 得 重 新 清 理 机 器
使 用 Windows Ve rify Trust API
这 个 特 殊 的 AP I 在 某 些 方 面 现 在 已 经 相 当 稳 定 微 软 已 经 在 IE 3 .x /4 .x 以 及W ind ow s 自 身 中 部 分 地 实 施 了 它 你 阅 读 到 的 其 它 部 分 正 处 于 不 断 的 改 变 中 因 为 很 多 软 件 公 司 正 在 各 自 地 研 究 检 验 下 载 软 件 的 最 好 方 法
那 么 W ind ow s V e r ify T rus t A P I 的 精 确 定 义 是 什 么 它 是 决 定 你 是 否 能 信任 任 何 W ind ow s 对 象 的 一 种 通 用 方 法 这 些 对 象 可 以 是 客 户 请 求 的 服 务 服 务器 请 求 的 信 息 下 载 的 文 档 文 件 或 甚 至 是 A c tiv e X 控 件 这 个 AP I 的 最 终 形 式是 允 许 你 检 测 任 何 对 象 的 可 信 度
就 像 W ind ow s 支 持 的 大 多 数 AP I 一 样 W ind ow s V e r ify T rus t A P I 也 是 可 以
扩 展 的 你 可 以 增 加 新 的 特 性 来 允 许 它 执 行 一 些 扩 展 的 检 测 其 中 的 一 个 扩 展是 IE 3 .x /4 .x 带 来 的 W ind ow s S o f tw a re P ub lis h ing T rus t P rov ide r 我 们 将 在 下 一节 进 行 阐 述 现 在 你 所 要 知 道 的 一 点 是 W ind ow s V e r ify T rus t A P I 只 是 个 通用 的 AP I 随 着 更 多 人 对 它 的 使 用 它 可 能 需 要 更 多 的 扩 展
W indow s V e r ify T rus t A P I 使 用 多 种 方 法 来 检 测 文 件 的 可 信 度 其 中 的 一 些方 法 尚 存 在 争 议 但 有 两 种 方 法 最 为 通 用 即 检 测 系 统 规 则 和 校 对 伴 随 于 对 象的 证 书 或 数 字 签 名 你 将 发 现 W ind ow s V e r ify T rus t A P I 也 依 赖 于 外 部 的 证 书 例 如 当 前 许 多 流 行 的 In te rn e t 加 密 标 准 正 使 用 公 共 密 钥 和 私 有 密 钥 方 式 公 共密 钥 驻 留 在 文 件 头 上 私 有 密 钥 存 在 于 用 户 的 机 器 内 要 破 解 一 个 加 密 文 件你 必 须 要 既 有 公 共 密 钥 又 有 私 有 密 钥 因 为 只 有 用 户 拥 有 这 个 密 钥 所 以 其 他人 将 不 能 阅 读 这 个 文 件 显 然 还 有 一 些 比 两 把 密 钥 更 复 杂 的 方 法 有 些 简 单的 方 案 还 增 加 了 随 机 密 钥 他 与 公 共 密 钥 相 结 合 使 得 黑 客 几 乎 没 有 可 能 破 解它
系 统 规 则 存 在 于 许 多 地 方 例 如 浏 览 器 的 信 任 信 息 存 储 在 配 置 文 件或 注 册 表 中 系 统 管 理 员 也 可 设 置 一 些 策 略 这 些 设 置 可 以 在 一 个 单 独 的 用 户注 册 文 件 中 或 在 所 有 用 户 都 可 使 用 的 通 用 注 册 文 件 中 策 略 所 在 的 精 确 位 置 依赖 于 你 使 用 的 W ind ow s 版 本 和 是 否 打 开 了 多 用 户 配 置 在 W ind ow s 95 /98 中 以 及 系 统 管 理 员 实 施 的 策 略 类 型 系 统 的 或 单 独 的 你 也 可 以 使 用 委 托 供 应商 CP S 规 则 准 确 的 名 称 叫 做 trus t prov ide r 因 为 其 中 的 规 则 来 源 可 以是 任 何 委 托 代 理 而 不 止 是 CP S 例 如 你 可 以 告 诉 浏 览 器 任 何 经 过 某 个委 托 供 应 商 认 证 的 人 都 是 可 信 的 作 为 受 托 检 验 规 则 委 托 供 应 商 提 供 了 指 定
的 拥 有 者 的 列 表 并 定 义 了 指 定 对 象 的 类 型 和 委 托 供 应 商 的 级 别 用 户 的 操 作也 能 够 影 响 W ind ow s T rus t V e r if ic a t ion A P I 的 使 用 规 则 例 如 如 果 用 户 告 诉系 统 某 个 供 应 商 是 可 信 的 则 这 个 信 息 便 存 储 于 注 册 表 中 而 W ind ow s 的 受托 检 验 服 务 每 次 在 证 书 中 看 到 这 个 商 家 的 名 字 时 便 不 再 对 这 个 对 象 作 深 入 的检 测
现 在 你 已 经 对 这 个 AP I 的 功 能 做 了 一 个 概 要 的 了 解 让 我 们 再 关 注 一 下这 个 AP I 的 自 身 你 将 会 对 下 面 这 个 函 数 感 兴 趣
W in V e r if y T ru s t( H W ND h w n d ,DW OR D d w T ru s t P ro v id e r , DW OR D d wA c t io n ID ,L P VO ID A c t io n D ata);
正 如 你 所 看 到 的 这 个 函 数 需 要 四 个 参 数 大 部 分 人 应 该 牢 记 第 一 个 参 数它 是 当 前 窗 体 的 句 柄 这 个 参 数 的 目 的 是 让 W in V e r if y T ru s t( ) 函 数 知 道 当 前 正 有用 户 在 做 决 定 例 如 函 数 可 能 想 询 问 你 是 否 下 载 一 个 没 有 签 名 的 文 件 如 果想 要 在 不 干 扰 用 户 的 情 况 下 检 验 一 个 对 象 的 可 信 度 你 可 以 简 单 使 用INVAL ID _ HAN DL E _ VAL UE 来 代 替 窗 体 的 句 柄 如 果 你 想 要 用 户 的 桌 面 代 替当 前 的 应 用 程 序 对 任 何 交 互 作 用 都 做 出 反 映 你 也 可 以 将 参 数 值 设 为 0 第二 个 参 数 定 义 了 对 谁 来 询 问 与 信 任 相 关 的 事 情 W ind ow s 认 识 两 个 默 认 值 尽管 商 家 也 能 定 义 任 何 指 定 的 值 用 来 明 确 真 正 的 委 托 供 应 商
W IN _ T R U S T _ P R OV ID E R _ U NK NOW N 基 于 你 想 要 执 行 的 操 作 找 到 一 个 代理 商 或 W IN _ T R U S T _ SO FT W A R E _ P U B L ISH E R 一 个 实 际 的 软 件 发 布 者 如 果 你 选 择 W IN _ T R U S T _ P R OV ID E R 选 项 W ind ow s 将 尽 量 找 到 一 个 包 含 你要 执 行 操 作 的 注 册 项 如 果 不 能 发 现 这 样 一 个 注 册 项 W in V e r if y T ru s t() 函 数 将
返 回 一 个 T R US T _ E _ P R OV ID E R _ U N KNOW N 的 值 第 三 个 参 数 指 定 了 一 个 操作 它 告 诉 代 理 供 应 商 你 想 要 做 的 操 作 因 为 每 个 代 理 供 应 商 都 不 同 所 以你 将 必 须 检 查 代 理 商 提 供 的 文 档 最 后 一 个 参 数 的 准 确 内 容 也 依 赖 于 你 使 用 的代 理 商 在 大 多 数 情 况 下 你 将 至 少 需 要 告 诉 代 理 商 你 想 要 检 验 的 数 据 有 些代 理 商 也 可 能 要 求 有 关 信 任 级 别 的 信 息 或 者 信 任 裁 决 的 内 容
W in V e r if y T ru s t( ) 函 数 在 调 用 执 行 后 一 般 返 回 代 理 商 的 特 定 值 在 某 些 情况 下 它 也 返 回 四 个 标 准 值 中 的 一 个 你 将 注 意 到 这 四 个 标 准 值 全 是 错 误 信 息 W ind ow s V e r ify T rus t A P I 没 有 定 义 任 何 默 认 的 成 功 信 息 下 面 就 是 这 四 个
值 的 解 释
TR U S T_ E _ S U B J E C T_ N O T _ T R U S T E D 通 常 代 理 商 会 提 供 给 你 更 多的 错 误 信 息 这 个 返 回 值 简 单 地 提 示 检 验 的 对 象 没 有 通 过 你 指 定 的 检验 操 作 它 不 代 表 这 个 对 象 从 根 本 上 不 值 得 信 任 而 只 是 不 能 被 当 前 指定 的 操 作 信 任 除 非 代 理 商 支 持 某 些 类 型 的 通 用 操 作 或 者 你 只 需 要 对这 个 对 象 执 行 单 一 的 操 作 否 则 你 将 需 要 为 每 个 操 作 分 别 调 用W in V e r if y T ru s t() 函 数
T R US T _ E _ P R OV ID E R _ U N KNOW N 就 像 前 面 提 示 的 W ind ow s 基 于当 前 的 定 义 操 作 不 能 找 到 指 定 的 代 理 商 时 便 返 回 这 个 错 误 信 息
T R US T _ E _ AC T ION _ UN KNOW N 如 果 你 要 求 的 操 作 不 被 指 定 的 代 理商 支 持 时 函 数 将 返 回 这 个 错 误 值 W in V e r if y T ru s t 使 用 注 册 项 来 检 验有 效 操 作 而 不 是 真 正 与 代 理 商 进 行 交 流 这 意 味 着 即 便 代 理 商 支 持指 定 的 操 作 你 也 可 能 会 因 为 注 册 被 损 坏 而 不 能 执 行 某 个 操 作
T R US T _ E _ S U B J E C T _ F O R M _ U NKN OW N 产 生 这 个 错 误 信 息 的 原 因 是多 方 面 的 多 数 情 况 下 是 因 为 参 数 不 正 确 或 参 数 中 包 含 了 不 完 整 的 信息 如 果 代 理 商 不 能 找 到 你 想 要 检 验 的 对 象 也 将 返 回 这 个 信 息 幸 运的 话 代 理 商 将 提 供 与 数 据 相 关 的 更 详 细 的 信 息 但 如 果 代 理 商 不 能 判断 问 题 的 来 源 时 你 或 许 也 只 能 得 到 这 个 值
理 解 Windows 软 件 发 布 信 任 供 应 商
W indow s 软 件 发 布 信 任 供 应 商 W ind ow s S o f tw a re P ub lis h ing T rus t P rov ide r 附 加 于 W ind ow s T rus t V e r if ic a t ion A P I 我 们 在 前 一 节 中 已 进 行 了 阐述 之 上 这 个 附 加 系 统 的 主 要 目 的 是 允 许 应 用 程 序 检 验 软 件 部 件 中 是 否 包 含数 字 签 名 或 证 书 其 中 的 每 个 项 目 都 将 检 验 用 户 本 地 系 统 中 的 文 档 并 判 断 它们 是 否 是 由 委 托 的 供 应 商 作 为 权 威 的 软 件 发 行 的 对 于 W ind ow s T rus t V e rific a t io n A P I 这 个 AP I 使 用 丰 富 的 技 术 和 信 息 资 源 来 判 断 指 定 的 文 档 是 否值 得 信 赖
你 将 发 现 W ind ow s 软 件 发 布 信 任 供 应 商 也 使 用 W in V e r if y T ru s t( ) 函 数 在前 几 节 中 我 们 讨 论 过 这 个 函 数 但 这 里 的 使 用 略 有 一 些 不 同 首 先 你 总 应 使用 W IN _ T R U S T _ SO FT W A R E _ P U B L ISH E R 委 托 供 应 商 除 非 委 托 供 应 商 支 持别 的 值 如 果 使 用 W IN _ T R U S T _ P R OV ID E R _ U NK NOW N 委 托 供 应 商 W ind ow s 将 简 单 选 择 默 认 的 委 托 供 应 商 W ind ow s 也 定 义 了 两 种 操 作 你 可 以 提 供 其 它可 供 选 择 的 委 托 供 应 商 W IN _ S P U B _ A C T IO N _ T R U S TED _ P U B L IS H ER 检验 文 档 的 供 应 商 是 否 在 信 任 列 表 中 以 及
W IN _ S P U B _ AC T IO N _ P UB L IS H E D _ S OF T W AR E 检 验 文 档 自 身 是 否 有 正 确 的鉴 定 证 书 当 前 版 本 的 W ind ow s 软 件 发 布 信 任 供 应 商 还 不 支 持W IN _ S P U B _ A C T IO N _ T R U S TED _ P U B L IS H ER 操 作 如 果 选 择
W IN _ S P UB _ A C T IO N _ P U B L IS H E D _ S O F T W A R E 操 作 W in V e r ify T ru s t() 也 将 期待 W IN _ T R U S T _ AC T DAT A_ S U B J E C T _ ONL Y 数 据 结 构 该 结 构 如 下 所 示
ty p e d e f L P V O ID W IN _ TR U S T_ S U B J EC T
ty p e d e f s tru c t W IN _ T R US T _ AC T DAT A _ S U B J E C T _ ONL Y
{
D W O R D dw S ubje c t T y p e ;
W IN _ T R U S T_ S U B J EC T S u b je c t ;
}W IN _T R U S T _A C T D A T A _ S U B J E C T _ O N L Y ,
* L P W IN _ T R U S T _ A C T DAT A _ S U B J E C T _ ON L Y
请 注 意 这 个 结 构 包 含 了 两 个 变 量 dw S ub je c t T y pe 定 义 了 你 将 要 检 验 的 对象 类 型 你 可 以 为 大 部 分 数 据 文 件 选 择 W IN _ T R U S T_ S U B J TY P E _ R A W _ F IL E 或 为 可 执 行 文 件 选 择 W IN _ TR U S T _ S U B J TY P E _ IM A G E 其 中 包 括 DL L 和OC Xs Su b je c t 结 构 指 向 你 要 检 验 的 对 象 其 格 式 为
ty pe de f s tru c t _W IN _ T R U S T _ S U B J E C T _F IL E
{
HAND L E h F i le ; L P S T R lp P a th ;
}W IN _T R U S T _S U B J E C T _F IL E ,*L P W IN _T R U S T _ S U B J E C T _F IL E ;
正 如 你 所 看 到 的 这 个 结 构 中 的 两 个 变 量 分 别 指 向 文 件 和 文 件 的 路 径 在大 多 数 情 况 下 你 将 在 浏 览 器 或 其 它 应 用 程 序 的 缓 冲 文 件 夹 内 找 到 这 个 文 件例 如 In te rn e t E xp lore r 3 .0 将 它 的 缓 冲 内 容 保 存 在 In te rn e t 临 时 文 件 中 数 据 文件 或 O CCA CH E 可 执 行 文 件 文 件 夹 中 它 们 位 于 W ind ow s 的 主 目 录 下 而 N e ts c a pe N a v iga to r 的 大 部 分 A c tiv e X 控 件 将 临 时 数 据 保 存 在 A c tiv e X 控 件 缓冲 文 件 夹 也 在 W ind ow s 的 主 目 录 下
那 么 W ind ow s 到 底 是 如 何 检 验 文 件 呢 W in V e r if y T ru s t( ) 在 执 行 中 首 先 寻找 PK C S # 7 标 志 的 数 据 结 构 它 是 在 为 控 件 签 名 过 程 中 创 建 的 我 们 在 下 一 节中 将 要 讲 述 然 后 再 寻 找 一 系 列 X .5 0 9 证 书 在 当 前 实 施 的 W ind ow s 软 件 发布 信 任 供 应 商 中 你 必 须 伴 随 着 软 件 发 布 的 公 开 密 钥 再 提 供 一 个 私 有 密 钥 我们 将 在 下 一 节 中 讲 到 在 未 来 W ind ow s 软 件 发 布 信 任 供 应 商 也 将 寻 找 X 509 .3 扩 展 定 义 的 密 钥 使 用 限 制 和 其 它 属 性 如 果 检 验 到 PK C S # 7 数 据 结 构 和 X .5 0 9 证 书 都 是 正 确 的 W in V e r if y T ru s t 将 给 你 的 应 用 程 序 返 回 一 个 成 功 的 信 息
Internet 部 件 下 载 机 制
你 也 可 以 把 本 节 命 名 为 对 代 码 进 行 签 名 这 个 过 程 实 际 上 包 括 四 步
你 可 能 要 多 次 重 复 这 些 步 骤 才 能 得 到 正 确 的 结 果 第 一 步 是 创 建 一 个 在 本 地 W e b 服 务 器 上 使 用 A c tiv e X 控 件 的 文 档 你 把 这 个 服 务 器 当 作 一 个 In te rn e t 站 点 来 访问 我 们 在 第 10 章 中 已 经 讨 论 了 它 的 详 细 过 程 这 里 就 不 再 介 绍 了 第 二 步 是删 除 控 件 的 注 册 信 息 许 多 编 程 语 言 为 你 创 建 的 控 件 自 动 注 册 即 便 不 能 自 动注 册 你 也 要 作 为 测 试 的 一 部 分 来 注 册 它 去 掉 控 件 注 册 后 所 有 的 注 册 项 被
删 除 这 些 项 是 W in V e r if y T ru s t() 用 来 寻 找 控 件 的 一 个 本 地 拷 贝 时 使 用 的 当 它找 不 到 注 册 项 时 你 所 看 到 的 屏 幕 将 与 用 户 看 到 的 一 样 第 三 步 是 对 你 的 A c tiv e X 控 件 进 行 签 名 第 四 步 也 是 最 后 一 步 就 是 访 问 用 来 测 试 的 W e b 站 点 并 查 看 W e b 页 它 将 下 载 这 个 控 件 并 允 许 你 测 试 签 名 的 过 程 你 可 能 需 要 对 后 三 步 进 行 多次 测 试 才 能 最 终 确 认 签 名 过 程 的 正 确 性
去 掉 控 件 的 注 册 信 息
在 SY ST E M 或 SY ST E M 3 2 目 录 下 有 一 个 叫 R e gS vr 32 的 小 程 序 它用 来 负 责 增 加 A c tiv e X 控 件 在 注 册 表 中 的 登 记 项 使 用 命 令 行 开 关 -U 它 也 可以 取 消 控 件 相 应 的 注 册 项 如 果 你 想 要 取 消 第 10 章 中 创 建 的 基 本 控 件 的 注 册项 那 么 你 可 以 在 命 令 行 输 入 R E GS VR 3 2 OC XE X M P L .O C X - U 成 功 删 除 注 册项 时 你 会 看 到 如 下 图 所 示 的 对 话 框
签 名 你 的 控 件
对 你 的 控 件 进 行 签 名 也 分 为 四 个 步 骤 第 一 步 是 创 建 一 个 X .5 0 9 证 书 我们 在 前 几 节 中 从 安 全 的 角 度 讲 述 了 这 个 证 书 你 将 使 用 M A K E CE RT 应 用 软件 来 创 建 一 个 基 本 的 证 书 这 个 应 用 软 件 的 文 档 在 S IG N C O D E .TX T 文 件 中
你 可 以 在 A c tiv e X S D K 的 安 装 软 件 的 B IN 目 录 下 找 到 这 个 文 件
注 释 Visual C++ 5.0 提 供 了 MAKECERT 这 个 应 用 软 件 你 将 需 要 它 来 签 名你 的 控 件 然 而 在 安 装 中 并 不 加 载 这 个 应 用 软 件 在 Visual C++ 安 装 光 盘 的 Cab&Sign 目 录 下 你 将 找 到 它 的 所 有 文 件 确 认 你 已 经把 这 些 文 件 拷 贝 到 了 硬 盘 中 它 不 能 在 光 盘 中 运 行 以 下 处 理 过 程假 设 你 使 用 ActiveX SDK 获 得 了 最 新 的 工 具 但 这 里 使 用 的 是 Visual C++5.0 提 供 的 工 具
M AKE C E R T - U : AK e y - K : AK e y . P VK - n : C N= M y C o m p a n y - d : A - C o m p a n y T E S T C E R T .C E R
这 个 命 令 行 是 用 来 创 建 一 个 随 机 的 公 开 / 私 有 的 密 钥 对 并 将 这 个 密 钥 对 和便 于 识 别 的 名 字 联 系 起 来 我 们 也 创 建 了 一 个 私 有 密 钥 文 件 PV K 它 保 存私 有 密 钥 的 备 份 你 创 建 好 一 个 证 书 后 必 须 将 它 和 一 个 基 础 X .5 0 9 证 书 结 合起 来 这 个 证 书 来 自 诸 如 V e r i S ig n 的 CS P 由 于 现 在 还 没 有 任 何 CS P 来 处 理 这类 证 书 微 软 提 供 了 一 个 测 试 证 书 你 可 以 通 过 调 用 R OOT . C E R 来 使 用 它 它和 其 它 文 件 都 在 B IN 目 录 下
我 们 将 使 用 CE RT 2 S P C certifica te to S o f tw a re P u b lis h in g C e r tif icate 应 用程 序 来 将 两 个 证 书 加 入 到 PK C S # 7 签 名 块 中 这 个 对 象 实 质 上 充 当 包 括 在 签 名对 象 中 的 证 书 的 句 柄 一 般 只 有 两 种 证 书 以 下 我 们 使 用 其 中 的 CE RT 2 S P C
C E R T 2 S P C R O O T .C ER TE S T C E R T .C ER TES TC ER T .S P C
在 这 个 例 子 中 的 三 个 参 数 分 别 是 微 软 提 供 的 基 础 证 书 我 们 在 第 一 步 中 创
建 的 证 书 以 及 用 来 存 储 PK C S # 7 签 名 块 对 象 的 新 文 件 名 现 在 你 已 经 有 了 一 个完 整 的 证 书 在 第 三 步 中 你 将 把 它 加 入 到 A c tiv e 控 件 中 即 使 用 以 下 命 令 行
S IGNC O D E - p ro g OC X E XM P L .O C X - s p c T E S T C E R T .S P C - p v k M Y KE Y . P V K
这 个 命 令 行 实 际 完 成 了 很 多 任 务 它 做 的 第 一 件 事 是 创 建 一 个 加 密 摘 要 的映 像 文 件 在 此 例 中 是 OC XE XM P L . O C X 然 后 用 私 有 的 密 钥 标 志 它 这 个加 密 的 摘 要 允 许 客 户 对 映 像 文 件 的 当 前 状 态 和 它 接 收 到 的 文 件 状 态 进 行 比 较 客 户 将 使 用 这 个 比 较 结 果 来 检 测 文 件 是 否 有 任 何 形 式 的 损 害 下 一 件 事
S IGNC O D E 删 除 从 SPC 文 件 中 发 现 的 所 有 X .5 0 9 证 书 并 使 用 X .5 0 9 证 书 的 序列 号 和 已 标 志 的 加 密 摘 要 创 建 一 个 新 的 PK C S # 7 数 字 签 名 对 象 最 后 它 将 这个 新 的 PK C S # 7 数 字 签 名 对 象 随 同 X .5 0 9 证 书 一 同 嵌 入 到 映 像 文 件 中
考 虑 到 S IGNC O D E 程 序 所 做 的 大 量 工 作 你 将 需 要 检 验 它 的 结 果 这 就 是第 四 步 要 处 理 的 工 作 首 先 要 检 验 数 字 签 名 是 否 正 确 地 嵌 入 了 文 件 你 可 以 使用 PE S IG M G R 应 用 程 序 来 处 理 你 所 要 提 供 的 只 是 被 检 验 文 件 的 名 字 如 果 获得 一 个 成 功 的 信 息 便 可 使 用 C HKT R U S T 程 序 来 检 验 可 执 行 代 码 是 否 已 用 数字 签 名 正 确 地 表 达 了 这 个 程 序 与 用 户 浏 览 器 所 做 的 工 作 相 似 它 首 先 检 验 数字 签 名 对 象 然 后 是 X .5 0 9 证 书 如 果 两 者 都 检 查 完 毕 C HKT R U S T 也 将 检 验映 像 文 件 的 代 码 确 认 是 否 与 数 字 加 密 摘 要 相 一 致 C HKT R U S T 最 后 所 做 的 处理 是 浏 览 器 一 般 不 做 的 那 就 是 检 验 多 种 证 书 之 间 的 连 接 关 系 并 确 认 独 立 的 链最 后 终 结 在 基 础 证 书 位 置
完 成 实 际 测 试
检 验 已 签 名 控 件 所 要 做 的 最 后 一 步 是 实 际 使 用 该 控 件 你 必 须 通 过 In te rn e t 连 接 来 进 行 测 试 简 单 地 将 控 件 移 入 你 的 In te rn e t 服 务 器 中 确 认 它 不 再 在 你 的本 机 上 有 注 册 然 后 尽 量 使 用 浏 览 器 来 查 看 测 试 页 如 果 一 切 工 作 正 常 当 你下 载 这 个 控 件 时 你 应 该 看 到 一 个 显 示 出 来 的 证 书 而 不 是 一 般 的 警 告 信 息
即 便 控 件 被 正 确 地 签 名 了 也 还 有 一 些 东 西 会 导 致 你 的 测 试 失 败 可 能 发生 的 第 一 个 错 误 是 没 有 正 确 格 式 化 <O B J E C T > 标 志 这 个 标 志 在 第 8 章 中 我 们已 经 讨 论 过 请 确 认 你 的 C ODE B A S E 属 性 指 向 了 控 件 所 在 的 位 置 另 外 在你 的 机 器 上 使 用 UR L 来 代 替 目 录 位 置 例 如 如 果 控 件 位 于 W e b 服 务 器 的C ONT R O L S 子 目 录 下 则 C ODE B A S E 属 性 使 用 如 下 的 UR L
h t tp : / / ww w . m y c o m pany . c o m / C ONT R O L S / O C X E X M P L .OC X
在 本 机 做 好 签 名 后 你 可 能 想 双 重 检 验 你 的 控 件 虽 然 控 件 在 签 名 过 程 中受 到 损 害 的 情 况 很 少 但 还 是 存 在 这 种 可 能 性 的 如 果 你 第 一 次 在 远 程 位 置 测试 时 控 件 工 作 不 正 常 那 么 请 确 认 控 件 在 你 的 本 地 测 试 页 上 工 作 是 否 正 常
1 4. 5 安 全 标 准
在 前 几 节 中 我 们 集 中 介 绍 了 为 In te rn e t 编 写 代 码 将 要 面 临 的 所 有 问 题 这些 问 题 确 实 存 在 但 你 没 有 必 要 一 个 个 地 处 理 它 们 在 你 阅 读 本 书 时 标 准 化组 织 正 巧 提 出 了 保 护 数 据 的 方 法 你 所 要 做 的 就 是 学 习 由 这 些 组 织 提 出 的 管 理W e b 站 点 的 方 法 采 用 这 些 方 法 有 两 方 面 的 好 处 首 先 你 不 必 重 新 摸 索 和 创
造 这 些 标 准 其 次 你 所 采 用 的 安 全 方 法 能 够 与 其 它 站 点 采 用 的 方 法 相 一 致 它 减 少 了 用 户 在 学 习 中 所 走 的 弯 路 可 以 使 其 他 编 程 者 使 用 那 些 已 开 发 好 的 工具
Web 链 接 如 果 你 想 寻 找 有 关 Internet 安 全 标 准 的 最 新 信 息 请 访 问 http:
//www.w3.o rg/pub/www/security/ 这 个 W e b 页 虽 然 只 提 供 了 概 括 性信 息 但 它 能 让 你 连 接 到 其 它 站 点 上 以 获 得 更 多 的 信 息 另 一 个 好 的站 点 是 http://ww- ns.rutgers.edu/ww-se curity/reference.htm l 它 放 置 了 Rutgers 大 学 网 络 服 务 中 心 提 供 的 W W W 安 全 会 议 资 料 这 个站 点 主 要 告 诉 你 各 种 安 全 会 议 的 联 系 方 法 以 及 摘 要 信 息 而 不 是 有 关安 全 的 详 细 规 范 如 果 开 发 者 想 要 获 得 商 业 角 度 的 安 全 信 息 可 以 访问 http://www.rsa.com/ R S A 站 点 覆 盖 了 一 个 非 常 广 阔 的 主 题 其中 包 括 MasterCard 和 VISA 开 发 安 全 信 用 卡 事 务 的 当 前 状 况 通 过ftp://ftp. isi.edu/internet-dra fts/lid-abstracts.tx t 你 也 能看 到 IETF 产 品 的 当 前 状 况
下 面 让 我 们 看 一 看 In te rn e t 的 各 类 安 全 标 准 这 些 标 准 有 的 已 经 实 现 有的 正 在 成 为 标 准 表 14 .1 显 示 的 是 在 编 写 本 书 时 已 有 的 标 准 或 标 准 的 草 稿 在你 阅 读 本 书 时 又 会 出 现 更 多 的 标 准 令 人 惊 奇 的 是 在 In te rn e t 上 的 厂 商 标 准可 能 是 除 浏 览 器 技 术 外 增 长 最 快 的 一 个 领 域 浏 览 器 技 术 的 发 展 速 度 如 此 之快 以 至 于 测 试 者 都 难 以 跟 得 上 它 你 还 将 注 意 到 这 里 列 出 的 主 要 标 准 不是 来 自 微 软 或 其 它 公 司 而 是 来 自 下 述 两 个 组 织 之 一 IETF In te rn e t E n g in e e rin g T a s k F o rc e In te rn e t 工 程 任 务 组 或 著 名 组 织 W 3 C W o r ld W id e W e b
C ons ortiu m IETF 已 有 很 长 的 历 史 它 是 最 早 为 In te rn e t 工 作 的 组 织 W 3 C
对 每 一 类 要 用 于 In te rn e t 的 新 标 准 负 责 例 如 微 软 现 在 正 努 力 征 得 W 3 C 对 其
< O B J IE CT > 标 志 和 其 它 与 A c tiv e X 相 关 的 HT M L 扩 展 的 许 可
表 1 4. 1 Internet 当 前 的 安 全 标 准
标准 |
描述 |
---|---|
分 布 式 身 份 认 证 安 全服 务 DAS S IE T F R F C 150 7 |
DAS S 是 IETF 正 在 改 进 中 的 一 个 标 准 它 为 在 In te rn e t 上 提 供 身 份 认 证 服 务 定 义 了 一 个 试 验 的 方 法 这 里 认 证的目的是 确认发送消息 或提出请求的 人是谁 DAS S 正在 努 力 解 决 当 前 保 密 字 设 计 中 存 在 的 许 多 问 题 例 如 现 |
在 还 不 能 检 验 出 发 送 保 密 字 的 人 是 否 在 模 仿 他 人 由 于 DAS S 是在一个 分布式环境中 提供认证服务 所以它有着特 殊 的 挑 战 因 为 用 户 不 止 是 登 录 一 个 机 器 他 们 能 在 |
|
网络上登 录所有能够想 到的机器 |
续 表
DS I 数字签 名优先权 |
这个标准 由 W 3 C 制定 它 用于克服通道 级安全的一些 限制 例 如 通 道 级 安 全 不 能 对 文 档 或 应 用 程 序 的 语 意 做处理 因 为所有的处理 过程都发生在 In te rn e t 上 而不 是在客户或 服务器端 所 以通道也不能 有效利用 In te rn e t 的带宽 DS I 为传输签 名定义了一个 数学的方法 它实质上是对指定 的个体或公司 做唯一的表述 DS I 也为标识 安全属 性 提 供 了 一 种 新 的 方 法 P IC S 2 为 维 护 提 供 了 一 种新的格式 PE P DS I 标准也被 建立在 PK C S 7 和 X 509 .V 3 标准中 |
---|---|
扩展的 In te rn e t 标记S H TTP E IT S H TTP |
它是 S H TTP 的扩展 它在当前的 H T T P 列表中增 加了与安 全 相 关 的 标 志 目 前 还 没 有 标 准 化 组 织 支 持 这 种 技 术 但以后将 会有的 IE T F 最近成立 的 W e b 事务安全 组织正 关 注 着 这 一 技 术 你 可 以 通 过 h t tp : / / www- n s .ru tg e rs .e d u / www - s e c u r i ty / w ts - w g . h tml 来 进 一 步 了 解 详 细 信息 |
续 表
通 用 安 全 服 务 应 用程 序 接 口 G SS- AP I IE T F R F C 1 5 0 8 |
这 是 个 已 批 准 的 IE T F 规 范 它 定 义 了 以 通 用 方 式 支 持 安全 服 务 调 用 的 方 法 使 用 通 用 接 口 允 许 在 更 广 泛 的 平 台 提供更多的 源代码级可移 植能力 IE T F 并没有把 这个标准看 成 是 这 类 标 准 的 结 束 而 是 一 个 开 始 将 来 会 有 更 多 的 规 |
|
---|---|---|
范 和 标 准 然 而 学 会 这 些 已 有 的 标 准 将 帮 助 你 在 各 种 安 |
||
全实施方 法中找到通用 的线索 |
||
通 用 安 全 服 务 应 用程 序 接 口 G SS- AP I C - b ind in g R F C 150 8 |
这是个已 批准的服务调用 的方法准之一 |
IE T F 规范 它 定义了 C 语言 中使用支持这个 标准是最先基 于 R F C 150 8 实现的标 |
In te rn e t 协议 |
IE T F 最近成立 了一个 IP 安 全协议工作组 来寻找 IP 安全 性 |
|
安全协议 IPSe c |
方面的问 题 比如 在 IP 协议级无 法对数据加密 的问题 |
|
这 个 工 作 组 当 前 正 在 研 究 覆 盖 面 相 当 广 泛 的 规 范 以 便 最 |
||
终 提 供 更 加 安 全 的 IP 功 能 在 |
||
h t tp : / / www .ie tf . c n r i .r e s to n .v a .u s / h tm l .c h a r te rs / ip s e c - ch arte r .h tm l 站点你可 以找到有关这 个组织的更多 信息 |
续 表
JE P I J o in t E le c tro n ic P a y m e n t In itia tiv e 联 合 电 子 支 付 协 |
它是由 W 3 C 创建的标 准 JE P I 提供了创 建电子贸易的 方法 使 用 电 子 现 金 或 信 用 卡 进 行 交 易 从 客 户 到 服 务 器 间 的数据传 输将使用加密 数字 签名 身份认证 密钥交 换 |
---|---|
议 |
来保证安 全的交换 这是一个 新兴的标准 它的一些条 目 " 如 传 输 层 安 全 也 叫 私 有 当 前 正 通 过 IE T F 继 续 向前发展 |
K e rb e ro s 网络认证 服务 V5 IE T F R F C 151 0 |
这 是 个 已 经 批 准 的 IE T F 标 准 它 定 义 了 第 三 方 认 证 的 协议 K e rb e ro s 模型部分 基于 N e e d h a m 和 S c hro e de r 的可信任第三方 认证协议和基 于 D e nn ing 与 S acc o 提出的第 三方认 证 协 议 的 修 正 协 议 与 许 多 In te rn e t 认 证 协 议 一 样 K e rb e ro s 作 为 一 个 可 信 任 的 第 三 方 认 证 服 务 来 工 作 它 使用 了 依 赖 于 把 共 享 的 公 共 密 钥 与 私 有 密 钥 结 合 起 来 的 常 用加 密 方 法 K e rb e ro s 着 重 于 带 可 选 服 务 器 认 证 的 客 户 身 份 认证 |
P r iv a c y E nha nc e d M a il p a r t I PE M 1 |
这 是 个 已 经 批 准 的 IE T F 标 准 它 用 来 确 认 你 的 私 有 邮 件依 然 保 持 秘 密 实 质 上 它 显 示 了 一 个 你 在 加 密 邮 件 中 采 |
消 息 加 密 和 认 证 过 |
用 保 护 方 式 的 过 程 这 些 过 程 在 解 密 过 程 中 用 户 是 看 不 见 |
程 IE T F R F C 1421 |
的 这 个 标 准 运 用 了 密 钥 和 其 它 形 式 的 认 证 管 理 此 标 准 |
的 一 些 条 款 基 于 C C IT T X .40 0— — 特 别 是 采 用 了 邮 件 句 柄 |
|
服务 M H S 和邮件 传送系统 M T S 中的某 些条款 |
续 表
P r iv acy |
这 是 个 用 于 管 理 安 全 密 钥 的 已 批 准 IE T F 标 准 它 提 供 了 基 |
|
---|---|---|
En h a n c e d |
于公共密 钥认证技术的 基础结构和管 理结构 IE T F R F C 1422 |
|
M a i l p a rt II PE M 2 基 于 证 |
是 C C IT T X . 509 规范的增 强改进版本 它为使用 PE M 提供 了密钥管 理基础的过程 和协议 这是 C C IT T X . 509 中所没有 |
|
书 的 密 钥 管 理 |
的 |
|
IE T F R F C 1 4 2 2 |
||
P r iv acy |
这是个已 经批准的 IE T F 标准 它 定义了加密算式 和 PE M 特 定 用 法 的 标 识 这 个 标 准 覆 盖 了 与关 的 四 个 主 要 领 域 信 息 加 密 算 法 信 息 完 整 性对 称 密 钥 管 理 算 法 非 对 称 密 钥 管 理 算 法 包 括非对称签 名算法 |
法 使用模加 密 信 息 相检 测 算 法 对 称 加 密 和 |
En h a n c e d |
||
M a i l p a rt III PE M 3 算 法 |
||
模 式 和 标 识 IE T F |
||
R F C 142 3 |
||
P r iv acy |
这 是 个 已 经 批 准 的 IE T F 标 准 它 定 义 了 验 证 密 |
钥 的 方 法 |
En h a n c e d |
它也提供 了一个与加密 相关的服务列 表 In te rn e t |
站点可能 需 |
M a il p a r t IV PE M 4 密 钥 证 |
要把它提 供给最终用户 |
|
书 和 相 关 服 务 |
||
IE T F R F C 1 4 2 4 |
续 表
安 全 / 多 用 途 In te rn e t 邮 件 扩 展 S / M IM E |
这 是 由 多 家 公 司 联 合 提 出 的 一 个 标 准 这 些 公 司 包 括M ic ro s o f t B a n y a n V e r i S ig n C o n n ect S o f t QU AL OC OM M F ro n tie r T e c h n o lo g ie s N e tw ork C o m p u t ing D e v ic e s FT P S o ftw a re W o llo n g o n g Se c u r W a re 和 Lo tu s 它 最初由 RS A D a ta S ecu r i ty 公 司 开 发 目 的 是 为 了 使 不 同 产 品 的 开 发 者 能 使 用兼 容 的 加 密 技 术 创 建 消 息 传 输 代 理 M T A S 它 实 质 上 意味着 如 果 有 人 用 Lo tu s 产 品 发 送 给 你 一 个 信 息 你 能 使 用B a n y a n 产品来读 取它 S / M IM E 以 流行的 In te rn e t M IM E 标 准 R F C 152 1 为基础 |
||||
---|---|---|---|---|---|
安 |
全 S / W |
/ 广 A N |
域 |
网 |
在 很 多 人 眼 里 S / W A N 现 在 只 是 一 点 朦 胧 的 微 光 S / W A N 是 R S A D a ta S e c u rity 公司提出 的一个标准 IE T F 也有一个委员正在 研究这个标准 RS A 准备将 IE T F 的 IP S e c 标准也纳入 S / W A N 中 S / W A N 的主要目 标是允许各公 司最佳地混合和匹配 防火墙与 TC P / IP 栈 产 品 以创建 基于 In te rn e t 的虚拟专用 网 VP Ns 这 两种产 品当前 的方案 通常是 将用户 封 锁在单一 资源内 |
续 表
SH T T P 安 全 的超 文 本 传 输 协议 |
这是 O p en M a rk et P lac e S e rv er 公司当前 使用的加密数 据传输技 术 在 功 能 上 它 与 安 全 套 接 层 SSL 非 常 相 似 而 最 大的 不 同 是 这 种 方 法 只 应 用 于 H TTP 现 在 还 没 有 标 准 化 组 织支 持 这 种 标 准 不 过 将 来 会 有 的 IE T F 最 近 成 立 的 W e b 事务安全 组织 正关注 着这方面的技 术 |
---|---|
SSL 安 全 套 接层 |
SSL 是一个 W 3 C 标准 它 最初由 N e ts cap e 公司提出 目的是 为 了 让 客 户 至 服 务 器 端 能 从 协 议 层 传 输 加 密 信 息 套 接 口允许在高 层协议如 H TTP NNT P 和 FT P 上进 行低层的事 务 加 密 这 个 标 准 也 制 定 了 客 户 和 服 务 器 的 身 份 认 证 方 法 客 |
户 站 点 的 身 份 认 证 是 可 选 的 通 过 h t tp : / / www .n e tsc a p e .c o m / in fo / s e c u r i ty - d o c .h tm l 你 可 以 了 解 这个标准的 详细信息 |
|
W W W 上 的 统 一 资源识别 UR I IE T F R F C 163 0 |
UR I 是 IE T F 正在开发 的标准 目前 资源名和地 址是纯粹的 文 本 UR L 统 一 资 源 地 址 实 际 是 包 含 了 地 址 信 息 的UR I 的一种形 式 这个地址 在 In te rn e t 上映射到 一个指定的位置 UR I 能提供将 In te rn e t 对象的名 字和地址编码 的方法 实 质 上 要 访 问 一 个 私 有 的 站 点 你 应 该 知 道 它 的 编 码 名 |
字 而不 是纯粹的文本 名 |
注 释 M T S 是 个 有 多 种 意 思 的 缩 略 语 在 本 书 中 只 用 到 了 两 种 微 软 事 务服 务 器 和 邮 件 传 输 系 统 除 了 第 1 4 章 中 代 表 邮 件 传 输 系 统 外 一 般
都 是 指 微 软 事 务 服 务 器
Web 链 接 表 14.1 中 为 你 介 绍 了 很 多 由 IETF 创 建 的 与 安 全 相 关 的 标 准大 部 分 IETF RFC 文 档 能 在 http://ds. internic.net/rfc/ 上 找 到 在 http://www . ietf.cnri.reston .va.us/html.charters / 上 你 也能 看 到 IETF 当 前 工 作 组 的 列 表 这 些 工 作 组 协 助 创 建 Internet 上 使用 的 标 准
表 14 .1 中 的 安 全 标 准 描 绘 了 In te rn e t 最 终 的 安 全 蓝 图 将 它 牢 记 在 头 脑 中是 很 重 要 的 所 有 这 些 标 准 真 正 覆 盖 了 客 户 和 服 务 器 间 的 连 接 你 还 能 在 客 户服 务 器 端 增 加 其 它 安 全 策 略 这 些 标 准 中 的 大 部 分 还 没 有 覆 盖 In te rn e t 的 附 加 产品 比 如 防 火 墙 等 你 的 公 司 能 够 增 加 这 些 附 加 的 安 全 特 性 并 最 终 使 得 黑 客很 难 攻 进 你 的 系 统
Web 链 接 如 果 你 还 没 有 足 够 多 的 安 全 信 息 的 话 可 以 花 点 时 间 查 看 一 下IETF 的 情 报 站 点 目 前 的 两 个 站 点 是gopher://d s1.internic.net/00/f yi/fyi8.txt 站 点 安 全 手 册 和gopher://d s1.internic.net//00/ fyi/fyi25.txt 网 络 信 息 检 索 状态 报 告
谁 是 W3C
在 我 们 做 进 一 步 学 习 前 让 我 们 大 概 了 解 一 下 W 3 C 组 织 W 3 C 最 早 出 现在 1994 年 12 月 当 时 它 批 准 了 SSL 安 全 套 接 层 在 1995 年 2 月 W 3 C 也 支 持 了 In te rn e t 上 的 应 用 级 安 全 它 当 前 的 项 目 是 数 字 签 名 协 议 W 3 C 于 1996 年 在 巴 黎 发 表 了 该 协 议 正 如 你 所 看 到 的 W 3 C 是 一 个 专 注 于 安 全 需 求 的 标 准化 组 织 它 的 其 它 一 些 职 能 也 是 从 这 个 角 度 发 展 起 来 的
技 巧 如 果 立 即 使 用 安 全 套 接 层 SSL 将 还 有 许 多 安 全 方 面 的 顾 虑 因为 一 些 计 算 机 黑 客 在 特 殊 情 况 下 有 可 能 破 解 你 的 密 码 美 国 . 政 府 限制 出 口 加 密 技 术 中 的 密 钥 长 度 不 能 超 过 4 0 位 所 以 计 算 机 通 过 尝 试
2 的 4 0 次 方 的 密 钥 组 合 便 可 以 破 解 这 个 密 钥 美 国 本 土 使 用 的 加密 程 序 只 能 使 用 1 2 8 位 密 钥 它 意 味 着 一 个 人 要 等 待 计 算 机 做 2 的 1 2 8 次 方 的 字 母 组 合 才 能 破 译 它 这 恐 怕 一 辈 子 也 等 不 到 那 么 你 将 如何 判 断 交 易 的 安 全 等 级 呢 Netscape 使 这 个 问 题 变 得 非 常 容 易 你只 需 查 看 一 下 屏 幕 左 下 角 的 钥 匙 一 把 断 开 的 钥 匙 表 示 没 有 加 密 一把 单 排 齿 的 钥 匙 表 示 4 0 位 的 加 密 一 把 双 排 齿 钥 匙 表 示 1 2 8 位 的 加密 Netscape 和 IE 都 提 供 了 文 档 属 性 对 话 框 在 文 件 菜 单 中 可以 找 到 它 你 可 以 简 单 调 用 这 个 对 话 框 来 查 看 指 定 站 点 提 供 了 什 么类 型 的 加 密 保 护 方 式
那 么 我 们 为 什 么 还 需 要 其 它 的 标 准 化 组 织 呢 其 主 要 想 法 是 把 业 界 的 主 要厂 商 集 中 起 来 创 建 一 个 安 全 的 In te rn e t 网 络 环 境 另 外 某 些 标 准 化 组 织 — —
" 如 IETF— — 主 要 由 自 愿 者 组 成 它 们 的 动 作 过 于 迟 缓 根 本 不 能 满 足 企 业 的当 前 需 求 W 3 C 是 在 为 增 加 新 标 准 并 尽 快 将 其 实 施 而 产 生 的 组 织 W 3 C 最 终提 供 了 实 际 的 标 准 和 规 范 说 明 并 提 供 了 采 用 这 些 标 准 的 应 用 示 范 以 及 使 用这 些 标 准 创 建 应 用 程 序 所 需 的 代 码 等
W 3 C 所 研 究 的 另 一 个 项 目 是 J o in t E le c tro n ic P a y m e n t In itia tiv e ( J E P I ) 一 个将 影 响 In te rn e t 商 务 交 易 的 标 准 它 大 胆 地 假 设 在 英 国 法 国 德 国 和 美 国 的 客户 都 能 访 问 同 一 个 站 点 并 以 完 全 相 同 的 价 格 去 购 买 同 一 个 商 品 但 在 此 之 前它 们 必 须 解 决 一 些 问 题 例 如 你 是 否 要 询 问 客 户 提 供 一 种 付 款 的 方 式 你 需要 什 么 样 的 付 款 你 还 必 须 考 虑 到 纸 币 以 外 的 东 西 因 为 纸 币 还 不 能 通 过 电 子方 式 交 换 信 用 卡 提 供 了 一 种 解 决 方 案 但 W 3 C 也 在 探 究 其 它 方 式 如 电 子 支票 ele c to n ic ch ec k 借 贷 卡 d e b it c a rd 和 电 子 现 金 ele c tro n ic cas h 等 这 只 是 其 中 的 一 个 小 主 题 更 大 的 主 题 是 要 为 商 品 的 价 格 创 建 一 些 与 纸 币 无 关的 方 法 例 如 你 如 何 告 诉 一 个 在 德 国 的 人 外 套 的 价 格 是 80 美 元 如 果 不 给他 们 展 示 一 美 元 是 多 少 德 国 马 克 他 们 是 否 也 能 知 道 对 美 国 人 来 说 他 们 若访 问 一 个 英 国 商 店 则 必 须 找 到 兑 换 英 镑 的 价 格
那 么 JE P I 将 对 安 全 性 做 些 什 么 工 作 呢 它 将 交 易 作 为 一 个 整 体 来 考 虑 你的 公 司 也 许 不 用 与 一 个 想 买 外 套 的 客 户 打 交 道 但 有 可 能 要 与 其 它 一 些 和 贸 易有 关 的 问 题 打 交 道 大 公 司 也 许 想 提 供 一 个 更 快 更 有 效 的 方 法 来 将 资 金 从 世界 的 一 个 地 方 转 移 到 另 一 个 地 方 通 过 In te rn e t 做 电 子 贸 易 将 最 终 解 决 这 个 问题 这 当 然 不 是 眼 前 所 能 做 得 到 的 如 果 你 的 移 动 雇 员 缺 乏 资 金 时 你 该 怎 么办 呢 你 可 能 想 到 立 刻 发 行 一 个 信 用 卡 虽 然 你 可 以 通 过 In te rn e t 获 得 一 个 日 消
费 的 报 告 但 现 在 这 样 做 是 不 明 智 的 因 为 In te rn e t 还 存 在 太 多 的 安 全 漏 洞 而这 些 交 易 标 准 将 帮 助 公 司 建 立 一 些 新 的 方 法 来 传 送 敏 感 数 据
处 理 货 币 的 标 准 方 法
如 果 你 的 公 司 在 In te rn e t 上 出 售 产 品 不 论 是 有 形 的 还 是 无 形 的 那 你 必须 找 到 一 个 能 在 W e b 服 务 器 上 收 钱 的 方 法 就 像 在 其 它 地 方 一 样 你 能 在 In te rn e t 轻 松 地 出 售 装 饰 品 甚 至 还 可 以 卖 得 更 好 但 你 还 得 提 供 一 些 服 务 例 如 你要 为 客 户 提 供 一 种 电 子 支 付 帐 单 的 方 式 而 不 是 通 过 邮 件 送 传 支 票 有 谣 言 说可 能 至 少 有 一 家 电 话 公 司 正 在 作 In te rn e t 监 听 小 公 司 可 能 会 发 现 In te rn e t 交 易太 麻 烦 但 一 些 中 等 和 大 型 企 业 将 在 某 些 方 面 倾 心 支 持 它 银 行 和 信 用 卡 公 司最 终 也 将 加 入 其 中 事 实 上 通 过 在 线 填 写 的 形 式 你 便 能 获 得 一 个 W e b C onduc to r V IS A 卡 查 看 站 点 h ttp : // www .c o nduc to r . c o m 以 获 得 详 细 的 信 息
这 个 特 制 的 卡 允 许 你 在 线 查 看 状 态 和 请 求 服 务 在 不 久 的 未 来 它 将 允 许 在 线付 款 以 大 大 减 少 填 写 支 票 所 花 的 时 间
当 前 有 三 种 不 同 的 公 开 方 案 来 实 现 在 W e b 服 务 器 上 处 理 现 金 它 们 是 F irs t V ir tua l A c c oun t D ig i C a s h 和 C y b e rc a s h 每 种 方 案 都 各 有 千 秋 也 各 有 缺 陷
你 应 该 认 识 到 的 是 它 们 中 没 有 一 个 是 至 善 至 美 的 如 果 现 在 实 施 这 些 方 案你 可 能 需 要 在 某 些 地 方 做 一 些 妥 协 虽 然 有 许 多 金 融 公 司 正 在 研 究 一 些 方 法 来确 保 金 融 贸 易 的 真 正 安 全 但 恐 怕 目 前 尚 无 有 效 的 方 法
从 实 施 的 角 度 看 F irs t V ir tua l A c c oun t 方 案 更 容 易 使 用 用 户 通 过 电 话 报名 加 入 一 个 F irs t V ir tua l A c c oun t 并 接 收 到 一 个 指 定 的 帐 户 名 这 个 帐 户 名 与 信
用 卡 提 供 的 帐 户 名 毫 无 关 系 支 持 这 种 方 案 的 商 家 使 用 安 全 证 书 来 接 受 这 个 指定 的 号 码 每 个 交 易 都 使 用 这 个 号 码 而 不 使 用 真 正 的 信 用 卡 号 码 这 样 防 止了 有 人 偷 去 你 的 信 用 卡 并 趁 你 不 知 道 时 使 用 它 商 家 通 过 F irs t V ir tua l A c c oun t 做 交 易 它 能 检 验 用 户 的 事 务 当 用 户 同 意 交 易 商 家 便 接 收 到 付 款 并 开 始 运送 用 户 所 需 的 产 品 你 能 在 h ttp ://w w w . fv .c o m 站 点 上 看 到 有 关 F irs t V ir tu a l A c c ount 的 更 多 信 息
D ig i C a s h 取 代 了 信 用 卡 而 使 用 真 正 的 资 金 做 交 易 这 意 味 着 商 家 不 必 支 付信 用 卡 的 追 缴 款 另 外 D ig i C a s h 还 可 以 像 AT M 借 贷 卡 一 样 工 作 商 家 获 得了 真 正 的 资 金 而 不 用 等 待 信 用 卡 公 司 来 按 期 支 付 这 需 要 用 户 在 一 个 指 定 的银 行 有 抵 押 银 行 设 置 一 个 帐 户 除 了 在 线 工 作 外 这 个 帐 户 就 像 是 一 个 支 票户 头 当 用 户 购 买 物 品 时 他 或 她 使 用 E - c a s h 商 家 简 单 地 进 入 E - c a s h 便 可 获 得 真 正 的 资 金 显 然 用 户 必 须 不 时 地 添 满 自 己 帐 户 内 的 资 金 你 可 以访 问 h ttp ://w w w . d ig ic a s h .n l/ 站 点 来 获 取 更 多 信 息
C y b e r c a s h 是 前 面 两 种 方 案 的 组 合 它 提 供 了 借 贷 和 信 用 两 种 能 力 有 点 像银 行 内 有 透 支 保 护 的 户 头 与 其 它 两 种 方 案 不 同 的 是 C y b e rc a s h 使 用 真 正 的 帐户 信 息 对 用 户 来 说 这 有 点 冒 险 因 为 他 们 的 帐 户 信 息 能 在 任 何 地 方 以 非 加密 的 形 式 终 止 当 用 户 购 买 东 西 时 C y b e rc a s h 弹 出 一 个 窗 体 要 求 输 入 帐 户 信息 在 信 用 方 式 下 用 户 要 提 供 自 己 的 名 字 和 信 用 卡 号 码 在 借 贷 方 式 下 用户 要 提 供 本 地 银 行 的 名 字 和 其 它 银 行 的 帐 户 名 你 可 以 在h ttp ://w w w . c y b e rc a s h .c o m 站 点 看 到 与 此 相 关 的 更 多 信 息
Web 链 接 不 止 是 银 行 和 信 用 卡 公 司 在 讨 论 在 线 交 易 问 题 作 为 一 家 W e b
服 务 器 公 司 Open Marke t 也 在 制 定 基 于 SHTTP 的 在 线 交 易 方 案 如果 你 使 用 了 这 个 方 案 那 么 它 将 充 当 银 行 和 信 用 卡 公 司 你 可 以 在http://www .openmarket.com 站 点 找 到 与 此 相 关 的 更 多 信 息
第 15 章 建 立 帮 助 文 件
概 述 一 般 原 则 总 是 要 冒 风 险 的 特 别 是 对 一 本 书 程 序 员 最 头 疼 的 任 务 是书 写 文 档 但 是 比 起 写 帮 助 文 件 来 那 可 算 得 上 是 美 差 了 当 用 户 使 用 软 件 时帮 助 文 件 做 得 很 糟 糕 就 自 然 会 去 读 随 机 文 档 尽 管 后 者 也 不 见 得 好 多 少 大多 数 情 况 下 用 户 总 是 抱 怨 帮 助 文 件 只 是 做 做 样 子 而 不 是 真 正 对 使 用 软 件 起到 帮 助 作 用 其 实 程 序 员 已 经 耗 尽 心 机 了
最 近 帮 助 文 件 的 做 法 引 入 了 一 个 新 的 热 点 基 于 HT M L 结 果 是 更 添 乱 了W ind ow s 的 帮 助 文 件 机 制 尽 管 不 完 美 但 它 提 供 了 一 个 完 善 的 搜 索 引 擎 用 户可 以 自 行 查 找 想 要 的 条 目 其 不 足 之 处 在 于 某 些 情 况 下 软 件 更 新 太 快 比 如操作 系 统 而 相 应 的 帮 助 文 件 难 以 及 时 更 改 基 于 HT M L 的 帮 助 文 件 的 好 处 在于 易 于 更 新 在 向 电 子 商 务 迈 进 的 时 代 灵 活 易 变 的 帮 助 文 件 越 来 越 重 要 了
回 想 一 下 我 们 会 发 现 帮 助 文 件 与 应 用 程 序 本 身 一 样 重 要 如 果 用 户 面 对庞 大 的 程 序 不 知 从 何 下 手 程 序 员 即 使 挖 空 心 思 设 计 了 一 个 得 意 之 作 也 不 会得 到 如 潮 的 好 评 这 时 一 切 都 成 了 无 稽 之 谈 新 增 了 好 多 功 能 有 什 么 用 呢用 户 根 本 找 不 到 这 些 足 以 说 明 优 秀 的 帮 助 文 件 对 一 个 软 件 来 说 是 何 等 重 要 啊
您 该 做 的 最 后 一 步 就 是 书 写 帮 助 文 件 了 — — 想 躲 也 躲 不 掉 的 任 务 应 用 程序 越 大 帮 助 文 件 也 就 越 长 越 复 杂 通 常 个 小 时 的 程 序 开 发 工 作 量 需 要 个
小 时 的 建 立 帮 助 文 件 时 间 您 可 以 缩 短 帮 助 文 件 的 编 写 时 间 但 切 记 不 可 偷 懒帮 助 文 件 中 做 的 成 功 的 部 分 是 那 些 作 为 程 序 用 户 手 册 的 那 部 分 我 认 识 的 某 些人 就 使 用 同 一 个 文 件 既 做 联 机 帮 助 又 做 用 户 手 册
注 基 于 HTML 的 帮 助 文 件 易 于 更 新 使 用 灵 活 有 些 厂 家 用 它 来 代 替 印 刷的 说 明 书
注 帮 助 文 件 是 应 用 软 件 的 指 南 帮 助 用 户 快 速 掌 握 软 件 的 使 用 方 法
Web 链 接 如 何 把 帮 助 文 件 组 合 起 来 呢 本 章 主 要 阐 述 这 个 问 题 这 时 可能 要 和 其 它 程 序 员 协 作 有 些 站 点 专 门 讨 论 帮 助 文 件 例 如
comp.os.ms -windows.programmer. win32 和microsoft. public.win32.program mer.tools 新 闻 组 还 有 一 些 站 点也 有 讨 论 如 microsoft. public.access.chat 新 闻 组 专 门 讨 论 数 据库 应 用 程 序 的 帮 助 文 件 如 果 开 发 Internet 应 用 那 么microsoft. public.internet.news 新 闻 组 很 有 帮 助 在 Internet 应用 中 基 于 HTML 的 帮 助 和 Windows 帮 助 都 可 采 用 但 前 者 更 普 遍 甚 至 可 以 在 一 般 的 编 程 讨 论 组 如 comp.progr amming 中 加 以 讨 论
注 编 写 帮 助 文 件 首 要 的 一 步 是 列 出 大 纲 就 像 编 程 一 样
以 下 各 节 将 会 帮 助 您 解 决 许 多 编 写 帮 助 文 件 中 遇 到 的 难 题 目 前 有 许 多 编写 帮 助 文 件 的 技 术 所 以 必 须 首 先 确 定 哪 种 技 术 最 能 满 足 您 的 需 要 本 章 的 第一 节 将 会 谈 到 两 种 技 术 并 给 出 各 自 选 用 的 根 据 显 然 无 法 定 义 一 种 放 之 四海 皆 准 的 标 准 但 至 少 有 些 基 本 的 出 发 点 需 要 考 虑
像 所 有 编 程 工 作 一 样 当 我 们 着 手 建 立 一 个 帮 助 文 件 时 最 先 考 虑 的 就 是
如 何 组 织 的 问 题 如 果 您 的 思 路 清 晰 明 确 写 起 帮 助 来 就 会 得 心 应 手 事 实 上您 要 做 的 就 是 把 程 序 流 程 通 俗 化 条 理 化
接 下 来 就 该 考 虑 如 何 实 施 了 本 章 介 绍 了 两 种 W ind ow s 帮 助 文 件 的 实 现 方法 第 一 种 使 用 H e lp C o m p ile r 加 RT F 文 件 实 现 当 帮 助 文 件 中 有 许 多 唯 一 特性 而 且 要 快 速 查 找 时 这 种 方 法 很 适 用 第 二 种 方 法 基 于 M ic ros oft 的 H e lp W o rk s hop 这 种 方 法 的 好 处 在 于 省 时 易 学
只 有 将 W ind ow s 帮 助 文 件 集 成 到 应 用 程 序 中 后 帮 助 文 件 才 能 发 挥 作 用本 章 的 下 一 节 将 讨 论 这 个 问 题 我 们 考 查 几 种 不 同 的 方 法 为 第 2 章 中 建 立 的 应用 程 序 编 写 帮 助 文 件 您 会 看 到 如 果 要 具 有 上 下 文 相 关 帮 助 功 能 帮 助 文 件 将变 得 非 常 庞 大 如 同 小 驹 配 华 鞍 喧 宾 夺 主
Web 链 接 也 有 相 当 一 部 分 人 放 弃 采 用 Windows 帮 助 文 件 模 式 转 而 使 用HTML 文 件 就 连 微 软 目 前 也 在 它 的 部 分 产 品 中 使 用 了 这 种 方 法 HTML 文 件 的 主 要 缺 点 是 搜 索 功 能 不 强 格 式 不 够 规 范 其 好 处 则 在 于 内 容更 新 十 分 方 便 如 果 想 进 一 步 了 解 这 方 面 的 情 况 可 查 阅 HyperNews Forums Web Mastery Resource List 其 网 址 为
http://union.ncsa.uiuc. edu/HyperNews/get/www/html/ guides. html 这个 站 点 中 包 含 了 许 多 内 容 指 导 您 将 Windows 格 式 的 帮 助 文 件 转 化 成HTML 格 式 还 可 以 参 看 WWWWAIS.C 站 点 网 址 为 http://www .eit.com/ software/w wwwais/wwwwais.html WAIS 是 个 让 你 在 W e b 站 点 中 加 入搜 索 功 能 的 程 序
基 于 HT M L 的 帮 助 文 件 也 需 要 最 后 的 实 施 阶 段 然 而 其 实 现 方 法 更 像 是 设
计 一 个 W e b 主 页 的 过 程 在 阅 读 本 章 之 前 请 先 读 第 8 章 从 而 对 HT M L 概念 有 一 个 基 本 的 了 解 本 章 只 讨 论 建 立 基 于 HT M L 的 帮 助 文 件 时 有 哪 些 需 要特 别 考 虑 的 地 方
本 章 的 最 后 一 节 将 演 示 如 何 把 基 于 HT M L 的 帮 助 文 件 集 成 到 第 2 章 所 建 立的 应 用 程 序 中 尽 管 不 是 很 难 但 还 是 比 集 成 W ind ow s 的 帮 助 文 件 要 复 杂 一 些另 外 你 会 发 现 HT M L 在 生 成 真 正 的 上 下 文 相 关 帮 助 方 面 存 在 一 些 限 制 但 可以 采 取 一 些 迂 回 措 施 达 到 这 一 目 的 最 后 本 节 还 将 讨 论 为 什 么 有 许 多 的 厂 家 喜欢 使 用 HT M L 做 帮 助 文 件 就 是 为 了 便 于 更 新
1 5. 1 确 定 要 创 建 帮 助 文 件 的 类 型
微 软 试 图 使 人 们 相 信 基 于 HT M L 的 帮 助 文 件 是 有 史 以 来 最 好 的 帮 助 形 式也 是 您 开 发 新 的 应 用 程 序 时 应 该 唯 一 考 虑 的 选 择 然 而 帮 助 文 件 形 式 的 选 择 是由 一 系 列 因 素 决 定 的 而 不 只 是 为 了 赶 时 髦
注 释 寻 求 基 于 HTML 的 帮 助 文 件 已 经 成 为 商 业 软 件 的 事 实 标 准 原 因 在 于它 易 于 建 立 减 少 了 编 辑 使 用 手 册 的 开 销 然 而 少 花 钱 并 不 等 于 这 种文 件 就 好 使 了
事 实 上 许 多 微 软 的 用 户 正 在 抱 怨 基 于 HT M L 的 帮 助 文 件 对 于 微 软 的 某 些产 品 来 说 很 不 实 用 当 然 也 有 一 些 情 况 则 很 适 合 用 这 种 形 式 的 帮 助 文 件 那 么我 们 究 竟 怎 样 取 舍 呢 我 们 最 好 还 是 先 对 二 者 加 以 比 较 以 下 就 是 选 择 HT M L
的 原 因
升 级 能 力 建 立 W ind ow s 帮 助 文 件 并 嵌 入 应 用 程 序 后 帮 助 内 容 就 相对 固 定 了 因 为 一 旦 装 入 了 用 户 的 机 器 就 不 好 再 更 改 了 基 于 HT M L 的 帮 助 文 件 驻 留 在 某 一 W e b 站 点 上 包 括 In te rn e t 和 In tran et 所 以一 经 更 新 用 户 总 是 看 到 最 新 的 内 容
减 低 了 学 习 难 度 随 着 In te rn e t 和 In tran et 的 日 益 普 及 企 业 中 只 需 几 个人 掌 握 建 立 和 更 新 W e b 主 页 的 技 术 专 门 负 责 维 护 就 可 以 了 而 W ind ow s 帮 助 文 件 则 需 要 每 个 程 序 员 都 理 解 其 编 制 规 则 显 然 浪 费 了 劳 动 力
减 少 了 与 语 言 特 殊 需 求 相 关 的 问 题 有 许 多 种 方 法 使 得 HT M L 帮 助文 件 支 持 多 种 语 言 面 向 特 殊 应 用 而 不 必 考 虑 W ind ow s 帮 助 文 件 的影 响 可 以 先 询 问 用 户 想 用 哪 种 语 言 按 照 回 答 提 示 用 户 转 入 相 应 的 站点 去 查 阅 对 文 种 支 持 的 自 动 化 使 得 不 必 在 每 个 应 用 程 序 中 再 考 虑 文 种的 重 定 向 问 题 应 用 类 似 的 技 术 也 简 化 了 其 它 一 些 需 求 比 如 用 户 需 要支 持 大 字 体 等
增 强 了 定 制 化 的 机 会 H T M L 的 开 放 机 制 使 得 定 制 帮 助 文 件 非 常 容 易 W ind ow s 帮 助 文 件 中 所 有 的 图 形 都 存 在 于 编 译 好 的 文 件 之 中 而 基 于HT M L 的 帮 助 文 件 则 不 然 可 以 随 时 提 取 其 中 的 图 形 这 就 意 味 着 可 以按 照 用 户 的 要 求 进 行 度 身 定 制 如 更 改 公 司 徽 标 啦 反 映 企 业 形 象 啦 等等 一 切 信 手 拈 来
然 而 这 并 不 是 说 HT M L 帮 助 就 无 所 不 能 了 事 实 上 它 也 带 来 了 一 些 新 的问 题 以 下 就 是 使 用 HT M L 帮 助 文 件 时 所 不 具 备 的 特 性
安 全 性 使 用 W ind ow s 帮 助 文 件 时 可 以 隐 藏 一 些 信 息 只 让 管 理 员 可以 查 阅 而 HT M L 帮 助 文 件 都 是 文 本 形 式 所 有 人 都 可 以 知 道 是 否 有管 理 员 用 户 信 息 存 在 并 试 图 访 问 这 些 信 息
大 小 W in dow s 帮 助 文 件 可 以 进 行 压 缩 通 过 减 少 磁 盘 碎 片 来 节 省 硬 盘空 间 而 HT M L 帮 助 文 件 则 无 法 压 缩 磁 盘 空 间 将 是 个 问 题
远 程 访 问 W indow s 帮 助 文 件 就 在 本 地 硬 盘 上 随 时 可 用 而 HT M L 帮 助 文 件 的 可 取 之 处 也 正 是 它 的 致 命 之 处 如 果 用 户 无 法 访 问 LA N 或In te rn e t 时 怎 么 办 呢 这 时 本 机 上 拷 贝 的 帮 助 文 件 即 使 已 经 过 时 也 变得 异 常 宝 贵 了
没 有 注 释 降 低 了 书 签 支 持 用 户 具 有 向 帮 助 文 件 中 增 加 注 释 的 功 能 非常 重 要 然 而 这 也 是 HT M L 帮 助 文 件 所 不 具 备 的 理 论 上 可 以 允 许 用户 修 改 原 始 的 HT M L 文 件 但 比 起 W ind ow s 帮 助 文 件 来要 复 杂 多 了相 似 地 即 使 只 是 在 HT M L 帮 助 文 件 中 加入 一 个 收 藏 夹 特 性 类似 于 IE 中 的 收 藏 夹 用户 也 只 能 保 留 该 主 页 的 地 址 而 W ind ow s 帮助 文 件 可 以 随 心 所 欲 地在 帮 助 文 件 中 做 标 志 充 分 发 挥 书 签 的 作 用
减 低 了 检 索 能 力 前 面 我 们 已 经 谈 到 了 这 个 问 题 W ind ow s 帮 助 文 件 可以 很 方 便 地 查 找 指 定 的 单 词 关 键 字 的 应 用 使 得 用 户 可 以 建 立 自 己 的 查找 标 准 而 HT M L 帮 助 文 件 不 说 是 绝 对 不 行 也 是 很 难 做 到 这 种 查 找的 肯 定 不 能 查 找 单 个 字 词 或 关 键 字
说 到 这 儿 您 可 能 已 经 在 权 衡 两 种 帮 助 文 件 的 利 弊 了 的 确 它 们 互 不 相 同各 有 所 长 我 们 选 择 的 依 据 何 在 呢 您 可 能 还 出 于 一 些 我 没 有 讲 到 的 考 虑 来 作
出 自 己 的 决 定
1 5. 2 组 织 帮 助 文 件
设 计 帮 助 文 件 有 许 多 方 法 如 何 组 织 是 首 要 任 务 组 织 的 好 坏 是 使 用 难 易的 决 定 因 素 例 如 面 向 任 务 的 帮 助 文 件 可 以 指 导 用 户 迅 速 地 完 成 任 务 当 然其 前 提 是 程 序 设 计 者 很 清 楚 自 己 的 应 用 是 干 什 么 的 而 面 向 菜 单 的 帮 助 文 件 可以 指 导 用 户 快 速 查 找 菜 单 条 目
帮 助 文 件 的 类 型 也 会 影 响 其 组 织 形 式 例 如 W ind ow s 帮 助 文 件 提 供 了 强大 的 查 找 能 力 这 时 您 就 会 更 多 地 用 到 面 向 任 务 的 组 织 形 式 以 便 用 户 能 够 随时 查 找 命 令 信 息 此 外 使 用 HT M L 很 难 建 立 教 程 性 质 的 帮 助 文 件 采 用 菜 单流 控 制 的 组 织 形 式 则 相 对 比 较 容 易 因 为 新 增 菜 单 项 比 在 W ind ow s 帮 助 文 件中实 现 还 容 易
建 立 大 纲
着 手 建 立 帮 助 文 件 的 最 重 要 一 步 就 是 编 写 大 纲 大 纲 应 反 映 出 用 户 的 需 求这 有 助 于 从 一 开 始 就 组 织 好 结 构 从 而 把 写 作 重 点 放 在 具 体 内 容 上 下 面 是 我个 人 的 一 些 经 验 供 大 家 参 考
菜 单 流 菜 单 流 技 术 以 应 用 程 序 的 菜 单 系 统 为 中 心 从 它 开 始 并 作 为 主线 先 将 所 有 菜 单 项 列 成 层 次 清 晰 的 结 构 化 条 目 再 列 出 所 有 对 话 框每 个 对 话 框 下 要 包 含 其 中 用 到 的 所 有 控 件 最 后 列 出 主 窗 口 及 其 组 件
使 用 这 种 组 织 方 法 有 利 于 用 户 快 速 定 位 到 应 用 程 序 的 某 一 具 体 条 目 缺点 是 用 户 往 往 只 看 到 该 条 目 的 含 义 却 还 是 无 法 完 成 想 要 实 现 的 任 务 因 此 这 种 方 法 适 用 于 用 户 已 经 有 一 些 相 关 经 验 的 情 况 — — 只 需 要 告 诉他 们 本 应 用 程 序 的 用 途 不 用 再 从 基 础 一 一 教 起 了 这 种 帮 助 文 件 很 适合 于 实 用 程 序 因 为 这 一 类 型 程 序 的 用 户 购 买 该 软 件 时 目 的 明 确 他 们知 道 买 来 做 什 么 也 适 用 于 配 置 程 序 模 块 这 时 的 问 题 直 接 了 当 但 用户 还 是 需 要 一 些 帮 助 的
任 务 我 接 触 到 的 大 多 数 用 户 并 不 关 心 当 今 程 序 中 新 出 现 的 g ee w h iz 特 性 用 户 只 是 希 望 在 最 短 时 间 内 能 最 快 地 完 成 工 作 特 别 对 那 些 整 日在 公 司 里 忙 碌 于 琐 事 的 职 员 他 们 没 有 时 间 去 学 习 如 何 做 某 件 事 你 只能 告 诉 他 们 这 时 这 种 帮 助 文 件 就 很 有 用 了 先 列 出 用 户 可 以 实 现 的所 有 任 务 再 一 一 加 以 解 释 建 议 您 从 任 务 本 身 的 解 释 开 始 用 户 可 以完 成 什 么 功 能 呢 再 告 诉 用 户 采 取 什 么 步 骤 完 成 它 这 些 用 户 如 果 对 计算 机 一 无 所 知 而 且 毫 无 兴 趣 倒 反 而 好 了 这 种 技 术 适 用 于 数 据 录 入 和任 务 固 定 的 应 用 程 序 的 情 况 而 对 于 字 处 理 和 其 它 综 合 性 的 应 用 程 序 就不 能 胜 任 了
通 用 菜 单 任 务 有 时 所 开 发 的 应 用 程 序 执 行 许 多 任 务 例 如 一 个 字处 理 程 序 不 只 是 一 个 目 的 而 有 多 种 用 途 如 果 此 时 您 宏 篇 巨 箸 地 逐 一解 释 每 项 功 能 怎 么 使 用 对 您 和 用 户 都 是 一 件 残 酷 的 事 我 常 用 的 做 法是 对 各 种 任 务 先 进 行 分 类 再 对 每 类 给 出 常 规 指 导 而 不 是 对 每 项 任务 加 以 解 释 对 菜 单 系 统 给 出 总 缆 介 绍 也 值 得 推 介 这 样 用 户 就 能 很 快
了 解 应 用 程 序 的 用 途 而 不 必 陷 于 揣 摩 编 者 的 构 思 之 中 了 由 此 引 发 了 气球 帮 助 的 大 量 应 用 这 种 气 球 是 一 种 标 志 鼠 标 在 某 一 控 件 上 停 留 几秒 钟 时 它 就 会 出 现 在 鼠 标 指 针 旁 边
参 考 编 译 程 序 和 自 带 宏 语 言 的 应 用 程 序 经 常 使 用 参 考 手 册 类 的 帮 助 文件 这 类 文 件 是 从 控 制 的 角 度 而 不 是 具 体 结 构 上 分 析 程 序 的 对 一 个 字处 理 程 序 来 说 按 字 母 顺 序 列 出 宏 命 令 清 单 就 足 够 了 因 为 无 法 预 测 用户 会 怎 么 使 用 这 些 宏 通 常 还 会 具 体 描 述 这 个 命 令 详 述 每 个 参 数 的 含义 并 给 出 一 些 用 法 的 例 子 显 然 也 可 以 加 入 其 它 信 息 如 提 示 不 同版 本 的 特 殊 性 用 户 常 感 到 有 用 的 信 息 有 如 果 想 做 请 使 用 此 命令 否 则 请 使 用 命 令 这 非 常 有 效
教 程 这 是 一 类 特 殊 的 帮 助 文 件 只 用 于 教 给 初 学 者 实 质 上 是 要 告 诉他 们 如 何 使 用 您 的 程 序 多 数 程 序 员 觉 得 当 用 户 毫 无 经 验 时 这 种 帮助 文 件 非 常 有 用 用 户 只 需 稍 懂 计 算 机 使 用 常 识 就 可 以 了 我 发 现 适 用于 使 用 这 种 帮 助 文 件 的 情 况 之 一 是 数 据 录 入 程 序 一 般 我 先 对 某 项 具 体任 务 给 出 一 个 简 要 的 解 释 再 给 出 一 些 使 用 问 答 如 果 能 对 实 际 应 用 进行 抽 象 给 出 交 互 式 的 帮 助 会 话 也 非 常 可 取 可 以 用 帮 助 文 件 的 宏 命 令来 实 现 它 指 导 用 户 输 入 正 确 的 操 作 这 一 类 型 帮 助 的 不 足 之 处 在 于大 量 的 主 题 难 于 组 织 在 一 起 而 且 用 户 经 过 长 时 间 的 操 作 可 能 还 搞 不 清楚 到 底 要 做 什 么 费 时 费 力 地 做 这 种 集 成 还 不 如 努 力 说 服 公 司 雇 一 二个 培 训 人 员 呢
功 能 区 一 些 应 用 程 序 提 供 这 种 帮 助 是 因 为 它 们 特 殊 的 用 法 比 如 CA D
及 其 它 的 绘 图 程 序 专 门 开 辟 有 这 样 的 功 能 区 CA D 程 序 中 有 绘 图 命令 组 颜 色 模 板 控 制 命 令 组 及 图 形 大 小 形 状 控 制 命 令 组 将 许 多 命 令 分组 有 助 于 用 户 快 速 查 找 原 因 很 简 单 用 户 绘 图 时 只 关 心 绘 图 命 令 等 到 要 进 行 润 色 加 工 时 就 只 关 心 颜 色 啊 效 果 啊 等 相 关 命 令
Web 链 接 如 果 您 还 是 觉 得 编 写 帮 助 文 件 太 麻 烦 了 可 以 使 用 现 成 的 生 成帮 助 软 件 SheepNet 的 站 点http://www .sheepnet.demon.co.u k/helpfile.htm 就 提 供 了 建 立 高质 量 帮 助 文 件 的 方 法 当 然 您 还 是 需 要 花 时 间 学 习 怎 么 使 用 而 且 要想 最 终 给 出 一 个 很 好 的 帮 助 文 件 还 是 需 要 下 一 番 功 夫 的
建 立 脚 本
注 帮 助 文 件 一 般 保 证 在 800 x 600 的 显 示 方 式 下 不 超 范 围
大 纲 建 立 好 以 后 就 要 补 充 血 肉 了 这 时 也 有 一 些 规 则 应 该 遵 循 首 先尽 量 使 一 节 帮 助 的 内 容 只 占 一 屏 这 种 一 屏 规 则 对 HT M L 帮 助 文 件 尤 其 重要 原 因 在 于 它 不 支 持 书 签 和 注 释 用 户 在 第 一 次 找 到 信 息 后 翻 到 其 它 页 再 想快 速 查 找 先 前 看 过 的 页 面 就 不 那 么 容 易 了 用 户 可 不 愿 意 为 了 查 找 一 个 信 息来 回 翻 页 大 多 数 情 况 下 可 以 将 大 块 的 帮 助 文 件 分 成 多 个 子 标 题 以 便 于 查阅 在 目 前 的 硬 件 条 件 下 一 屏 的 大 小 为 800 x 600 不 久 可 能 是 1024 x 768 虽 然 有 了 更 大 尺 寸 的 显 示 器 也 还 会 有 很 多 人 用 小 的 显 示 器
技 巧 大 量 新 型 笔 记 本 电 脑 使 用 1024 x 768 的 显 示 方 式 而 老 一 些 的 用 8 0 0
x 600 甚 至 640 x 480 在 编 写 帮 助 文 件 时 要 牢 记 这 些 条 件
— 屏 规 则 也 有 例 外 例 如 不 想 把 一 个 过 程 分 成 几 个 子 标 题 谁 碰 到这 样 的 帮 助 都 会 很 恼 火 像 建 立 邮 件 合 并 主 文 档 — — 参 见 标 题 3A 来 实 现
您 说 烦 不 烦 类 似 的 指 南 中 的 问 题 也 常 见 于 一 些 日 用 品 的 说 明 书 中 比 如 音 响的 说 明 书 人 们 可 能 都 听 过 这 句 话 这 东 西 读 起 来 怎 么 跟 音 响 说 明 似 的 晦涩 难 懂
当 不 便 于 分 开 的 时 候 可 能 也 会 打 破 一 屏 规 则 例 如 为 了 解 释 的 直 观性 可 能 要 加 进 图 形 这 时 一 屏 就 放 不 下 了 多 数 情 况 下 复 杂 的 过 程 要 调 用 多 个屏 幕 不 要 因 为 过 程 的 复 杂 性 而 不 使 用 子 标 题 只 要 有 可 能 就 尽 量 简 化 所 要做 的 是 在 过 程 的 完 整 性 和 分 割 性 之 间 取 得 平 衡 要 保 证 没 有 子 标 题 的 屏 幕 也 同样 容 易 阅 读 我 们 常 常 把 一 些 信 息 放 在 子 标 题 下 这 样 用 户 看 到 的 是 一 屏 完 整的 信 息 想 阅 读 具 体 内 容 时 只 需 再 点 击 个 别 标 题 就 行 了
以 上 我 所 说 的 可 以 总 结 为 一 句 话 建 立 脚 本 可 能 要 做 的 工 作 像 是 写 本 书但 又 不 能 用 书 的 格 式 不 需 要 像 书 那 样 一 个 主 题 紧 接 着 另 一 个 如 果 真 把 帮 助文 件 做 成 书 的 形 式 不 知 要 激 怒 多 少 人 因 为 有 些 主 题 只 是 介 绍 并 没 有 实 际 意义 而 要 求 每 个 主 题 都 实 有 所 指 当 然 主 题 之 间 加 入 连 贯 性 将 有 助 于 用 户使 用
打 脚 本 只 进 行 了 全 部 工 作 的 一 半 接 下 去 就 要 将 脚 本 变 成 W ind ow s 帮 助 引擎 或 HT M L 可 识 别 的 格 式 从 而 用 户 才 能 使 用 这 时 要 将 大 纲 分 屏 并 在 需 要的 地 方 加 进 超 文 本 链 接 也 有 一 些 帮 助 文 件 编 译 器 需 要 类 似 m a k e 文 件 的 东 西用 来 告 诉 编 译 器 在 帮 助 文 件 中 都 包 含 哪 些 文 件 并 且 可 以 用 按 钮 进 行 选 择
以 下 各 小 节 将 完 整 介 绍 从 脚 本 生 成 帮 助 文 件 的 过 程 之 后 再 介 绍 如 何 为用 V is u a l C + + 开 发 的 应 用 程 序 制 作 具 有 上 下 文 相 关 功 能 的 帮 助 文 件 那 是 建 立帮 助 文 件 的 最 后 一 步 在 把 帮 助 文 件 放 入 应 用 程 序 之 前 应 该 确 保 所 有 的 准 备 工作 都 已 经 到 位
高 级 技 巧
词 汇 表 的 重 要 性
我 们 这 些 整 天 坐 在 机 器 前 面 编 程 的 人 随 时 会 学 到 许 多 新 的 术 语 这 些术 语 就 像 是 每 天 的 调 味 品 而 不 会 成 为 交 流 的 障 碍 常 常 自 己 不 知 不觉 中 就 使 用 了 没 有 专 门 去 学 习 的 术 语
而 对 多 数 用 户 来 说 计 算 机 只 是 个 半 熟 脸 不 过 是 工 作 中 用 到 的 工 具 而已 我 的 一 个 好 朋 友 甚 至 把 她 的 计 算 机 叫 死 对 头 多 好 的 形 容词 对 这 些 人 来 说 新 的 术 语 就 是 障 碍 了 充 满 了 晦 涩 难 懂 术 语 的帮 助 文 件 比 没 有 帮 助 还 糟 糕 因 为 用 户 费 劲 读 了 半 天 啥 也 没 弄 明 白
我 们 必 须 面 对 这 一 事 实 写 帮 助 时 不 可 能 不 用 到 术 语 我 们 这 个 行 业几 乎 每 天 都 在 产 生 新 的 词 汇 只 能 尽 量 避 免 使 用 太 专 业 的 行 话 却 不可 避 免 地 要 用 到 标 准 的 计 算 机 词 汇
最 后 一 步 将 生 词 的 每 次 出 现 都 和 词 汇 表 进 行 热 链 接 这 样 用 户 不 知 道生 词 的 含 义 时 只 需 单 击 链 接 处 就 可 以 了 W ind ow s H e lp 或 HT M L 浏 览 器 就 会 自动 转 入 词 汇 表 的 相 应 入 口 处
1 5. 3 使 用 Mi cr os of t H e l p Co mpi le r
本 章 我 不 想 介 绍 M ic ros oft H e lp C o m p i le r 的 全 部 使 用 过 程 因 为 建 立 帮 助文 件 只 需 用 到 部 分 命 令 就 可 以 了 而 且 这 个 软 件 本 身 的 帮 助 文 件 做 得 非 常 优秀 是 程 序 设 计 人 员 学 习 的 典 范 我 们 要 给 出 一 个 简 单 的 例 子 教 您 如 何 用 标准 字 处 理 软 件 和 H e lp C o m p ile r 组 织 帮 助 文 件 目 前 为 止 市 面 上 还 没 有 更 好 的工 具 我 们 只 能 这 么 做 这 也 是 建 立 帮 助 文 件 最 灵 活 的 一 种 方 法 因 为 设 计 者对 内 容 有 最 大 的 控 制 权
注 释 本 节 只 讨 论 Windows 帮 助 文 件 如 果 想 了 解 HTML 帮 助 文 件 的 技 术请 参 见 本 章 以 后 的 介 绍
V is u a l C + + 在 建 立 帮 助 文 件 前 还 必 须 多 做 一 步 所 幸 的 是 这 一 步 会 为 以 后减 少 工 作 量 特 别 是 在 开 始 做 RT F 或 m a k e f i le 之 前 用 VC + + 的 B IN 目 录 下 的
M a k e H M 制 作 帮 助 映 象 程 序 建 立 一 个 帮 助 映 象 文 件 对 于 V is u a l S tud io 的 用 户 该 程 序 放 在 P rogra m F i le s \ M ic ros oft V is u a l S tud io \C o m m o n \ T o o ls 目 录下 命 令 格 式 如 下
M AKE HM ID _ , H ID _ , 0 X 1 0 0 0 0 R E S OUR C E .H M Y . H M
这 样 就 会 得 到 如 程 序 列 表 15 .1 所 列 出 的 应 用 程 序 的 帮 助 标 志 符 用 于 完 成 在VC + + 和 帮 助 文 件 之 间 的 连 接 现 在 我 们 只 需 知 道 在 帮 助 文 件 中 将 包 含 这 些 标志 符 而 且 在 帮 助 文 件 的 脚 本 中 也 会 用 到
程 序 列 表 15.1
H ID _ C A N C EL _ E D IT_ C N TR 0 X 1 8 0 0 0 H ID _ C A N C E L _ E D IT _ S R VR 0 X 1 8 0 0 1
H ID _ UNDE R L IN E 0 X 1 8 0 0 6
H ID _ S T R IKE T H R OUG H 0 X 1 8 0 0 7
H ID _ B O L D 0 X 1 8 0 0 8
H ID _ IT A L IC 0 X 1 8 0 0 9
H ID _ F ONT _ D IA L O G 0 X 1 8 0 0 A H ID _ V IE W _ F OR M A T T OOL B A R 0 X 1 8 0 0 B H ID _ F O R M AT _ F ONT 2 0 X 1 8 0 1 0
H ID _ HE L P _ C O N T E NT S 0 X 1 8 0 1 2
H ID _ HE L P _ W HAT S T H IS 0 X 1 8 0 1 3
注 释 对 编 辑 软 件 没 有 要 求 就 连 设 计 程 序 环 境 中 的 编 辑 器 也 可 以 使 用唯 一 的 要 求 是 脚 本 文 件 必 须 是 R T F 格 式 的 所 幸 的 是 R T F 实 际 上 就是 带 有 一 些 特 殊 格 式 命 令 的 ASCII 码 文 件 使 用 编 辑 器 时 要 注 意 是 否支 持 CRichEdit MFC 类 标 准 因 为 有 些 老 版 本 不 支 持 某 些 R T F 命 令尽 管 Visual C++ 5.0 及 其 以 后 版 本 提 供 的 CRichEdit 还 不 像 标 准 的编 辑 器 那 样 专 业 但 对 建 帮 助 文 件 来 说 还 是 可 以 很 好 地 工 作 的
M ic ros oft H e lp C o m p i le r M ic ros oft 帮 助 编 译 器 至 少 需 要 两 个 文 件 帮 助脚 本 文 件 和 m a k e 文 件 我 通 常 使 用 M ic ros oft W o rd 来 编 写 脚 本 因 为 它 支 持所 有 的 RT F 而 且 我 用 得 很 熟 首 先 要 将 帮 助 文 件 分 节 每 节 之 间 插 入 一 个 分页 符 在 RT F 文 件 中 使 用 \p a g e 语 句 进 行 分 页 我 在 讲 解 过 程 中 会 介 绍 一 些RT F 语 句 以 供 大 家 参 考
Web 链 接 如 果 微 软 的 软 件 还 不 能 满 足 您 的 需 要 可 查 阅 以 下 站 点http://win 95.daci.net /webwhelp.htm 该 站 点 提 供 了 大 量 的Windows95 的 WinHelp 工 具 和 实 用 程 序 例 如 Help Maker Plus 程序 专 为 替 代 Microsoft Help Compiler 而 设 计 另 一 个 很 好 的 站 点是 Winhelp WW W Index 地 址 为
http://www .hyperact.com/winhel p/FTP_and_file_
Archives/i ndex.html 虽 然 该 站 点 不 包 含 直 接 的 信 息 却 给 出 了 大量 的 有 用 链 接 地 址 如 指 向 R T F 规 范 说 明 的 站 点 指 向 SHED 规 范说 明 的 站 点 等 等 还 有 指 向 其 它 帮 助 文 件 编 译 器 和 设 计 程 序 的 站 点
接 下 来 就 是 为 每 个 标 题 加 入 一 个 或 多 个 脚 注 了 许 多 超 文 本 链 接 函 数 要 用到 脚 注 例 如 索 引 中 的 查 找 单 词 就 是 由 它 而 来 还 用 于 在 词 汇 表 和 帮 助 文 件之 间 建 立 链 接 表 15 .1 给 出 了 一 些 脚 注 这 些 都 是 常 用 的 还 应 该 查 阅 一 下M ic ros oft H e lp C o m p i le r 的 文 档 常 会 有 新 的 补 充
那 么 脚 注 中 有 哪 些 内 容 呢 这 要 依 脚 注 类 型 而 定 例 如 使 用 脚 注 表示 要 加 进 超 链 接 使 用 前 要 仔 细 阅 读 使 用 规 则 一 定 要 注 意 脚 注 名 的 唯 一 性名 字 最 好 是 描 述 性 的 否 则 自 己 也 记 不 住 与 变 量 一 样 超 链 接 的 名 字 中 不 能含 有 空 格 在 RT F 文 件 中 脚 注 表 示 为 < fo o tno te ty pe > { \ foo tno te < te x t> }
然 后 要 对 这 些 含 有 标 志 符 的 脚 注 进 行 编 译 有 了 这 张 清 单 就 可 以顺 利 地 组 织 帮 助 文 件 建 立 超 链 接 了 我 们 先 考 查 一 下 标 准 的 帮 助 文 件 绿 色 的文 字 表 示 超 链 接 实 际 它 们 是 在 双 下 划 线 或 可 点 击 的 标 识 下 的 文 字 RT F 中 分别 为 /u ld b 和 /s trik e 所 以 建 立 超 链 接 的 第 一 步 就 是 进 行 这 项 工 作 双 下 划 线后 是 超 链 接 的 标 题 标 识 符 用 隐 含 文 本 书 写 RT F 中 用 /v 语 句 实 现 这 与脚 注 中 的 标 识 符 相 同
这 时 还 有 一 些 事 情 要 决 定 比 如 是 否 在 帮 助 文 件 中 加 入 图 形 在 适 当 的位 置 加 入 图 形 会 大 受 欢 迎 还 可 以 加 进 声 音 和 多 媒 体 效 果 但 我 觉 得 最 好 是 在对 这 些 技 术 应 用 娴 熟 之 后 再 这 样 做 起 初 还 是 不 用 为 好 还 必 须 决 定 在 m a k e 文 件 中 放 入 哪 些 内 容 以 下 的 章 节 详 细 叙 述 了 完 成 帮 助 文 件 的 实 施 步 骤 我 还会 解 释 各 种 可 用 的 选 项 以 及 对 不 同 类 型 的 帮 助 文 件 我 是 怎 么 实 现 的
表 1 5. 1 Microsoft Help Compiler 中 的 标 准 脚 注 样 式
脚注类型 |
用途 |
||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
* |
最后机器 上可能会留有 许多 RT F 文件 但 其中所包含的 主题不是每个 帮 助 文 件 都 能 用 到 的 举 例 来 说 我 为 一 个 用 于 在 线 问 候 的 通 讯程 序 做 了 一 个 帮 助 文 件 多 数 用 户 感 觉 不 错 当 他 们 在 线 看 到 陌 生的 姓 名 缩 写 时 借 助 帮 助 能 很 快 加 以 识 别 这 是 用 含 有 多 个 主 题 的一个 RT F 文件实现 的 这时又要 为其它实用程 序编写帮助文 件 前面 文 件 中 除 个 别 主 题 外 其 它 主 题 都 适 用 该 怎 么 办 呢 就 用 这 个脚 注 标 识 符 它 定 义 了 一 个 建 立 标 识 与 后 面 将 介 绍 的 帮 助 工 程 文件 HP J 配合使 用 M ic ro s o f t H e lp C o m p ile r 先检查帮 助中要包含的主题 再检查 RT F 文件中的 建立标识符 这个标识符必 须做为主题 的 第 一 个 脚 注 建 立 标 识 是 不 区 分 大 小 写 的 但 我 总 是 用 大 写 这样即使 M ic ro s o f t H e lp C o m p ile r 以后改动 了也不会受到 影响 典 型格式如 下 *{ / foo tn o te B U IL D _ T A G } |
||||||||||||
# |
用于标识 主题的脚注 可以将它看成 GOT O 语句中用 到的标号 当用随后介 绍的技术跳转 到这种主题标 识符时 W indo w s H e lp 的控制也 就 转 到 这 儿 了 它 属 于 帮 助 文 件 中 超 链 接 的 一 部 分 超 链 接 可 满足 多 种 需 要 包 括 菜 单 和 与 词 汇 表 建 立 连 接 它 也 是 不 区 分 大 小 写 的 我还是用大 写 原因同上 典型格式为 #{ \ foo tn o te S O M E _L IN K } |
||||||||||||
$ |
用 于 建 立灰 色 区 域可以是所 |
主 题 标内 也有文本 |
题会 |
的 脚在 比如 |
注主 |
帮 助 主 题 的 标 题 出 现 在题 查 找 和 历 史 记 录 ${ \ foo tn o te 这是一个 标题 } |
窗对 |
口话 |
的框 |
正中 |
文出 |
上现 |
方 |
续 表
+ |
有 时 需 要 在 一 系 列 帮 助 主 题 间 实 现 直 接 转 移 以 方 便 用 户 使 用 例如 一 个 长 过 程 即 使 勉 强 放 在 一 个 窗 口 也 不 便 于 使 用 改 进 的 办 法是 将 这 个 过 程 用 几 个 可 相 互 转 移 的 窗 口 来 表 示 + 脚 注 就 是 用于 这 个 目 的 的 可 以 把 它 称 为 浏 览 序 列 标 识 符 它 激 活 了 帮 助 窗 口中的两个 浏览按钮 << 和 >> W indow s 允许使用 任何标识符做 为浏览 顺 序 它 自 动 地 对 标 识 符 以 字 母 序 排 序 总 是 用 页 序 号 排 序 例如 + { / foo tno te P a g e : 1 } 表 示 该 序 列 中 的 第 一 页 要 注 意 对 每 一 个标题只能 用一个序号 必须在 HP J 文件中加 入 B ro w s e Bu t to n 宏命令来 使浏览按钮起 作用W indo w s H e lp 在帮助文 件初始化过程 中查找这个宏 命令 本章 中 建立 m a k e 文件 一 节将讲述加入 的方法 这 个 标 识 符 是 用 来 方 便 使 用 的 用 户 用 它 可 以 将 长 文 分 段 而 不 会 引起 岐 义 我 发 现 在 显 示 一 个 多 页 图 形 时 也 很 有 用 如 层 次 结 构 图 例如 某 帮助文件包含 有 N ove l l 论坛的结 构图 长度超 过 页 用这 个 标 识 符 用 户 就 很 方 便 地 跨 页 阅 读 了 它 也 适 用 于 参 考 手 册 型 的帮 助 文 件 — — 它 能 够 从 一 个 命 令 转 到 另 一 个 命 令 它 的 应 用 范 围 几 乎没有限 制 |
续 表
K 帮 助 文 件 的 查 找 能 力 依 赖 于 关 键 字 脚 注 在 帮 助 文 件 中 为 每 个 主 题及 其 子 题 目 定 义 一 个 或 多 个 描 述 字 我 总 是 犯 选 过 多 关 键 字 的 毛病 如 果 用 W indow s 9 5 / 9 8 关 键 字 会 出 现 在 查 找 窗 口 的 索引 页 关 键 字 可 以 含 有 各 种 字 符 其 中 可 以 包 括 空 格 W indo w s 还 可 以 识 别 关 键 字 的 大 小 写 这 样 您 就 可 以 尽 量 描 述 清 楚 主 题 的 含义 用 户 也 就 容 易 理 解 了 每 个 主 题 中 可 以 有 多 个 关 键 字 关 键 字之 间 用 隔 开
在 DOS 的帮助编 译器 HC 3 1 中有一个 缺陷 如果使 用这个脚注会 带来一些麻 烦 在 RT F 文件中 这个脚注和其 后的文字之间 必须插入一个空格 否则它就显 示不出来了 而且 如果关 键字是以 K 打头的 更得 多插一个空格 或分号
使 用 该 脚 注 的 一 个 实 例 为 K { / foo tno te C on tro l ; E x i t P u s h b u t ton; L eav in g th e P ro g ra m } 这时用 户能够找到同 样的帮助主题 C on tro l , E x i t P u s h bu tto n, L e a v in g th e P ro g ra m 在建立 RT F 文件时维 护关键字 的 有 序 性 有 助 于 使 复 杂 的 帮 助 文 件 保 持 一 致 一 定 要 确 保 主 题 每次出现用 的都是同一个 关键字 例如 如果某处 用到了 C on tro l
另 一 处 也 必 须 用 同 样 的 形 式 千 万 别 用 复 数 或 其 它 形 式 如 果 帮 助文 件 前 后 一 致 用 户 很 快 就 会 用 顺 手 您 也 就 会 少 很 多 麻 烦 否 则就等着到 处答疑吧
续 表
给 帮 助 文 件 添 加 特 殊 效 果
可 以 对 帮 助 文 件 做 许 多 润 色 工 作 我 最 常 添 加 的 效 果 就 是 图 形 例 如 可从 实 际 程 序 中 抓 取 屏 幕 样 图 用 H o ts pot 编 辑 器 ( S HE D .E X E ) 在 图 上 定 义 热 点 该 编 辑 器 支 持 BM P D IB W M F SH G 等 多 种 图 形 文 件 格 式 一 般 含 热 点 的文 件 都 使 用 SH G 格 式
技 巧 对 教 程 类 的 帮 助 文 件 我 最 喜 欢 加 入 的 图 形 是 回 答 按 钮 它 们 看上 去 就 像 标 准 的 Windows 按 钮 一 样 用 户 看 到 提 问 作 出 回 答 后 按 下这 个 按 钮 就 会 得 知 操 作 得 对 不 对 这 个 方 法 也 可 以 应 用 于 其 它 控 件Windows 标 准 帮 助 中 没 有 提 供 这 么 强 的 功 能 它 提 供 了 {BUTTON [LABEL],Ma cro1 [:Macro2:...:Ma croN]} 的 命 令 用 以 建 立 标 准 按 钮
Label 内 容 是 按 钮 上 显 示 的 文 字 宏 命 令 则 是 实 际 执 行 的 动 作
下 面 我 们 花 点 时 间 讲 解 一 下 H o ts p o t E d ito r 编 辑 器 图 15 .1 是 它 的 典 型 界 面这 里 我 打 开 了 一 个 后 面 也 要 用 到 的 例 子 程 序 窗 口 该 程 序 用 于 测 试 帮 助 文 件目 前 我 们 只 关 心 主 窗 口 的 格 式 我 打 算 为 帮 助 文 件 的 每 个 控 件 设 置 热 点
ho ts pot 以 方 便 用 户 查 找 不 能 用 H o ts p o t E d ito r 建 立 一 个 新 图 真 想 那 样 做只 能 用 其 它 图 形 软 件 H o ts pot 只 是 按 照 用 户 设 想 的 动 作 在 相 应 位 置 作 出 标 识当 帮 助 文 件 中 的 光 标 由 指 针 形 状 变 为 手 指 形 状 时 你 就 会 看 到 H o ts pot E d i tor 的效 果
图 1 5 . 1 H o ts p o t E d ito r 不建立一 个新图 只是 在现有文件中 建立热点
注 属 性 对 话 框 用 于 定 义 为 图 形 所 建 热 点 的 类 型
建 立 热 点 就 像 拖 动 鼠 标 一 样 简 单 全 部 的 工 作 就 是 建 立 一 个 如 图 15 .2 所 示的 矩 形 框 它 指 示 的 区 域 就 是 热 点
热 点 建 完 还 需 对 它 进 行 定 义 双 击 热 点 就 会 看 到 如 下 图 所 示 的 属 性 对 话
框
其 中 只 有 三 个 需 要 指 定 的 参 数 内 容 字 符 串 C on te x t S tr ing 类 型 T y p e 和 属 性 A ttrib u te 内 容 字 符 串 的 作 用 与 前 面 介 绍 的 双 下 划 线 标 识 的 作 用 相 同是 超 链 接 的 第 二 种 形 式 用 户 点 击 热 点 时 就 会 转 到 相 应 的 指 定 链 接 处 热 点 的边 框 可 设 为 有 或 无 我 一 般 都 设 为 无 边 框 共 有 三 种 热 点 类 型 下 面 分 别 予 以叙 述
技 巧 使 用 Edit|Prefe rences 命 令 可 以 定 义 一 组 标 准 的 热 点 属 性 该 命 令将 打 开 一 个 对 话 框 在 该 对 话 框 中 定 义 缺 省 的 内 容 字 符 串 类 型 以 及属 性 使 用 这 个 对 话 框 还 可 以 定 义 缺 省 的 热 点 标 识 ID
图 15 .2 创建热点 容易到只要拖 曳下鼠标 — — 方框指明 了热点的出现 位置
跳 转 型 Jump 此 时 无 论 内 容 字 符 串 指 示 的 帮 助 主 题 是 什 么 当 前窗 口 的 内 容 都 会 被 替 换 用 户 实 际 上 从 帮 助 文 件 的 一 个 区 域 转 到 了 另 一个 区 域 适 用 于 帮 助 用 户 查 找 同 一 主 题 下 的 多 项 内 容 可 以 用 它 建 立 一个 参 见 按 钮 也 可 用 于 实 现 在 多 页 结 构 图 中 的 跳 转 链 接 这 种 跳 转是 直 接 完 成 的 不 需 要 再 按 浏 览 按 钮 我 还 用 它 实 现 图 形 控 件 间 的转 移 以 模 拟 实 际 的 应 用
弹 出 型 Pop-up 这 类 跳 转 最 常 用 于 控 件 描 述 或 其 它 插 图 性 的 热 点 说明 与 它 相 关 的 帮 助 主 题 显 示 在 弹 出 窗 口 中 好 处 是 用 户 无 需 离 开 原 窗口 就 可 以 方 便 地 查 看 控 件 说 明 我 也 将 它 用 于 教 程 型 的 帮 助 文 件 中 的问 答 部 分 按 回 答 按 钮 对 问 题 的 回 答 就 会 显 示 在 弹 出 窗 口 中
宏 命 令 型 Macro 可 能 有 时 不 想 让 某 个 图 形 显 示 帮 助 文 件 中 的 内 容 宏 命 令 型 的 热 点 可 以 执 行 预 定 义 的 宏 后 面 会 给 出 用 宏 建 立 m a k e 文 件的 例 子 从 中 体 会 到 W ind ow s 帮 助 中 宏 的 强 大 功 能 甚 至 可 以 用 它 改变 W ind ow s 帮 助 的 工 作 方 式
技 巧 Microsoft Help Co mpiler 提 供 了 许 多 预 定 义 的 宏 例 如
SetPopupCo lor 宏 命 令 改 变 弹 出 窗 口 的 颜 色 给 用 户 设 计 一 些 按 钮 和菜 单 实 际 是 执 行 这 些 宏 命 令 会 极 大 地 提 高 帮 助 界 面 的 友 好 性 用位 图 指 示 宏 的 方 法 是 建 立 彩 色 方 框 位 图 当 用 户 点 击 该 图 时 帮 助 窗口 的 颜 色 会 发 生 变 化 以 匹 配 其 内 容
属 性 对 话 框 中 还 有 一 些 有 必 要 了 解 但 无 需 更 改 的 域 一 个 就 是 H o ts pot ID
域 实 际 是 该 热 点 的 标 识 符 由 于 本 书 的 读 者 多 是 程 序 设 计 人 员 我 后 面 会 介
绍 一 下 它 的 用 法 另 外 四 个 域 定 义 了 热 点 的 边 框 用 于 调 整 边 框 的 位 置 和 大 小我 觉 得 用 它 们 来 调 整 更 方 便 更 迅 捷 用 户 只 关 心 热 点 是 否 存 在 而 不 会 太 在 意位 置 是 否 偏 离 了 一 两 个 像 素 点
有 时 你 可 能 要 重 定 义 某 个 热 点 对 于 那 些 可 见 热 点 当 然 好 查 找 但 是 我 们说 过 多 数 热 点 都 定 义 为 不 可 见 的 那 么 怎 么 查 找 呢 用 编 辑 查 找 命 令它 的 形 式 如 下 图 所 示
注 意 这 里 显 示 出 了 当 前 图 中 的 所 有 热 点 是 按 热 点 标 识 符 顺 序 列 出 的 而不 是 按 内 容 字 符 串 排 序 的 选 中 一 个 热 点 后 相 应 的 内 容 字 符 串 就 会 显 示 您 就
可 以 验 证 是 否 是 要 找 的 热 点 同 时 显 示 的 还 有 跳 转 类 型 和 属 性 信 息 虽 然 微 软没 有 加 进 范 围 信 息 多 数 情 况 现 有 信 息 足 够 用 了
全 部 热 点 定 义 完 后 可 以 用 文 件 保 存 命 令 以 当 前 文 件 名 保 存 该 图 形文 件 我 一 般 都 用 文 件 另 存 为 ... 命 令 将 它 存 成 SH G 文 件 虽 然 H o ts p o t E d ito r 没 有 坚 持 一 定 要 这 样 做 但 我 建 议 最 好 还 是 做 一 下 否 则 您 可 能 会 发 现 某 些 更改 过 的 信 息 用 其 它 绘 图 软 件 读 不 出 来 因 为 用 H o ts p o t E d ito r 不 能 修 改 图 形 本身 应 该 保 持 一 份 原 文 件 的 副 本 以 便 日 后 修 改
现 在 我 们 得 到 了 图 样 或 其 它 多 媒 体 元 素 怎 么 加 到 帮 助 文 件 中 呢 微软 定 义 了 一 系 列 命 令 用 以 完 成 向 帮 助 文 件 中 加 入 图 形 或 其 它 元 素 的 功 能 这 些命 令 在 一 定 程 度 上 控 制 着 这 些 控 件 的 放 置 但 我 觉 得 它 提 供 的 位 置 机 制 太 原 始了 表 15 .2 是 全 部 命 令 的 清 单
注 一 定 要 用 文 件 另 存 为 ... 命 令 保 存 编 辑 过 的 图 形 文 件 否 则 原 始图 形 文 件 会 被 覆 盖 再 想 用 就 没 有 了
技 巧 可 以 在 表 15.2 列 出 的 三 个 图 形 命 令 前 加 上 T 透 明 它 将 图 形 背景 的 颜 色 自 动 变 为 帮 助 窗 口 的 底 色 从 而 实 现 透 明 化 例 如 {BMRT FIGURE.BMP } 命 令 在 屏 幕 右 上 角 显 示 名 为 figure 的 位 图 并 将 底色 变 为 透 明 的 该 特 性 仅 限 于 1 6 色 图 形
表 1 5.2 多 媒 体 帮 助 命 令
命令 |
描述 |
---|---|
{ B M R < F ile n a m e > } |
在窗口 右侧 显示 图 像 必 须给出 带扩 展名 的完 整文 件名W indo w s 帮助系统 识别位图文件 (B M P D IB W M F ) 多热 点 位 图 文 件 SH G 和 多 解 析 度 位 图 文 件 M R B 但不幸的 是 不能使用 PC X 文件 |
{ B M C < F ile n a m e > } |
在窗口中 央显示图像 |
{ B M L < F ile n a m e > } |
在窗口左 侧显示图像 |
{ M C I_ LEF T [< O p tio n s > ,] <F ile n a m e >} |
在窗口左 侧显示多媒体 控件 M C I 文件 在 M ic ro s o f t H e lp W o rk s h o p 帮助文件 中有一个错误 它说该 选项只支持 AVI 文件 其 实最新版的 W indow s 帮助系统 支持所有的 M C I 格式 包括 W A V M ID 和 AVI 最好只 用这三种格式 文件 除 非 您 知 道 所 用 格 式 是 现 用 系 统 支 持 的 可 以 给 出 一或多个选 项 包括 EX TE R N A L NOP L AYE R NOM E N U RE P E A T 和 PL A Y EX TER N A L 选项保证 该文件独立于帮助 文 件 从 而 减 少 了 加 载 帮 助 时 占 用 的 空 间 不 便 之 处在于多媒 体文件必须作 为帮助中的独 立项目 W indo w s 帮助 在 显 示 文 件 时 总 是 显 示 相 关 的 媒 体 播 放 器 可 以 用NOP L AYE R 选 项 屏 蔽 它 实 现 自 动 播 放 和 重 复 播 放 的 功能 NOM E N U 选 项 显 示 一 个 不 带 菜 单 按 钮 的 播 放 条 它保持了播 放条的基本功 能但不能重放 RE P E A T 选项则实现第一 次播 放完 成 后 立即 重播功 能 PL A Y 选 项 进 行 自 动 播放 — — 非常适用 于闪烁窗口 |
续 表
{M C I_ R IG H T [< O p tio n s > ,]< F ile n a m e> } |
在窗口右 |
侧显示多媒体 |
控件 |
M C I |
文件 |
技 巧 为 支 持 多 种 显 示 方 式 可 以 为 同 一 命 令 指 定 多 个 位 图 文 件 Windows 帮 助 系 统 自 动 选 用 最 适 合 的 位 图 文 件 例 如 命 令 {BMR CAT016.BMP ;CAT256.BMP; CAT024.BMP} 分 别 提 供 了 1 6 位 256 位 和 24
位 三 种 彩 色 位 图 供 不 同 的 机 器 使 用 更 进 一 步 还 可 以 用 M R B 文 件 来提 高 帮 助 文 件 的 灵 活 性 其 好 处 是 您 能 够 非 常 灵 活 地 显 示 详 细 信 息当 然 前 提 是 用 户 的 机 器 支 持 W M F 坏 处 是 帮 助 文 件 骤 然 增 长 大 吃内 存
注 释 进 一 步 扩 展 帮 助 文 件 的 帮 助 语 句 是 {EWx<DLLNa me>, <Windo wName>,
<Data>} 可 以 用 它 访 问 外 部 的 D L L 其 中 E W x 的 x 指 示 D L L 中 左 ( l ) 右 ( r ) 和 中 央 ( c ) 的 位 置 WindowName 包 含 当 前 帮 助 文 件 窗 口 的名 字 前 面 我 们 说 过 是 用 $ 脚 注 标 出 的 Data 用 于 向 DLL 中 传 递 待 处理 的 数 据
注 要 慎 用 图 像 和 声 音 文 件 以 防 帮 助 文 件 过 长
帮 助 文 件 中 肯 定 可 以 有 响 铃 鸣 叫 以 及 其 它 应 用 程 序 能 具 有 的 各 种 多 媒 体效 果 但 是 你 应 该 仔 细 考 虑 不 要 因 为 追 求 这 些 效 果 而 带 来 很 大 的 负 面 效 应
即 使 很 小 的 多 媒 体 程 序 也 要 占 较 多 的 资 源 所 以 只 有 当 确 信 它 们 能 带 来 理 想 的效 果 时 才 使 用 图 像 和 声 音
编 写 帮 助 文 件 时 还 必 须 考 虑 内 存 的 开 销 当 用 户 使 用 帮 助 时 W ind ow s 帮助 系 统 总 是 装 载 所 有 文 件 减 少 占 用 内 存 量 的 一 种 方 法 是 使 用 许 多 外 部 文 件 即 将 帮 助 文 件 分 成 许 多 部 分 多 媒 体 都 存 为 外 部 形 式 少 量 使 用 图 像 和 声 音 的目 的 之 一 是 使 你 的 帮 助 文 件 增 加 趣 味 性
建 立 Make 文 件 及 编 译 帮 助 文 件
建 立 一 系 列 的 RT F 文 件 可 能 是 编 写 帮 助 文 件 中 最 费 时 的 工 作 与 编 程 时 所用 的 m a k e 文 件 工 程 文 件 不 同 编 译 帮 助 文 件 的 m a k e 文 件 含 有 的 不 只 是 要编 译 的 文 件 的 清 单
本 节 我 们 将 介 绍 手 工 建 立 m a k e 文 件 的 方 法 M ic ros oft H e lp W o rk s hop 程 序提 供 了 一 种 自 动 的 方 法 我 们 将 在 随 后 的 章 节 中 介 绍 先 介 绍 手 工 方 法 的 原 因 是使 用 HC 3 1 — — DOS 版 的 编 译 程 序 时 必 须 用 它 而 且 清 楚 了 m a k e 文 件 的 组 成 有助 于 以 后 调 整 其 结 构
我 们 从 观 察 一 个 典 型 的 m a k e 文 件 开 始 程 序 列 表 15 .2 包 含 了 本 书 中 使 用的 帮 助 文 件 的 m a k e 文 件 如 果 用 DOS 程 序 来 编 写 帮 助 文 件 所 有 的 工 作 都 必须 手 工 填 写 不 同 于 我 们 所 看 到 的 m a k e 文 件 顶 部 的 注 释 中 的 说 明 该 说 明 声称 帮 助 编 译 器 自 已 维 护 文 件 不 要 开 发 人 员 直 接 修 改 它 们 后 面 我 们 将 用M ic ros oft H e lp W o rk s hop 程 序 建 立 同 样 的 帮 助 文 件 这 里 我 所 用 到 的 一 些 东 西并 不 是 典 型 帮 助 文 件 所 必 须 具 备 的 我 会 进 一 步 讲 解 何 时 用 到 它 们
注 释 程 序 列 表 15.2 中 的 有 些 条 目 因 为 过 长 可 能 被 分 写 成 了 数 行 真 正 使用 这 个 程 序 列 表 时 一 定 要 保 证 每 个 条 目 都 在 一 行 上
程 序 列 表 15.2
;T h is file is m a in ta in e d b y H C W .D o n o t m o d ify th is file d ire c tly .
[ O P T IONS ] HC W = 0
C O M P R E S S = 12 H a l l Z e c k E R R O R L OG= HE L P .L OG
L C ID = 0x4 09 0x 0 0 x0 ; E ng lish ( U n ite d S ta te s ) RE P O R T = Y e s
C O N T EN TS = C O N TEN TS
T ITLE= S in g le D o c u m e n t A p p l ic a t io n H e lp F i le Ex a m p le C O P Y R IG H T = 199 8 So m e C o m p a n y
H L P= .\ Sn g l_ D o c .h lp
[F IL E S ]
.\ S a m p le .r tf
.\ G lo s s a ry .r tf
[M A P ]
# inc lu de ..\ R e s o u rc e \ m y . h m
C O N T E N T S = 1 ;M a in h e lp file m e n u .
F O R M A T _T O O L B A R = 2 ;F o rm a t too lb a r e x p la n a t io n s hortc u t. G L O S S A R Y = 3 ; G lo s s a ry w indow s h o r tc u t.
H ID _ F O R M AT _ F ONT = 0 x 1 E 1 6 0 ; A d d e d fo r ID _ F OR M A T _ F ONT in AF XR e s .h f i le .
[W IN D O W S ]
M a in = " A S a m p le H e lp F i le " ,( 0 ,0 ,8 00 ,6 00),5 2 4 84 ,( r l 48 76 67 1),( r 1 26 32 2 5 6),f 7 ; T h is is th e
m a in w indow . G lo s s a ry = " A |
S a m p le |
H e lp |
F ile |
- |
---|---|---|---|---|
G los s a ry " ,( 50 ,5 0 ,8 5 0 ,6 5 0 ) ,5 |
2 8 4 8 ,( r l 4 87 66 71),( r 1 2 6 |
3 2 2 5 6),f 7; T h e |
d ire c t |
G lo s s a ry he lp |
w ind ow . |
[ C ONF IG ]
C B (" g lo s sa ry " ," & G lo s s a ry " ," J I ( 'S NGL _ DOC . H L P > g lo s s a ry ','GL OS S A R Y ' )" ) ; A d d a G los s a ry bu tton to th e d isp la y .
C B (" c o n tro ls " ," C & o n tro ls" ," J I('S N G L _ D O C .H L P > m a in ','F O R M A T _ T O O L B A R ')" ) ; ; A d d a ju m p to th e c o n tro ls b itm a p b u tto n .
R e g is ter R o u t in e(" U S E R " ," E n a b le M e n u I tem " ," u u u " ) ; E n a b le ( o r d isa b le) a m e n u i tem . R e g is te r R o u tin e ( " U S E R " ," G e t S ubM e n u " ," u= u u " ) ; G e t th e n a m e of a s u bm e nu.
R e g is ter R o u t in e(" U S E R " ," G e t M enu " ," u = u " ) ; G et a m e n u nam e .
R e g is te r R o u tin e ( " U S E R " ," G e t A c t iv e W indow " ," u = " ) ; G e t th e a c t iv e w in dow na m e .
R e g is te r R o u tin e ( " U S E R " ," D ra w M e n u B a r" ," u" ) ; Ins truc t W indo w s H e lp to d ra w a m e nu ba r .
E n a b le M e n u I te m ( G e tS u b M e n u ( G e tM e n u ( G e tA c t iv e W in d o w ()),1 ) , 0 ,1 0 2 7 ) ;D isa b le th e c opy op tion of th e E d i t M e nu.
D ra w M e n u B a r ( G e tA c tiv e W in d o w ( ) ) ;R e d ra w th e m e n u w h e n w e 're th ro u g h .
正 如 你 所 看 到 的 这 个 m a k e 文 件 看 上 去 有 些 庞 大 我 们 最 好 分 节 来 解 释例 如 观 察 F ILES 一 节 它 列 出 的 是 脚 本 文 件 按 微 软 的 叫 法 是 主 题 清单 我 们 先 仔 细 讲 解 一 下 第 一 小 节
M a k e 文 件 的 OP T IO N S 小 节 指 示 帮 助 编 译 器 如 何 编 译 文 件 这 里 的 大 部 分条 目 都 是 不 言 自 明 的 当 然 是 对 英 文 好 的 人 士 来 说 译 者 注 例 如
CO P Y R IG H T 语 句 出 现 在 帮 助 窗 口 的 关 于 ... 对 话 框 CO M P RE S S 语 句 指 示编 译 器 是 否 对 文 件 进 行 压 缩 以 及 如 何 压 缩 HC W 语 句 是 M ic ros oft H e lp W o rk s hop 专 有 的 使 用 DOS 编 译 器 时 用 不 到 最 需 要 注 意 的 是 HL P 条 目 帮助 文 件 的 文 件 名 和 V is u a l C + + 程 序 名 相 同 虽 然 这 不 是 必 须 的 要 求 但 使 用 这样 的 名 称 却 会 极 大 地 简 化 以 后 的 操 作 M F C 会 自 动 完 成 调 用 与 程 序 同 名 的 帮助 当 然 二 者 的 扩 展 名 是 不 同 的
M A P 小 节 用 于 设 置 帮 助 内 容 的 属 性 在 此 出 现 的 每 个 词 都 必 须 是 脚 本 文 件中 的 某 个 帮 助 主 题 标 识 符 # 脚 注 所 标 出 的 内 容 为 每 个 跳 转 赋 值 实 现 了 从 控件 中 访 问 帮 助 主 题 的 功 能 用 户 只 需 选 中 控 件 按 F1 就 可 以 看 到 关 于 该 控 件 的 帮
助 注 意 我 们 没 有 把 程 序 中 用 到 的 所 有 控 件 都 罗 列 出 来 而 只 是 包 括 了 HM
文 件 其 好 处 是 不 仅 节 省 了 录 入 时 间 还 有 助 于 发 现 帮 助 文 件 中 的 漏 洞
有 多 种 方 法 显 示 帮 助 文 件 中 的 数 据 我 一 般 为 每 个 主 题 开 设 一 个 窗 口 在m a k e 文 件 的 W INDOW S 小 节 列 出 了 两 个 窗 口 一 个 是 主 窗 口 这 个 窗 口 总 是显 示 的 另 一 个 是 词 汇 表 窗 口 当 用 户 点 击 工 具 栏 上 的 G lo ssa ry 按 钮 时 就 会显 示 该 窗 口 通 过 它 用 户 可 以 在 不 失 去 当 前 位 置 的 前 提 下 查 找 单 词 显 然 并 不是 每 次 用 户 访 问 词 汇 表 时 都 显 示 这 个 窗 口 如 果 用 户 点 击 帮 助 文 件 中 的 超 链 接文 本 访 问 词 汇 表 词 汇 表 就 显 示 在 主 窗 口 中 而 不 会 另 开 一 个 窗 口 这 时 用 户 只需 用 返 回 按 钮 就 可 以 返 回 到 以 前 的 位 置
C ONF IG 一 节 是 我 要 着 重 介 绍 的 这 是 建 立 m a k e 文 件 时 费 时 最 多 的 部 分 原 因 也 正 在 于 它 最 灵 活 我 的 m a k e 文 件 中 有 三 类 事 件 建 立 按 钮 注 册 函 数及 执 行 一 系 列 的 W ind ow s A P I 调 用 显 然 可 以 加 入 任 何 事 件 我 们 先 看 一 看下 面 这 个 相 对 简 单 的 例 子
由 建 立 两 个 新 按 钮 开 始 第 一 个 是 词 汇 表 按 钮 这 时 要 用 到 两 个 不 同的 宏 调 用 一 个 用 于 建 立 按 钮 以 G lo ssa ry 作 为 它 的 标 签 名 并 在 字 母 G
下 加 下 划 线 功 能 是 跳 转 到 JI 宏 调 用 所 返 回 的 标 识 符 位 置 JI 宏 调 用 看 上 去 使用 了 两 个 参 数 实 际 使 用 了 三 个 参 数 S NGL _ DOC .H L P > g lo s s a ry 实 际 提 供了 两 条 信 息 一 是 告 诉 JI 宏 使 用 哪 个 帮 助 文 件 二 是 告 诉 JI 宏 使 用 哪 个 窗 口 显示 帮 助 主 题 另 一 个 参 数 提 供 主 题 标 识 符 的 名 称 — — 请 记 住 这 是 一 个 # 型 脚 注
接 下 来 要 做 的 工 作 是 向 W ind ow s H e lp 注 册 一 些 DL L 函 数 注 册 的 函 数 数目 不 受 限 制 注 册 过 程 分 为 三 步 第 一 告 诉 W ind ow s H e lp 调 用 哪 个 DL L
W ind ow s H e lp 总 是 假 设 DL L 在 SY ST E M 目 录 下 所 以 要 么 把 DL L 放 在 这 个 目录 下 要 么 给 出 它 所 在 的 路 径 我 一 般 都 是 放 在 SY ST E M 目 录 下 因 为 无 法 预测 用 户 将 来 会 把 它 放 在 哪 里 第 二 给 出 该 DL L 中 所 用 的 函 数 名 字 注 意 大 小写 要 与 原 函 数 完 全 一 致 — — 过 去 我 曾 遇 到 过 因 函 数 名 不 一 致 带 来 的 麻 烦 第 三告 诉 W ind ow s H e lp 该 函 数 将 要 查 找 何 种 参 数 当 我 注 册 G e t S ubM e n u 函 数 时 需使 用 u= uu 即 此 函 数 需 要 两 个 无 符 号 数 作 为 输 入 返 回 一 个 无 符 号 数 作输 出 共 有 四 种 数 据 类 型 无 符 号 数 带 符 号 数 i 字 符 串 或未 知 类 型 v 等 号 总 是 用 于 分 隔 输 入 值 与 输 出 值
在 注 册 过 AP I 调 用 之 后 可 以 使 帮 助 的 显 示 发 生 一 些 变 化 可 以 做 的 包 括所 有 注 册 过 的 函 数 提 供 的 功 能 以 禁 止 使 用 Ed it |C o p y 命 令 为 例 虽 然 还 可 以看 到 它 但 已 变 为 灰 色 的 即 不 可 执 行 使 用 这 种 技 术 可 以 使 帮 助 做 的 非 常 时髦 注 意 完 成 时 要 用 D ra w M e nuB a r 函 数 来 重 画 菜 单 条 否 则 所 做 的 修 改 可 能 显示 不 出 来
最 后 一 步 就 是 编 译 帮 助 文 件 了 如 果 用 的 是 DO S 版 的 帮 助 编 译 器
H C 31 .E X E 必 须 在 [C O N F IG ] 小 节 给 出 记 录 文 件 lo g 文 件 我 的 m a k e 文 件 中 用 E RRO RL O G = H E L P . L O G 语 句 来 实 现 使 我 可 以 用 文 本 文 件 来 查 看 帮助 文 件 中 的 错 误 不 便 的 是 DOS 版 的 帮 助 编 译 器 是 命 令 行 驱 动 的 界 面 不 够友 好 如 果 不 指 定 记 录 文 件 你 就 只 好 期 望 有 一 目 十 行 的 本 事 了 所 要 做 的 很简 单 键 入 HC 3 1 < M A KE F IL E > .H P J m a k e 文 件 一 定 要 带 HP J 扩 展 名 否 则编 译 器 找 不 到 在 建 立 过 程 中 编 译 器 会 在 屏 幕 上 显 示 许 多 … … 当 再 次显 示 DOS 提 示 符 时 表 示 编 译 已 经 完 成 了
1 5. 4 使 用 Mi cr os of t H e l p Wo rks ho p
早 期 的 W ind ow s 程 序 设 计 人 员 即 使 编 译 一 个 很 小 的 工 程 文 件 也 要 学 习 很 多东 西 那 时 的 工 具 很 简 陋 即 使 一 个 小 程 序 也 要 编 很 多 代 码 那 时 是 DOS 的 天下 但 随 着 编 译 程 序 的 改 进 DOS 已 是 昔 日 黄 花 但 编 译 帮 助 文 件 时 还 是 要 用到 那 些 编 译 程 序 实 际 上 我 也 很 反 感 用 DOS 程 序 来 建 立 帮 助 文 件 但 是 在 最 新版 的 W ind ow s 95 / 98 编 译 程 序 出 现 以 前 也 只 能 使 用 它 即 使 是 第 三 方 厂 家 专 门 开发 的 编 译 程 序 有 时 也 要 和 晦 涩 的 HC 3 1 命 令 行 程 序 打 交 道 它 们 在 编 译 过 程 的可 视 性 方 面 并 没 有 实 质 性 的 改 进
注 释 本 节 专 门 讨 论 了 Windows 帮 助 文 件 如 果 关 心 HTML 帮 助 文 件 的 建立 技 术 请 阅 读 后 续 章 节
在 引 入 了 M ic ros oft H e lp W o rk s hop 之 后 编 译 过 程 有 了 全 面 的 改 观 再 也不 用 依 赖 于 基 于 DOS 的 编 译 程 序 了 M ic ros oft H e lp W o rk s hop 在 W ind ow s 环境 下 建 立 并 编 译 帮 助 工 程 文 件 帮 助 m a k e 文 件 的 另 一 种 叫 法 图 15 .3 是M ic ros oft H e lp W o rk s hop 典 型 的 显 示 示 例
图 15 .3 M ic ro s o f t H e lp W o rk sh o p 提供了一 个方便的 GUI 用以建立 帮助文件
注 释 即 使 使 用 Microsoft Help Wo rkshop 也 还 是 需 要 一 个 生 成 R T F 文件 的 编 辑 器 我 不 知 道 Microsoft 为 什 么 没 有 改 进 这 一 方 面 事 实 就是 如 此 我 还 是 用 Microsoft Word 建 立 RTF 文 件 在 使 用 Microsoft Help Works hop 建 立 帮 助 文 件 时 所 用 的 make 文 件 指 向 这 些 文 件
我 们 看 看 这 个 工 具 如 何 降 低 建 立 过 程 的 复 杂 性 所 建 的 m a k e 文 件 如 程 序 列表 15 .2 所 示 假 定 已 经 建 立 了 包 含 帮 助 脚 本 的 RT F 文 件 第 一 步 是 建 立 一 个新 的 工 程 文 件 用 F ile |N e w 命 令 实 现 系 统 会 显 示 如 下 图 所 示 的 对 话 框
选 择 H e lp P ro ject 后 按 OK 完 成 如 图 15 .3 所 示 已 经 建 成 了 一 个 新 的 帮助 工 程 文 件 它 初 始 为 一 个 空 白 文 件 由 你 填 入 帮 助 文 件 的 特 性
警 告 用 Microsoft Help Workshop 建 立 的 文 件 与 用 D O S 编 译 程 序 建 立 的文 件 互 不 兼 容 必 须 预 先 做 好 决 定 新 的 Microsoft Help Workshop 对 开 发 者 更 好 用 但 只 限 于 3 2 位 的 操 作 系 统 环 境 如 果 还 需 要 对Windows 3. x 向 下 兼 容 就 只 好 用 D O S 编 译 程 序 了
定 义 工 程 的 各 种 选 项
当 开 始 使 用 一 个 新 的 工 程 文 件 时 总 要 先 定 义 一 些 选 项 例 如 至 少 要 知道 调 用 帮 助 文 件 的 目 的 要 加 进 哪 些 版 权 信 息 我 一 般 以 内 容 主 题 为 主 目 录所 以 把 它 加 在 帮 助 文 件 的 开 头 位 置 是 适 宜 的 点 击 O p tions 按 钮 系 统 就 会 显示 O p tions 对 话 框
注 意 此 时 已 经 定 义 了 一 些 基 本 选 项 这 些 选 项 的 含 义 类 似 于 前 面 章 节 中 m a k e 文 件 描 述 的 内 容 你 会 看 到 Co m p re s s io n 属 性 页 上 的 选 项 相 当 熟 悉 它 们 也 是用 来 压 缩 帮 助 文 件 大 小 的 此 时 有 些 人 会 觉 得 这 个 工 具 并 没 有 什 么 优 越 性特 别 是 当 他 们 的 盘 上 有 很 多 预 定 义 文 件 时 要 指 出 的 是 这 个 对 话 框 使 你 只 需 填
填 表 而 不 用 再 一 条 一 条 地 完 成 语 句
O p tions 对 话 框 的 S o rtin g 属 性 页 有 二 个 区 域 第 一 个 区 域 决 定 了 帮 助 文件 使 用 的 语 言 语 言 决 定 了 排 序 原 则 每 种 语 言 的 字 母 顺 序 都 不 相 同 第 二 个区 域 有 两 个 选 项 一 个 选 项 允 许 忽 略 非 空 格 字 符 例 如 如 果 不 选 此 项 出 现在 ê 上 的 就 会 影 响 排 序 另 一 个 选 项 表 示 排 序 过 程 忽 略 帮 助 文 件 中 的 所有 符 号 项 这 对 于 为 数 据 录 入 程 序 或 其 它 一 般 应 用 程 序 建 立 非 特 殊 的 索 引 时 非常 方 便 另 一 方 面 为 参 考 手 册 型 的 帮 助 文 件 建 立 索 引 时 它 又 确 实 很 碍 事 因为 许 多 的 C 函 数 都 是 以 _ 开 头 的 忽 略 _ 就 不 容 易 识 别 函 数
O p tions 对 话 框 的 F ile s 属 性 页 如 下 图 所 示
你 会 注 意 到 它 的 许 多 选 项 我 们 以 前 都 介 绍 过 修 改 H e lp F ile 域 可 以 给 帮 助文 件 改 名 一 般 帮 助 编 译 器 用 工 程 文 件 名 作 为 帮 助 文 件 名 的 基 础 L og F i le 域包 含 了 记 录 文 件 的 文 件 名 所 幸 的 是 这 一 项 在 新 的 帮 助 编 译 器 中 已 不 是 必 需 的了 我 还 是 用 它 来 记 录 编 译 过 程 但 现 在 这 是 可 做 可 不 做 的 事 情
在 此 属 性 页 上 的 最 重 要 的 域 是 RT F 文 件 清 单 框 当 前 帮 助 文 件 的 工 程 文 件
所 含 的 文 件 都 列 在 这 里 点 击 C h a nge 按 钮 显 示 T op ic F ile s 对 话 框 如 下图 所 示
从 这 里 可 以 增 加 或 删 除 工 程 文 件 中 F ILES 小 节 所 列 出 的 主 题 文 件 注 意 此对 话 框 中 的 两 个 复 选 框 它 们 很 重 要 因 为 它 们 控 制 着 帮 助 编 译 器 如 何 响 应 RT F 文 件 第 一 个 选 项 允 许 编 译 器 在 下 一 次 编 译 时 自 动 执 行 对 RT F 所 做 的 更 改 如
果 未 选 中 该 项 编 译 器 就 会 忽 略 所 做 的 改 动 第 二 个 选 项 对 使 用 双 字 节 字 符 集
D BCS 的 帮 助 文 件 非 常 重 要 它 改 变 了 帮 助 编 译 器 的 工 作 方 式 从 而 保 留 了特 殊 字 符 该 特 征 主 要 用 于 特 殊 的 语 言 比 如 中 文 等
技 巧 进 入 Topic Files 对 话 框 的 另 一 途 径 是 单 击 主 窗 口 的 files 按 钮
在 O p tions 菜 单 的 F ile s 属 性 页 还 有 其 它 一 些 选 项 其 中 之 一 就 是 C on te n ts F ile 域 如 果 是 新 建 一 个 工 程 文 件 H e lp W o rk s hop 在 建 立 内 容 页 时 就 会 自 动地 填 充 该 项 选 中 该 选 项 的 原 因 是 已 经 有 了 一 个 内 容 页 又 想 用 于 当 前 的 工 程 文件 中 当 帮 助 文 件 超 过 8M B 时 要 用 到 TM P F o ld e r 选 项 它 给 出 了 H e lp W o rk s hop 编 译 时 建 立 临 时 文 件 的 目 录 一 般 情 况 下 用 不 到 只 是 当 缺 省 目 录 的 磁 盘 空 间不 足 时 才 用 到 最 后 一 个 域 是 S u b s titu te P a th P re fix 当 移 动 了 某 些 文 件 又不 想 改 变 工 程 文 件 中 的 路 径 信 息 时 要 用 到
W ind ow s 95 / 9 8 的 帮 助 文 件 提 供 了 一 些 以 前 没 有 的 功 能 全 文 查 找 当 选 中帮 助 主 题 对 话 框 的 查 找 页 就 会 建 立 这 个 数 据 库 实 现 对 全 文 的 逐 字 查 找 编 译 过 程 中 选 项 对 话 框 的 FT S 页 中 有 一 个 选 项 用 于 生 成 这 个 文 件 由于 W ind ow s 95 / 9 8 总 是 要 生 成 它 一 般 都 不 用 选 中 编 译 器 建 立 的 G ID 文 件 要
在 发 行 盘 上 占 用 很 多 空 间 并 增 加 了 编 译 时 间
下 面 有 必 要 学 习 一 下 M acro s 属 性 页 其 图 像 如 下 图 所 示
从 这 里 定 义 关 键 字 宏 供 全 文 使 用 而 且 当 用 户 查 找 某 一 主 题 时 这 些 宏 会出 现 在 帮 助 主 题 对 话 框 的 索 引 页 中
单 击 M acro s 属 性 页 的 A d d 按 钮 系 统 显 示 一 个 含 有 三 个 域 的 K e y w o rd M aco rs 对 话 框 第 一 个 域 含 有 宏 名 字 第 二 个 域 指 示 宏 本 身 第 三 个 域 指 示
H e lp W o rk s hop 如 何 在 索 引 页 显 示 该 宏 它 用 于 有 多 个 帮 助 文 件 但 只 想 在 某 个 选定 文 件 范 围 显 示 关 键 字 的 情 况 例 如 一 般 把 词 汇 表 和 程 序 列 表 名 的 缩 写 集 中存 放 在 一 个 独 立 的 文 件 中 用 JI 宏 建 立 一 个 全 文 范 围 的 跳 转 就 用 关 键 字 宏 的方 法 来 实 现 用 户 根 本 不 会 感 觉 到 又 加 载 了 其 它 的 文 件 因 而 对 用 户 是 透 明的
注 请 谨 记 Options 对 话 框 的 Macros 属 性 页 的 设 置 会 影 响 整 个 帮 助 文 件而 不 只 是 一 个 窗 口
前 面 我 们 介 绍 过 * 脚 注 用 于 建 立 标 识 O p tions 对 话 框 的 B u ild T a g s 属 性页 就 该 用 到 它 了 前 面 对 这 个 脚 注 已 经 讲 得 十 分 透 彻 这 里 不 再 赘 述 中 心 思想 就 是 给 H e lp W o rk s hop 提 供 帮 助 文 件 要 包 括 的 建 立 标 识 的 一 个 清 单 即 使 RT F 文 件 含 有 主 题 如 果 不 做 主 题 标 识 该 主 题 也 不 能 出 现 在 帮 助 文 件 中 如 果 没有 填 写 该 属 性 页 H e lp W o rk s hop 会 包 括 所 有 RT F 文 件 中 的 所 有 主 题
O p tions 对 话 框 的 F on ts 页 是 第 一 个 用 于 定 制 帮 助 文 件 外 观 的 地 方 我 一 般不 用 而 是 在 字 处 理 过 程 中 就 完 成 了 然 而 如 果 用 文 本 编 辑 器 建 立 了 一 个 RT F 文 件 再 用 该 选 项 可 以 节 省 时 间 Ch a ra c te r S e t 域 允 许 选 择 字 符 集 缺 省 为 ANS I 可 以 选 择 其 它 的 语 言 如 阿 拉 伯 语 在 W inH e lp D ia log B oxe s 域 的 F ont 用 于 指定 缺 省 字 体 单 击 C h a nge 按 钮 显 示 含 有 三 个 域 的 F ont 对 话 框 第 一 个 定 义字 体 名 称 第 二 个 定 义 字 体 大 小 第 三 个 定 义 字 符 集 在 W inH e lp D ia log B oxe s 域 的 F ont 下 拉 列 表 框 用 于 更 改 W ind ow s 帮 助 文 件 的 通 用 字 体 允 许 用 一 种 字体 代 替 另 一 种 字 体 A d d 按 钮 显 示 一 个 A dd /E d i t F ont M a pp ing 对 话 框 它 含 有两 个 组 每 个 组 有 三 个 域 这 三 个 域 与 前 面 描 述 的 F ont 对 话 框 中 的 相 应 域 完 全
— 致 唯 一 的 问 题 是 如 果 字 处 理 程 序 覆 盖 了 这 些 设 置 那 么 它 们 就 不 起 作 用 了这 是 使 用 像 W o rd fo r W indow s 这 样 的 产 品 编 辑 文 件 时 经 常 发 生 的 事
定 义 窗 口
定 义 窗 口 选 项 只 是 建 立 工 程 文 件 的 第 一 个 步 骤 当 这 些 选 项 起 作 用 时 需要 定 义 一 些 窗 口 来 显 示 数 据 一 般 建 立 一 个 叫 M a in 的 窗 口 它 是 应 用 程 序 用 到的 主 窗 口
建 立 窗 口 很 简 单 只 需 单 击 M a in 窗 口 的 W ind ow s 按 钮 图 15 .3 系 统就 会 显 示 窗 口 属 性 对 话 框
首 先 应 关 注 的 是 G e n e ra l 属 性 页 单 击 A d d 按 钮 系 统 显 示 一 个 带 有 两 个域 的 A dd a N e w W indow 对 话 框 一 个 域 是 窗 口 的 名 称 另 一 个 域 指 明 窗 口 类型 H e lp W o rk s hop 可 以 建 立 三 种 类 型 窗 口 过 程 窗 口 引 用 窗 口 以 及 出 错 消 息窗 口 过 程 窗 口 和 引 用 窗 口 的 差 异 很 小 它 们 都 可 以 自 动 调 整 大 小 并 且 都 包含 了 三 个 系 统 按 钮 这 两 类 窗 口 的 最 大 差 别 是 它 们 在 屏 幕 上 的 放 置 位 置 后面 我 们 将 会 讲 到 如 何 设 置 位 置 信 息 出 错 消 息 窗 口 不 同 于 其 它 两 个 窗 口 它 并不 包 含 三 个 系 统 按 钮 而 更 像 一 个 对 话 框
返 回 到 G e n e ra l 页 T itle B a r T e x t 域 定 义 了 W ind ow s H e lp 在 标 题 栏 里 放 置什 么 它 不 影 响 帮 助 窗 口 的 标 题 区 的 实 际 显 示 Co m m e n t 域 是 在 工 程 文 件 中 加入 注 释 我 总 要 在 工 程 文 件 中 加 入 注 释 以 帮 助 随 后 理 解 帮 助 文 件 的 建 立 过 程该 属 性 页 中 还 有 三 个 属 性 复 选 框 H e lp W o rk s hop 可 以 根 据 当 前 情 况 禁 止 其 中 一
个 或 多 个 复 选 框 例 如 你 不 能 让 主 窗 口 自 动 调 整 大 小 否 则 当 允 许 某 个 辅 助窗 口 自 动 调 整 大 小 时 该 窗 口 打 开 后 用 户 就 无 法 使 其 最 大 化 大 部 分 过 程 窗口 缺 省 情 况 下 总 显 示 在 屏 幕 的 最 外 层 如 果 你 想 让 操 作 你 的 程 序 的 用 户 随 时 都可 以 看 到 帮 助 这 就 是 实 现 该 功 能 的 一 个 便 利 的 特 性
技 巧 为 了 更 好 地 控 制 窗 口 显 示 的 外 观 我 总 是 关 闭 Auto-Size Height 特性 Position 属 性 页 的 选 项 将 对 帮 助 窗 口 提 供 全 面 的 控 制 后 面 我们 会 具 体 介 绍 该 属 性 页
你 可 能 会 经 常 调 整 W ind ow s P rope r tie s 对 话 框 的 P o s itio n 属 性 页 该 页 如 下图 所 示
它 比 其 名 称 所 包 含 的 功 能 要 强 一 些 该 属 性 页 除 了 能 控 制 帮 助 窗 口 的 位 置及 大 小 外 还 提 供 了 很 多 非 常 容 易 使 用 的 特 性
在 这 个 属 性 页 上 有 四 个 域 Le f t To p W id th 和 H e ight 它 们 控 制 窗 口 的大 小 和 位 置 一 般 第 一 个 帮 助 窗 口 放 在 左 上 角 大 小 为 640 480 或 800 600 具 体 使 用 哪 一 个 值 要 随 机 器 的 性 能 而 定 这 样 的 窗 口 看 上 去 可 能 会 小 一 点 但用 户 一 般 都 会 自 行 调 整 如 果 程 序 员 将 窗 口 放 得 离 边 缘 太 近 使 用 时 要 想 在 用过 新 窗 口 后 又 返 回 老 窗 口 时 就 很 不 方 便 好 在 还 有 U s e r 's S c re e n R e s o lu tio n 选项 当 用 户 的 显 示 器 档 次 太 低 时 用 该 选 项 可 以 防 止 帮 助 窗 口 被 全 部 隐 藏 起 来
该 属 性 页 还 有 一 个 非 常 特 别 之 处 起 初 你 可 能 会 不 注 意 看 一 下 A u to - S iz e
按 钮 单 击 它 会 显 示 如 下 图 所 示 的 窗 口
如 果 改 动 了 窗 口 的 位 置 Le f t 和 To p 域 的 值 也 随 之 而 变 重 新 改 变 窗 口 的
大 小 则 会 改 变 W id th 和 H e ig h t 域 的 值 这 种 用 图 像 方 式 改 变 窗 口 的 方 法 减 少 了重 编 译 帮 助 文 件 的 次 数
W ind ow s 95 / 9 8 定 义 了 许 多 可 以 加 入 帮 助 文 件 的 缺 省 按 钮 有 时 可 能 不 会 都用 到 例 如 如 果 在 RT F 文 件 中 未 定 义 浏 览 + 脚 注 功 能 那 么 B ro w s e r 按钮 就 用 不 到 了 这 里 显 示 的 B u tto n s 页 用 于 定 义 帮 助 窗 口 中 用 到 的 按 钮
所 有 辅 助 的 过 程 窗 口 和 引 用 窗 口 都 用 不 到 C on te n ts 和 Inde x 按 钮 主 窗 口 中则 把 它 和 P rin t 及 B ack 按 钮 一 起 作 为 缺 省 按 钮 提 供 另 一 方 面 主 窗 口 不 用 H e lp T op ic s 按 钮 与 所 有 其 它 类 型 的 窗 口 不 同 出 错 信 息 窗 口 没 有 任 何 限 制 可 以随 心 所 欲 地 使 用 各 种 按 钮
技 巧 单 击 No Default Buttons 复 选 框 可 以 不 受 Help Works hop 在 主 帮助 窗 口 按 钮 设 置 方 面 的 限 制 这 个 复 选 框 仅 在 主 窗 口 中 出 现 即 不 能修 改 辅 助 性 过 程 窗 口 和 引 用 窗 口 中 存 在 的 限 制
下 面 介 绍 Co lo r 属 性 页 它 有 两 个 域 N ons c ro lling A re a C o lo r 和 T op ic A re a Co lo r 每 个 域 都 有 一 个 C h a nge 按 钮 单 击 它 会 出 现 一 个 调 色 板 从 中 选 择 不同 的 颜 色 帮 助 窗 口 的 颜 色 也 会 随 之 而 变
最 后 一 个 属 性 页 是 M acro s 属 性 页 它 的 外 观 如 下 图 所 示
主 窗 口 总 是 使 用 工 程 文 件 中 CO N F IG 节 的 宏 作 为 缺 省 宏 本 节 中 你 看 到 的所 有 宏 都 是 可 自 我 执 行 的 这 就 是 C ONF IG 节 的 宏 都 加 到 主 窗 口 的 原 因 你希 望 打 开 主 窗 口 时 让 那 些 宏 运 行 在 主 窗 口 中 插 入 新 宏 就 是 靠 向 工 程 文 件 的C ONF IG 节 中 加 入 宏 来 实 现 的 向 其 它 窗 口 中 加 入 宏 会 改 变 那 些 窗 口 的 显 示例 如 如 果 向 一 个 辅 助 性 窗 口 中 加 入 浏 览 功 能 需 要 加 入 一 个 或 多 个 宏 以 设 置一 定 的 条 件 从 而 忽 略 在 B u tto n s 属 性 页 的 B ro w s e 按 钮 上 所 作 的 设 置 这 些 辅
助 性 窗 口 在 帮 助 工 程 文 件 中 要 专 门 设 置 C ONF IG 窗 口 名 小 节
注 添 加 到 Windows Pr operties 对 话 框 的 Macros 属 性 页 中 的 宏 通 常 只 影响 一 个 窗 口 而 不 是 帮 助 文 件 中 的 所 有 窗 口
技 巧 访 问 主 窗 口 Macros 对 话 框 的 另 一 种 方 法 是 单 击 如 图 15.2 所 示 的 主窗 口 的 Config 按 钮
映 射 帮 助 主 题
前 面 已 经 陈 述 过 这 部 分 的 重 要 性 如 果 没 有 把 帮 助 文 件 中 的 主 题 标 识 符 映射 到 帮 助 内 容 序 号 上 就 不 能 建 立 一 个 对 应 用 程 序 中 控 件 内 容 上 下 文 相 关 的 帮助 文 件 下 面 我 们 将 讲 述 如 何 实 现 这 种 功 能
单 击 M a p 按 钮 系 统 显 示 如 下 图 所 示 的 M a p 对 话 框
在 这 里 可 以 定 义 主 题 标 识 符 与 内 容 序 号 间 的 关 系 上 图 中 我 已 经 定 义 了一 些 联 系 主 题 标 识 符 被 设 置 为 与 帮 助 内 容 序 号 相 同 的 值 紧 跟 其 后 的 是 描 述这 一 项 目 的 注 释
有 许 多 方 法 可 以 直 接 保 持 内 容 序 号 对 于 小 的 帮 助 文 件 我 一 般 是 从 1 开 始编 号 递 增 直 到 帮 助 中 的 最 后 一 个 主 题 大 帮 助 文 件 比 较 复 杂 可 能 会 碰 到 重
用 序 号 的 情 况 这 时 我 一 般 用 3 或 4 位 数 的 序 号 前 两 位 数 是 控 件 和 菜 单 条在 应 用 程 序 帮 助 内 容 中 的 位 置 例 如 菜 单 项 F ile 标 为 01 菜 单 项 Ed i t 标 为 02 F ile |N e w 命 令 的 序 号 就 是 0101 因 为 N e w 命 令 项 通 常 是 F ile 菜 单 中 的 第 一 项 第 一 个 非 应 用 程 序 主 题 赋 值 0001 例 如 词 汇 表 应 用 程 序 窗 体 上 控 件 的 前 两 位数 应 大 于 最 后 一 个 菜 单 项 的 序 号 我 使 用 Ta b 序 号 作 为 控 件 标 识 的 后 二 位 数 字原 因 在 于 这 类 控 件 不 像 标 签 或 其 它 的 非 活 动 组 件 这 些 非 活 动 组 件 不 会 出 现 在帮 助 文 件 中
要 增 加 新 的 映 射 入 口 页 很 容 易 单 击 A d d 你 会 看 到 如 下 图 所 示 的 A d d M a p En tr y 对 话 框
该 对 话 框 有 三 个 域 主 题 标 识 符 被 映 射 的 数 值 帮 助 内 容 中 的 序 号 及注 释 填 完 后 单 击 OK 就 在 工 程 文 件 中 加 入 了 一 个 新 的 映 射
正 如 前 文 所 述 帮 助 文 件 中 一 般 都 包 含 HM 文 件 以 减 少 工 作 量 并 提 供 快捷 便 利 的 检 查 方 法 当 帮 助 文 件 已 测 试 并 发 行 之 后 才 发 现 有 一 些 很 重 要 的 主题 没 有 覆 盖 到 再 没 有 什 么 比 这 更 难 办 的 了 这 时 单 击 In c lu d e 按 钮 系 统 显 示In clu d e F ile 对 话 框 如 下 图 所 示
这 个 对 话 框 提 供 了 一 个 B ro w s e 按 钮 可 以 用 它 调 出 已 经 保 存 在 磁 盘 上 的 文件 单 击 后 打 开 标 准 O p e n 对 话 框 就 像 你 在 其 它 程 序 中 用 过 的 这 种 对 话 框 一样 操 作
编 译 帮 助 文 件
完 成 工 程 文 件 后 就 要 进 行 编 译 了 如 图 15 .3 所 示 单 击 主 窗 口 底 部 的 Sa v e a nd C o m p ile 按 钮 在 编 译 过 程 中 H e lp W o rk s hop 窗 口 会 最 小 化 这 样 你 就 可以 去 做 别 的 工 作 了 因 为 编 译 大 的 帮 助 文 件 需 要 很 长 时 间 编 译 完 成 后 会看 到 如 图 15 .4 所 示 的 对 话 框
你 应 该 注 意 到 这 个 对 话 框 中 立 刻 显 示 了 一 些 东 西 上 图 显 示 了 帮 助 文 件中 存 在 一 些 错 误 实 际 上 那 些 都 是 注 释 但 绝 大 多 数 情 况 下 还 是 应 该 把 它 们 看
成 是 错 误 在 帮 助 文 件 条 目 中 我 们 没 有 给 出 HM 文 件 中 的 所 有 条 目 即 在 帮 助 文 件 覆 盖 过 程 中 出 现 了 漏 洞 从 中 我 们 可 以 看 到 使 用 HM 文 件 很 有 帮助 至 少 会 减 少 丢 失 帮 助 主 题 的 机 会
那 么 HM 文 件 就 很 完 美 了 吗 远 远 没 有 看 一 下 表 15 .2 那 里 曾 经 给ID _ F OR M A T _ F ONT 增 加 了 一 个 M a p 条 目 这 是 M F C 用 在 AF X R E S . H 文 件 中的 标 准 标 识 符 不 是 包 含 定 制 控 件 标 识 符 的 RE S O U RCE . H 文 件 结 果 HM 文件 不 能 识 别 它 必 须 手 工 增 加 对 标 准 控 件 的 支 持
图 15 .4 该编译结 果对话框显示 了帮助文件的 当前状态及错 误信息
1 5. 5 为 应 用 程 序 增 加 标 准 帮 助
终 于 可 以 给 我 们 的 应 用 程 序 增 加 帮 助 了 这 里 选 用 第 2 章 开 始 的 单 文 档 工程 文 件 的 资 源 版 第 3 章 实 现 作 为 例 子 因 为 它 非 常 完 整 而 且 在 以 前 我 们没 对 它 作 任 何 帮 助 支 持 必 须 认 识 到 帮 助 支 持 的 最 重 要 部 分 在 于 帮 助 文 件 本 身我 们 要 实 现 的 帮 助 支 持 根 本 不 需 要 多 少 编 码
实 际 上 我 们 会 看 到 两 种 实 现 方 法 第 一 种 方 法 是 全 自 动 的 只 需 在M a i F rm .C P P 的 开 始 处 加 入 一 个 菜 单 项 并 修 改 适 当 的 菜 单 项 标 识 这 是 最 常 用 的方 法 因 为 它 最 有 效 第 二 种 方 法 略 微 复 杂 些 但 也 更 加 灵 活 需 要 在 程 序 中手 工 加 入 访 问 帮 助 的 代 码 但 实 际 上 还 是 很 简 单 的
首 先 要 增 加 一 些 菜 单 项 图 15 .5 给 出 了 要 加 入 到 ID R _ M A IN F R A M E 菜 单中 的 两 个 菜 单 项 表 15 .3 是 要 用 到 的 参 数
表 1 5.3 帮 助 菜 单 参 数
菜单标识 ID |
菜单标题 |
提示 |
---|---|---|
ID _ H E L P _ C O N T E N T S |
& C o n te n ts \tF 1 |
D is p la y th e M a in H e lp F ile \n H e lp |
ID _ C O N TEX T_ H ELP |
& W h a t 's Th is? \ t S h if t- F1 |
C lic k h e re fo r c o n te x t s e n s itiv e h e lp . \n C o n te x t H e lp |
图 15 .5 需要增加 两个新的菜单 项来测试本章 前一节创建的 帮助文件
注 意 W h a t 's T h is ? 的 ID 号 这 个 菜 单 项 没 有 使 用 通 常 的 命 名 规 则 一 会 儿就 会 讲 到 现 在 只 需 记 住 这 一 点 — — 如 果 想 自 动 实 现 M F C 帮 助 这 个 命 名 是非 常 重 要 的
同 时 也 要 修 改 ID R _ M A IN F R A M E 工 具 栏 上 的 he lp 按 钮 当 前 它 显 示 的 是A bout 对 话 框 没 有 加 入 帮 助 支 持 时 这 当 然 是 很 合 适 的 加 入 帮 助 时 打 开ID R _ M A IN F R A M E 工 具 栏 双 击 he lp 按 钮 将 ID 号 改 为ID _ H ELP _ C O N T E N TS
这 两 个 菜 单 项 当 然 也 可 以 有 与 之 相 关 的 快 捷 键 所 以 还 需 要 打 开 如 图 15 .6 所 示 的 ID R _ M A IN F R A M E 快 捷 键 定 义 窗 口 这 里 我 已 经 加 亮 了 其 中 一 个 列 表项 可 以 给 ID _ H ELP _ C O N T E N TS 菜 单 项 增 加 一 个 新 的 快 捷 键 给ID _ C O N TEX T_ H E LP 菜 单 项 增 加 一 个 快 捷 键 如 下 表 所 示
图 15 .6 需要为这 两个帮助菜单 项定义快捷键 以便使它们 对用户更友好
菜单标识 ID |
键 |
类 型 |
---|---|---|
D _ HE L P _ C ONT E N T S |
VK _ F 1 |
V IR T KE Y |
ID _ C O N TEX T_ H ELP |
S H IF T+ V K _ F 1 |
V IR T K E Y |
加 入 快 捷 键 很 容 易 双 击 最 后 一 个 空 白 列 表 项 处 显 示 如 下 图 所 示 的 A cce l P rope r tie s 对 话 框
从 下 拉 ID 列 表 中 选 中 所 需 的 ID 号 单 击 N e x t K e y T y p e d 按 钮 按 下 分 配给 该 ID 的 热 键 这 里 ID _ H ELP _ C O N T E N TS 的 热 键 为 F1 ID _ C O N TEX T_ H E LP 的 热 键 为 SH IF T - F1 要 确 保 选 中 了 适 宜 的 复 选 框 然 后 关 闭 该 对 话 框
记 住 我 们 说 过 不 用 写 实 际 的 函 数 就 能 实 现 这 些 帮 助 选 项 M F C 支 持 四 个根 本 不 用 编 程 的 缺 省 帮 助 动 作 内 容 C on te n ts 查 找 F in d 索 引 Inde x 和 上 下 文 相 关 c on te x t- s e ns i tiv e 功 能 我 们 用 内 嵌 的 M F C 函 数 实 现 上 下 文 相
关 功 能 我 们 所 要 完 成 的 全 部 工 作 就 是 加 入 程 序 列 表 15 .3 粗 体 部 分 所 示 的 代 码该 代 码 用 于 激 活 实 现 上 下 文 相 关 功 能 的 内 嵌 M F C 函 数
程 序 列 表 15.3
B E G IN _ M E S S AGE _ M AP ( C M a in F ra m e ,C F ra m e W n d )
/ /{ { A FX _ M SG _ M A P ( C M ia n F ra m e ) ON _ W M _ C R E AT E ( )
ON _ C O M M AND ( ID _ B O L D ,O n B o ld ) ON _ C O M M AND ( ID _ IT AL IC ,O n I ta l ic )
ON _ C O M M AND ( ID _ S T R IK E T H R OUGH ,O n S tr ik e th ro u g h ) ON _ C O M M AND ( ID _ U NDE R L IN E ,O n U n d e r l in e )
ON _ C O M M AND ( ID _ V IE W _ F OR M A T T OOL B A R ,O n V ie w F o rm a t to o lb a r ) ON _ C O M M AND ( ID _ H E L P _ C O N T E NT S ,O n H e lp C o n te n ts )
ON_ CO MM AN D( I D _C ON TEX T _ H E L P , O n C o n t e x t H e l p )
/ /} } A FX _ M SG _M A P E ND _ M E S S A GE _ M AP ( )
注 必 须 用 选 定 的 I D 激 活 M F C 帮 助 支 持 如 果 在 使 帮 助 起 作 用 时 发 生 了 问题 请 检 查 菜 单 项 的 I D 号
现 在 要 看 一 看 C on te n ts 菜 单 项 了 先 要 增 加 一 个 函 数 用 V iew |C la s s W izard 命 令 显 示 M F C C las s W izard 对 话 框 选 中 M e s s a g e M a p s ta b 并 选 择 C la ss N a m e 域 的 Cm a in F ra m e 在 O b ject ID s 程 序 列 表 中 找 到 ID _H E L P _C O N T E X T 在
M e ssa g e s 程 序 列 表 中 加 亮 C O M M AND 列 表 项 单 击 A d d F unc tion 此 时 的 M F C C las s W izard 对 话 框 如 下 图 所 示
单 击 E d it C ode 按 钮 就 会 看 到 函 数 框 架 程 序 列 表 15 .4 显 示 了 使 C on te n ts
菜 单 项 起 作 用 所 需 的 代 码
程 序 列 表 15.4
vo id C M a inF ra m e : : O nH e lpC on te n ts ( )
{
//C a ll W in H e lp to d is p la y th e m a in h e lp w in d o w . W in H e lp ( 0 ,H EL P _ C O N TEN T S ) ;
}
正 如 你 所 看 到 的 实 现 所 需 帮 助 的 编 码 并 没 有 什 么 特 别 之 处 说 实 话 这段 代 码 可 能 是 本 书 中 最 短 的 代 码 你 所 要 完 成 的 所 有 工 作 就 是 以 预 定 义 量H ELP _ C O N T E N TS 调 用 W inH e lp() 这 里 我 们 不 需 要 提 供 任 何 辅 助 信 息 因 此第 一 个 参 数 被 设 置 为 0
1 5. 6 建 立 基 于 HT ML 的 帮 助 文 件 集
第 八 章 已 给 出 了 一 些 建 立 基 于 HT M L 帮 助 文 件 必 需 的 知 识 HT M L 帮 助 的基 础 元 素 是 W e b 页 面 就 像 在 In te rn e t 上 一 样 然 而 HT M L 帮 助 又 不 仅 仅 是一 个 简 单 的 W e b 页 面 还 要 考 虑 许 多 其 它 因 素 例 如 要 从 访 问 的 角 度 组 织 帮助 文 件 以 下 各 节 帮 助 你 设 计 一 个 既 有 效 又 实 用 的 帮 助 文 件
采 用 多 页 还 是 单 页 文 件
注 基 于 HTML 的 帮 助 文 件 经 常 用 多 个 文 件 存 放 帮 助 信 息 这 些 文 件 的 分 布
形 式 很 大 程 度 上 影 响 了 用 户 查 找 时 的 便 利 性
— 个 很 有 必 要 考 虑 的 因 素 是 如 何 组 织 所 有 帮 助 文 件 使 用 W ind ow s H e lp 时我 们 只 建 立 了 一 个 文 件 它 由 许 多 信 息 页 组 成 这 种 方 法 不 适 用 于 基 于 HT M L 的 帮 助 文 件 因 为 此 时 不 是 用 主 文 件 的 方 法 来 实 现 的 总 而 言 之 必 须 指 出 如何 将 多 个 信 息 页 放 入 一 个 集 合 中 但 所 建 立 的 集 合 必 须 包 含 所 有 的 文 件
请 谨 记 帮 助 文 件 使 用 大 纲 方 式 组 织 而 且 编 排 上 与 书 籍 的 布 局 格 式 相 似你 需 要 完 成 的 工 作 是 确 定 是 从 哪 儿 截 断 文 件 完 成 这 项 任 务 的 方 法 有 多 种 关键 取 决 于 应 用 程 序 中 如 何 使 用 表 15 .4 描 述 了 各 种 文 件 布 局 选 项 以 及 相 应 的 优缺 点
表 1 5.4 HTML 文 件 的 布 局 方 法
布局方法 |
描述 |
好处 |
缺点 |
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
大 菜 单 / 对话框控件 |
对 控 |
话 件 |
框 或 |
中 树 |
的 状 |
所 菜 |
有 单 |
初 次 使 用 这 种 布 局 方 式 的 用 户 会 觉 得 很 容 易 浏 |
过长的文 觉得下载 |
件可能 开销过 |
会使用 大而转 |
户 去 |
|
中 | 的 | 全 | 部 |
菜 |
单 |
项 |
览 整 个 程 序 |
而 且 这 | 下载其它 |
文件 |
而老用 |
户 |
|
都 | 放 | 在 | 一 |
个 |
文 |
件 |
种 设 计 使 帮 助 文 件 与 使 |
又会觉得 |
在一个 |
文件中 |
多 |
||
中 | 使 | 用 |
锚 |
地 |
的 |
用 手 册 很 相 像 |
目 录 的 | 次选定菜 |
单项很 |
麻烦 |
而 |
||
方 | 法 | 可 | 以 |
让 |
用 |
户 |
使用方便 了信息的查找 |
且 由于 |
修改时 |
可能要 |
对 |
||
从 | 一 | 个 | 主 |
题 |
切 |
换 |
多个文件 |
做相同 |
的改动 |
||||
到 | 另 | 一 | 个 |
主 |
题 |
因此 会造 成更 新困 难 |
|||||||
这 | 种 | 方 | 法 |
包 |
含 |
一 |
|||||||
个 | 目 | 录 |
让 |
用 |
户 |
直 接 切 换 到主题 |
所 |
需 |
||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
大 任 务 |
每 个 文 件 只 |
含 |
有 |
初 |
次 |
使 |
用 这 种 布 局 方 式 |
高 级 用 户 会 觉 得 经 过 |
||||||||||
对 完 成 某 一 |
特 |
定 |
的 |
用 |
户 |
会 觉 得 很 容 易 完 |
许 多 程 序 项 目 才 能 查 找 |
|||||||||||
任 务 的 完 整 |
描 |
述 |
成 |
具 |
体 |
任 务 而 且 每 项 |
到 一 条 所 需 的 信 息 很 麻 |
|||||||||||
和 过 程 |
例 |
如 |
任 |
务 |
都 |
有 独 立 的 完 整 |
烦 缺 少 常 规 的 子 程 序 |
|||||||||||
对 建 立 新 文 |
档 |
的 |
性 |
减 |
少 了 程 序 变 动 时 |
会 增 加 用 户 的 学 习 难 |
||||||||||||
操 作 建 立 一 |
个 |
帮 |
带 |
来 |
错 |
误 的 机 率 而 且 |
度 因 为 他 们 不 能 把 执 |
|||||||||||
助文件 |
可 |
以 |
包 |
含 屏 幕 快 照 和 图 |
行 某 一 特 定 任 务 和 所 要 |
|||||||||||||
像 |
信 |
息 |
最 后 这 是 唯 |
调 用 的 常 规 子 任 务 联 系 |
||||||||||||||
一 |
一 |
种 |
可 以 产 生 简 单 的 |
起 来 由 于 有 冗 余 信 息 |
||||||||||||||
教式 和 |
程 灵 |
帮 由活 |
助 文 件 的 编 排 方 于 In te rn e t 带 宽性 的 限 制 降 低 |
帮 助 文 件 难 于 更 新 并占 用 更 多 的 服 务 器 空 间 增 长 的 文 件 长 度 也 |
||||||||||||||
了 |
我 |
们 |
能 提 供 的 培 训 的 |
使远程下 载更加费时 |
||||||||||||||
能力 |
||||||||||||||||||
小 菜 单 / 对 话 框 |
每 对 |
条 菜 单 项 话 框 中 的 |
或 一 |
较 户 |
短 即 |
的 使 |
下 使 |
载 时 间 使 得 用 用 拨 号 方 式 上 |
由 中 |
于 的 |
每 每 |
条 菜 单 项 或 个 控 件 相 应 |
对 的 |
话 信 |
框 息 |
|||
控件 |
个 |
控 件 放 在 |
一 |
网 |
也 |
会 |
愿 |
意 使 用 这 种 帮 |
都 |
需 |
要 |
下 载 初 次 | 使 |
用 |
的 |
|||
个 |
单 独 的 文 |
件 |
助 |
由 |
于 |
用 户 只 看 到 一 |
用 |
户 |
的 | 积 极 性 会 |
大 |
受 |
打 |
|||||
中 |
个 |
屏 |
幕 |
会 |
觉 得 查 找 信 息 |
击 |
特 | 别 是 用 拨 |
号 |
上 |
网 |
|||||||
很 |
快 |
由 |
于 信 息 只 出 现 |
时 |
目 |
录 不 再 是 自 | 动 |
的 |
在 一 个 文 件 中 更 捷 可 靠 帮 助 文 件务器上的 总量减少了 |
新在 |
快服 |
需要单独 的维护时间 |
|||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
小 | 任 |
务 |
建 立 任 务 清和 内 容 的 树结 构 表 每任 务 被 分 成系 列 易 于 实的 常 规 子务 在 任 务述 中 包 括 全 的特定事 件 |
单型个一现任总部 |
使 用 目 录 使 得 信查 找 特 别 是 对用 户 树 型 结 构得 用 户 可 以 直 接需 信 息 由 于 减载 时 间 用 户 会意 使 用 这 种 帮 助由 修 改 每 个 子 任 夹下的信 息完成 |
息于形找少更 务 |
便高式到了加更文 |
于级使所下愿新件 |
可 能 会 在入 微 妙 的单 项 可 能部 分 已 经部 分 则 没则 会 觉 得难于理解 |
任错在改变面 |
务误应变 向 |
处 用了一任 |
理例中 些务 |
过如的而新的 |
程 某另用方 |
带菜一一户式 |
主 | 题 |
型 |
每 个 文 件 包一 个 帮 助题 例 如 于 数 据 录 入法 部 分 可 以成一个文 件 |
含主关方组 |
想 查 找 关 于 某 个用 户 会 觉 得 十 分因 为 所 有 信 息 下就完成了 |
主方载 |
题便一 |
的次 |
对 于 信 息 组 织 方 式 依 赖 于菜 单 的 远 程 用 户 必 须 在所 有 菜 单 项 信 息 下 载 完 成后 才 能 使 用 因 为 一 个 菜单 的 变 化 需 要 查 阅 几 个 文件 信 息 更 新 也 比 较 困难 原 因 在 于 一 个 菜 单 变 化时就需 要更新多个文 件 |
连 接 类 型
注 即 使 是 基 于 HTML 的 帮 助 文 件 在 为 用 户 提 供 信 息 时 也 必 须 考 虑 到 拨 号连 接 存 在 的 限 制
— 个 很 有 趣 的 现 象 是 使 用 基 于 HT M L 帮 助 文 件 的 厂 家 总 是 觉 得 用 户 是 用T1 线 路 接 入 In te rn e t 的 实 际 情 况 是 用 户 常 常 是 用 拨 号 方 式 下 载 文 件 在 第 八章 我 们 已 经 讨 论 了 一 些 关 于 拨 号 连 接 的 情 形 最 重 要 的 是 要 限 制 每 个 文 件 的 大小 这 样 用 户 才 会 愿 意 下 载
与 浏 览 器 不 同 应 用 程 序 中 不 会 含 有 sto p 按 钮 这 就 意 味 着 用 户 必 须 选 择是 等 着 每 页 从 In te rn e t 服 务 器 下 载 完 再 享 用 帮 助 还 是 在 帮 助 文 件 过 长 时 拨 打 帮助 热 线 多 数 情 况 下 我 还 是 建 议 你 组 织 好 一 个 强 大 的 技 术 支 持 小 组 准 备 为 那些 用 了 长 HT M L 帮 助 文 件 的 应 用 程 序 提 供 支 持
注 在 基 于 HTML 的 帮 助 文 件 中 要 慎 用 图 像 因 为 这 会 极 大 地 延 长 下 载 时 间
考 虑 HT M L 帮 助 文 件 的 大 小 意 味 着 需 要 考 虑 是 否 使 用 响 铃 和 报 警 来 增 强基 于 HT M L 的 帮 助 文 件 的 效 果 例 如 大 部 分 W ind ow s 帮 助 文 件 使 用 全 彩 色的 屏 幕 快 照 以 帮 助 用 户 获 得 最 易 理 解 的 帮 助 信 息 另 一 方 面 对 于 基 于 HT M L 的 帮 助 文 件 就 使 用 了 黑 白 方 式 的 图 片 以 减 少 下 载 时 间
还 需 要 控 制 HT M L 帮 助 文 件 中 图 像 信 息 的 使 用 数 量 在 颜 色 和 / 或 分 辨 率 上的 减 少 毕 竟 是 有 限 的 如 果 图 像 因 此 变 得 很 不 易 识 别 用 户 就 很 不 值 得 下 载 了换 句 话 说 不 论 建 立 哪 种 形 式 的 帮 助 都 必 须 保 证 图 像 的 质 量
结 束 这 种 无 益 争 论 的 最 好 办 法 是 先 进 行 用 户 调 研 一 些 用 户 可 能 只 需 要 文字 可 以 在 帮 助 屏 幕 上 作 一 个 选 项 供 他 们 选 用 另 一 些 用 户 宁 愿 使 用 低 质 量 的
黑 白 图 片 还 有 一 些 用 户 则 选 择 高 质 量 的 彩 色 图 像 因 此 最 好 提 供 多 种 方 式 供用 户 选 择 这 时 要 考 虑 到 用 户 的 拨 号 速 度 毕 竟 有 些 用 户 确 实 用 T1 连 接 方 式他 们 应 该 得 到 高 质 量 的 帮 助 文 件
查 找 能 力
当 用 户 经 过 了 初 级 阶 段 之 后 就 很 关 心 帮 助 文 件 提 供 的 对 所 需 信 息 的 查 找能 力 他 们 要 找 的 可 能 只 是 完 成 某 项 任 务 中 的 一 小 步 或 是 某 个 对 话 框 中 一 个小 控 件 的 局 部 说 明 糟 糕 的 是 HT M L 帮 助 文 件 不 是 全 局 可 查 找 的 这 个 问 题是 所 有 供 货 商 都 必 须 面 对 的
有 些 方 法 可 以 模 拟 W ind ow s H e lp 的 查 找 方 法 实 现 起 来 也 不 难 虽 然 不 能完 全 实 现 W ind ow s H e lp 的 查 找 能 力 但 可 以 尽 量 接 近 下 面 是 一 些 供 参 考 的 方法
建 立 索 引
定 义 附 加 的 链 接增 加 目 录
生 成 热 门 主 题 列 表
注 基 于 HTML 的 帮 助 文 件 缺 少 按 字 查 找 的 能 力
基 于 HT M L 的 帮 助 文 件 不 像 W ind ow s he lp 那 样 它 缺 少 按 字 建 索 引 的 能 力这 就 意 味 着 用 户 可 能 会 提 出 许 多 预 想 不 到 的 问 题 而 帮 助 文 件 的 查 找 功 能 又 无法 问 答 这 时 一 般 要 提 供 某 种 形 式 的 反 馈 机 制 以 便 于 用 户 提 出 其 它 链 接 的 需求 另 外 如 果 你 的 HT M L 帮 助 文 件 查 找 功 能 足 够 灵 活 的 话 建 立 附 加 链 接 不
会 是 件 频 繁 的 事
技 巧 克 服 HTML 帮 助 文 件 查 找 能 力 不 足 的 一 种 方 法 是 使 用 Windows NT IIS version 4. 0 及 以 上 版 本 它 提 供 了 对 W e b 目 录 下 所 有 文 件 建 立 索 引的 能 力 在 基 于 HTML 的 帮 助 文 件 上 设 置 查 找 页 面 并 不 广 受 欢 迎 特别 是 使 用 Microsoft 提 供 的 通 用 查 找 页 面
1 5. 7 向 应 用 程 序 增 加 基 于 HT ML 的 帮 助
向 应 用 程 序 增 加 基 于 HT M L 帮 助 过 程 分 几 个 步 骤 完 成 前 面 几 节 已 经 讨 论了 第 一 步 考 虑 HT M L 文 件 的 设 计 和 布 局 下 一 步 是 建 立 HT M L 文 件 本 身最 后 在 应 用 程 序 中 加 进 必 要 的 链 接
在 第 八 章 中 我 们 已 经 讨 论 了 建 立 HT M L 文 件 的 基 础 知 识 这 里 不 再 赘 述当 然 要 想 从 脚 本 方 便 地 转 化 为 好 的 帮 助 文 件 还 不 得 不 借 助 于 一 个 适 宜 的 编 辑器 比 如 F ron tP a ge 或 V is u a l In te rD e v 这 时 脚 本 用 W o rd fo r W indow s 编 写 也 无 妨 否 则 需 要 附 加 的 产 品 如 M a p T h is 在 图 像 和 各 种 帮 助 主 题 间 建 立 链 接 这 个 过 程 相 似 于 我 们 前 面 做 过 的 用 H o ts p o t E d ito r 执 行 编 辑 的 过 程
我 们 还 用 前 面 章 节 中 用 过 的 作 W ind ow 帮 助 的 例 子 为 例 唯 一 的 区 别 是 用W o rd fo r W indow s 将 它 转 换 成 了 HT M L 格 式 理 论 上 说 可 以 使 用 任 何 工 具 建立 帮 助 文 件 但 用 W o rd fo r W indow s 建 立 的 主 文 档 既 可 以 用 于 印 刷 出 版 物 又可 以 用 于 电 子 出 版 物 我 们 还 用 那 节 中 同 样 的 示 例 程 序 但 把 原 始 的 资 源 工 程
文 件 拷 贝 到 另 一 个 目 录 以 保 持 帮 助 例 子 的 独 立 性 屏 幕 快 照 上 的 目 录 名 可 能 与机 器 上 实 际 的 目 录 名 不 匹 配
注 释 可 以 在 以 下 站 点 http://www .osborne.com 找 到 本 书 中 的 所 有 工 程 文件 帮 助 文 件 的 拷 贝 它 们 会 帮 助 你 更 好 地 准 备 帮 助 文 件
与 本 章 中 W ind ow s 帮 助 格 式 的 示 例 不 同 没 有 自 动 实 现 向 应 用 程 序 中 加 入基 于 HT M L 的 帮 助 文 件 的 方 法 只 能 为 帮 助 文 件 中 的 每 个 访 问 点 手 工 编 写 代 码我 们 的 例 子 看 上 去 很 像 本 章 第 一 节 中 的 W ind ow s he lp 访 问 的 第 二 种 形 式 而 不是 第 二 节 讲 述 的 方 法
这 个 示 例 由 在 帮 助 菜 单 中 增 加 两 个 菜 单 项 开 始 精 确 的 过 程 可 以 参 见 前 面小 节 讲 解 的 如 何 向 应 用 程 序 加 入 标 准 帮 助 的 方 法 来 实 现 菜 单 项 的 格 式 如 图 15 .4 所 示 表 15 .3 则 给 出 了 用 到 的 参 数 当 定 义 了 菜 单 项 后 分 别 给ID _ H ELP _ C O N T E N TS 和 ID _ C O N TEX T _ H ELP 菜 单 项 添 加 新 的 快 捷 键 如 图
15 .5 所 示 前 面 在 加 入 标 准 帮 助 时 我 们 已 经 讲 述 过 了
注释 本章介绍了 在应用程序中使用基于 HTML 的帮助文件 的一种很传统的方法 不包 括上 下文 相关 帮助 但 添 加上 下文 相关 帮助 的方 法与 添加 基 于HTML 的 帮 助 的 方 法 相 似 还 有 其 它 增 加 基 于 HTML 帮 助 方 法 在 1 2 章中 我们 会讲 述 那时 你 可 以 不 用本 例中 所 用 的访 问主 页 的 方法 而 是在 W e b 站点上设置 一个帮助桌面
首 先 在 应 用 程 序 中 加 入 一 个 新 的 对 话 框 在 R e s o u rce V iew 中 右 击 D ia lo g
文 件 夹 从 上 下 文 相 关 菜 单 中 选 择 In s e rt D ia lo g 这 时 会 看 到 一 个 标 准 对 话 框
右 击 该 对 话 框 从 上 下 文 相 关 菜 单 中 选 择 P rope r tie s 系 统 显 示 D ia lo g P rope r tie s 对 话 框 将 ID 域 改 为 IDD _ HE L P _ D L G 或 其 它 你 喜 欢 的 名 称 作 为 帮 助 对 话 框的 名 字 将 C a p tio n 域 改 为 M a in H e lp 或 其 它 你 喜 欢 的 显 示 在 对 话 框 标 题 栏的 文 字 本 例 中 还 需 要 改 变 对 话 框 的 某 些 其 它 属 性 在 S ty le s 属 性 页 选 中M in im iz e 和 M a x im iz e 复 选 框 还 需 选 中 Bo rd e r 域 的 R e s iz in g 选 项 使 用 户 能够 重 新 调 整 结 果 对 话 框 为 适 宜 的 大 小 关 闭 D ia lo g P rope r t ie s 对 话 框
现 在 有 了 一 个 用 于 显 示 的 新 对 话 框 这 时 要 加 入 一 个 W e b B row s e r 控 件 使 用 P ro je c t|A dd to P ro je c t |C o m pon e n ts a nd C on tro ls 命 令 来 显 示 C o m pone n ts a n d
C on tro ls G a lle r y 对 话 框 双 击 R e g is tered A c tiv eX C o n tro ls 文 件 夹 加 亮 M ic ros oft W e b B row s e r 列 表 项 单 击 In s e rt 向 工 程 文 件 中 加 入 这 个 控 件 当 提 示 是 否 确 定时 选 择 OK 按 钮 完 成 上 述 工 作 后 关 闭 该 对 话 框
本 例 要 用 到 5 个 命 令 按 钮 和 一 个 W e b B row s e r 控 件 有 时 一 图 达 千 言 所以 用 图 15 .7 来 说 明 我 对 帮 助 对 话 框 所 做 的 配 置 这 是 使 用 基 于 HT M L 帮 助 时 你应 该 向 用 户 提 供 的 最 小 必 要 配 置 原 因 在 于 用 户 总 是 需 要 在 各 个 帮 助 屏 幕 来 回翻 页 的 表 15 .5 给 出 了 该 对 话 框 中 所 有 控 件 的 属 性 列 表
图 15 .7 一定要把 帮助对话框设 计得易于使用
表 1 5.5 基 于 HTML 的 帮 助 对 话 框 控 件
控件 |
属性 |
取值 |
---|---|---|
ID D _ H E L P _D L G |
S iz e |
350 x2 00 |
ID C _ E X P L O R E R 1 |
S iz e |
336 x1 68 |
ID C _ F O R W AR D |
C a p t io n |
F o rw a rd |
ID C_ B A CK W A R D |
C a p t io n |
B a c k w a rd |
ID C _ G L O S S A R Y |
C a p tio n |
G lo s s a ry |
ID C _ C O N T R O L S |
C a p tio n |
C o n tro ls |
ID C _ HOM E |
C a p t io n |
H o m e |
建 立 一 个 对 话 框 并 不 代 表 在 应 用 程 序 的 各 个 部 分 都 可 以 访 问 它 需 要 为 它建 立 一 个 类 这 也 是 我 们 将 要 完 成 的 工 作 按 住 CT RL 键 然 后 双 击 该 对 话 框同 时 保 证 没 有 双 击 其 中 的 任 何 控 件 系 统 显 示 A dd ing a C la s s 对 话 框 单 击
OK 建 立 新 类 输 入 CH e lp D lg 作 为 类 名 并 选 择 CD ia lo g 作 为 基 类 按 OK 创建 新 类 关 闭 M F C C la s s W iz a rd 对 话 框 在 完 成 下 面 的 几 个 安 装 步 骤 后 再 加 入所 需 的 代 码
此 时 虽 然 该 对 话 框 已 经 可 以 访 问 了 但 对 话 框 上 的 控 件 还 都 不 能 访 问我 们 需 要 处 理 的 第 一 个 控 件 是 W e b B row s e r 双 击 ID C _ E X P L O R E R 1 控 件 系统 显 示 A d d M e m b er V a r iab le 对 话 框 在 M e m b er V a r iab le N a m e 域 中 键 入m _ W e b B ro w s e r 在 C a te gor y 域 中 选 择 Co n tro l 在 V a r ia b le T y p e 域 中 选 择Cw e b B ro w s e r 2 单 击 OK 完 成 变 量 创 建 工 作 做 上 述 工 作 的 目 的 是 为 了 在 应 用程 序 中 使 用 W e b B row s e r 控 件
在 处 理 该 对 话 框 的 其 它 任 务 前 对 W e b B ro w se r 控 件 我 们 还 要 完 成 两 项 任 务其 一 是 我 们 需 要 初 始 化 W e b B row s e r 控 件 以 便 在 用 户 打 开 该 对 话 框 时 它 显 示主 帮 助 文 件 其 二 是 我 们 需 要 改 变 W e b B row s e r 控 件 的 大 小 以 便 它 与 对 话 框的 大 小 一 致 这 样 用 户 就 能 够 根 据 屏 幕 大 小 和 帮 助 文 件 的 大 小 看 到 尽 可 能 多 的 帮助 内 容 完 成 这 项 任 务 只 需 要 使 用 对 话 框 提 供 的 两 个 事 件 一 个 是W M _ IN ID IAL O G 另 一 个 是 W M _ S IZ E 使 用 V iew C la s s W iz ard 命 令 打 开 M F C C la ssW iz a rd 选 择 M e ssa g e M a p 选 项 卡 然 后 加 亮 O b je c t ID s 域 中 的 CH e lp D lg 滚 动 M e ss a g e 列 表 直 到 找 到 W M _ IN ID IAL OG 单 击 A d d F u nc tio n 在 你 的 代 码中 添 加 缺 省 的 初 始 化 函 数 对 W M _ S IZ E 消 息 完 成 与 W M _ IN ID IAL OG 消 息 相 同的 工 作 关 闭 M F C C la ss W iz a rd 对 话 框 在 完 成 了 随 后 的 几 个 设 置 步 骤 后 我 们将 添 加 所 需 的 代 码
用 户 当 然 需 要 五 个 按 钮 执 行 一 定 的 任 务 实 现 起 来 相 对 比 较 简 单 右 击 第一 个 按 钮 也 就 是 Fo rw a rd 按 钮 从 上 下 文 相 关 菜 单 中 选 择 Ev e n ts 你 会 看到 N e w W indow s M e s s a g e a nd E v e n t H a nd le rs 对 话 框 加 亮 BN _ C L ICK E D 消 息然 后 单 击 A dd H a nd le r 按 钮 关 闭 N e w W indow s M e s s a ge a nd E v e n t H a nd le r s 对话 框 对 所 有 五 个 按 钮 重 复 上 述 操 作 步 骤 下 图 是 N e w W indow s M e s s a g e a n d E v en t H a n d lers 对 话 框 的 外 观
让 我 们 再 看 一 看 M F C C la s s W iz a rd 对 话 框 下 图 是 当 前 状 态 下 该 对 话 框 的显 示 信 息 请 注 意 W e b B row s e r 控 件 有 两 个 函 数 每 个 命 令 按 钮 都 有 一 个 函
数
现 在 到 了 给 我 们 的 示 例 工 程 中 添 加 代 码 的 时 候 了 程 序 列 表 15 .5 显 示 了 示
例 程 序 中 需 要 添 加 代 码 在 你 看 过 之 后 我 会 再 进 行 讲 解
程 序 列 表 15.5
//////////////////////////////////////////////////////////////////////////////////////////////////////
//C H e lp D lg m e s s a g e h a n d le rs
B O O L C H e lp D lg ::O n In itD ia lo g ( )
{
C D ia lo g :: O n In itD ia lo g ( ) ;
//N a v ig a te to th e m a in h e lp s c re e n .
m _ W e b B ro w s e r .N a v ig a te (" h ttp ://n t_ s e rv e r/h e lp 2 /s a m p le .h tm " , N U L L , N U L L , N U LL ,N U L L ) ;
re tu rn T R U E ; // re tu rn T R U E u n le s s y o u s e t th e fo c u s to a c o n tro l
/ / E X C E PT IO N : O C X P ro p e r ty Pa g e s s h ou ld re tu rn FA L S E
}
v o id C H e lp D lg ::O n S iz e ( U IN T n T y p e , in t c x , in t c y )
{
C D ia lo g : : O n S ize( n T y p e, cx , cy ) ;
// C h a n g e th e W e b B ro w se r c o n tro l s iz e to m a tc h th e d ia lo g . m _ W e bB ro w s e r .S e t H e ig h t( c y - 64 ) ;
m _ W e bB ro w s e r .S e t W id th( c x - 28 ) ;
}
vo id C H e lpD lg : : O nF o rw a rd ( )
{
// G o to th e n e x t s ite in th e h is to ry lis t. m _ W e bB ro w s e r .G oF orw a rd ( ) ;
}
vo id C H e lpD lg : : O nB a c k w a rd ( )
{
// G o to th e p re v io u s s ite in th e h is to ry lis t . m _ W e b B ro w s er.G o B ack();
}
vo id C H e lpD lg : : O nG lo ss a ry ( )
{
/ / G o to th e G los sa ry W e b pa ge .
m _ W e b B ro w s e r .N a v ig a te (" h ttp ://n t_ s e rv e r/h e lp 2 /g lo ss a ry .h tm " , N U L L ,
N U L L , N U L L ,N U L L ) ;
}
vo id C H e lpD lg : : O nC o n tro ls ( )
{
// G o to th e C o n tro ls ( F o rm a t) W e b p a g e .
m _ W e b B ro w s e r .N a v ig a te (" h ttp ://n t_ s e rv e r/h e lp 2 / fo rm a t .h tm " , N U L L ,
N U L L , N U L L ,N U L L ) ;
}
vo id C H e lpD lg : : O nH o m e ( )
{
// N a v ig a te to th e m a in h e lp s c re e n .
m _ W e b B ro w s e r .N a v ig a te (" h ttp ://n t_ s e rv e r/h e lp 2 /s a m p le .h tm " , N U L L ,
N U L L , N U L L ,N U L L ) ;
}
正 如 你 所 看 到 的 这 些 代 码 丝 毫 没 有 神 秘 之 处 特 别 是 当 你 阅 读 过 12 章 的例 子 之 后 更 是 这 样 所 有 的 函 数 都 与 所 建 立 的 W e b B row s e r 内 存 变 量 m _ W e b B ro w s e r 打 交 道 在 O n In itD ia lo g ( ) 函 数 和 O n H o m e ( ) 函 数 中 都 使 用 了
N a v iga te ( ) 函 数 使 浏 览 器 显 示 主 帮 助 文 件 S A M P LE .H T M 类 似 地 O n C lo s s a ry () 函 数 和 O n C on tro ls ( ) 函 数 使 用 N a v iga te ( ) 函 数 来 显 示 指 定 的 页 面 O n F o rw a rd ( ) 函数 和 O n B ack ( ) 函 数 则 顾 名 思 义 它 们 调 用 了 G o F o rw a rd ( ) 和 G o B ack ( ) 使 得 用 户在 W e b 页 面 间 切 换 最 后 一 个 函 数 是 O n S ize() 它 用 W e b B row s e r 控 件 的S e t H e ight 和 S e t W id th 属 性 来 匹 配 对 话 框 的 大 小 当 用 户 改 变 对 话 框 大 小 时 W e b B ro w s e r 控 件 的 大 小 也 随 之 而 变
这 样 我 们 就 有 了 一 个 功 能 完 善 的 帮 助 对 话 框 了 但 还 是 无 法 访 问 它 将它 加 入 应 用 程 序 是 很 简 单 的 首 先 像 下 面 的 黑 体 部 分 那 样 在 M a in F rm . C P P 文件 中 加 入 帮 助 对 话 框
// M a in F rm .c p p : im p le m e n ta tio n o f th e C M a in F ra m e c la s s
//
# inc lu de " s td a fx .h"
# inc lu de " S ng l_ D o c .h " # inc lu de " M a inF rm .h "
// In cl ud e o u r he lp d i a l o g . #in cl ud e " H e l p D l g.h "
# ifd e f _D E B U G
# d e f in e n e w DE B U G _ NE W #un de f T H IS _F IL E
s ta t ic c h a r TH IS _ F ILE [] = #e n d if
_ _ F ILE_ _ ;
我 们 还 需 要 在 O n H e lp C o n te n ts ( ) 函 数 中 添 加 一 些 代 码 具 体 代 码 为
vo id C M a inF ra m : : O n H e lp C o n te n ts ( )
{
C H e lp D lg O H e lp D lg ; //C re a te a h e lp d ia lo g in s ta n c e .
// D is p la y o u r h e lp d ia lo g . oH e lp D lg .D oM o d a l( ) ;
}
如 果 此 时 编 译 并 运 行 这 个 应 用 程 序 你 就 可 以 使 用 H e lp |C o n te n ts 命 令 访 问基 于 HT M L 的 帮 助 下 图 是 帮 助 对 话 框 的 一 个 示 例
第 16 章 打 包 应 用 程 序
打 包 应 用 程 序 听 起 来 就 像 是 打 包 物 品 送 到 商 店 中 一 样 从 程 序 员 的 角度 来 看 打 包 与 商 店 无 关 但 对 用 户 使 用 时 的 感 觉 却 至 关 重 要 无 需 讳 言 商 店中 最 吸 引 我 们 注 意 力 的 是 商 品 的 包 装 只 有 当 打 开 包 装 之 后 用 户 才 会 关 心 其 中的 内 容 如 果 用 户 在 安 装 应 用 程 序 时 就 发 现 想 要 的 东 西 都 具 备 了 就 会 很 愿 意接下去继续 使用 — — 好的开始是 成功的一半
打 包 对 于 用 户 能 够 快 速 地 安 装 程 序 轻 松 地 使 用 程 序 也 很 重 要 设 想 一 下一 辆 没 有 仪 表 盘 的 小 矫 车 它 肯 定 能 够 前 后 左 右 地 调 整 方 向 但 没 有 仪 表 板 指示 灯 告 诉 司 机 正 在 走 哪 个 方 向 理 由 是 设 计 师 当 然 知 道 运 动 的 方 向 还 安 装 仪表 板 灯 干 嘛 ! 这 样 的 汽 车 肯 定 卖 不 出 去 同 样 道 理 一 个 没 有 好 的 帮 助 的 应 用程 序 看 上 去 像 是 让 用 户 猜 测 能 用 它 来 干 些 什 么 因 为 如 果 只 是 简 单 地 加 入了 一 个 R E ADM E 之 类 的 文 件 用 户 是 根 本 不 会 去 看 的
注 释 第 1 5 章 讲 述 了 建 立 良 好 的 帮 助 文 件 的 必 要 性 如 果 你 还 没 有 给 你 的应 用 程 序 作 一 个 好 的 帮 助 文 件 那 么 在 阅 读 本 章 之 前 你 应 该 首 先 创 建一 个 帮 助 文 件 我 是 好 的 帮 助 文 件 的 积 极 拥 护 者 — — 它 们 会 节 约 你 自己 和 用 户 大 量 的 时 间 和 精 力 本 章 的 前 提 是 假 定 你 也 是 好 的 帮 助 文 件的 拥 护 者
注 要 保 证 应 用 程 序 界 面 的 实 用 性 和 一 致 性 包 括 安 装 程 序
有 些 程 序 员 只 是 简 单 地 将 所 有 程 序 文 件 放 在 一 个 软 盘 上 然 后 作 一 个 批 处理 文 件 就 万 事 大 吉 开 始 发 行 了 更 有 甚 者 如 果 该 程 序 只 是 内 部 应 用 甚至 连 测 试 都 不 测 试 过 不 了 多 久 他 肯 定 会 接 到 许 多 不 满 的 用 户 电 话 软 盘 上可 能 少 了 某 个 重 要 的 文 件 用 户 执 行 批 处 理 后 根 本 运 行 不 了 没 有 人 会 再 喜 欢这 种 程 序 即 使 是 重 新 加 入 了 一 个 好 看 的 界 面 安 装 程 序 并 修 正 了 错 误 其实 并 不 是 程 序 本 身 有 什 么 问 题 而 是 程 序 设 计 者 的 态 度 不 够 认 真 第 一 印 象 对一 个 程 序 的 成 功 是 很 关 键 的
不 管 谁 用 你 的 程 序 都 要 在 程 序 出 门 之 前 完 成 正 确 的 包 装 少 做 一 点 都 会成 为 困 扰 你 及 用 户 的 隐 患 没 有 人 愿 意 买 一 个 不 完 整 的 小 矫 车 同 样 的 道 理也 没 有 人 想 要 一 个 不 完 整 的 程 序 花 点 时 间 做 一 个 好 的 打 包 吧 即 使 程 序是 给 其 它 的 程 序 员 或 高 级 用 户 使 用 的 人 人 都 会 受 益 于 一 个 功 能 完 善 的 程 序
如 果 我 没 有 花 点 时 间 讲 述 程 序 的 打 包 就 是 我 的 失 职 这 就 是 本 章 的 目 的在 我 看 来 导 致 一 个 应 用 程 序 给 用 户 留 下 深 刻 印 象 的 最 重 要 的 两 个 因 素 是 理解 各 种 打 包 类 型 为 相 应 的 打 包 建 立 安 装 程 序 我 还 会 讲 到 不 同 环 境 下 程 序 员应 特 殊 考 虑 的 因 素 例 如 内 部 程 序 极 少 考 虑 开 发 共 享 软 件 的 人 所 要 考 虑 的 共享 问 题
Web 链 接 本 章 我 们 使 用 了 InstallShi eld 6 Visual C++ 6.0 提 供 的 Free Edition 可 以 在 http://www . Insta llshield.com/ 站 点 找 到InstallShi eld 6 和 许 多 有 用 的 用 于 打 包 的 产 品 不 幸 的 是 至 少 在本 书 写 作 时 该 软 件 还 不 能 免 费 下 载 然 而 可 拨 打 (800)374-4 353
或 ( 847)240-9111 以 了 解 该 Free Editi on 并 获 得 其 拷 贝
1 6. 1 理 解 各 种 打 包 类 型
在 打 包 交 付 应 用 程 序 时 需 要 考 虑 许 多 事 情 对 绝 大 多 数 程 序 员 来 说 最 重要 的 是 运 行 环 境 内 部 使 用 的 程 序 可 能 与 通 用 程 序 考 虑 的 侧 重 点 不 同 它 可 能没 有 时 间 完 成 一 个 完 整 的 打 包 工 作 — — 对 内 部 应 用 来 说 时 间 往 往 是 至 关 重 要 的因 素
注 有 三 种 基 本 的 程 序 打 包 类 型 企 业 内 部 应 用 软 件 共 享 软 件 和 商 业 软件
本 节 将 讲 述 三 种 最 基 本 的 程 序 打 包 类 型 企 业 内 部 应 用 软 件 共 享 软 件 和商 业 软 件 你 很 可 能 只 会 去 阅 读 其 中 之 一 但 最 好 还 是 也 读 一 下 其 它 类 型 的 叙述 因 为 其 中 包 含 有 许 多 有 用 的 技 巧 和 提 示 而 某 些 人 更 不 应 该 满 足 于 只 了 解某 一 种 类 型 例 如 你 是 公 司 的 顾 问 你 也 就 是 半 个 内 部 程 序 设 计 人 因 为 所建 立 的 大 部 分 应 用 程 序 都 是 供 公 司 内 部 使 用 的 同 时 为 了 满 足 外 部 用 户 的 需求 至 少 要 提 供 一 个 共 享 软 件 级 的 打 包 封 装 一 些 客 户 甚 至 想 要 一 个 商 业 软 件级 的 打 包 但 这 种 情 况 相 对 少 一 些
提 供 哪 种 打 包 方 式 很 难 一 言 以 蔽 之 但 也 不 是 毫 无 依 据 关 键 在 于 对 应 用程 序 的 使 用 人 群 作 出 正 确 的 评 估 如 果 用 户 需 要 的 只 是 运 行 稳 定 不 需 要 多 少的 修 饰 使 用 企 业 内 部 应 用 打 包 格 式 就 很 合 适 了
企 业 内 部 应 用 软 件
设 计 企 业 内 部 应 用 程 序 的 程 序 员 最 不 用 关 心 封 装 的 华 丽 性 最 需 要 关 心 程序 的 可 定 制 性 事 实 上 企 业 内 部 程 序 不 用 靠 精 彩 的 画 面 美 妙 的 音 响 来 吸 引用 户 界 面 只 要 功 能 完 善 用 户 友 好 就 足 够 了 如 果 你 手 边 还 有 许 多 项 目 有 待完 成 即 使 费 尽 心 机 地 设 计 了 一 个 精 美 的 安 装 程 序 也 不 会 赢 得 老 板 的 赞 赏
另 一 方 面 企 业 内 部 程 序 却 常 要 考 虑 提 供 可 定 制 性 对 于 可 定 制 的 程 序特 别 是 数 据 库 应 用 程 序 特 别 之 处 并 不 只 是 要 使 用 特 定 的 文 件 还 需 要 定 制 注册 项 及 进 行 许 多 其 它 的 设 置 建 立 一 个 在 企 业 内 部 各 种 工 作 站 上 都 运 行 良 好 不 需 要 设 计 人 员 帮 助 的 安 装 程 序 是 最 重 要 的 要 求 必 须 花 些 时 间 手 工 调 整 用 诸如 In s ta l l S h ie ld 一 类 产 品 建 立 的 标 准 安 装 程 序
企 业 内 部 安 装 程 序 不 同 于 其 它 两 类 安 装 程 序 的 另 一 个 重 要 之 处 是 发 布 时 所使 用 的 介 质 共 享 软 件 和 商 业 软 件 通 常 使 用 软 盘 存 放 现 在 越 来 越 少 了
除 非 你 所 在 的 企 业 太 落 伍 了 否 则 肯 定 会 有 LA N 环 境 供 发 布 程 序 可 以 充 分 利用 这 个 环 境 同 时 使 用 最 简 单 而 有 效 的 存 储 介 质 CD 盘 你 会 发 现 如 果 将 应用 程 序 打 包 在 CD 上 用 LA N 来 发 布 建 立 和 测 试 安 装 程 序 都 会 快 得 多
技 巧 Inst allShield 6 Prof essional Edition 提 供 了 通 过 Intranet 安装 应 用 程 序 的 能 力 不 管 公 司 的 规 模 有 多 少 个 楼 宇 都 可 以 应 用 我 们介 绍 的 原 理 通 过 L A N 发 布 应 用 程 序 在 决 定 以 软 盘 或 C D 的 形 式 存储 应 用 程 序 并 手 工 发 布 之 前 必 须 花 时 间 研 究 InstallShi eld 或 其 它封 装 程 序 提 供 的 各 种 发 布 方 法 对 于 企 业 内 部 应 用 程 序 来 说 用 LAN 或 intranet 来 发 布 最 为 有 效
在 LA N 上 打 包 好 应 用 程 序 之 后 只 需 在 登 录 服 务 器 的 主 批 处 理 文 件 中 加 入安 装 程 序 命 令 就 行 了 下 次 当 用 户 登 录 时 批 处 理 检 查 该 应 用 是 否 已 经 安 装 没 安 装 自 动 调 用 已 放 在 LA N 上 的 安 装 程 序
技 巧 安 装 公 司 内 部 软 件 时 用 U N C 路 径 代 替 标 准 驱 动 器 符 的 方 法 非 常 方便 源 目 录 用 U N C 路 径 保 证 每 个 用 户 都 能 方 便 地 访 问 所 需 的 源 文 件
在 企 业 应 用 环 境 中 发 布 程 序 时 还 需 要 考 虑 一 些 因 素 下 面 各 要 点 就 是 为保 证 安 装 程 序 的 可 定 制 性 所 要 考 虑 的 使 用 哪 种 方 式 取 决 于 具 体 环 境 如 企 业机 构 的 设 置 以 及 用 户 的 连 网 情 况
通 用 文 件 可 以 集 中 存 放 应 用 程 序 的 标 准 发 布 方 式 为 将 所 有 文 件 都 安 装到 用 户 的 机 器 上 这 是 共 享 软 件 和 商 业 软 件 发 布 的 唯 一 方 法 而 对 于 企业 内 部 程 序 来 说 可 以 把 通 用 文 件 比 如 DL L 存放 到 文 件 服 务 器上 这 种 方 法 有 两 个 好 处 首 先 减 少 了 对 用 户 机 器 存 储空 间 的 要 求 其次 当 用 户 在 DL L 中 发 现 错 误 时 更 改 起 来 更 快 只 需 改 动 服 务 器 上的 DL L 就 行 了 这 种 方 法 也 有 两 个 缺 点 第 一 用 户 必 须 连 网 第 二如 果 经 常 加 载 / 卸 载 DL L 必 然 会 极 大 地 增 加 网 络 流量
绝 对 的 优 势 共 享 软 件 和 商 业 软 件 的 设 计 者 无 法 预 先 假 定 应 用 环 境 的 任何 因 素 源 和 目 的 都 不 确 定 使 用 何 种 机 器 是 个 未 知 数 有 时 连 操 作系 统 也 是 未 知 的 而 对 企 业 内 部 应 用 软 件 来 说 设 计 者 则 没 有 这 种 麻 烦所 要 顾 虑 的 是 网 上 机 型 互 不 相 同 如 果 对 所 有 机 器 都 用 同 样 的 安 装 方式 可 以 指 定 一 个 缺 省 的 目 的 目 录 使 用 UNC 路 径 名 时 可 以 指 定 一个 绝 对 的 源 目 录 因 为 服 务 器 路 径 名 不 会 因 安 装 次 数 的 不 同 而 变 化 当
网 络 规 模 不 大 工 作 站 配 置 一 致 时 甚 至 可 以 规 范 到 每 台 站 点 总 之不 需 要 给 用 户 提 供 太 多 的 安 装 选 项 从 而 从 根 本 上 减 低 安 装 程 序 的 复 杂性 程 序 员 所 要 完 成 的 工 作 就 是 事 先 胸 中 有 数
不 用 设 立 配 置 选 择 项 所 有 的 商 业 软 件 都 提 供 三 种 安 装 时 配 置 选 项 定制 安 装 Cu s to m 典 型 安 装 T y p ic a l 和 最 小 安 装 C o m p act 定制 安 装 允 许 用 户 选 择 程 序 部 件 典 型 安 装 专 为 桌 面 用 户 设 计 最 小 安 装则 是 为 膝 上 电 脑 用 户 设 计 的 多 数 情 况 下 可 减 化 为 两 项 膝 上 安 装 和 桌面 安 装 其 实 用 这 些 词 汇 只 会 使 用 户 费 解 最 小 安 装 的 含 义
共 享 软 件
共 享 软 件 的 设 计 者 在 打 包 程 序 时 所 遇 到 的 挑 战 最 大 看 看 其 中 的 一 个 主 要问 题 安 装 的 大 小 与 拥 有 高 速 网 络 环 境 的 企 业 内 部 软 件 不 同 也 不 像 商 业 软件 那 样 可 以 用 CD 进 行 发 布 共 享 软 件 的 用 户 一 般 用 低 速 M ode m 连 接 到 BBS 联 机 服 务 或 In te rn e t 上 有 足 够 的 证 据 表 明 当 程 序 大 小 超 过 1M B 时 下 载 它 的人 数 会 急 剧 下 降
注 释 本 节 所 限 定 的 文 件 大 小 只 是 指 导 性 的 潜 在 用 户 愿 意 在 你 的 程 序 上投 入 的 盘 空 间 和 时 间 取 决 于 许 多 因 素 诸 如 人 为 的 估 计 和 程 序 已 显 示的 价 值 等 等 例 如 有 一 个 我 很 喜 欢 的 图 像 打 包 共 享 软 件 它 要 占 7 M B 硬 盘 空 间 压 缩 后 也 超 过 1 M B 但 人 们 还 是 很 愿 意 下 载 并 使 用 它 因为 它 物 有 所 值 众 口 皆 碑 就 是 人 们 愿 意 下 载 的 最 好 动 力 你 需 要 考 虑
的 是 人 们 是 否 愿 意 为 你 的 程 序 掏 腰 包 — — 如 果 你 真 想 参 与 到 共 享 软 件市 场 的 话 这 是 必 须 学 习 的 经 验
好 了 这 些 决 定 了 程 序 空 间 的 限 制 那 么 如 何 克 服 呢 关 键 在 于 如 何 将 产品 市 场 化 多 数 成 功 的 共 享 软 件 一 遍 又 一 遍 地 使 用 同 样 的 图 像 和 声 音 换 句 话说 不 会 出 现 安 装 程 序 用 了 一 种 奇 异 的 图 像 而 应 用 程 序 本 身 又 用 了 另 一 种 图像 共 享 软 件 的 要 旨 是 安 装 和 使 用 的 界 面 的 一 致 性 事 实 上 使 用 精 确 的 程 序设 计 技 术 能 使 你 有 多 次 机 会 轻 松 地 摆 脱 应 用 程 序 的 图 标 我 们 在 第 三 章 讨 论过
像 企 业 内 部 软 件 那 样 没 有 动 人 的 图 像 或 声 音 共 享 软 件 也 能 赢 得 用 户 吗情 况 不 太 一 样 如 果 真 是 想 吸 引 用 户 进 一 步 购 买 就 必 须 在 程 序 中 加 入 一 些 靓点 没 有 人 愿 意 付 钱 给 一 个 看 上 去 邋 里 邋 遢 的 程 序 即 使 它 的 功 能 很 强 大 显然 想 让 程 序 既 短 小 又 完 美 是 件 很 难 的 事
开 发 共 享 软 件 的 另 一 个 问 题 在 资 金 方 面 许 多 共 享 软 件 的 作 者 只 有 一 两 个人 在 他 们 等 待 产 品 售 出 的 过 程 中 不 得 不 从 事 其 它 咨 询 或 冒 险 性 的 工 作 来 维 持生 计 他 们 没 有 充 裕 的 时 间 也 不 会 像 出 品 商 业 软 件 的 大 公 司 那 样 有 专 业 的美 术 或 音 响 指 导 因 此 共 享 软 件 只 要 设 计 良 好 占 用 空 间 合 适 比 如 说 5M B左 右 并 稍 加 雕 琢 就 很 令 人 满 意 了
我 们 尚 未 讨 论 共 享 软 件 设 计 者 必 须 面 对 的 最 大 的 问 题 安 装 程 序 只 是 第 一步 企 业 内 部 软 件 对 应 用 环 境 有 最 全 面 的 控 制 可 以 控 制 到 使 用 该 程 序 的 每 台机 器 而 且 设 计 者 即 使 在 机 型 检 查 和 配 置 选 项 方 面 作 的 工 作 很 少 也 会 得 到 认 可商 业 软 件 的 设 计 者 情 况 相 近 至 少 他 们 可 以 在 软 件 包 装 盒 上 印 上 说 明 规 定 运
行 该 程 序 的 硬 件 要 求 事 实 上 只 要 用 户 买 了 相 应 的 商 业 软 件 就 会 意 识 到 对 硬件 环 境 的 需 求 共 享 软 件 的 设 计 者 就 没 有 这 种 保 证 了 它 的 用 户 的 机 型 可 是 包罗 万 象 的 甚 至 是 一 台 老 掉 牙 的 8088 P C
这 种 无 法 预 测 会 带 来 什 么 后 果 呢 首 先 在 程 序 中 必 须 额 外 设 计 一 段 检 测例 程 以 保 证 满 足 最 小 硬 件 需 求 用 户 总 是 很 少 去 读 R E ADM E 文 件 通 常 在这 里 指 出 最 小 环 境 需 求 甚 至 根 本 不 注 意 它 当 他 们 安 装 失 败 时 却 只 会 抱怨 设 计 者 根 本 不 会 承 认 是 自 己 的 失 误 因 此 必 须 有 检 测 程 序 还 需 要 提 供灵 活 的 可 供 选 择 的 配 置 选 项 例 如 当 机 器 档 次 低 时 用 户 可 以 只 选 用 文 本格 式 摒 弃 所 有 的 图 像 和 声 音
注 企 业 内 部 的 程 序 员 能 够 全 面 地 控 制 应 用 程 序 的 运 行 环 境 而 共 享 软 件的 开 发 者 则 几 乎 不 能 掌 握 其 程 序 的 运 行 环 境
技 巧 如 果 时 间 和 财 力 充 裕 设 计 一 个 卓 越 的 安 装 程 序 非 常 有 助 于 共 享软 件 的 销 售 要 让 用 户 明 白 钱 花 得 物 有 所 值 换 句 话 说 如 果 在 安 装过 程 就 吸 引 了 用 户 无 疑 增 加 了 他 愿 意 购 买 的 欲 望
共 享 软 件 设 计 者 一 般 都 有 一 些 使 安 装 程 序 更 加 实 用 的 技 巧 下 面 我 给 出 的一 些 原 则 也 还 是 有 帮 助 的 在 最 后 决 定 使 用 什 么 样 的 包 装 之 前 必 须 进 行 反 复的 试 验 比 较
打 包 分 割 化 减 少 盘 空 间 占 用 量 和 下 载 时 间 的 一 种 方 法 是 将 程 序 打 包 成几 个 部 分 例 如 主 程 序 放 在 一 个 部 分 图 像 在 另 一 部 分 声 音 在 第 三部 分 这 样 用 户 就 可 以 选 择 愿 意 付 出 的 盘 空 间 和 下 载 时 间 的 多 少 必 须保 证 程 序 没 有 图 像 和 声 音 或 是 其 它 决 定 放 在 单 独 包 装 中 的 部 分 也 可
以 正 常 运 行 安 装 程 序 也 要 提 供 相 应 的 灵 活 性 当 用 户 只 下 载 了 部 分 打包 程 序 时 应 该 也 能 安 装
帮 助 详 细 化 我 们 讨 论 一 下 将 第 15 章 建 立 的 帮 助 文 件 放 置 在 独 立 打 包中 的 情 况 方 法 之 一 是 制 作 一 个 主 帮 助 文 件 和 一 个 详 细 的 帮 助 文 件 主帮 助 文 件 中 含 有 对 基 本 命 令 的 解 释 详 细 帮 助 文 件 中 含 有 用 户 教 程 宏语 言 描 述 和 指 令 的 细 节 说 明 同 样 地 用 户 可 以 选 择 付 出 的 盘 空 间 和 下载 时 间 量 程 序 设 计 者 也 会 从 中 受 益 共 享 软 件 无 法 预 测 是 否 畅 销 因此 在 没 有 回 报 时 就 投 入 大 量 的 时 间 和 金 钱 是 很 困 难 的 而 用 这 种 方 法 可以 减 少 投 资 直 到 有 购 买 态 势 之 后 再 继 续 投 入
技 巧 已 经 有 一 些 共 享 软 件 公 司 用 模 块 化 的 方 法 拓 展 销 售 例 如 当 用 户下 载 时 ButtonWare 总 是 提 供 一 个 简 单 的 帮 助 文 件 和 程 序 的 主 要 特征 购 买 时 再 允 许 用 户 下 载 全 功 能 的 程 序 和 完 整 的 程 序 文 档 许 多 用户 会 抱 怨 称 之 为 半 残 的 软 件 在 购 买 之 前 根 本 无 法 测 试 不 幸 的是 除 非 设 计 者 能 充 分 地 说 服 用 户 购 买 否 则 用 户 是 轻 易 不 会 掏 钱 的 我 说 的 是 实 话 无 数 共 享 软 件 公 司 都 因 为 销 售 不 畅 而 倒 闭 了 但 它们 的 软 件 却 仍 在 广 泛 使 用
商 业 软 件
我 并 不 打 算 假 惺 惺 地 要 教 微 软 之 类 的 大 公 司 如 何 包 装 产 品 开 发 市 场 — —
它 们 的 市 场 开 拓 效 果 已 经 是 有 目 共 睹 我 似 乎 在 班 门 弄 斧 商 业 软 件 区 别 于 共
享 软 件 的 一 个 特 点 是 软 件 的 大 小 大 的 软 件 公 司 通 常 集 中 于 一 个 或 多 个 产 品 有 许 多 专 业 的 设 计 小 组 完 成 整 合 封 装 研 究 一 下 这 些 软 件 也 会 使 我 们 这 些 普通 的 程 序 员 从 中 受 益
过 去 的 几 个 月 中 每 当 我 安 装 一 个 成 熟 的 软 件 产 品 时 我 都 非 常 留 意 装 过 30 个 产 品 之 后 我 审 视 了 一 下 这 些 记 录 结 果 令 人 吃 惊 例 如 前 面 我 说 过 对于 共 享 软 件 的 作 者 设 计 一 个 好 的 安 装 程 序 会 有 助 于 销 售 因 为 他 财 力 有 限
必 须 用 第 一 时 间 抓 住 用 户 令 人 惊 奇 的 是 商 业 软 件 也 情 同 此 理 只 不 过 方 法 不同 罢 了 用 户 已 经 购 买 了 这 种 产 品 正 在 安 装 但 是 还 有 其 它 增 值 产 品 呢 商 业软 件 厂 家 总 是 利 用 安 装 的 时 机 推 销 相 关 连 的 增 值 产 品 比 如 安 装 字 处 理 程序时 介 绍 字 典 软 件
另 外 我 发 现 商 业 软 件 在 安 装 时 总 是 告 诉 用 户 程 序 的 新 增 特 性 这 倒 不 奇怪 因 为 这 些 公 司 早 就 注 意 到 用 户 不 留 意 R E ADM E 文 件 安 装 往 往 就 是 用 户装 载 一 个 软 件 的 最 后 一 步 同 样 地 他 们 要 吸 引 用 户 因 此 在 安 装 程 序 中 就 要使 用 户 对 程 序 有 一 个 整 体 概 念
商 业 软 件 总 是 带 有 许 多 多 媒 体 功 能 也 就 不 足 为 奇 了 因 为 这 些 公 司 有 足 够的 开 发 实 力 即 使 不 像 这 些 大 公 司 那 样 实 力 强 劲 同 样 应 该 注 意 我 们 强 调 的 该作 什 么 不 该 作 什 么 在 安 装 程 序 中 提 供 的 版 本 虽 然 小 但 要 代 表 原 貌 才 能 吸 引用 户 牢 记 你 要 作 的 就 是 尽 可 能 给 用 户 最 好 的 第 一 印 象 因 此 一 个 精 彩 的 安 装程 序 不 仅 仅 是 应 用 程 序 的 良 好 开 端 也 是 用 户 了 解 程 序 的 窗 口 它 很 可 能 会 决定 用 户 是 否 来 购 买 你 的 程 序
你 也 能 够 从 商 业 程 序 中 吸 取 一 些 教 训 其 中 之 一 是 安 装 程 序 太 复 杂 以 至
于 测 试 得 不 完 善 最 近 我 就 遇 到 了 这 样 一 个 产 品 安 装 时 发 现 它 的 帮 助 屏 幕是 给 老 版 本 做 的 — — 厂 家 忘 了 更 新 它 了 结 果 呢 因 为 该 产 品 也 没 带 任 何 印 刷的 说 明 书 我 就 很 困 惑 产 品 中 的 各 部 件 有 什 么 特 性 了 如 果 厂 家 认 真 完 整 地 测试 了 安 装 程 序 我 就 会 明 确 地 得 到 想 要 的 信 息 以 决 定 安 装 哪 些 部 件
另 一 个 很 奇 怪 的 问 题 是 产 品 根 本 安 装 不 上 似 乎 是 因 为 安 装 程 序 中 用 了 某种 特 殊 的 图 像 碰 巧 我 的 机 器 不 支 持 换 了 台 机 器 安 装 后 该 程 序 运 行 得 很 好但 安 装 程 序 本 身 还 是 显 示 不 全 同 样 地 厂 家 为 了 追 求 精 彩 却 适 得 其 反 了
从 这 一 节 可 以 看 出 研 究 一 下 别 人 封 装 产 品 的 方 法 能 取 得 事 半 功 倍 的 效果 我 发 现 事 先 写 下 注 意 事 项 在 动 手 编 写 安 装 程 序 之 前 仔 细 阅 读 一 遍 可 以少 犯 许 多 错 误 几 乎 没 有 人 可 以 一 蹴 而 就