在应用程序中实现RAS拨号

发表于:2007-07-14来源:作者:点击数: 标签:
王 涛 ---- 远 程 访 问 服 务(RAS) 是Windows NT 操 作 系 统 提 供 的 系 统 服 务 之 一, 通 过 电 话 线 可 以 使 单 独 的 计 算 机 接 入 网 络, 或 通 过 两 个RAS 对 拨 使 两 个 局 域 网 互 连。 此 项 服 务 的 功 能 可 以 使 远 程 的 计
王 涛

---- 远 程 访 问 服 务(RAS) 是Windows NT 操 作 系 统 提 供 的 系 统 服 务 之 一, 通 过 电 话 线 可 以 使 单 独 的 计 算 机 接 入 网 络, 或 通 过 两 个RAS 对 拨 使 两 个 局 域 网 互 连。 此 项 服 务 的 功 能 可 以 使 远 程 的 计 算 机 端 点 以 较 低 的 费 用 同 网 络 连 接。
---- 由 于Windows NT 操 作 系 统 的 大 量 使 用, 远 程 访 问 服 务 功 能 也 被 广 泛 应 用, 在 许 多 具 体 的 应 用 程 序 中, 均 已 通 过 远 程 访 问 服 务 来 实 现 对 远 程 的 资 源 共 享 等 功 能。 连 通 远 程 访 问 服 务, 只 要 从 远 程 客 户 机 拨 通 拨 号 网 络 就 可 以 了, 执 行 挂 断 就 结 束 连 接, 鼠 标 操 作Windows 95 中 的 拨 号 网 络 可 以 直 接 拨 通 和 挂 断。 但 有 些 时 候 我 们 希 望 在 应 用 程 序 中RAS 拨 号 和 挂 断 对 用 户 不 可 见, 那 么 就 需 要 相 应 的 程 序 控 制 来 实 现RAS 拨 通 和 挂 断。

---- Windows 95 提 供 了API 函 数RasDial, 调 用 系 统 中 建 好 的 拨 号 网 络 连 接, 完 成RAS 拨 号, 同 时 还 提 供 了API 函 数RasHangUp 断 开 连 接。RasDial 的 原 形 如 下:

---- DWORD RasDial(LPRASDIALEXTENSIONS IpRasDialExtensions,LPTSTR IpszPhonebook,LPRASDIALPARAMS IpRasDialParams,DWORD dwNotifierType,LPVOID IpvNotifier,LPHRASCONN IphRasConn)

---- 此 函 数 的 第3 个 参 数 为 指 向RASDIALPARAMS 型 结 构 体 的 指 针, 它 提 供 了 配 置RAS 拨 号 的 参 数; 第5 个 参 数 为 拨 号 完 成 后 执 行 的 回 调 函 数; 第6 个 参 数 是LPHRASCONN 型 的 指 针, 拨 号 连 接 建 立 好 之 后 将 返 回 此 连 接 的 句 柄; 其 他3 个 参 数 为NULL 即 可。 函 数 调 用 如 果 成 功 将 返 回 零, 否 则 返 回 错 误 代 码, 此 错 误 代 码 的 含 义 可 以 在 头 文 件Raserror.h 中 查 到。

---- RASDIALPARAMS 型 结 构 体 包 含7 个 数 据 成 员:dwSize、szEntryName、szPhoneNumber、szCallbackNumber、szUserName、szPassword 和szDomain, 它 们 的 作 用 如 右 表 所 示。

---- 要 挂 断 已 拨 通 的 连 接 使 用RasHangUp 函 数, 需 要 的 参 数 是 此 连 接 的 连 接 句 柄。 下 面 介 绍 使 用VC 完 成RAS 拨 号 的 一 个 例 子, 其 中 我 们 假 设RAS 端NT 服 务 器 连 接 的 内 部 分 机 的 电 话 号 码 是"22", 具 体 步 骤 如 下:

---- 1 . 配 置 好 调 制 解 调 器, 然 后 在Windows 95 的 拨 号 网 络 中 建 立 一 个 名 为dial 的 连 接。

---- 2 . 建 立 一 个Visual C 的 应 用 框 架, 在Setting 中 为 应 用 程 序 加 入Rasapi32.lib 静 态 库。

---- 3 . 新 建 一 个 对 话 框, 在 其 上 加 两 个 按 钮, 一 个 用 于 拨 通, 一 个 用 于 挂 断。

---- 4 . 在 鼠 标 点 击 拨 通 按 钮 的 响 应 函 数 中 加 入 以 下 代 码:

      RASDIALPARAMS rdParams;
      DWORD dwRet;
      rdParams.dwSize=sizeof(RASDIALPARAMS);
      strcpy(rdParams.szEntryName,"dial");
      strcpy(rdParams.szPhoneNumber,"22");
      strcpy(rdParams.szCallbackNumber,"*");
      strcpy(rdParams.szUserName,"dial");
      rdParams.szPassword[0]='\0';
      strcpy(rdParams.szDomain,"dial");
      hRasConn=NULL;
    dwRet=RasDial(NULL,NULL,&rdParams,0L,
(RASDIALFUNC)RasDialFunc,&hRasConn);
      if(dwRet!=0){
        //deal with error …
      }
----
    5 . 在 此 响 应 函 数 之 前 加 入 如 下 代 码:
VOID WINAPI RasDialFunc(UINT
unMsg,RASCONNSTATE rasconnstate,DWORD dwError)
      {
      }

---- 6 . 在 鼠 标 点 击 挂 断 按 钮 的 响 应 函 数 中 加 入 如 下 代 码:

      DWORD dwRet;
      dwRet= RasHangUp(hRasConn);

---- 7 . 最 后 编 译 执 行 程 序。

---- RASDIALPARAMS 型 结 构 体 数 据 成 员 表 成 员 名 类 型 功 能
DwSize DWORD 结 构 体 的 大 小
SzEntryName TCHAR 数 组 调 用 的 拨 号 连 接 名 称
SzPhoneNumber TCHAR 数 组 拨 打 的 电 话 号 码
SzCallbackNumer TCHAR 数 组 要 求 回 拨 的 电 话 号 码
SzUserName TCHAR 数 组 向RAS 登 录 的 用 户 名
SzPassord TCHAR 数 组 向RAS 登 录 的 口 令
SzDomain  TCHAR 数 组 向RAS 登 录 的 域

原文转自:http://www.ltesting.net