添加路由时碰到奇怪的问题,请高手进来看一下

lqbn 2005-08-16 04:48:41
我的系统是Win2k3+SP1,前段时间一直运行良好。但是从昨天早上开始,运行route命令修改路由表时,总是会看到一个错误,具体表现如下:

1. 添加路由
>route add 202.103.0.0 MASK 255.255.0.0 192.168.1.2
Error: Cannot Open Networks Database file rt
Error: Cannot Open Networks Database file rt

此时路由其实已经加进去了,而且可以正常使用。

2. 删除路由
>route delete 202.103.0.0
Error: Cannot Open Networks Database file rt

此时路由已经删除了。

3. 故意写错语法
>route ADD 157.0.0.0 MASK 155.0.0.0 157.55.80.1 IF 1
Error: Cannot Open Networks Database file rt
Error: Cannot Open Networks Database file rt
The route addition failed: The specified mask parameter is invalid. (Destination
& Mask) != Destination.

我已经到www.google.com和groups.google.com中查询了一下,没有任何有价值的回答。

我自己手动查询ServiceProvider,找到了"Error: Cannot Open Networks Database file rt"这句错误提示不是由route.exe给出的,而是由mswsock.dll给出的。原始字符串为"Error: Cannot Open Networks Database file %1"。这也就是说,"rt"其实是一个变量,但我不知道mswsock.dll是从哪里读出这个变量(即"rt"这个名字保存在哪里),因为默认的networks database应该是%systemroot%\system32\drivers\etc\networks,不知道为什么现在变成了rt,而且还不知道具体的路径到底是什么。

希望高手们帮我分析一下这到底是什么原因,并告知解决方法。感激不尽!
...全文
417 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
spark_li 2005-08-18
  • 打赏
  • 举报
回复
赫赫,不错,有发现问题并解决问题的能力
很好.
redmushroom 2005-08-18
  • 打赏
  • 举报
回复
学习
wantforever 2005-08-18
  • 打赏
  • 举报
回复
看来楼主本身也是个高手,又学到东西了,嘿嘿
lqbn 2005-08-18
  • 打赏
  • 举报
回复
由于问题是我自己解决的,呵呵,放分了,来者皆有分。
lqbn 2005-08-17
  • 打赏
  • 举报
回复
最后一次正确配置、安全模式、带命令行的安全模式,全部都进去试过了,错误依旧……真不知道是哪里的设置有问题。
lqbn 2005-08-17
  • 打赏
  • 举报
回复
唉,经过一番磨难,终于搞定了,下面介绍一下过程:

首先,既然报告是数据库文件找不到,那肯定是跟文件访问有关。我突然想起以前写过一个Hook Windows文件操作的小程序(开头没有想到,白浪费了那么多时间,汗……)。马上把它调出来,打开监视,然后运行route.exe,随便进行一个删除路由的操作。不出所料,route.exe仍然在报告“Error: Cannot Open Networks Database file rt”,同时监视文件操作的程序也检测到大量的文件操作请求,其中大部分请求是成功的,不过最后有几个请求报告“File Not Found”;查看请求的文件名,差点让我晕倒:D:\Documents and Settings\lqbn\%SystemRoot%\System32\drivers\etc\networks。环境变量%SystemRoot%竟然没有被正确识别。接着我打开注册表编辑器,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下面把DataBasePath改成了绝对路径D:\Windows\System32\drivers\etc,再次运行route命令,发现错误没有了。文件监视器中也反映出这次route.exe成功的访问到了%SystemRoot%\System32\drivers\etc\networks这个文件。在进一步的尝试中,我发现只要DataBasePath中第一个字符是%,route.exe就会在前面加上我的帐户路径D:\Documents and Settings\lqbn。看来问题的确是出在读取注册表的这个键值上。为了保证这个键值的绝对正确,我打开了Virtual Server中的另外一个工作正常的Win2k3。运行注册表编辑器,打开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters这个项。乍一看,完全一样;仔细一看,终于发现了问题所在:DataBasePath这个键值的数据类型不同。正常的应该是REG_EXPAND_SZ,而我机器上的DataBasePath的数据类型却是REG_SZ。修改之后,再运行route命令,终于一切正常了。

查询了一下MSDN,找到了如下描述:

REG_EXPAND_SZ
A null-terminated string that contains unexpanded references to environment variables (for example, "%PATH%"). It will be a Unicode or ANSI string depending on whether you use the Unicode or ANSI functions. To expand the environment variable references, use the ExpandEnvironmentStrings function.

就是说REG_EXPAND_SZ这种类型是专门用于包含有未展开的环境变量的键值的。
lqbn 2005-08-16
  • 打赏
  • 举报
回复
Administrators和SYSTEM都有Full Control的权限;另外列表中还有两个组Power Users和Users,它们只有读的权限,不过我想关系不大。
icuc88 2005-08-16
  • 打赏
  • 举报
回复
%systemroot%\system32\drivers\etc\networks 这个文件是否有权限读写?

6,845

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧