ccidnet????

出版日期:2002-06-10 总期号:471 本年期号:21

本期导读
热点聚焦
零组件
PC天地
数码与外设
软件.net
专题
社会培训
教育信息化
读者俱乐部
超频小奇兵

姜卫东、华云

  随着网络的普及应用,宽带互联已经越来越多地走入了我们的生活。目前我们使用的大部分都是ADSL线路的专线(固定IP)和虚拟拨号两种类型的接入方式。虽然ADSL已经相当快了,但人们总是希望更快,因此便有了“ADSL超频奇兵”这样的软件,通过修改PC系统注册表中原来专为“低速”接入而设置的TCP/IP默认参数以适应PPPoE(PPPover Ethernet基于以太网的PPP协议)方式的ADSL接入。不过,作为Program Fan,我们自然想知道,这样的软件是怎样编写的呢?它修改了注册表的哪些键呢?通过研究,我们发现,要提高ADSL的速度,需要修改注册表中的如下键值:

  HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings下的MaxConnectionsPer1_0Server和MaxConnectionsPerServer;HKEY_LOCAL_MACHIN\System\CurrentControlSet\Services\Class\NetTrans\0000~0009下的MaxMTU;HKEY_LOCAL_MACHIN\System\CurrentControlSet\Services\VxD\MSTCP下的以下键值:DefaultRcvWindow、DefaultTTL、PMTUDiscovery、PMTUBlackHoleDetect、Tcp1323Opts、SackOpts 以及HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP\Parameters下的MaxDupAcks。

  知道了以上原理,我们就可以自己编程来实现了。下面介绍在Delphi中实现的方法。


  界面设计


  进入Delphi 6,新建一工程,在默认窗体上添加一个标签组件和一个命令按钮(如图1):


  要操作Windows注册表,首先要在单元的USES部分引用TREGISTRY,然后才能在Delphi中操作注册表。


  程序源码


  以下是源码部分,由于代码比较简单,一看就懂,因此省略了注释。

  unit Unit1;

  interface

  uses

   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,registry,

   StdCtrls, Dialogs;

  {注:上面粗体部分registry为后加的}

  type

   TForm1 = class(TForm)

   Label1: TLabel;

   Button1: TButton;

   procedure Button1Click(Sender: TObject);

   private

   { Private declarations }

   public

   { Public declarations }

   end;

  var

   Form1: TForm1;

  implementation

  {$R *.dfm}

  procedure TForm1.Button1Click(Sender: TObject);

  var

  myreg:Tregistry;

  i:integer;

  begin

  myreg:=Tregistry.Create ;

  myreg.RootKey :=hkey_local_machine;

  for i:=0 to 9 do

  begin

  myreg.OpenKey('\system\currentcontrolset\services\class\nettrans\000'+inttostr(i),false);

  myreg.WriteString('maxmtu','1492');

  next

  end;

  myreg.OpenKey('\system\currentcontrolset\services\vxd\mstcp',false);

  myreg.WriteString('DefaultTTL','64');

  myreg.WriteString('PMTUBlackHole

  Detect','0');

  myreg.WriteString('PMTUDiscovery','1');

  myreg.WriteString('sack0pts','1');

  myreg.WriteString('Tcp13230pts','1');

  myreg.WriteString('DefaultRcvWindow','255552');

  myreg.OpenKey('\system\currentcontrolset\services\vxd\mstcp\parameters',false);

  myreg.WriteInteger('maxdupacks',0);

  myreg.RootKey:=hkey_current_user;

  myreg.OpenKey('\software\microsoft\windows\currentversion\internet settings',false);

  myreg.WriteInteger('MaxConnectionsPer1_0Server',32);

  myreg.WriteInteger('MaxConnectionsPerServer',16);

  myreg.CloseKey ;

  myreg.Free ;

  end;

  end.

  上面程序没有考虑HKEY_LOCAL_MACHIN\System\CurrentControlSet\Services\Class\NetTrans\0000~0009中是否有不存在的键,如果有,可以自己建立,以下代码演示了在当前主键下建立一个名为“jwd”的子键的方法:myreg.CreateKey('jwd');

  以上程序在Windows Me,Delphi 6.0中运行通过。