@ECHO OFF
COLOR 02

set OSN=Unknown
set SvcRunning=Unknown
set SvcExists=Unknown
set d=
set t=
set /a count=0
set /a attempt=0


:SvcExist
REM Check to see if sevice is exists! %errorlevel%==0 if true

Echo Checking for IP Helper Service...
ECHO.
sc query state= all | find "iphlpsvc">nul

if %errorlevel%==0 (set SvcExists=true) ELSE (set SvcExists=false)
if %SvcExists%==Unknown GOTO ERROR
if %SvcExists%==true (ECHO IP Helper Service found!&&GOTO SvcRunning)
if %SvcExists%==false (ECHO IP Helper Service NOT found!&&GOTO OSCheck)

:Count
if %count% GTR 10 (ECHO.&&ECHO Unable to stop IP Helper Service!&&GOTO ERROR) ELSE (GOTO SvcRunning)

:SvcRunning
REM Check to see if sevice is running! %errorlevel%==0 if true
ECHO.
ECHO Checking if IP Helper Service is running...
ECHO.
sc query type= all | find "iphlpsvc">nul

if %errorlevel%==0 (set SvcRunning=true) ELSE (set SvcRunning=false)
if %SvcRunning%==Unknown GOTO ERROR
if %SvcRunning%==true (ECHO IP Helper Service running!&&GOTO SvcStop)
if %SvcRunning%==false (ECHO IP Helper Service NOT running!&&GOTO DateTime)


:SvcStop
ECHO.
ECHO Stopping IP Helper Service...
sc stop iphlpsvc>nul
set /a count=%count%+1
choice /n /t 1 /d y>nul
GOTO Count

:DateTime
REM get system date & time to append to file name!
for /f "tokens=1-4 delims=/ " %%a in ('date /t') do (set d=%%a_%%b_%%c_%%d)
for /f "tokens=1-4 delims=:." %%a in ("%time%") do (set t=%%a%%b%%c%%d)
GOTO Backup


:Backup
ECHO.
ECHO Backing up IP Helper service to %userprofile%\Documents\iphlpsvc_%d%_%t%.reg...
reg export HKLM\SYSTEM\CurrentControlSet\services\iphlpsvc %userprofile%\Documents\iphlpsvc_%d%_%t%.reg
GOTO SvcDel

:SvcDel
ECHO.
ECHO Deleting current IP Helper Service...
sc delete iphlpsvc


:OSCheck
REM Find if Windows Vista or 7! %errorlevel%==0 if true
ECHO.
ECHO Checking OS Version...

wmic os get Caption | find "Windows Vista">nul

if %errorlevel%==0 set OSN=Vista

wmic os get Caption | find "Windows 7">nul

if %errorlevel%==0 set OSN=7

Echo OS is Windows %OSN%

if %OSN%==Unknown (GOTO ERROR) ELSE (GOTO BUILD)


:BUILD
REM Create IP Helper Service!
ECHO.
ECHO Building IP Helper Service for Windows %OSN%...

set sr=%%SystemRoot

IF %OSN%==7 GOTO SC7 ELSE GOTO SCVista

:SC7
sc create iphlpsvc binpath= "%sr%%%\System32\svchost.exe -k NetSvcs" start= auto DisplayName= "@%sr%%%\system32\iphlpsvc.dll,-500" type= share error= normal depend= RpcSS/Tdx/winmgmt/tcpip/nsi obj= LocalSystem
sc description iphlpsvc "@%sr%%%\system32\iphlpsvc.dll,-501"
sc privs iphlpsvc SeCreateGlobalPrivilege/SeImpersonatePrivilege/SeLoadDriverPrivilege
GOTO SCBoth

:SCVista
sc create iphlpsvc binpath= "%sr%%%\System32\svchost.exe -k NetSvcs" start= auto DisplayName= "@%sr%%%\system32\iphlpsvc.dll,-200" type= share error= normal depend= RpcSS/Tdx/winmgmt/tcpip/nsi obj= LocalSystem
sc description iphlpsvc "@%sr%%%\system32\iphlpsvc.dll,-201"
sc privs iphlpsvc SeCreateGlobalPrivilege/SeImpersonatePrivilege

:SCBoth
sc failure iphlpsvc reset= 86400 actions= restart/120000/restart/300000/""/""
sc sidtype iphlpsvc UNRESTRICTED

REM Create needed subkeys and values!
ECHO.
ECHO Creating service subkeys and values for Windows %OSN%...

:REGBoth
reg add HKLM\SYSTEM\CurrentControlSet\services\iphlpsvc\config\ /f
reg delete HKLM\SYSTEM\CurrentControlSet\services\iphlpsvc\config\ /f /va
reg add HKLM\SYSTEM\CurrentControlSet\services\iphlpsvc\Interfaces\ /f
reg delete HKLM\SYSTEM\CurrentControlSet\services\iphlpsvc\Interfaces\ /f /va
reg add HKLM\SYSTEM\CurrentControlSet\services\iphlpsvc\Parameters\ /f /v ServiceDll /t REG_EXPAND_SZ /d "%%SystemRoot%%\System32\iphlpsvc.dll"
reg add HKLM\SYSTEM\CurrentControlSet\services\iphlpsvc\Parameters\ /f /v ServiceDllUnloadOnStop /t REG_DWORD /d 1
reg add HKLM\SYSTEM\CurrentControlSet\services\iphlpsvc\Teredo\ /f /v SP1Installed /t REG_DWORD /d 1

IF %OSN%==7 GOTO :REG7 ELSE GOTO SvcStart

:REG7
reg add HKLM\SYSTEM\CurrentControlSet\services\iphlpsvc\Parameters\IPHTTPS\ /f
reg delete HKLM\SYSTEM\CurrentControlSet\services\iphlpsvc\Parameters\IPHTTPS\ /f /va
reg add HKLM\SYSTEM\CurrentControlSet\services\iphlpsvc\Parameters\Isatap\ /f
reg delete HKLM\SYSTEM\CurrentControlSet\services\iphlpsvc\Parameters\Isatap\ /f /va
GOTO SvcStart

:Attempt
if %attempt% GTR 3 (ECHO IP Helper Service has not yet started. Try restarting your Computer!&&GOTO Cleanup) ELSE (GOTO SvcStart)


:SvcStart
ECHO.
ECHO Attempting to Start IP Helper Service...
sc start iphlpsvc>nul
set /a attempt=%attempt%+1
choice /n /t 1 /d y>nul


:SvcCheck
set SvcRunning=false
ECHO.
ECHO Checking if IP Helper Service is running...
ECHO.
sc query type= all | find "iphlpsvc">nul
if %errorlevel%==0 (set SvcRunning=true) ELSE (set SvcRunning=false)
if %SvcRunning%==true ECHO IP Helper Service started successfully!&&GOTO Cleanup
if %SvcRunning%==false GOTO Attempt 


:ERROR
ECHO Sorry there was an error, unable to complete the process!


:CleanUp
set OSN=
set SvcRunning=
set SvcExists=
set d=
set t=
set sr=
set attempt=
set count=
ECHO.
ECHO Press any key to exit...
Pause>nul