REM OPTIMIZE REGISTRY FOR CABLE MODEM/DSL REM COPYRIGHT 1999-2000 JOHN NAVAS, ALL RIGHTS RESERVED REM MAY BE FREELY COPIED IF UNMODIFIED FOR PRIVATE NON-COMMERCIAL USE. REM VERSION 1.20 (VISUAL BASIC SCRIPT) REM Version history: REM 1.0: Initial release REM 1.01: Bug fixes and Windows auto-restart REM 1.10: Added removal of ICS InternetMTU (as per Q230116) REM 1.11: Increase NetTrans scan from 9 to 19 REM 1.20: Fixed SetReceiveWindow comparison logic REM Added basic support for Windows NT REM GLOBAL VARIABLES TitleText = "Navas' Registry Optimization for Cable Modem/DSL 1.20" Set WshShell = Wscript.CreateObject("Wscript.Shell") Set WshSysEnv = WshShell.Environment("PROCESS") Set fso = CreateObject("Scripting.FileSystemObject") WinNT = False DQ = Chr(34) Changes = False REM VERIFY A PROPER VERSION OF WINDOWS CheckWindows() REM MAKE SURE THAT I'M RUNNING IN A WINDOW UNDER CSCRIPT LaunchCscript() REM WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING Warning() REM LOGIC SPECIFIC TO WINDOWS 9X (95/98) AND WINDOWS NT (NT/2000) If (WinNT) Then HandleWinNT() Else HandleWin9x() End If REM LOGIC SPECIFIC TO WINDOWS NT (NT/2000) Sub HandleWinNT REM Check Privileges msg = "This script MUST be run with Administrator privilege!" msg = msg & vbCr & "Are you SURE you want to proceed?" opt = MsgBox(msg, vbExclamation+vbOKCancel+vbDefaultButton2, TitleText) If (opt = vbOK) Then Else Wscript.Quit End If REM Set Receive Window arg = "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpWindowSize" While SetReceiveWindow(arg, "REG_DWORD") Wend REM Last Message If (Changes) Then msg = "Changes will not take effect until you restart Windows!" MsgBox msg, vbExclamation, TitleText Else MsgBox "No changes made.", vbInformation, TitleText End If End Sub REM LOGIC SPECIFIC TO WINDOWS 9X (95/98) Sub HandleWin9x REM Purge MaxMTU Values From The Registry If Permitted PurgeMaxMTU() REM Purge Internet Connection Sharing Value From The Registry If Permitted REM For More Information See Microsoft Knowledge Base Q230116 PurgeInternetMTU() REM Purge Values That Should Be Left At Defaults If Permitted PurgeMSTCP("PMTUDiscovery") PurgeMSTCP("PMTUBlackHoleDetect") PurgeMSTCP("DefaultTTL") PurgeMSTCP("KeepAliveTime") PurgeMSTCP("Tcp1323Opts") PurgeMSTCP("SackOpts") PurgeMSTCP("MaxDupAcks") PurgeMSTCP("Parameters\Tcp1323Opts") PurgeMSTCP("Parameters\SackOpts") PurgeMSTCP("Parameters\MaxDupAcks") REM Set Receive Window arg = "HKLM\System\CurrentControlSet\Services\VxD\MSTCP\DefaultRcvWindow" While SetReceiveWindow(arg, "REG_SZ") Wend REM Last Message If (Changes) Then msg = "Changes will not take effect until you restart Windows!" msg = msg & vbCr & "Restart Windows so that changes will take effect?" opt = MsgBox(msg, vbQuestion+vbYesNo, TitleText) if (opt = vbYes) Then RestartWindows() Else MsgBox "No changes made.", vbInformation, TitleText End If End Sub REM RESTART WINDOWS SO CHANGES WILL TAKE EFFECT Sub RestartWindows WshShell.Run("rundll32.exe shell32.dll,SHExitWindowsEx 2") Wscript.Quit End Sub REM SET RECEIVE WINDOW Function SetReceiveWindow(full, typ) SetReceiveWindow = False msg = "Current Receive Window: " On Error Resume Next data = WshShell.RegRead(full) If (Err) Then data = "-1" msg = msg & "Windows default (8K)" else msg = msg & CStr(data) End If Wscript.Echo msg msg = msg & vbCr & vbCr msg = msg & "Recommended settings" & vbCr msg = msg & "(where 0 means Windows default):" & vbCr & vbCr msg = msg & "0 " & Chr(9) & "Dial-up modem" & vbCr msg = msg & "32767" & Chr(9) & "Normal cable modem/DSL" & vbCr msg = msg & "65535" & Chr(9) & "High latency cable modem/DSL" & vbCr msg = msg & vbCr & "New setting:" newdata = InputBox(msg, "Set TCP/IP Receive Window", "32767") value = CLng(newdata) If (newdata = "" Or value = CLng(data)) Then Wscript.Echo "Not changed!" Else If (value = 0) Then WshShell.RegDelete full Changes = True Wscript.Echo "Changed to Windows default (8K)" ElseIf (value >= 512 And value <= 65535) Then WshShell.RegWrite full, CStr(value), typ Changes = True Wscript.Echo "Changed to " + CStr(value) Else MsgBox "Error: Must be in the range of 512-65535!", vbExclamation, TitleText SetReceiveWindow = True End If End If End Function REM PURGE A GIVEN MAXMTU VALUE FROM THE REGISTRY IF PERMITTED Sub PurgeMaxMTU Wscript.Echo "Checking MaxMTU..." For n = 0 to 19 value = Right(CStr(n+10000),4) full = "HKLM\System\CurrentControlSet\Services\Class\NetTrans\" & value & "\" On Error Resume Next data = WshShell.RegRead(full & "MaxMTU") If (Err) Then Else On Error Resume Next desc = WshShell.RegRead(full & "DriverDesc") msg = "Found Registry entry for " & value & "(" & desc & ")=" & CStr(data) & vbCr msg = msg & "Remove it? (Recommended)" opt = MsgBox(msg, vbYesNo+vbQuestion, "NetTrans Cleanup") If (opt = vbYes) Then WshShell.RegDelete(full & "MaxMTU") Changes = True Wscript.Echo "Removed (as recommended)." Else Wscript.Echo "Not changed!" End If End If Next Wscript.Echo "Completed." End Sub REM PURGE INTERNET CONNECTION SHARING VALUE FROM THE REGISTRY IF PERMITTED REM FOR MORE INFORMATION SEE MICROSOFT KNOWLEDGE BASE Q230116 Sub PurgeInternetMTU Wscript.Echo "Checking InternetMTU..." full = "HKLM\System\CurrentControlSet\Services\ICSharing\Settings\General\InternetMTU" On Error Resume Next data = WshShell.RegRead(full) If (Err) Then Wscript.Echo "Not found. (OK)" Else msg = "Found Registry entry for (Internet Connection Sharing) InternetMTU" msg = msg & vbCr msg = msg & "Remove it? (Recommended for cable modem/DSL, NOT for dial-up)" opt = MsgBox(msg, vbYesNo+vbQuestion, "InternetMTU Removal") If (opt = vbYes) Then WshShell.RegDelete(full) Changes = True Wscript.Echo "Removed (as recommended)." Else Wscript.Echo "Not changed!" End If End If End Sub REM PURGE A GIVEN MSTCP VALUE FROM THE REGISTRY IF PERMITTED Sub PurgeMSTCP(value) full = "HKLM\System\CurrentControlSet\Services\VxD\MSTCP\" & value Wscript.Echo "Checking " & value & "..." On Error Resume Next data = WshShell.RegRead(full) If (Err) Then Wscript.Echo "Not found. (OK)" Else msg = "Found Registry entry for " & value & "=" & CStr(data) & vbCr msg = msg & "Remove it? (Recommended)" opt = MsgBox(msg, vbYesNo+vbQuestion, "MSTCP Cleanup") If (opt = vbYes) Then WshShell.RegDelete(full) Changes = True Wscript.Echo "Removed (as recommended)." Else Wscript.Echo "Not changed!" End If End If End Sub REM MAKE SURE THAT I'M RUNNING IN A WINDOW UNDER CSCRIPT Sub LaunchCscript n = InStr(UCase(Mid(WScript.FullName,Len(WScript.Path)+2)),"CSCRIPT") If (n = 0) Then cmd = WshSysEnv("COMSPEC") If (fso.FileExists(cmd)) Then WshShell.Run(DQ & cmd & DQ & " /C CSCRIPT " & DQ & Wscript.ScriptFullName & DQ) Else MsgBox "Can't find COMMAND processor (check COMSPEC)!", vbCritical, TitleText End If Wscript.Quit End If End Sub REM CHECK WINDOWS VERSION Sub CheckWindows Dim seg On Error Resume Next vkey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion" data = WshShell.RegRead(vkey) if (data <> "") Then WinNT = True seg = Split(data, ".", -1, 1) If (seg(0) <> 4 Or seg(1) > 0) Then msg = "Windows NT version " & data & " is not supported by this script!" MsgBox msg, vbCritical, TitleText Wscript.Quit End If Else vkey = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\VersionNumber" data = WshShell.RegRead(vkey) seg = Split(data, ".", -1, 1) If (seg(0) <> 4 Or seg(1) > 10) Then msg = "Windows 9X version " & data & " is not supported by this script!" MsgBox msg, vbCritical, TitleText Wscript.Quit End If End If End Sub REM WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING Sub Warning msg = "This script removes unnecessary network settings from" msg = msg & " your Registry and adjusts Receive Window for" msg = msg & " optimal Internet performance." & vbCr & vbCr msg = msg & "WARNING: THESE MODIFICATIONS MAY CAUSE SYSTEM HARM." msg = msg & " USE AT YOUR OWN RISK!" & vbCr & vbCr msg = msg & "Are you SURE you want to proceed?" opt = MsgBox(msg, vbExclamation+vbOKCancel+vbDefaultButton2, TitleText) If (opt = vbOK) Then Else Wscript.Quit End If End Sub REM END