[Identification] OptionType = NetService [Options] CBLSHIM [FileConstants] NoNdisWanSupport = 0 UtilityInf = "UTILITY.INF" subroutineinf = "SUBROUTN.INF" SoftwareType = "service" Exit_Code = 0 NetEventDLL = "%SystemRoot%\System32\netevent.dll" Manufacturer = "Microsoft" ProductMajorVersion = "5" ProductMinorVersion = "1" ProductVersion = $(ProductMajorVersion)"."$(ProductMinorVersion) ProductSoftwareName = IM ProductSoftwareName4.0 = CBLSHIM ProductSoftwareImagePath = "\SystemRoot\System32\drivers\CBLSHIM.SYS" ProductSoftKey = $(!NTN_SoftwareBase)"\"$(Manufacturer) ProductKeyName = $(ProductSoftKey)"\"$(ProductSoftwareName)"\CurrentVersion" ProductKeyName4.0 = $(ProductSoftKey)"\"$(ProductSoftwareName4.0)"\CurrentVersion" ProductHardwareSupport = 0 ProductSoftwareSupport = 132 IMTransports = { imTransport,+ imTcpipTransport,+ imIpxTransport,+ imNetBiosTransport+ } SupportedTransports = { ndisTransport,+ tcpipTransport,+ ipxTransport,+ netBiosTransport+ } IMDrivers = { imDriver } SupportedDrivers = { ndisDriver} IMAdapters = {imAdapter} NetRuleSoftwareType = $(ProductSoftwareName)" "*($(\IMDrivers),1)" "*($(IMTransports),1) NetRuleSoftwareUse = $(SoftwareType)" yes yes" NetRuleSoftwareClass = {*($(IMDrivers),1)" basic",*($(IMTransports),1)" basic"} NetRuleHardwareClass = {*($(IMAdapters),1)" basic"} ; ; TCPIP protocol only ; NetRuleSoftwareBindable = {+ *($(IMTransports),1)" "*($(IMAdapters),1)" non non 100"}+ *($(IMTransports),1)" "*($(ndisDrivers),1)" non non 100"} ; ; Multiprotocol (test) ; ;NetRuleSoftwareBindable = {+ ; *($(IMTransports),2)" "*($(IMAdapters),1)+ ; " non non 100",+ ; *($(IMTransports),3)" "*($(IMAdapters),1)+ ; " non non 100"} NetRuleSoftwareBindForm = " yes no simple" NetRuleHardwareBindForm = " yes yes container" ProductSoftwareReview = "1" MicroSW = $(!NTN_SoftwareBase)"\Microsoft\" CVNetRules = "\CurrentVersion\NetRules" ; ; TCPIP protocol only ; NetRuleDriverKeys = {{$(MicroSW)"Tcpip"$(CVNetRules),1}} NetRuleTransportKeys = {{$(MicroSW)"Ndiswan"$(CVNetRules),2}} TransportServiceKeys = {$(!NTN_ServiceBase)"\Tcpip",+ $(!NTN_ServiceBase)"\NetBT"} ; ; Multiprotocol (test) ; ;NetRuleDriverKeys = {{$(MicroSW)"Tcpip"$(CVNetRules),1},+ ; {$(MicroSW)"NwlnkIpx"$(CVNetRules),1}} ;NetRuleTransportKeys = {{$(MicroSW)"Ndiswan"$(CVNetRules),2},+ ; {$(MicroSW)"Ndiswan"$(CVNetRules),3}} ;TransportServiceKeys = {$(!NTN_ServiceBase)"\Tcpip",+ ; $(!NTN_ServiceBase)"\NwlnkIpx"} NetBTServiceKey = $(!NTN_ServiceBase)"\NetBT\Adapters" IMServiceKeyName = $(!NTN_ServiceBase)"\"$(ProductSoftwareName) IMLinkageKeyName = $(IMServiceKeyName)"\Linkage" NtCurrentVersion = $(MicroSW)"Windows NT\CurrentVersion" NetworkCardsKeyName = $(NtCurrentVersion)"\NetworkCards" ServiceOrder = "SYSTEM\CurrentControlSet\Control\ServiceGroupOrder" ReviewProgram = "SOFTWARE\Microsoft\Ncpa\CurrentVersion" IMSoftwareKey = "SOFTWARE\"$(Manufacturer)"\" NetRules = $(IMSoftwareKey)$(ProductSoftwareName)$(CVNetRules) RunOnce = $(!NTN_SoftwareBase)+ "\Microsoft\Windows\CurrentVersion\RunOnce" FixupServices = {$(!NTN_ServiceBase)"\LanmanServer\Linkage",+ $(!NTN_ServiceBase)"\LanmanWorkstation\Linkage"} [GeneralConstants] from = "" to = "" ExitCodeOk = 0 ExitCodeCancel = 1 ExitCodeFatal = 2 KeyNull = "" MAXIMUM_ALLOWED = 33554432 RegistryErrorIndex = NO_ERROR KeyProduct = "" KeyParameters = "" TRUE = 1 FALSE = 0 NoTitle = 0 ExitState = "Active" OldVersionExisted = $(FALSE) DriverPath = $(!STF_NTPATH)\drivers [date] ifstr(i) $(!LIBHANDLE) == "" LoadLibrary "x" setupdll.dll !LIBHANDLE endif Now = {} ? $(!LIBHANDLE) GetSystemDate [Identify] read-syms Identification set Status = STATUS_SUCCESSFUL set Identifier = $(OptionType) set Media = #("Source Media Descriptions", 1, 1) Return $(Status) $(Identifier) $(Media) [ReturnOptions] set Status = STATUS_FAILED set OptionList = {} set OptionTextList = {} set LanguageList = ^(LanguagesSupported, 1) Ifcontains(i) $($0) in $(LanguageList) goto returnoptions else set Status = STATUS_NOLANGUAGE goto finish_ReturnOptions endif returnoptions = + set OptionList = ^(Options, 1) set OptionTextList = ^(OptionsText$($0), 1) set Status = STATUS_SUCCESSFUL finish_ReturnOptions = + Return $(Status) $(OptionList) $(OptionTextList) [Shell Commands] set-title "Ndis Intermediate Driver Sample Setup" set !G:DebugOutputControl = 1 exit [InstallOption] set Option = $($1) set SrcDir = $($2) set AddCopy = $($3) set DoCopy = $($4) set DoConfig = $($5) set LanguageList = ^(LanguagesSupported, 1) Ifcontains(i) $($0) NOT-IN $(LanguageList) Return STATUS_NOLANGUAGE endif Debug-Output "OEMSETNT.INF: STF_CWDDIR is: "$(!STF_CWDDIR) Debug-Output "OEMSETNT.INF: STF_LANGUAGE is: "$(!STF_LANGUAGE) set-subst LF = "\n" read-syms GeneralConstants read-syms FileConstants read-syms DialogConstants$(!STF_LANGUAGE) ifstr(i) $(!NTN_Origination) == "NCPA" set Continue = $(OK) endif read-syms FileConstants$(!STF_LANGUAGE) detect date set-title $(FunctionTitle) set to = Begin set from = Begin set CommonStatus = STATUS_SUCCESSFUL EndWait Begin = + Ifstr(i) $(!NTN_InstallMode) == deinstall set StartLabel = removeadapter else-Ifstr(i) $(!NTN_InstallMode) == Update set StartLabel = UpgradeSoftware else-Ifstr(i) $(!NTN_InstallMode) == bind set StartLabel = bindingadapter else-Ifstr(i) $(!NTN_InstallMode) == cleanup set StartLabel = cleanupSoftware else-Ifstr(i) $(!NTN_InstallMode) == configure Shell $(UtilityInf),RegistryErrorString,CANNOT_CONFIGURE_SOFTWARE ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "OEMSETNT.INF: ShellCode error: no error string." goto ShellCodeError endif set Error = $($R0) set from = end set to = end goto nonfatalinfo else set StartLabel = installadapter endif set RadioDefault = 2 set RadioIn = {$(RadioDefault)} set Size = 2 ; set from = $(fatal) set to = $(fatal) goto $(StartLabel) installadapter = + ; ; dll load addition ; Shell $(UtilityInf), DoAskSource, $(!STF_CWDDIR), $(SrcDir) NO Ifint $($ShellCode) != $(!SHELL_CODE_OK) Goto ShellCodeError Else-Ifstr(i) $($R0) == STATUS_FAILED Shell $(UtilityInf) RegistryErrorString "ASK_SOURCE_FAIL" ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif set Error = $($R0) Goto fatal Else-Ifstr(i) $($R0) == STATUS_USERCANCEL Goto successful Endif Set SrcDir = $($R1) install "Install-Dll" OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) + KeyProduct Ifstr $(KeyProduct) != $(KeyNull) GetRegValue $(KeyProduct) MajorVersion major GetRegValue $(KeyProduct) MinorVersion minor CloseRegKey $(KeyProduct) ifstr $(major) == "" goto noVersionCheck endif ifstr $(minor) == "" goto noVersionCheck endif ifint *($(major),4) > $(ProductMajorVersion) CloseRegKey $(KeyProduct) goto versionOlder endif ifint *($(major),4) == $(ProductMinorVersion) ifint *($(minor),4) > $(ProductMinorVersion) CloseRegKey $(KeyProduct) goto versionOlder endif endif ifstr *($(major),4) == $(ProductMajorVersion) ifstr *($(minor),4) == $(ProductMinorVersion) goto versionExist endif endif endif noVersionCheck = + ; ; remove 5.0 IM ; ;Shell "" RemoveIM ; ; remove 4.0 IM ; Shell "" MyRemoveSoftwareComponent,$(Manufacturer),+ $(ProductSoftwareName4.0),$(ProductSoftwareName),+ $(STF_CONTEXTINFNAME) ifstr $($R0) == STATUS_SUCCESSFUL goto installproduct endif goto end versionExist = + Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", + $(ProductSoftwareTitle)" "*($(major),4)"."*($(minor),4)+ " is already installed." ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "ShellCode error: cannot get an error string." goto ShellCodeError endif goto end versionOlder = + Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", + $(ProductSoftwareTitle)" "*($(major),4)"."*($(minor),4)+ " is already installed. Upgrading to version "+ $(ProductMajorVersion)"."$(ProductMinorVersion)" is not allowed." ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "ShellCode error: cannot get an error string." goto ShellCodeError endif goto end installproduct = + StartWait ifint $(OldVersionExisted) == $(FALSE) Ifstr(i) $(DoCopy) == "YES" ;OpenRegKey $(!REG_H_LOCAL) "" + ;"SOFTWARE\Microsoft\Windows Nt\CurrentVersion" + ;$(MAXIMUM_ALLOWED) MSCVHandle ;Ifstr $(MSCVHandle) != $(KeyNull) ;set srcPath = "" ;GetRegValue $(MSCVHandle) SourcePath srcPath ;endif ;set SrcDir = $(!STF_WINDOWSSYSPATH) set SrcKey = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\TCPIP" OpenRegKey $(!REG_H_LOCAL) "" $(SrcKey) $(MAXIMUM_ALLOWED) KeyHandle Ifstr $(KeyHandle) != $(KeyNull) GetRegValue $(KeyHandle) Path value ifint $(RegLastError) == 0 ;set SrcDir = *($(value),4) set paths = {*($(value),4)} set names = {NMFTR.SYS} Shell $(UtilityInf) CheckIfCopyNecessary $(paths) $(names) Ifint $($ShellCode) == $(!SHELL_CODE_OK) Ifstr $($R0) == STATUS_SUCCESSFUL set SrcDir = *($(value),4) CloseRegKey $(KeyHandle) goto skip_DoAskSource endif endif endif CloseRegKey $(KeyHandle) endif Shell $(UtilityInf), DoAskSource, $(!STF_CWDDIR), $(SrcDir) YES Ifint $($ShellCode) != $(!SHELL_CODE_OK) Goto ShellCodeError Else-Ifstr(i) $($R0) == STATUS_FAILED Shell $(UtilityInf) RegistryErrorString "ASK_SOURCE_FAIL" ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif set Error = $($R0) Goto fatal Else-Ifstr(i) $($R0) == STATUS_USERCANCEL Goto successful Endif Set SrcDir = $($R1) Endif skip_DoAskSource = + install "Install-Option" ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS Shell $(UtilityInf) RegistryErrorString "UNABLE_COPY_FILE" ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif set Error = $($R0) goto fatal endif set OEM_ABANDON_ON = TRUE Shell $(UtilityInf), AddSoftwareComponent, $(Manufacturer), + $(ProductSoftwareName), $(ProductSoftwareName), + $(ProductSoftwareDisplayName), $(STF_CONTEXTINFNAME), + $(ProductSoftwareImagePath), "kernelautostart", + $(ProductSoftwareGroup), "", "", $(NetEventDLL) set RegistryErrorIndex = $($R0) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR ; ; Try to recover ; OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName)"\NetRules" + $(MAXIMUM_ALLOWED) SoftNetRuleKey Ifstr $(SoftNetRuleKey) != $(KeyNull) OpenRegKey $(!REG_H_LOCAL) "" + $(ProductSoftKey)"\"$(ProductSoftwareName) + $(MAXIMUM_ALLOWED) SoftProductKey Ifstr $(SoftProductKey) != $(KeyNull) OpenRegKey $(!REG_H_LOCAL) "" $(IMServiceKeyName) + $(MAXIMUM_ALLOWED) sHandle Ifstr $(sHandle) != $(KeyNull) CloseRegKey $(sHandle) goto continueInstall else CloseRegKey $(SoftProductKey) CloseRegKey $(SoftNetRuleKey) Shell $(subroutineinf) SetupMessage,+ $(!STF_LANGUAGE),"FATAL",+ $(ProductSoftwareTitle)" has recently been "+ "removed. You must reboot before installing "+ "it again." CloseRegKey $($R1) CloseRegKey $($R2) CloseRegKey $($R3) CloseRegKey $($R4) CloseRegKey $($R5) goto fatal endif else CloseRegKey $(SoftNetRuleKey) endif endif EndWait CloseRegKey $($R1) CloseRegKey $($R2) CloseRegKey $($R3) CloseRegKey $($R4) CloseRegKey $($R5) goto fatalRegistry endif Set SoftProductKey = $($R1) Set SoftNetRuleKey = $($R2) Set SoftServiceKey = $($R3) set KeyParameters = $($R4) Set SoftLinkageKey = $($R5) continueInstall = + Shell "" GetNtVersion ifstr $($R0) == "3.51" set NewValueList = { + {SoftwareType,$(NoTitle),+ $(!REG_VT_SZ),$(SoftwareType)},+ {MajorVersion,$(NoTitle),$(!REG_VT_DWORD),+ $(ProductMajorVersion)},+ {MinorVersion,$(NoTitle),$(!REG_VT_DWORD),+ $(ProductMinorVersion)},+ {Title,$(NoTitle),$(!REG_VT_SZ),+ $(ProductSoftwareTitle)},+ {Description,$(NoTitle),$(!REG_VT_SZ),+ $(ProductSoftwareDescription)},+ {ServiceName,$(NoTitle),$(!REG_VT_SZ),+ $(ProductSoftwareName)},+ {Review,$(NoTitle),$(!REG_VT_DWORD),+ $(ProductSoftwareReview)},+ {InstallDate,$(NoTitle),$(!REG_VT_DWORD),+ *($(Now),1)}} else set NewValueList = { + {SoftwareType,$(NoTitle),+ $(!REG_VT_SZ),$(SoftwareType)},+ {MajorVersion,$(NoTitle),$(!REG_VT_DWORD),+ $(ProductMajorVersion)},+ {MinorVersion,$(NoTitle),$(!REG_VT_DWORD),+ $(ProductMinorVersion)},+ {Title,$(NoTitle),$(!REG_VT_SZ),+ $(ProductSoftwareTitle)},+ {Description,$(NoTitle),$(!REG_VT_SZ),+ $(ProductSoftwareDescription)},+ {ServiceName,$(NoTitle),$(!REG_VT_SZ),+ $(ProductSoftwareName)},+ {Review,$(NoTitle),$(!REG_VT_DWORD),+ $(ProductSoftwareReview)},+ {OperationsSupport,$(NoTitle),$(!REG_VT_DWORD),+ $(ProductSoftwareSupport)},+ {InstallDate,$(NoTitle),$(!REG_VT_DWORD),+ *($(Now),1)}} endif Shell $(UtilityInf), AddValueList, $(SoftProductKey), $(NewValueList) set RegistryErrorIndex = $($R0) Ifstr $(RegistryErrorIndex) != NO_ERROR CloseRegKey $(SoftProductKey) CloseRegKey $(SoftNetRuleKey) CloseRegKey $(SoftServiceKey) CloseRegKey $(SoftLinkageKey) CloseRegKey $(KeyParameters) goto fatalRegistry endif set-subst NetRuleSoftwareBindForm = "\042"$(ProductSoftwareName)"\042"+ $(NetRuleSoftwareBindForm) set NewValueList = { + {type,$(NoTitle),$(!REG_VT_SZ),$(NetRuleSoftwareType)}, + {use,$(NoTitle),$(!REG_VT_SZ),$(NetRuleSoftwareUse)}, + {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleSoftwareClass)},+ {bindform,$(NoTitle),$(!REG_VT_SZ),$(NetRuleSoftwareBindForm)},+ {bindable,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleSoftwareBindable)},+ {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}} Shell $(UtilityInf), AddValueList, $(SoftNetRuleKey), $(NewValueList) set RegistryErrorIndex = $($R0) Ifstr $(RegistryErrorIndex) != NO_ERROR CloseRegKey $(SoftProductKey) CloseRegKey $(SoftNetRuleKey) CloseRegKey $(SoftServiceKey) CloseRegKey $(SoftLinkageKey) CloseRegKey $(KeyParameters) goto fatalRegistry endif CloseRegKey $(SoftProductKey) CloseRegKey $(SoftNetRuleKey) CloseRegKey $(SoftServiceKey) CloseRegKey $(SoftLinkageKey) endif ;Ifstr $(MSCVHandle) != $(KeyNull) ;ifstr $(srcPath) != "" ;SetRegValue $(MSCVProduct) $(srcPath) ;endif ;CloseRegKey $(MSCVHandle) ;endif ; ; Modify Driver NetRules ; ForListDo $(NetRuleDriverKeys) ; ; upgrade from 4.0 rule first ; Shell "" ChangeNetRules *($($),1) IMSAMPTransport + *($(SupportedDrivers),*($($),2)) Bindable Shell "" ChangeNetRules *($($),1) *($(SupportedDrivers),*($($),2)) + *($(IMDrivers),*($($),2)) Bindable Ifint $($ShellCode) != $(!SHELL_CODE_OK) set RegistryErrorIndex = $($ShellCode) goto fatalRegistry endif Ifstr $($R0) != STATUS_SUCCESS set RegistryErrorIndex = $($R0) goto fatalRegistry endif EndForListDo ; ; Modify Transport NetRules ; Shell "" NdisWanSupport ifint $($R0) != 1 Shell "" GetNtVersion ifstr $($R0) != "3.51" ForListDo $(NetRuleTransportKeys) Shell "" ChangeNetRules *($($),1) + *($(SupportedTransports),*($($),2)) + *($(IMTransports),*($($),2)) Bindable Ifint $($ShellCode) != $(!SHELL_CODE_OK) set RegistryErrorIndex = $($ShellCode) goto fatalRegistry endif Ifstr $($R0) != STATUS_SUCCESS Ifstr $($R0) != CANNOT_FIND_COMPONENT_SERVICE set RegistryErrorIndex = $($R0) goto fatalRegistry endif endif endForListDo endif endif ; ; Modify NetBT (WINS) class ; Shell "" ChangeNetRules $(MicroSW)"NetBT"$(CVNetRules) + *($(SupportedTransports),4) *($(IMTransports),1) Class Ifint $($ShellCode) != $(!SHELL_CODE_OK) set RegistryErrorIndex = $($ShellCode) goto fatalRegistry endif Ifstr $($R0) != STATUS_SUCCESS Ifstr $($R0) != CANNOT_FIND_COMPONENT_SERVICE set RegistryErrorIndex = $($R0) goto fatalRegistry endif endif ; ; Add Protocol parameters and NetworkCard settings ; Shell "", SetAdapterParameter $(Option) FORCE Ifint $($ShellCode) != $(!SHELL_CODE_OK) set RegistryErrorIndex = $($ShellCode) goto fatal endif Ifstr $($R0) != STATUS_SUCCESSFUL Ifstr $($R0) != STATUS_REBIND set RegistryErrorIndex = $($R0) goto fatal endif endif ; ; Add install file to ReviewPrograms ; OpenRegKey $(!REG_H_LOCAL) "" $(NetRules) $(MAXIMUM_ALLOWED) KeyProduct Ifstr $(KeyProduct) != $(KeyNull) GetRegValue $(KeyProduct),"InfName", infName ifint $(RegLastError) == 0 Shell "" AddToList *($(infName),4) OEMNSVRA.INF + $(ReviewProgram) ReviewPrograms ifint $($ShellCode) == $(!SHELL_CODE_OK) ifstr $($R0) != STATUS_SUCCESSFUL Shell "" AddToList *($(infName),4) NBINFO.INF + $(ReviewProgram) ReviewPrograms BEFORE endif endif endif CloseRegKey $(KeyProduct) endif ; ; Add our Group to the service group list ; Shell "" AddToList $(ProductSoftwareGroup) NDIS $(ServiceOrder) List goto writeparameters writeparameters = + CloseRegKey $(KeyParameters) EndWait goto successful bindingadapter =+ ; ; Delete IM DependOnGroup and DependOnService ; OpenRegKey $(!REG_H_LOCAL) "" $(IMServiceKeyName) $(MAXIMUM_ALLOWED) + KeyProduct Ifstr $(KeyProduct) == $(KeyNull) set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", + $(IMServiceKeyName)" empty!" goto fatal Endif DeleteRegValue $(KeyProduct) DependOnGroup DeleteRegValue $(KeyProduct) DependOnService CloseRegKey $(KeyProduct) ; ; Modify Transport NetRules ; set bindType = 1 Shell "" NdisWanSupport ifint $($R0) != 1 ForListDo $(NetRuleTransportKeys) Shell "" ChangeNetRules *($($),1) + *($(SupportedTransports),*($($),2)) + *($(IMTransports),*($($),2)) Bindable Ifint $($ShellCode) != $(!SHELL_CODE_OK) set RegistryErrorIndex = $($ShellCode) goto fatal endif Ifstr $($R0) != STATUS_SUCCESS Ifstr $($R0) != CANNOT_FIND_COMPONENT_SERVICE set RegistryErrorIndex = $($R0) goto fatal endif endif Ifstr $($R1) == 0 ;IM is installed before RAS set bindType = 2 endif endForListDo endif ; ; Modify NetBT (WINS) class ; Shell "" ChangeNetRules $(MicroSW)"NetBT"$(CVNetRules) + *($(SupportedTransports),4) *($(IMTransports),1) Class Ifint $($ShellCode) != $(!SHELL_CODE_OK) set RegistryErrorIndex = $($ShellCode) goto fatal endif Ifstr $($R0) != STATUS_SUCCESS Ifstr $($R0) != CANNOT_FIND_COMPONENT_SERVICE set RegistryErrorIndex = $($R0) goto fatal endif endif ; ; Remove IM from Transport's DependOnService ; Shell "" FixupTransportDependOnService set rebind = FALSE ; ; Add Protocol parameters and NetworkCard settings ; Shell "" SetAdapterParameter $(Option) Ifint $($ShellCode) != $(!SHELL_CODE_OK) set RegistryErrorIndex = $($ShellCode) goto fatal endif Ifstr $($R0) == STATUS_REBIND set rebind = TRUE else-ifstr $($R0) != STATUS_SUCCESSFUL set RegistryErrorIndex = $($R0) goto fatal endif ; ; Remove no longer used IM cards ; Shell "" RemoveIMCards UNWANTED Ifstr $($R0) == STATUS_REBIND set rebind = TRUE endif ; ; Fixup binding now that we might have added/removed some adapters ; Shell "" NdisWanSupport ifint $($R0) != 1 Shell "" FixupBindings else Shell "" GetNtVersion ifstr $($R0) == "3.51" Shell "" FixupBindings endif endif ifstr $(rebind) == TRUE OpenRegKey $(!REG_H_LOCAL) "" $(IMServiceKeyName) $(MAXIMUM_ALLOWED) + KeyProduct Ifstr $(KeyProduct) == $(KeyNull) set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", + $(IMServiceKeyName)" empty!" goto fatal endif SetRegValue $(KeyProduct) + {Rebind,$(NoTitle),$(!REG_VT_DWORD),$(bindType)} ifint $(RegLastError) != 0 set RegistryErrorIndex = $(RegLastError) goto fatal endif CloseRegKey $(KeyProduct) endif ; ; Reconfig protocol since some adapter information may have changed ; ;shell "oemnxptc.inf",InstallOption,$($0),TC,$($2),$($3),+ ;$($4),$($5),$($6),$($7),$($8) ; ; add our installation file to ReviewPrograms ; OpenRegKey $(!REG_H_LOCAL) "" $(NetRules) $(MAXIMUM_ALLOWED) KeyProduct Ifstr $(KeyProduct) != $(KeyNull) GetRegValue $(KeyProduct),"InfName", infName ifint $(RegLastError) == 0 Shell "" AddToList *($(infName),4) OEMNSVRA.INF + $(ReviewProgram) ReviewPrograms ifint $($ShellCode) == $(!SHELL_CODE_OK) ifstr $($R0) != STATUS_SUCCESSFUL Shell "" AddToList *($(infName),4) NBINFO.INF + $(ReviewProgram) ReviewPrograms BEFORE endif endif endif CloseRegKey $(KeyProduct) endif ; ; Add our Group to the service group list ; Shell "" AddToList $(ProductSoftwareGroup) NDIS $(ServiceOrder) List goto successful removeadapter = + Shell "" RemoveIM Shell "" GetNtVersion ifstr $($R0) == "3.51" Shell "" FixupBindingsAfterRemove $(!NTN_ServiceBase)"\Tcpip\Linkage" Shell "" FixupBindingsAfterRemove $(!NTN_ServiceBase)"\NetBT\Linkage" Shell "" FixupAdaptersAfterRemove endif goto end UpgradeSoftware = + ifstr(i) $(ProductKeyName) == $(!NTN_RegBase) OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) + KeyProduct Ifstr $(KeyProduct) != $(KeyNull) GetRegValue $(KeyProduct),"MajorVersion", VersionInfo set Version = *($(VersionInfo), 4) Shell $(UtilityInf), GetInfFileNameFromRegistry, $(KeyProduct) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "ShellCode error" CloseRegKey $(KeyProduct) goto ShellCodeError endif set !UG_Filename = $($R0) ifstr(i) $(!UG_Filename) != "" install "Install-Update" ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS CloseRegKey $(KeyProduct) goto fatal endif endif SetRegValue $(KeyProduct) {MajorVersion,$(NoTitle),$(!REG_VT_SZ),+ $(ProductMajorVersion)} SetRegValue $(KeyProduct) {MinorVersion,$(NoTitle),$(!REG_VT_SZ),+ $(ProductMinorVersion)} ifint $(Version) != $(ProductVersion) endif CloseRegKey $(KeyProduct) else goto fatalregistry endif endif goto end cleanupSoftware = + Shell "" RemoveBobcatINFs goto end successful = + goto end warning = + Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "WARNING", $(Error) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif ifstr(i) $($R1) == "OK" goto $(to) else-ifstr(i) $($R1) == "CANCEL" goto $(from) else goto "end" endif nonfatalinfo = + Set CommonStatus = STATUS_USERCANCEL Set Severity = STATUS goto nonfatalmsg nonfatal = + Set Severity = NONFATAL goto nonfatalmsg nonfatalmsg = + ifstr(i) $(Error) == "" Shell $(UtilityInf) RegistryErrorString "SETUP_FAIL" ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif set Error = $($R0) endif Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), $(Severity), $(Error) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif ifstr(i) $($R1) == "OK" goto $(from) else goto "end" endif fatalregistry = + Shell $(UtilityInf) RegistryErrorString $(RegistryErrorIndex) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif set Error = $($R0) goto fatal fatal = + Shell "" RemoveIM ifstr(i) $(Error) == "" Shell $(UtilityInf) RegistryErrorString "SETUP_FAIL" ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif set Error = $($R0) endif Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $(Error) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif goto setfailed ShellCodeError = + set DlgType = "MessageBox" set STF_MB_TITLE = $(ShellCodeErrorTitle) set STF_MB_TEXT = $(ShellCodeErrorText) set STF_MB_TYPE = 1 set STF_MB_ICON = 3 set STF_MB_DEF = 1 ui start "Error Message" goto setfailed setfailed = + set CommonStatus = STATUS_FAILED ifstr(i) $(OEM_ABANDON_ON) == TRUE set OEM_ABANDON_ON = FALSE goto removeadapter endif goto end end = + goto term term = + Return $(CommonStatus) [BindingsReview] set Option = $($1) set SrcDir = $($2) set AddCopy = $($3) set DoCopy = $($4) set DoConfig = $($5) read-syms GeneralConstants read-syms FileConstants read-syms FileConstantsENG OpenRegKey $(!REG_H_LOCAL) "" $(IMServiceKeyName) $(MAXIMUM_ALLOWED) + KeyProduct Ifstr $(KeyProduct) == $(KeyNull) Return STATUS_USERCANCEL endif GetRegValue $(KeyProduct) Rebind rebind ifint $(RegLastError) != 0 goto bindingsReview_cont endif DeleteRegValue $(KeyProduct) Rebind CloseRegKey $(KeyProduct) ifint *($(rebind),4) == 1 Shell "" GetNtVersion ifstr $($R0) == "4.0" Shell "" GetCblShimPath ifstr $($R0) == STATUS_SUCCESSFUL set cmd = $($R1)"\wgagent.dll,ReviewBindings" Shell subroutn.inf, SetupMessage $(!STF_LANGUAGE) "NONFATAL" + "CBLSHIM has discovered newly added or removed "+ "adapter(s). It is necessary to redo the network "+ "bindings. The current series of dialog windows will "+ "again be displayed. Don't reboot the system until "+ "the binding process is completed." StartDetachedProcess ExitCode "x" "" + $(!STF_WINDOWSSYSPATH)"\rundll32.exe" $(cmd) ifstr $(ExitCode) != "ERROR" Return STATUS_SUCCESSFUL else Shell subroutn.inf, SetupMessage $(!STF_LANGUAGE) "FATAL" + "Unable to start detached process" Return STATUS_USERCANCEL endif endif endif else-ifint *($(rebind),4) == 2 Shell "" GetNtVersion ifstr $($R0) == "4.0" Shell "" GetCblShimPath ifstr $($R0) == STATUS_SUCCESSFUL set cmd = $($R1)"\wgagent.dll,ReviewBindings" Shell subroutn.inf, SetupMessage $(!STF_LANGUAGE) "NONFATAL" + "CBLSHIM has discovered newly added RAS "+ "adapter(s). It is necessary to remove and reinstall "+ "IM. The current series of dialog windows "+ "will again be displayed to remove IM. Don't reboot "+ "the system until the binding process is completed. "+ "After the reboot, IM will be installed automatically." Shell "" RemoveIM StartDetachedProcess ExitCode "x" "" + $(!STF_WINDOWSSYSPATH)"\rundll32.exe" $(cmd) ifstr $(ExitCode) == "ERROR" Shell subroutn.inf, SetupMessage $(!STF_LANGUAGE) "FATAL" + "Unable to start detached process" Return STATUS_USERCANCEL endif ; ; Install new IM after next reboot ; OpenRegKey $(!REG_H_LOCAL) "" $(RunOnce) + $(MAXIMUM_ALLOWED) runHandle ifstr $(runHandle) == $(KeyNull) CreateRegKey $(!REG_H_LOCAL) {$(RunOnce),0,GenericClass} + "" $(MAXIMUM_ALLOWED) "" runHandle endif ifstr $(runHandle) == $(KeyNull) Shell subroutn.inf, SetupMessage $(!STF_LANGUAGE) "FATAL" + "Unable to add IM auto-install" Return STATUS_USERCANCEL endif SetRegValue $(runHandle) {InstallIM,0,+ $(!REG_VT_SZ),"rundll32 wgagent.dll,DllRegisterServer"} ifint $(RegLastError) != 0 CloseRegKey $(runHandle) Shell subroutn.inf, SetupMessage $(!STF_LANGUAGE) "FATAL" + "Unable to install IM auto-install" Return STATUS_USERCANCEL endif CloseRegKey $(runHandle) Return STATUS_SUCCESSFUL endif endif endif bindingsReview_cont = + ; ; NDISWAN ; Shell "" NdisWanSupport ifint $($R0) != 1 ifstr(i) $(!LIBHANDLE) == "" LoadLibrary "x" setupdll.dll !LIBHANDLE ifstr(i) $(!LIBHANDLE) == "" Shell subroutn.inf, SetupMessage $(!STF_LANGUAGE) "FATAL" + "IM Dial-Up Networking setup was unable "+ "to load setupdll.dll in the system32 "+ "directory. Please make sure this file is "+ "present on your computer. Setup will now exit." Return STATUS_USERCANCEL endif endif Shell "" GetNtVersion ifstr $($R0) == "4.0" Shell "" SetRasArpBindValueFromTcpIP endif Shell "" UpdateLLInterface endif ;Shell "" GetCblShimPath ;ifstr $($R0) == STATUS_SUCCESSFUL ; ; Install Newt into 'Run' key in registry ; ;RunProgram ExitCode NEWT32 "" $($R1)\newt32.exe -i ;endif ;clean up the IM bindings Debug-Output "OEMSETNT.INF: Loading BINDPRUNE.DLL" LoadLibrary "x" BindPrune.dll !PRUNEHANDLE Debug-Output "OEMSETNT.INF: Calling ImPruneBindings" LibraryProcedure Result $(!PRUNEHANDLE) ImPruneBindings Debug-Output "OEMSETNT.INF: Binding pruning complete" Return STATUS_SUCCESSFUL [Install-Option] set STF_VITAL = "" ifstr(i) $(AddCopy) == "YES" AddSectionFilesToCopyList Files-$(Option) $(SrcDir) + $(!STF_WINDOWSSYSPATH)\drivers endif ifstr(i) $(DoCopy) == "YES" set !STF_NCPA_FLUSH_COPYLIST = TRUE CopyFilesInCopyList endif ifstr(i) $(DoConfig) == "YES" endif Exit [Install-Update] set STF_VITAL = "" set STF_OVERWRITE = "VERIFYSOURCEOLDER" AddSectionFilesToCopyList Files-$(Option) $(SrcDir) + $(!STF_WINDOWSSYSPATH)\drivers AddSectionFilesToCopyList Files-Inf $(SrcDir) $(!STF_WINDOWSSYSPATH) set !STF_NCPA_FLUSH_COPYLIST = TRUE CopyFilesInCopyList exit [Install-Dll] set STF_VITAL = "" AddSectionFilesToCopyList Files-Dll $(SrcDir) $(!STF_WINDOWSSYSPATH) set !STF_NCPA_FLUSH_COPYLIST = TRUE CopyFilesInCopyList exit [Source Media Descriptions] 1 = "CBLSHIM Installation Disk", TAGFILE = winnt\oemsetup.inf [ProductType] STF_PRODUCT = Winnt STF_PLATFORM = I386 ;should be able to detect automatically? [Files-Inf] 1,BINDPRUNE.DLL,SIZE=2000 1,oemsetup.inf,SIZE=2000,RENAME=$(!UG_Filename) [Files-CBLSHIM] 1,CBLSHIM.SYS,SIZE=2000 [Files-Dll] 1,Bindprune.dll , SIZE=2000 1,updtncpk.exe , SIZE=2000 [LanguagesSupported] ENG [OptionsTextENG] ; NDISPERF = "CBLSHIM" NDISPERF = "3Com CM Dial Up Protocol" [FileConstantsENG] ProCaption = "Windows NT Setup" ProCancel = "Cancel" ProCancelMsg = "Windows NT Networking is not correctly installed. "+ "Are you sure you want to cancel copying files?" ProCancelCap = "Network Setup Message" ProText1 = "Copying:" ProText2 = "To:" FunctionTitle = "CBLSHIM" ;ProductSoftwareDescription = "CBLSHIM" ProductSoftwareDescription = "Redirects the Cable Modem upstream traffic to telco" ProductSoftwareDisplayName = "3Com CM Dial Up Protocol" ;ProductSoftwareTitle = "CBLSHIM" ProductSoftwareTitle = "3Com CM Dial Up Protocol" ProductSoftwareGroup = "NDISWAN" ShellCodeErrorTitle = "Error: "$(FunctionTitle) ShellCodeErrorText = "Shell Code Error." [DialogConstantsENG] Help = "&Help" Exit = "Cancel" OK = "OK" HelpContext = "" Continue = "Continue" Cancel = "Cancel" [FileDependentDlgENG] GroupLabel = "Optimization:" Radio1 = "&Minimize Memory Used" Radio2 = "&Balance" Radio3 = "M&aximize Throughput && Connections" DlgType = "Radio" DlgTemplate = "NBF" Caption = $(FunctionTitle) OptionsGreyed = {} HelpContext = $(!IDH_DB_OEMSETNT_INS) ;************************************************************************* ; ; SECTION: FixupBindings ; ; PURPOSE: <fixup the bindings after added/deleted some adapters> ; ; ARGUMENTS: ; ; RETURNS: $R0 - 0 if success ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [FixupBindings] read-syms GeneralConstants read-syms FileConstants set status = STATUS_SUCCESSFUL set temp = "temp" set tcpDisableLinkages = {} OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\Tcpip\Linkage\Disabled" + $(MAXIMUM_ALLOWED) KeyProduct Ifstr $(KeyProduct) != $(KeyNull) GetRegValue $(KeyProduct) Bind tcpDisableLinkage ifint $(RegLastError) == 0 set tcpDisableLinkages = *($(tcpDisableLinkage),4) endif CloseRegKey $(KeyProduct) endif OpenRegKey $(!REG_H_LOCAL) "" $(IMLinkageKeyName)"\Disabled" + $(MAXIMUM_ALLOWED) KeyProduct Ifstr $(KeyProduct) == $(KeyNull) Return CANNOT_FIND_COMPONENT_SERVICE endif GetRegValue $(KeyProduct) Bind disableLinkage ifint $(RegLastError) != 0 set disableLinkages = {} else set disableLinkages = *($(disableLinkage),4) endif CloseRegKey $(KeyProduct) OpenRegKey $(!REG_H_LOCAL) "" $(NetworkCardsKeyName) $(MAXIMUM_ALLOWED) + CardsHandle ifint $(RegLastError) != 0 return STATUS_FAILED endif EnumRegKey $(CardsHandle) CardList ifint $(RegLastError) != 0 CloseRegKey $(CardsHandle) return STATUS_FAILED endif CloseRegKey $(CardsHandle) set ImBind = {} set ImExport = {} set ImRoute = {} set TcpBind = {} set TcpExport = {} set TcpRoute = {} set NetBTExport = {} set RefCnt = 0 set q = \042\042\042\042\042\042\042\042 ifstr(i) $(!LIBHANDLE) == "" LoadLibrary "x" setupdll.dll !LIBHANDLE endif set compareSize = 0 set compareString = $(ProductSoftwareName)"_NdisWan" Split-String $(compareString) $(compareString) charList ForListDo $(charList) set-add compareSize = $(compareSize),1 EndForListDo set adapterList = {} set ndiswanList = {} set tcpipDisableList = {} ForListDo $(CardList) OpenRegKey $(!REG_H_LOCAL) "" $(NetworkCardsKeyName)"\"*($($),1) + $(MAXIMUM_ALLOWED) CardHandle ifint $(RegLastError) != 0 return STATUS_FAILED endif GetRegValue $(CardHandle) ProductName value ifint $(RegLastError) != 0 CloseRegKey $(CardHandle) return STATUS_FAILED endif ifstr *($(value),4) == $(ProductSoftwareName) GetRegValue $(CardHandle) ServiceName value ifint $(RegLastError) != 0 CloseRegKey $(CardHandle) return STATUS_FAILED endif set disable = 0 set currentCard = "\Device\"*($(value),4) ForListDo $(disableLinkages) ifstr(i) $($) == $(currentCard) set disable = 1 endif EndForListDo ifint $(disable) == 0 LibraryProcedure Result $(!LIBHANDLE) SetupStrncmp + *($(value),4) $(compareString) $(compareSize) ifint $(Result) == 0 set ndiswanList = >($(ndiswanList),*($(value),4)) else set adapterList = >($(adapterList),*($(value),4)) endif else ForListDo $(tcpDisableLinkages) ifstr(i) $($) == $(currentCard) set disable = 2 endif EndForListDo ifint $(disable) == 1 set tcpipDisableList = >($(tcpipDisableList),*($(value),4)) endif endif set-add RefCnt = $(RefCnt),1 endif CloseRegKey $(CardHandle) EndForListDo ifstr $(!IM_NDISWAN) == "" set !IM_NDISWAN = {} endif Shell "" GetNtVersion ifstr $($R0) == "3.51" set disableLinkages = {} OpenRegKey $(!REG_H_LOCAL) "" + $(!NTN_ServiceBase)"\Tcpip\Linkage\Disabled" + $(MAXIMUM_ALLOWED) KeyProduct Ifstr $(KeyProduct) != $(KeyNull) GetRegValue $(KeyProduct) Bind disableLinkage ifint $(RegLastError) == 0 set disableLinkages = *($(disableLinkage),4) endif CloseRegKey $(KeyProduct) endif ForListDo $(!IM_NDISWAN) set disable = 0 set currentCard = "\Device\"$($) ForListDo $(disableLinkages) ifstr(i) $($) == $(currentCard) set disable = 1 endif EndForListDo ifint $(disable) == 0 set TcpBind = >($(TcpBind), $(currentCard)) set TcpExport = >($(TcpExport),"\Device\Tcpip\"$($)) set NetBTExport = >($(NetBTExport),"\Device\NetBT_"$($)) set tmp = $(q)NdisWan$(q)" "$(q)$($)$(q) set TcpRoute = >($(TcpRoute), $(tmp)) endif EndForListDo goto fixupBindings_cont endif ForListDo $(!IM_NDISWAN) set currentCard = $(ProductSoftwareName)"_"$($) ForListDo $(ndiswanList) ifstr $(currentCard) == $($) set ImBind = >($(ImBind), "\Device\"$($)) set ImExport = >($(ImExport), "\Device\"$($)) set ImRoute = >($(ImRoute), $(q)$($)$(q)) set TcpBind = >($(TcpBind), "\Device\"$($)) set TcpExport = >($(TcpExport), "\Device\Tcpip\"$($)) set NetBTExport = >($(NetBTExport),"\Device\NetBT_"$($)) set tmp = $(q)$(ProductSoftwareName)$(q)" "$(q)$($)$(q) set TcpRoute = >($(TcpRoute), $(tmp)) endif EndForListDo EndForListDo fixupBindings_cont = + ForListDo $(adapterList) set ImBind = >($(ImBind), "\Device\"$($)) set ImExport = >($(ImExport), "\Device\"$($)) set ImRoute = >($(ImRoute), $(q)$($)$(q)) set TcpBind = >($(TcpBind), "\Device\"$($)) set TcpExport = >($(TcpExport), "\Device\Tcpip\"$($)) set NetBTExport = >($(NetBTExport),"\Device\NetBT_"$($)) set tmp = $(q)$(ProductSoftwareName)$(q)" "$(q)$($)$(q) set TcpRoute = >($(TcpRoute), $(tmp)) EndForListDo ForListDo $(tcpipDisableList) set TcpBind = >($(TcpBind), "\Device\"$($)) set TcpExport = >($(TcpExport), "\Device\Tcpip\"$($)) set NetBTExport = >($(NetBTExport),"\Device\NetBT_"$($)) set tmp = $(q)$(ProductSoftwareName)$(q)" "$(q)$($)$(q) set TcpRoute = >($(TcpRoute), $(tmp)) EndForListDo OpenRegKey $(!REG_H_LOCAL) "" $(IMServiceKeyName) $(MAXIMUM_ALLOWED) + IMHandle ifint $(RegLastError) != 0 return STATUS_FAILED endif fixupBindings_CreateTempKey = + CreateRegKey $(IMHandle) {$(temp),$(NoTitle),GenericClass} "" + $(MAXIMUM_ALLOWED) "" TempHandle ifint $(RegLastError) == 1011 ; key already exist DeleteRegTree $(IMHandle) $(temp) goto fixupBindings_CreateTempKey else-ifint $(RegLastError) != 0 CloseRegKey $(IMHandle) return STATUS_FAILED endif set-subst NewValueList = {+ {Bind,$(NoTitle),$(!REG_VT_MULTI_SZ),$(ImBind)},+ {Export,$(NoTitle),$(!REG_VT_MULTI_SZ),$(ImExport)},+ {Route,$(NoTitle),$(!REG_VT_MULTI_SZ),$(ImRoute)}} Shell $(UtilityInf) AddValueList $(TempHandle) $(NewValueList) Ifint $($ShellCode) != $(!SHELL_CODE_OK) set status = STATUS_FAILED goto fixupBindings_exit Endif Ifstr(i) $($R0) != NO_ERROR set status = STATUS_FAILED goto fixupBindings_exit Endif Shell "",CopyRegTree,$(IMServiceKeyName)"\"$(temp),$(IMServiceKeyName),+ Linkage,$(NoTitle),GenericClass,FORCE set-subst NewValueList = {+ {Bind,$(NoTitle),$(!REG_VT_MULTI_SZ),$(TcpBind)},+ {Export,$(NoTitle),$(!REG_VT_MULTI_SZ),$(TcpExport)},+ {Route,$(NoTitle),$(!REG_VT_MULTI_SZ),$(TcpRoute)}} Shell $(UtilityInf) AddValueList $(TempHandle) $(NewValueList) Ifint $($ShellCode) != $(!SHELL_CODE_OK) set status = STATUS_FAILED goto fixupBindings_exit Endif Ifstr(i) $($R0) != NO_ERROR set status = STATUS_FAILED goto fixupBindings_exit Endif Shell "",CopyRegTree,$(IMServiceKeyName)"\"$(temp),+ $(!NTN_ServiceBase)"\Tcpip",Linkage,$(NoTitle),+ GenericClass,FORCE set-subst NewValueList = {+ {Bind,$(NoTitle),$(!REG_VT_MULTI_SZ),$(TcpBind)},+ {Export,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetBTExport)},+ {Route,$(NoTitle),$(!REG_VT_MULTI_SZ),$(TcpRoute)}} Shell $(UtilityInf) AddValueList $(TempHandle) $(NewValueList) Ifint $($ShellCode) != $(!SHELL_CODE_OK) set status = STATUS_FAILED goto fixupBindings_exit Endif Ifstr(i) $($R0) != NO_ERROR set status = STATUS_FAILED goto fixupBindings_exit Endif Shell "",CopyRegTree,$(IMServiceKeyName)"\"$(temp),+ $(!NTN_ServiceBase)"\NetBT",Linkage,$(NoTitle),+ GenericClass,FORCE OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) SoftKey Ifstr $(SoftKey) != $(KeyNull) SetRegValue $(SoftKey) {RefCount,$(NoTitle),$(!REG_VT_DWORD),$(RefCnt)} CloseRegKey $(SoftKey) endif fixupBindings_exit = + DeleteRegTree $(IMHandle) $(temp) CloseRegKey $(IMHandle) CloseRegKey $(TempHandle) return $(status) ;************************************************************************* ; ; SECTION: GetCblShimPath ; ; PURPOSE: <Get the CblShim path> ; ; ARGUMENTS: ; ; RETURNS: $R0 - STATUS_SUCCESSFUL/STATUS_FAILED ; $R1 - CblShim path ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [GetCblShimPath] read-syms GeneralConstants read-syms FileConstants OpenRegKey $(!REG_H_LOCAL) "" $(IMSoftwareKey)"TCPIP" + $(MAXIMUM_ALLOWED) KeySoftware Ifstr $(KeySoftware) != $(KeyNull) GetRegValue $(KeySoftware) Path value ifint $(RegLastError) == 0 CloseRegKey $(KeySoftware) return STATUS_SUCCESSFUL, *($(value),4) endif CloseRegKey $(KeySoftware) endif return STATUS_FAILED ;************************************************************************* ; ; SECTION: ReplaceText ; ; PURPOSE: <Replace string1 with string2 in text> ; ; ARGUMENTS: $0 - text ; $1 - string1 ; $2 - string2 ; ; RETURNS: $R0 - STATUS_SUCCESSFUL/STATUS_FAILED ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [ReplaceText] read-syms GeneralConstants read-syms FileConstants Shell "" GetCblShimPath ifstr $($R0) != STATUS_SUCCESSFUL return $($R0) endif ifstr(i) $(!myLIBHANDLE) == "" LoadLibrary "x" $($R1)"\wgagent.dll" !myLIBHANDLE endif LibraryProcedure Result $(!myLIBHANDLE),ReplaceTxt,$($0),$($1),$($2) ;FreeLibrary $(myLIBHANDLE) ifint *($(Result),1) == 0 return STATUS_SUCCESSFUL, *($(Result),2) else return STATUS_FAILED endif ;************************************************************************* ; ; SECTION: FindNetworkCardProductName ; ; PURPOSE: <Find network card's product name from the service name ; ; ARGUMENTS: $0 - service name ; ; RETURNS: $R0 - STATUS_SUCCESSFUL/STATUS_FAILED ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [FindNetworkCardProductName] read-syms GeneralConstants read-syms FileConstants OpenRegKey $(!REG_H_LOCAL) "" $(NetworkCardsKeyName) $(MAXIMUM_ALLOWED) + KeyHandle Ifstr $(KeyHandle) != $(KeyNull) EnumRegKey $(KeyHandle) KeyList ifint $(RegLastError) == 0 ForListDo $(KeyList) OpenRegKey $(!REG_H_LOCAL) "" + $(NetworkCardsKeyName)"\"*($($),1) + $(MAXIMUM_ALLOWED) kHandle Ifstr $(kHandle) != $(KeyNull) GetRegValue $(kHandle) ServiceName value ifint $(RegLastError) == 0 ifstr *($(value),4) == $($0) GetRegValue $(kHandle) ProductName value ifint $(RegLastError) == 0 CloseRegKey $(kHandle) CloseRegKey $(KeyHandle) return STATUS_SUCCESSFUL, *($(value),4) endif endif endif CloseRegKey $(kHandle) endif EndForListDo endif CloseRegKey $(KeyHandle) endif return STATUS_FAILED ;************************************************************************* ; ; SECTION: FixupBindingsAfterRemove ; ; PURPOSE: <fixup the bindings after IM is removed ; ; ARGUMENTS: $0 - service bindings to fixup ; ; RETURNS: $R0 - 0 if success ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [FixupBindingsAfterRemove] read-syms GeneralConstants read-syms FileConstants set status = STATUS_SUCCESSFUL OpenRegKey $(!REG_H_LOCAL) "" $($0) $(MAXIMUM_ALLOWED) TcpHandle Ifstr $(TcpHandle) == $(KeyNull) return STATUS_FAILED endif set routeList = {} GetRegValue $(TcpHandle) Bind value ifint $(RegLastError) == 0 set list = {} ForListDo *($(value),4) Shell "" ReplaceText $($) $(ProductSoftwareName)"_" "" ifstr $($R0) == STATUS_SUCCESSFUL set list = >($(list),$($R1)) Split-String $($R1) "\" temp set routeList = >($(routeList),*($(temp),4)) endif EndForListDo ifstr $(list) != {} set NewValue = {Bind,$(NoTitle),$(!REG_VT_MULTI_SZ),$(list)} SetRegValue $(TcpHandle) $(NewValue) endif endif GetRegValue $(TcpHandle) Export value ifint $(RegLastError) == 0 set list = {} ForListDo *($(value),4) Shell "" ReplaceText $($) $(ProductSoftwareName)"_" "" ifstr $($R0) == STATUS_SUCCESSFUL set list = >($(list),$($R1)) endif EndForListDo ifstr $(list) != {} set NewValue = {Export,$(NoTitle),$(!REG_VT_MULTI_SZ),$(list)} SetRegValue $(TcpHandle) $(NewValue) endif endif set route = {} set q = \042\042\042\042\042\042\042\042 ForListDo $(routeList) Shell "" FindNetworkCardProductName $($) ifstr $($R0) == STATUS_SUCCESSFUL set temp = $(q)$($R1)$(q)" "$(q)$($)$(q) set route = >($(route), $(temp)) endif EndForListDo ifstr $(route) != {} set-subst NewValue = {{Route,$(NoTitle),$(!REG_VT_MULTI_SZ),$(route)}} Shell $(UtilityInf) AddValueList $(TcpHandle) $(NewValue) endif CloseRegKey $(TcpHandle) return STATUS_SUCCESSFUL ;************************************************************************* ; ; SECTION: FixupAdaptersAfterRemove ; ; PURPOSE: <fixup the adapters after IM is removed ; ; ARGUMENTS: ; ; RETURNS: $R0 - 0 if success ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [FixupAdaptersAfterRemove] read-syms GeneralConstants read-syms FileConstants OpenRegKey $(!REG_H_LOCAL) "" $(NetworkCardsKeyName) $(MAXIMUM_ALLOWED) + KeyHandle Ifstr $(KeyHandle) != $(KeyNull) EnumRegKey $(KeyHandle) KeyList ifint $(RegLastError) == 0 ForListDo $(KeyList) set deleteSrcKey = NO set oldInstance = *($($),1) set srcKey = $(NetworkCardsKeyName)"\"$(oldInstance) OpenRegKey $(!REG_H_LOCAL) "" $(srcKey) + $(MAXIMUM_ALLOWED) kHandle Ifstr $(kHandle) != $(KeyNull) GetRegValue $(kHandle) ProductName product ifint $(RegLastError) == 0 GetRegValue $(kHandle) ServiceName service ifint $(RegLastError) == 0 set productStr = *($(product),4) set serviceStr = *($(service),4) Split-String $(productStr) $(productStr) product Split-String $(serviceStr) $(serviceStr) service QueryListSize productSize $(product) QueryListSize serviceSize $(service) ifint $(serviceSize) > $(productSize) set count = 0 set instance = 0 ForListDo $(service) set-add count = $(count),1 ifint $(count) > $(productSize) set-mul instance = $(instance),10 set-add instance = $(instance),$($) endif EndForListDo ifint $(oldInstance) != $(instance) Shell "",CopyRegTree,$(srcKey),+ $(NetworkCardsKeyName),$(instance),+ $(NoTitle),GenericClass,FORCE Ifint $($ShellCode) == $(!SHELL_CODE_OK) Ifstr $($R0) == STATUS_SUCCESSFUL set deleteSrcKey = YES endif endif endif endif endif endif CloseRegKey $(kHandle) ifstr $(deleteSrcKey) == YES OpenRegKey $(!REG_H_LOCAL) "" $(NetworkCardsKeyName) + $(MAXIMUM_ALLOWED) kHandle Ifstr $(kHandle) != $(KeyNull) DeleteRegTree $(kHandle) $(oldInstance) CloseRegKey $(kHandle) endif endif endif EndForListDo endif Endif return STATUS_SUCCESSFUL ;************************************************************************* ; ; SECTION: FixupTransportsAfterRemove ; ; PURPOSE: <fixup the transports after IM is removed ; ; ARGUMENTS: ; ; RETURNS: $R0 - 0 if success ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [FixupTransportsAfterRemove] read-syms GeneralConstants read-syms FileConstants OpenRegKey $(!REG_H_LOCAL) "" $(NetBTServiceKey) + $(MAXIMUM_ALLOWED) Transport Ifstr $(Transport) == $(KeyNull) return STATUS_FAILED endif EnumRegKey $(Transport) CardList ifint $(RegLastError) != 0 CloseRegKey $(Transport) return STATUS_FAILED endif ForListDo $(CardList) set source = *($($),1) Split-String $(source) "_" name ifstr *($(name),1) == $(ProductSoftwareName) Debug-Output $(name) ifstr *($(name),2) == "_" set card = "" ForListDo $(name) ifint $(#) > 2 set card = $(card)$($) endif EndForListDo Shell "",CopyRegTree,$(NetBTServiceKey)"\"$(source),+ $(NetBTServiceKey),$(card),+ $(NoTitle),GenericClass,FORCE DeleteRegTree $(Transport) $(source) endif endif EndForListDo CloseRegKey $(Transport) return STATUS_SUCCESSFUL ;************************************************************************* ; ; SECTION: FixupServicesAfterRemove ; ; PURPOSE: <fixup the services after IM is removed ; ; ARGUMENTS: ; ; RETURNS: $R0 - 0 if success ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [FixupServicesAfterRemove] read-syms GeneralConstants read-syms FileConstants ForListDo $(FixupServices) OpenRegKey $(!REG_H_LOCAL) "" $($) $(MAXIMUM_ALLOWED) Service Ifstr $(Service) != $(KeyNull) GetRegValue $(Service) Bind value ifint $(RegLastError) == 0 set outValue = {} ForListDo *($(value),4) Split-String $($) "\_" name ifstr *($(name),6) != $(ProductSoftwareName) set outValue = >($(outValue), $($)) else set out = "" ForListDo $(name) ifint $(#) != 6 ifint $(#) != 7 set out = $(out)$($) endif endif EndForListDo set outValue = >($(outValue), $(out)) endif EndForListDo set value = {{Bind,$(NoTitle),$(!REG_VT_MULTI_SZ),$(outValue)}} Shell $(UtilityInf), AddValueList, $(Service), $(value) endif GetRegValue $(Service) Export value ifint $(RegLastError) == 0 set outValue = {} ForListDo *($(value),4) Split-String $($) "\_" name ifstr *($(name),8) != $(ProductSoftwareName) set outValue = >($(outValue), $($)) else set out = "" ForListDo $(name) ifint $(#) != 8 ifint $(#) != 9 set out = $(out)$($) endif endif EndForListDo set outValue = >($(outValue), $(out)) endif EndForListDo set value = {{Export,$(NoTitle),+ $(!REG_VT_MULTI_SZ),$(outValue)}} Shell $(UtilityInf), AddValueList, $(Service), $(value) endif GetRegValue $(Service) Route value ifint $(RegLastError) == 0 set outValue = {} set q = \042\042\042\042\042\042\042\042 set-subst quote = "\042" ForListDo *($(value),4) Shell "" ReplaceText $($), $(quote), "" ifstr $($R0) == STATUS_SUCCESSFUL Split-String $($R1) " " name Split-String *($(name),3) "_" product ifstr *($(product),1) != $(ProductSoftwareName) set out = "" ForListDo $(name) ifstr $($) == " " set out = $(out)$($) else set out = $(out)$(q)$($)$(q) endif EndForListDo Shell "" ReplaceText $(out), $(quote), "" set outValue = >($(outValue), $($R1)) else set serviceName = "" ForListDo $(product) ifint $(#) > 2 set serviceName = $(serviceName)$($) endif EndForListDo LibraryProcedure Result $(!LIBHANDLE) SetupStrncmp + $(serviceName) "NdisWan" 7 ifint $(Result) == 0 set out = $(q)*($(name),1)$(q)" "+ $(q)$(serviceName)$(q) set outValue = >($(outValue), $(out)) else Shell "" FindNetworkCardProductName + $(serviceName) ifstr $($R0) == STATUS_SUCCESSFUL set out = $(q)*($(name),1)$(q)" "+ $(q)$($R1)$(q)" "+ $(q)$(serviceName)$(q) set outValue = >($(outValue), $(out)) endif endif endif endif EndForListDo set-subst value = {{Route,$(NoTitle),+ $(!REG_VT_MULTI_SZ),$(outValue)}} Shell $(UtilityInf), AddValueList, $(Service), $(value) endif endif EndForListDo return STATUS_SUCCESSFUL ;************************************************************************* ; ; SECTION: NdisWanSupport ; ; PURPOSE: Support NdisWan adapters ; ; ARGUMENTS: ; ; RETURNS: $R0 - 0 for yes, 1 for no ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [NdisWanSupport] Shell "" GetNtVersion ifstr $($R0) == "3.51" return 0 endif read-syms FileConstants return $(NoNdisWanSupport) ;************************************************************************* ; ; SECTION: GetNtVersion ; ; PURPOSE: Get Windows NT Version ; ; ARGUMENTS: ; ; RETURNS: $R0 - NT version or return code ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [GetNtVersion] ifstr $(!IM_NT_VERSION) != "" return $(!IM_NT_VERSION) endif read-syms GeneralConstants read-syms FileConstants OpenRegKey $(!REG_H_LOCAL) "" $(NtCurrentVersion) $(MAXIMUM_ALLOWED) Handle ifint $(RegLastError) != 0 return STATUS_FAILED endif GetRegValue $(Handle) CurrentVersion value ifint $(RegLastError) != 0 CloseRegKey $(Handle) return STATUS_FAILED endif CloseRegKey $(Handle) set !IM_NT_VERSION = *($(value),4) return $(!IM_NT_VERSION) ;************************************************************************* ; ; SECTION: CopyRegTree ; ; PURPOSE: <duplicate registry tree> ; ; ARGUMENTS: $0 - Source Tree ; $1 - Destination Base ; $2 - Destination Key Name ; $3 - Destination Key Index ; $4 - Destination Key Class ; $5 - FORCE overwrite or not ; ; RETURNS: $R0 - 0 if success ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [CopyRegTree] read-syms GeneralConstants read-syms FileConstants Shell "" GetCblShimPath ifstr $($R0) != STATUS_SUCCESSFUL goto previous_CopyRegTree endif ifstr(i) $(!myLIBHANDLE) == "" LoadLibrary "x" $($R1)"\wgagent.dll" !myLIBHANDLE endif LibraryProcedure Result $(!myLIBHANDLE),CopyRegTree,$($0),$($1),$($2),+ $($3),$($4),$($5) ;FreeLibrary $(myLIBHANDLE) ifint *($(Result),1) == 0 return STATUS_SUCCESSFUL else return STATUS_FAILED endif previous_CopyRegTree = + Shell "" GetNtVersion ifstr $($R0) == "3.51" goto old_CopyRegTree endif new_CopyRegTree = + OpenRegKey $(!REG_H_LOCAL) "" $($0) $(MAXIMUM_ALLOWED) srcHandle ifint $(RegLastError) != 0 return STATUS_FAILED endif OpenRegKey $(!REG_H_LOCAL) "" $($1) $(MAXIMUM_ALLOWED) dstHandle ifint $(RegLastError) != 0 CloseRegKey $(srcHandle) return STATUS_FAILED endif CreateRegKey $(dstHandle) {$($2),$($3),$($4)} "" $(MAXIMUM_ALLOWED) "" dst ifint $(RegLastError) == 0 CloseRegKey $(dstHandle) else-ifint $(RegLastError) == 1011 ; key already exist CloseRegKey $(dstHandle) OpenRegKey $(!REG_H_LOCAL) "" $($1)"\"$($2) $(MAXIMUM_ALLOWED) dst ifint $(RegLastError) != 0 CloseRegKey $(srcHandle) return STATUS_FAILED endif else CloseRegKey $(dstHandle) CloseRegKey $(srcHandle) return STATUS_FAILED endif LibraryProcedure CopyResult $(!NCPA_HANDLE),RegCopyTree,$(srcHandle),$(dst) Set CopyError = *($(CopyResult),1) CloseRegKey $(srcHandle) CloseRegKey $(dst) Ifint $(CopyError) != 0 return STATUS_FAILED endif return STATUS_SUCCESSFUL ; ; Old CopyRegTree routine. There is limitation/bug in EnumRegValue in that ; it can't always read all the registry values. The library procedure in ; NCPA don't seem to have this problem! ; old_CopyRegTree = + ; Shell $(subroutineinf) SetupMessage,$(!STF_LANGUAGE), "NONFATAL", + ; $($0)" "$($1)" "$($2)" "$($3)" "$($4) OpenRegKey $(!REG_H_LOCAL) "" $($0) $(MAXIMUM_ALLOWED) KeyHandle ifint $(RegLastError) != 0 goto error_copyTree endif EnumRegValue $(KeyHandle) ValueList ; ifint $(RegLastError) != 0 ; CloseRegKey $(KeyHandle) ; goto error_copyTree ; endif EnumRegKey $(KeyHandle) KeyList ifint $(RegLastError) != 0 CloseRegKey $(KeyHandle) goto error_copyTree endif CloseRegKey $(KeyHandle) OpenRegKey $(!REG_H_LOCAL) "" $($1) $(MAXIMUM_ALLOWED) KeyHandle ifint $(RegLastError) != 0 goto error_copyTree endif set NewKey = {$($2),$($3),$($4)} ; Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "NONFATAL", $(NewKey) CreateRegKey $(KeyHandle) $(NewKey) "" $(MAXIMUM_ALLOWED) "" + NewKeyHandle ifint $(RegLastError) == 0 CloseRegKey $(KeyHandle) goto addValueList_copyTree else-ifint $(RegLastError) == 1011 ; key already exist CloseRegKey $(KeyHandle) goto openRegKey_copyTree else CloseRegKey $(KeyHandle) goto error_copyTree endif openRegKey_copyTree = + OpenRegKey $(!REG_H_LOCAL) "" $($1)"\"$($2) $(MAXIMUM_ALLOWED) + NewKeyHandle ifint $(RegLastError) != 0 goto error_copyTree endif addValueList_copyTree = + ifstr $(ValueList) != "" ForListDo $(ValueList) ifstr $($5) == FORCE SetRegValue $(NewKeyHandle) $($) else GetRegValue $(NewKeyHandle) *($($),1) value ifint $(RegLastError) != 0 SetRegValue $(NewKeyHandle) $($) endif endif EndForListDo endif CloseRegKey $(NewKeyHandle) ForListDo $(KeyList) set NewKey = *($($),1) Shell "",CopyRegTree,$($0)"\"$(NewKey),$($1)"\"$($2),$(NewKey),+ *($($),2),*($($),3),$($5) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto error_copyTree endif ifstr $($R0) != STATUS_SUCCESSFUL goto error_copyTree endif EndForListDo return STATUS_SUCCESSFUL error_copyTree = + ; Shell $(subroutineinf) SetupMessage,$(!STF_LANGUAGE),"NONFATAL",errCopyTree OpenRegKey $(!REG_H_LOCAL) "" $($1) $(MAXIMUM_ALLOWED) KeyHandle ifint $(RegLastError) == 0 DeleteRegTree $(KeyHandle) $($2) endif CloseRegKey $(KeyHandle) return STATUS_FAILED ;************************************************************************* ; ; SECTION: RemoveIMServices ; ; PURPOSE: <remove IM services> ; ; ARGUMENTS: ; ; RETURNS: ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [RemoveIMServices] read-syms GeneralConstants read-syms FileConstants OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase) $(MAXIMUM_ALLOWED) + KeyHandle Ifstr $(KeyHandle) != $(KeyNull) EnumRegKey $(KeyHandle) KeyList Ifint $(RegLastError) == 0 ForListDo $(KeyList) Split-String *($($),1) "_" KeyCheck ifstr *($(KeyCheck),1) == $(ProductSoftwareName) Debug-Output $(KeyCheck) ifstr *($(KeyCheck),2) == "_" Debug-Output *($($),1) DeleteRegTree $(KeyHandle) *($($),1) endif endif EndForListDo Endif CloseRegKey $(KeyHandle) endif return ;************************************************************************* ; ; SECTION: RemoveIMCards ; ; PURPOSE: <remove IM cards> ; ; ARGUMENTS: $0 - if "UNWANTED" then only remove unused IM cards ; ; RETURNS: $R0 - STATUS_SUCCESSFUL or STATUS_REBIND ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [RemoveIMCards] read-syms GeneralConstants read-syms FileConstants set status = STATUS_SUCCESSFUL OpenRegKey $(!REG_H_LOCAL) "" $(NetworkCardsKeyName) $(MAXIMUM_ALLOWED) + KeyHandle Ifstr $(KeyHandle) != $(KeyNull) EnumRegKey $(KeyHandle) KeyList ifint $(RegLastError) == 0 ForListDo $(KeyList) OpenRegKey $(!REG_H_LOCAL) "" + $(NetworkCardsKeyName)"\"*($($),1) + $(MAXIMUM_ALLOWED) kHandle Ifstr $(kHandle) != $(KeyNull) GetRegValue $(kHandle) ProductName value ifint $(RegLastError) == 0 ifstr *($(value),4) == $(ProductSoftwareName) set skipDelete = NO GetRegValue $(kHandle) ServiceName value ifint $(RegLastError) == 0 ifstr $($0) == UNWANTED Split-String *($(value),4) "_" name ifstr *($(name),1) == $(ProductSoftwareName) ForListDo $(KeyList) OpenRegKey $(!REG_H_LOCAL) "" + $(NetworkCardsKeyName)"\"*($($),1) + $(MAXIMUM_ALLOWED) rHandle ifstr $(rHandle) != $(KeyNull) GetRegValue $(rHandle) ServiceName service ifint $(RegLastError) == 0 set svc = "" ForListDo $(name) ifint $(#) > 2 set svc = $(svc)$($) endif EndForListDo ifstr *($(service),4) == $(svc) set skipDelete = YES endif endif CloseRegKey $(rHandle) endif EndForListDo endif endif endif ifstr $(skipDelete) == NO ; ; delete the corresponding service too ; OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase) + $(MAXIMUM_ALLOWED) rHandle ifstr $(rHandle) != $(KeyNull) DeleteRegTree $(rHandle) *($(value),4) CloseRegKey $(rHandle) endif Debug-Output $($) DeleteRegTree $(KeyHandle) *($($),1) set status = STATUS_REBIND endif endif endif CloseRegKey $(kHandle) endif EndForListDo endif CloseRegKey $(KeyHandle) endif return $(status) ;************************************************************************* ; ; SECTION: AddIMCard ; ; PURPOSE: <add IM card> ; ; ARGUMENTS: $0 - card to add ; $1 - parent key name ; $2 - InfOption ; $3 - card instance ; $4 - NDISWAN? ; ; RETURNS: $R0: STATUS_FAILED, STATUS_SUCCESSFUL, STATUS_REBIND ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [AddIMCard] read-syms GeneralConstants read-syms FileConstants read-syms FileConstantsENG OpenRegKey $(!REG_H_LOCAL) "" $($1) $(MAXIMUM_ALLOWED) KeyCard Ifstr $(KeyCard) == $(KeyNull) return STATUS_FAILED Endif EnumRegKey $(KeyCard) cardList Ifint $(RegLastError) != 0 CloseRegKey $(KeyCard) return STATUS_FAILED Endif ForListDo $(cardList) set Card = $($1)"\"*($($),1) OpenRegKey $(!REG_H_LOCAL) "" $(Card) $(MAXIMUM_ALLOWED) kHandle Ifstr $(kHandle) != $(KeyNull) GetRegValue $(kHandle) ServiceName serviceName Ifint $(RegLastError) == 0 Ifstr *($(serviceName),4) == $(ProductSoftwareName)"_"$($0) CloseRegKey $(KeyCard) CloseRegKey $(kHandle) return STATUS_SUCCESS ;Card already exist Endif Endif CloseRegKey $(kHandle) Endif EndForListDo ForListDo $(cardList) set Card = $($1)"\"*($($),1) OpenRegKey $(!REG_H_LOCAL) "" $(Card) $(MAXIMUM_ALLOWED) kHandle Ifstr $(kHandle) != $(KeyNull) GetRegValue $(kHandle) ServiceName serviceName Ifint $(RegLastError) == 0 Ifstr *($(serviceName),4) == $($0) ; ; get a new instance value ; Shell $(UtilityInf),AssignAdapterNumber,"",1 Ifint $($ShellCode) != $(!SHELL_CODE_OK) set NewCardInstance = 9*($($),1) Else-Ifstr(i) $($R0) != NO_ERROR set NewCardInstance = 8*($($),1) Else set NewCardInstance = $($R1) Endif CreateRegKey $(KeyCard) + {$(NewCardInstance),$(NoTitle),GenericClass} "" + $(MAXIMUM_ALLOWED) "" newHandle Ifstr $(newHandle) != $(KeyNull) GetRegValue $(kHandle) Title title GetRegValue $(kHandle) Description desc set serviceName = $(ProductSoftwareName)"_"$($0) detect date Shell "" GetNtVersion ifstr $($R0) == "3.51" set NewValueList = {+ {Title,$(NoTitle),$(!REG_VT_SZ),+ +; "["$(NewCardInstance)"] "+ $(ProductSoftwareTitle)" "+ *($(title),4)},+ {Description,$(NoTitle),$(!REG_VT_SZ),+ $(ProductSoftwareTitle)" -> "*($(desc),4)},+ {Manufacturer,$(NoTitle),$(!REG_VT_SZ),+ $(Manufacturer)},+ {ProductName,$(NoTitle),$(!REG_VT_SZ),+ $(ProductSoftwareName)},+ {ServiceName,$(NoTitle),$(!REG_VT_SZ),+ $(serviceName)},+ {InstallDate,$(NoTitle),$(!REG_VT_DWORD),+ *($(Now),1)}} else Ifint $($4) == 0 set NewValueList = {+ {Title,$(NoTitle),$(!REG_VT_SZ),+ +; "["$(NewCardInstance)"] "+ +; $(ProductSoftwareTitle)" -> "+ *($(title),4)},+ {Description,$(NoTitle),$(!REG_VT_SZ),+ $(ProductSoftwareTitle)" -> "*($(desc),4)},+ {Manufacturer,$(NoTitle),$(!REG_VT_SZ),+ $(Manufacturer)},+ {ProductName,$(NoTitle),$(!REG_VT_SZ),+ $(ProductSoftwareName)},+ {ServiceName,$(NoTitle),$(!REG_VT_SZ),+ $(serviceName)},+ {OperationsSupport,$(NoTitle),+ $(!REG_VT_DWORD),$(ProductHardwareSupport)},+ {InstallDate,$(NoTitle),$(!REG_VT_DWORD),+ *($(Now),1)}} else set NewValueList = {+ {Title,$(NoTitle),$(!REG_VT_SZ),+ +; "["$(NewCardInstance)"] "+ +; $(ProductSoftwareTitle)" -> "+ *($(title),4)},+ {Description,$(NoTitle),$(!REG_VT_SZ),+ $(ProductSoftwareTitle)" -> "*($(desc),4)},+ {Manufacturer,$(NoTitle),$(!REG_VT_SZ),+ $(Manufacturer)},+ {ProductName,$(NoTitle),$(!REG_VT_SZ),+ $(ProductSoftwareName)},+ {ServiceName,$(NoTitle),$(!REG_VT_SZ),+ $(serviceName)},+ {Hidden,$(NoTitle),$(!REG_VT_DWORD),1},+ {InstallDate,$(NoTitle),$(!REG_VT_DWORD),+ *($(Now),1)}} endif endif Shell $(UtilityInf), AddValueList, $(newHandle),+ $(NewValueList) CreateRegKey $(newHandle) + {NetRules,$(NoTitle),GenericClass} "" + $(MAXIMUM_ALLOWED) "" netHandle Ifstr $(netHandle) != $(KeyNull) set-subst bindform = "\042"$(serviceName)"\042"+ $(NetRuleHardwareBindForm) Shell $(UtilityInf),ReduceInfPath,+ $(STF_CONTEXTINFNAME) set NewValueList = {+ {bindform,$(NoTitle),$(!REG_VT_SZ),+ $(bindform)},+ {class,$(NoTitle),$(!REG_VT_MULTI_SZ),+ $(NetRuleHardwareClass)},+ {type,$(NoTitle),$(!REG_VT_SZ),+ $(serviceName)" "*($(IMAdapters),1)},+ {InfOption,$(NoTitle),$(!REG_VT_SZ),+ $($2)},+ {InfName,$(NoTitle),$(!REG_VT_SZ),+ $($R0)}} Shell $(UtilityInf), AddValueList, + $(netHandle), $(NewValueList) CloseRegKey $(netHandle) Endif CloseRegKey $(newHandle) Endif Endif Endif CloseRegKey $(kHandle) Endif EndForListDo Shell "" GetNtVersion ifstr $($R0) == "3.51" ; ; swap card keys ; OpenRegKey $(!REG_H_LOCAL) "" $($1) $(MAXIMUM_ALLOWED) rHandle ifstr $(rHandle) != $(KeyNull) set temp = temp Shell "",CopyRegTree,$($1)"\"$($3),$($1),$(temp),+ $(NoTitle),GenericClass,FORCE Ifint $($ShellCode) != $(!SHELL_CODE_OK) CloseRegKey $(rHandle) Return $($ShellCode) endif Ifstr $($R0) != STATUS_SUCCESSFUL CloseRegKey $(rHandle) Return $($R0) endif Shell "",CopyRegTree,$($1)"\"$(NewCardInstance),$($1),$($3),+ $(NoTitle),GenericClass,FORCE Ifint $($ShellCode) != $(!SHELL_CODE_OK) CloseRegKey $(rHandle) Return $($ShellCode) endif Ifstr $($R0) != STATUS_SUCCESSFUL CloseRegKey $(rHandle) Return $($R0) endif Shell "",CopyRegTree,$($1)"\"$(temp),$($1),$(NewCardInstance),+ $(NoTitle),GenericClass,FORCE Ifint $($ShellCode) != $(!SHELL_CODE_OK) CloseRegKey $(rHandle) Return $($ShellCode) endif Ifstr $($R0) != STATUS_SUCCESSFUL CloseRegKey $(rHandle) Return $($R0) endif DeleteRegTree $(rHandle) $(temp) CloseRegKey $(rHandle) endif endif CloseRegKey $(KeyCard) return STATUS_REBIND ;************************************************************************* ; ; SECTION: ChangeListText ; ; PURPOSE: <change text in list string> ; ; ARGUMENTS: $0 - input string ; $1 - string to be substitued ; $2 - string to substitue with ; ; RETURNS: $R0 - output string ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [ChangeListText] read-syms GeneralConstants read-syms FileConstants read-syms FileConstantsENG ;Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "NONFATAL", $($0)" "$($1)" "$($2) set returnList = {} set noChange = 1 ForListDo $($0) set newList = "" Split-String $($) " " stringList ForListDo $(stringList) Ifstr $($) == $($1) set newList = $(newList)$($2) set noChange = 0 Else set newList = $(newList)$($) Endif EndForListDo set returnList = >($(returnList),$(newList)) ;Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "NONFATAL", $(returnList) EndForListDo return $(returnList) $(noChange) ;************************************************************************* ; ; SECTION: ChangeNetRules ; ; PURPOSE: <change netRules> ; ; ARGUMENTS: $0 - netRules key ; $1 - string to be substitued ; $2 - string to substitue with ; $3 - registry text ; ; RETURNS: $R0 - return status ; $R1 - no change status ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [ChangeNetRules] read-syms GeneralConstants read-syms FileConstants read-syms FileConstantsENG OpenRegKey $(!REG_H_LOCAL) "" $($0) $(MAXIMUM_ALLOWED) KeyProduct Ifstr $(KeyProduct) == $(KeyNull) return CANNOT_FIND_COMPONENT_SERVICE Endif GetRegValue $(KeyProduct) $($3) bindText Ifint $(RegLastError) != 0 CloseRegKey $(KeyProduct) Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", + $($0)"\Bindable not found!" return CANNOT_FIND_COMPONENT_SERVICE Endif shell "" ChangeListText *($(bindText),4) $($1) $($2) Ifint $($ShellCode) != $(!SHELL_CODE_OK) CloseRegKey $(KeyProduct) Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", + $($ShellCode)": ChangeListText shell error!" return $($ShellCode) endif set noChange = $($R1) set NewValueList = {{*($(bindText),1),*($(bindText),2),*($(bindText),3),+ $($R0)}} Shell $(UtilityInf), AddValueList, $(KeyProduct), $(NewValueList) CloseRegKey $(KeyProduct) Ifint $($ShellCode) != $(!SHELL_CODE_OK) Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", + $($ShellCode)": AddValueList shell error!" return $($ShellCode) Endif Ifstr(i) $($R0) != NO_ERROR Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", + $($R0)": AddValueList returns error!" return $($R0) Endif return STATUS_SUCCESS $(noChange) ;************************************************************************* ; ; SECTION: FixupTransportDependOnService ; ; PURPOSE: Remove IM from DependOnService ; ; ARGUMENTS: ; ; RETURNS: ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [FixupTransportDependOnService] read-syms GeneralConstants read-syms FileConstants read-syms FileConstantsENG ForListDo $(TransportServiceKeys) OpenRegKey $(!REG_H_LOCAL) "" $($) $(MAXIMUM_ALLOWED) KeyProduct Ifstr $(KeyProduct) != $(KeyNull) GetRegValue $(KeyProduct) DependOnService dependOnList Ifint $(RegLastError) == 0 set TransportBindList = {} ForListDo *($(dependOnList),4) Ifstr $($) != $(ProductSoftwareName) set TransportBindList = >($(TransportBindList),$($)) endif EndForListDo set NewValueList = {DependOnService,$(NoTitle),+ $(!REG_VT_MULTI_SZ),+ $(TransportBindList)} SetRegValue $(KeyProduct) $(NewValueList) Ifint $(RegLastError) != 0 set RegistryErrorIndex = $(RegLastError) CloseRegKey $(KeyProduct) goto fatal endif endif CloseRegKey $(KeyProduct) Endif EndForListDo return ;************************************************************************* ; ; SECTION: AddToList ; ; PURPOSE: Add new value to list. If new value is already in the ; order list, it is taken out first. ; ; ARGUMENTS: $0 - value to add ; $1 - reference value ; $2 - key where list resides ; $3 - name of list ; $4 - add BEFORE or AFTER reference value ; ; RETURNS: $R0 - return status ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [AddToList] read-syms GeneralConstants read-syms FileConstants read-syms FileConstantsENG set Status = STATUS_FAILURE OpenRegKey $(!REG_H_LOCAL) "" $($2) $(MAXIMUM_ALLOWED) KeyGroup set OldList = {} Ifstr(i) $(KeyGroup) != $(KeyNull) GetRegValue $(KeyGroup) $($3) TmpList ifint $(RegLastError) == 0 ForListDo *($(TmpList), 4) set OldList = >($(OldList), $($)) EndForListDo endif Debug-Output "AddToList current list "$(OldList) set NewGroupList = {} ForListDo $(OldList) ifstr(i) $($) != $($0) ifstr(i) $($4) == BEFORE ifstr(i) $($) == $($1) set NewGroupList = >($(NewGroupList), $($0) ) set Status = STATUS_SUCCESSFUL endif set NewGroupList = >($(NewGroupList), $($)) else set NewGroupList = >($(NewGroupList), $($)) ifstr(i) $($) == $($1) set NewGroupList = >($(NewGroupList), $($0) ) set Status = STATUS_SUCCESSFUL endif endif endif EndForListDo Debug-Output "AddToList new list "$(NewGroupList) SetRegValue $(KeyGroup) {$($3),$(NoTitle),$(!REG_VT_MULTI_SZ),+ $(NewGroupList)} CloseRegKey $(KeyGroup) else Debug-Output "AddToList error open ServiceGroupOrder key" endif return $(Status) ;************************************************************************* ; ; SECTION: SetAdapterParameter ; ; PURPOSE: Copy Transport Parameters from real adapters to ; IM adapters. ; ; ARGUMENTS: $0 - InfOption ; $1 - FORCE CopyRegTree or not ; ; RETURNS: $R0 - return status ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [SetAdapterParameter] read-syms GeneralConstants read-syms FileConstants read-syms FileConstantsENG ; ; Copy Transport parameters using IM's bind list ; OpenRegKey $(!REG_H_LOCAL) "" $(NetworkCardsKeyName) $(MAXIMUM_ALLOWED) + KeyProduct Ifstr $(KeyProduct) == $(KeyNull) Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", + $(NetworkCardsKeyName)" empty!" Return CANNOT_FIND_COMPONENT_SERVICE Endif EnumRegKey $(KeyProduct) KeyList Ifint $(RegLastError) != 0 CloseRegKey $(KeyProduct) Return $(RegLastError) Endif CloseRegKey $(KeyProduct) set status = STATUS_SUCCESSFUL set dialOutIp = {} set dialInIp = {} set !IM_NDISWAN = {} ForListDo $(KeyList) OpenRegKey $(!REG_H_LOCAL) "" $(NetworkCardsKeyName)"\"*($($),1) + $(MAXIMUM_ALLOWED) kHandle Ifstr $(kHandle) != $(KeyNull) GetRegValue $(kHandle) ProductName productName ifint $(RegLastError) == 0 ifstr *($(productName),4) != $(ProductSoftwareName) GetRegValue $(kHandle) ServiceName value ifint $(RegLastError) == 0 set ndiswan = 0; ; ; Check for NdisWan adapters ; ifstr(i) $(!LIBHANDLE) == "" LoadLibrary "x" setupdll.dll !LIBHANDLE endif LibraryProcedure Result $(!LIBHANDLE) SetupStrncmp + *($(value),4) "NdisWan" 7 ifint $(Result) == 0 Shell "" NdisWanSupport ifint $($R0) == 1 goto next_adapter endif ; ; NdisWan DialOut IP adapters ; ifstr(i) *($(productName),4) == NdisWanDialOutIp ifstr $(dialOutIp) == "" set dialOutIp = {} endif set dialOutIp = >($(dialOutIp),*($(value),4)) Shell "" GetNtVersion ifstr $($R0) != "3.51" set ndiswan = 1; goto continue_add_adapter endif ; ; NdisWan DialIn IP adapters ; else-ifstr(i) *($(productName),4) == NdisWanDialInIp ifstr $(dialInIp) == "" set dialInIp = {} endif set dialInIp = >($(dialInIp),*($(value),4)) Shell "" GetNtVersion ifstr $($R0) != "3.51" set ndiswan = 1; goto continue_add_adapter endif endif goto next_adapter endif check_hidden_adapter = + ; ; don't attach to hidden adapters ; GetRegValue $(kHandle) Hidden hidden ifint $(RegLastError) == 0 ifint *($(hidden),4) == 1 goto next_adapter endif endif ; ; make sure adapter is a supported type ; GetRegValue $(kHandle) Manufacturer manu ifint $(RegLastError) != 0 goto next_adapter endif OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\"+ *($(manu),4)"\"*($(productName),4)+ "\CurrentVersion\NetRules" + $(MAXIMUM_ALLOWED) nHandle Ifstr $(nHandle) == $(KeyNull) goto next_adapter endif GetRegValue $(nHandle) type type ifint $(RegLastError) != 0 goto next_adapter endif Split-String *($(type),4) " " driver set addAdapter = 0 ForListDo $(SupportedDrivers) ifstr(i) *($(driver),3) == $($) set addAdapter = 1 endif EndForListDo ifint $(addAdapter) != 1 goto next_adapter endif continue_add_adapter = + ; ; add software component of IM adapter from ; real adapter ; set srcDev = *($(value),4) set dstDev = $(ProductSoftwareName)"_"$(srcDev) Shell "",CopyRegTree,$(!NTN_ServiceBase)"\"$(srcDev),+ $(!NTN_ServiceBase),$(dstDev),+ $(NoTitle),GenericClass,$($1) Ifint $($ShellCode) != $(!SHELL_CODE_OK) CloseRegKey $(kHandle) Return $($ShellCode) endif Ifstr $($R0) != STATUS_SUCCESSFUL CloseRegKey $(kHandle) Return $($R0) endif ifint $(ndiswan) == 0 ; ; remove hardware parameters ; set parms = $(!NTN_ServiceBase)"\"+ $(dstDev)"\Parameters" OpenRegKey $(!REG_H_LOCAL) "" $(parms) + $(MAXIMUM_ALLOWED) KeyProduct Ifstr $(KeyProduct) == $(KeyNull) CloseRegKey $(kHandle) Shell $(subroutineinf) SetupMessage, + $(!STF_LANGUAGE), "FATAL", + $(parms)" empty!" Return CANNOT_FIND_COMPONENT_SERVICE Endif EnumRegValue $(KeyProduct) ValueList ForListDo $(ValueList) DeleteRegValue $(KeyProduct) *($($),1) EndForListDo CloseRegKey $(KeyProduct) Endif ; ; add hardware component of IM adapter from ; real adapter ; Shell "" AddIMCard $(srcDev) $(NetworkCardsKeyName) + $($0) *($($),1) $(ndiswan) ifstr $($R0) == STATUS_REBIND set status = $($R0) endif ; ; add WINS parameters ; set srcWINS = $(NetBTServiceKey)"\"$(srcDev) OpenRegKey $(!REG_H_LOCAL) "" $(srcWINS) + $(MAXIMUM_ALLOWED) winsHandle Ifstr $(winsHandle) != $(KeyNull) Shell "",CopyRegTree,$(srcWINS),$(NetBTServiceKey),+ $(dstDev),$(NoTitle),GenericClass,FORCE CloseRegKey $(winsHandle) endif next_adapter = + endif endif endif CloseRegKey $(kHandle) endif EndForListDo ForListDo $(dialOutIp) set !IM_NDISWAN = >($(!IM_NDISWAN),$($)) EndForListDo ForListDo $(dialInIp) set !IM_NDISWAN = >($(!IM_NDISWAN),$($)) EndForListDo Return $(status) ;************************************************************************* ; ; SECTION: ResetAdapterParameter ; ; PURPOSE: Copy Transport Parameters from IM adapters to ; real adapters. ; ; ARGUMENTS: ; ; RETURNS: $R0 - return status ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [ResetAdapterParameter] read-syms GeneralConstants read-syms FileConstants read-syms FileConstantsENG ; ; Copy Transport parameters using IM's bind list ; OpenRegKey $(!REG_H_LOCAL) "" $(IMLinkageKeyName) $(MAXIMUM_ALLOWED) + KeyProduct Ifstr $(KeyProduct) == $(KeyNull) ; Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", + ; $(IMLinkageKeyName)" empty!" Return CANNOT_FIND_COMPONENT_SERVICE Endif GetRegValue $(KeyProduct) Bind bindList Ifint $(RegLastError) != 0 CloseRegKey $(KeyProduct) Return $(RegLastError) endif set devices = *($(bindList),4) ForListDo $(devices) Split-String *($($),1) "\" device set srcDev = *($(device),4) Split-String $(srcDev) "_" device set dstDev = "" ForListDo $(device) ifint $(#) > 2 set dstDev = $(dstDev)$($) endif EndForListDo set srcTree = $(!NTN_ServiceBase)"\"$(srcDev) Shell "",CopyRegTree,$(srcTree),$(!NTN_ServiceBase),+ $(dstDev),$(NoTitle),GenericClass,FORCE EndForListDo CloseRegKey $(KeyProduct) Return STATUS_SUCCESSFUL ;************************************************************************* ; ; SECTION: RemoveIM ; ; PURPOSE: Remove IM is called during remove adapter phase or ; when any fatal error is detected. ; ; ARGUMENTS: ; ; RETURNS: ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [RemoveIM] read-syms GeneralConstants read-syms FileConstants read-syms FileConstantsENG OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) SoftKey Ifstr $(SoftKey) != $(KeyNull) SetRegValue $(SoftKey) {RefCount,$(NoTitle),$(!REG_VT_DWORD),0} CloseRegKey $(SoftKey) endif ; ; Remove install file from ReviewPrograms and delete install file ; OpenRegKey $(!REG_H_LOCAL) "" $(NetRules) $(MAXIMUM_ALLOWED) KeyProduct Ifstr $(KeyProduct) == $(KeyNull) goto removeadapter_removeSoftwareComponent endif GetRegValue $(KeyProduct),"InfName", infName ifint $(RegLastError) != 0 CloseRegKey $(KeyProduct) goto removeadapter_removeSoftwareComponent endif CloseRegKey $(KeyProduct) Shell "" AddToList *($(infName),4),,$(ReviewProgram),ReviewPrograms Split-String *($(infName),4) "0123456789" checkList Ifstr *($(checkList),1) != *($(infName),4) AddFileToDeleteList $(!STF_WINDOWSSYSPATH)"\"*($(infName),4) endif ;Shell "" GetCblShimPath ;ifstr $($R0) == STATUS_SUCCESSFUL ;ifstr(i) $(!LIBHANDLE) == "" ;LoadLibrary "x" setupdll.dll !LIBHANDLE ;endif ;set NEWT = $($R1)\newt32.exe ;LibraryProcedure stat,$(!LIBHANDLE),CheckFileExistance $(NEWT) ;ifstr(i) $(stat) != NO ; ; Remove Newt from 'Run' key in registry (CT 7/20/97) ; ;RunProgram ExitCode NEWT32 "" $(NEWT) -u ; ; Remove NEWT32 on the next bootup sequence ; ;AddFileToDeleteList $(NEWT) ;endif ;endif removeadapter_removeSoftwareComponent = + ; ; Copy back current adapter settings ; Shell "" ResetAdapterParameter ; ; Remove software component ; Shell "" MyRemoveSoftwareComponent,$(Manufacturer),$(ProductSoftwareName),"" ; ; Change NetRules back ; ForListDo $(NetRuleDriverKeys) Shell "" ChangeNetRules *($($),1) *($(IMDrivers),*($($),2)) + *($(SupportedDrivers),*($($),2)) Bindable EndForListDo Shell "" GetNtVersion ifstr $($R0) != "3.51" ForListDo $(NetRuleTransportKeys) Shell "" ChangeNetRules *($($),1) + *($(IMTransports),*($($),2)) + *($(SupportedTransports),*($($),2)) Bindable EndForListDo endif Shell "" ChangeNetRules $(MicroSW)"NetBT"$(CVNetRules) + *($(IMTransports),1) *($(SupportedTransports),4) Class ; ; Remove IM services and cards ; ;Shell "" RemoveIMServices Shell "" RemoveIMCards ALL Shell "" FixupTransportsAfterRemove Shell "" FixupServicesAfterRemove return ;************************************************************************* ; ; SECTION: MyRemoveSoftwareComponent ; ; PURPOSE: Remove software component. ; ; ARGUMENTS: $0 - Manufacturer ; $1 - Product software name ; $2 - Product software name to upgrade to ; $3 - Inf name if this is a upgrade ; ; RETURNS: ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [MyRemoveSoftwareComponent] read-syms GeneralConstants read-syms FileConstants read-syms FileConstantsENG Shell "" GetNtVersion ifstr $($R0) == "3.51" OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_SoftwareBase)"\"$($0) + $(MAXIMUM_ALLOWED) keyHandle ifstr $(keyHandle) != $(KeyNull) ifstr $($2) != "" ; ; try to set ServiceName Key first before CopyRegTree ; CreateRegKey $(keyHandle) {$($2),0,GenericClass} "" + $(MAXIMUM_ALLOWED) "" driverHandle ifstr $(driverHandle) != $(KeyNull) CreateRegKey $(driverHandle) + {CurrentVersion,0,GenericClass} "" + $(MAXIMUM_ALLOWED) "" cvHandle ifstr $(cvHandle) != $(KeyNull) SetRegValue $(cvHandle) {ServiceName, 0, + $(!REG_VT_SZ), $(ProductSoftwareName)} SetRegValue $(cvHandle) {MajorVersion, 0, + $(!REG_VT_DWORD), $(ProductMajorVersion)} SetRegValue $(cvHandle) {MinorVersion, 0, + $(!REG_VT_DWORD), $(ProductMinorVersion)} CreateRegKey $(cvHandle) + {NetRules,0,GenericClass} "" + $(MAXIMUM_ALLOWED) "" nrHandle ifstr $(nrHandle) != $(KeyNull) Shell $(UtilityInf),ReduceInfPath,$($3) SetRegValue $(nrHandle) {InfName, 0, + $(!REG_VT_SZ), $($R0)} CloseRegKey $(nrHandle) endif CloseRegKey $(cvHandle) endif CloseRegKey $(driverHandle) endif Shell "",CopyRegTree,$(!NTN_SoftwareBase)"\"$($0)"\"$($1),+ $(!NTN_SoftwareBase)"\"$($0),$($2),+ $(NoTitle),GenericClass set removeBobcatINFs = TRUE endif DeleteRegTree $(keyHandle) $($1) CloseRegKey $(keyHandle) endif OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase) + $(MAXIMUM_ALLOWED) keyHandle ifstr $(keyHandle) != $(KeyNull) ifstr $($2) != "" Shell "",CopyRegTree,$(!NTN_ServiceBase)"\"$($1),+ $(!NTN_ServiceBase),$($2),+ $(NoTitle),GenericClass set removeBobcatINFs = TRUE endif DeleteRegTree $(keyHandle) $($1) CloseRegKey $(keyHandle) endif set status = STATUS_SUCCESSFUL else ifstr $($2) == "" Shell $(UtilityInf),RemoveSoftwareComponent,$($0),$($1) set status = STATUS_SUCCESSFUL else set status = STATUS_SUCCESSFUL OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_SoftwareBase)"\"$($0)"\"$($1) + $(MAXIMUM_ALLOWED) keyHandle ifstr $(keyHandle) != $(KeyNull) set removeBobcatINFs = TRUE CloseRegKey $(keyHandle) set status = STATUS_REBOOT endif OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\"$($1) + $(MAXIMUM_ALLOWED) keyHandle ifstr $(keyHandle) != $(KeyNull) set removeBobcatINFs = TRUE CloseRegKey $(keyHandle) set status = STATUS_REBOOT endif ifstr $(status) == STATUS_REBOOT Shell $(UtilityInf),RemoveSoftwareComponent,$($0),$($1) ; ; remove 4.0 rule ; ForListDo $(NetRuleDriverKeys) Shell "" ChangeNetRules *($($),1) NMFTRTransport + *($(SupportedDrivers),*($($),2)) Bindable EndForListDo Shell "" GetNtVersion ifstr $($R0) != "3.51" ForListDo $(NetRuleTransportKeys) Shell "" ChangeNetRules *($($),1) + *($(IMTransports),*($($),2)) + *($(SupportedTransports),*($($),2)) Bindable EndForListDo endif Shell "" ChangeNetRules $(MicroSW)"NetBT"$(CVNetRules) + *($(IMTransports),1) *($(SupportedTransports),4) Class ; ; Install new IM after next reboot ; OpenRegKey $(!REG_H_LOCAL) "" $(RunOnce) + $(MAXIMUM_ALLOWED) runHandle ifstr $(runHandle) == $(KeyNull) CreateRegKey $(!REG_H_LOCAL) {$(RunOnce),0,GenericClass} + "" $(MAXIMUM_ALLOWED) "" runHandle endif ifstr $(runHandle) != $(KeyNull) SetRegValue $(runHandle) {InstallIM,0,+ $(!REG_VT_SZ),"rundll32 wgagent.dll,DllRegisterServer"} CloseRegKey $(runHandle) Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE),+ "NONFATAL", + "Setup has removed a previous version of CblShim "+ "IM. A reboot is require before the new CblShim "+ "IM can be added. On the next reboot, the new "+ "CblShim IM will be installed automatically." endif endif endif endif ifstr $(removeBobcatINFs) == TRUE shell "" RemoveBobcatINFs endif return $(status) ;************************************************************************* ; ; SECTION: RemoveBobcatINFs ; ; PURPOSE: Remove bobcat inf files. ; ; ARGUMENTS: ; ; RETURNS: ; ; REFERENCES: <list of global or parent variables referenced> ; ;************************************************************************* [RemoveBobcatINFs] read-syms GeneralConstants read-syms FileConstants read-syms FileConstantsENG set list = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,+ 10,11,12,13,14,15,16,17,18,19,+ 20,21,22,23,24,25,26,27,28,29,+ 30,31,32,33,34,35,36,37,38,39,+ 40,41,42,43,44,45,46,47,48,49,+ 50,51,52,53,54,55,56,57,58,59,+ 60,61,62,63,64,65,66,67,68,69,+ 70,71,72,73,74,75,76,77,78,79,+ 80,81,82,83,84,85,86,87,88,89,+ 90,91,92,93,94,95,96,97,98,99} ; ; Delete bobcat INF instances ; ForListDo $(list) set infName = OEMNSV$($).INF Shell $(infName),ReturnOptions ENG ifint $($ShellCode) == $(!SHELL_CODE_OK) ifstr $($R0) == STATUS_SUCCESSFUL ifstr *($($R2),1) == $(ProductSoftwareTitle) AddFileToDeleteList $(!STF_WINDOWSSYSPATH)"\"$(infName) endif endif endif EndForListDo return ;************************************************************************* ; taken from oemnsvra.inf for NDISWAN ;************************************************************************* [UpdateLLInterface] read-syms GeneralConstants read-syms FileConstants read-syms FileConstantsENG Debug-Output "UpdateLLInterface: entry" set Status = STATUS_FAILED set KeyNull = "" set LLInterface = "\Device\RASARP" set IPLinkageKeyName = $(!NTN_ServiceBase)"\TCPIP\Linkage" OpenRegKey $(!REG_H_LOCAL) "" $(IPLinkageKeyName) $(MAXIMUM_ALLOWED) + KeyIpLinkage ifstr $(KeyIpLinkage) == $(KeyNull) Debug-Output "IM: UpdateLLInterface: couldn't open IP Linkage key" goto UpdateLLInterfaceEnd endif set compareSize = 0 set compareString = $(ProductSoftwareName)"_NdisWan" Split-String $(compareString) $(compareString) charList ForListDo $(charList) set-add compareSize = $(compareSize),1 EndForListDo set NdisWanList = {} GetRegValue $(KeyIpLinkage) "Bind" TmpList ForListDo *($(TmpList),4) Split-String $($), "\", BindList QueryListSize ListSize $(BindList) set ServiceName = *($(BindList), $(ListSize)) LibraryProcedure Result $(!LIBHANDLE) SetupStrncmp $(ServiceName) + $(compareString) $(compareSize) ifint $(Result) == 0 set NdisWanList = >($(NdisWanList), $(ServiceName)) endif EndForListDo CloseRegKey $(KeyIpLinkage) QueryListSize ListSize $(NdisWanList) ifint $(ListSize) >= 1 ForListDo $(NdisWanList) set ServiceKeyName = $(!NTN_ServiceBase)"\"$($)"\Parameters\TCPIP" OpenRegKey $(!REG_H_LOCAL) "" $(ServiceKeyName) + $(MAXIMUM_ALLOWED) KeyNdisWan ifstr $(KeyNdisWan) != $(KeyNull) SetRegValue $(KeyNdisWan) {IPAddress, 0, + $(!REG_VT_MULTI_SZ), {"0.0.0.0"}} SetRegValue $(KeyNdisWan) {SubnetMask, 0, + $(!REG_VT_MULTI_SZ), {"0.0.0.0"}} SetRegValue $(KeyNdisWan) {DefaultGateway, 0, + $(!REG_VT_MULTI_SZ), {""}} SetRegValue $(KeyNdisWan) {LLInterface, $(NoTitle),+ $(!REG_VT_SZ), $(LLInterface)} SetRegValue $(KeyNdisWan) {EnableDHCP, 0, + $(!REG_VT_DWORD), 0} else CreateRegKey $(!REG_H_LOCAL) + {$(ServiceKeyName),0,GenericClass} "" + $(MAXIMUM_ALLOWED) "" KeyNdisWan ifstr $(KeyNdisWan) != $(KeyNull) SetRegValue $(KeyNdisWan) {IPAddress, 0, + $(!REG_VT_MULTI_SZ), {"0.0.0.0"}} SetRegValue $(KeyNdisWan) {SubnetMask, 0, + $(!REG_VT_MULTI_SZ), {"0.0.0.0"}} SetRegValue $(KeyNdisWan) {DefaultGateway, 0, + $(!REG_VT_MULTI_SZ), {""}} SetRegValue $(KeyNdisWan) {LLInterface, 0,+ $(!REG_VT_SZ), $(LLInterface)} SetRegValue $(KeyNdisWan) {EnableDHCP, 0,+ $(!REG_VT_DWORD), 0} SetRegValue $(KeyNdisWan) {UseZeroBroadcast, 0, + $(!REG_VT_DWORD), 0} else Debug-Output "IM: UpdateLLInterface: couldn't "+ "create NdisWan params-tcpip key" goto UpdateLLInterfaceEnd endif endif CloseRegKey $(KeyNdisWan) EndForListDo endif set Status = STATUS_SUCCESSFUL UpdateLLInterfaceEnd =+ Debug-Output "UpdateLLInterface: exit" return $(Status) [SetRasArpBindValueFromTcpIP] read-syms GeneralConstants read-syms FileConstants read-syms FileConstantsENG Debug-Output "SetRasArpBindValueFromTcpIP: entry" set Status = STATUS_FAILED set KeyNull = "" set IPLinkageKeyName = $(!NTN_ServiceBase)"\TCPIP\Linkage" OpenRegKey $(!REG_H_LOCAL) "" $(IPLinkageKeyName) $(MAXIMUM_ALLOWED) + KeyIpLinkage ifstr $(KeyIpLinkage) == $(KeyNull) Debug-Output "IM: SetRasArpBindValueFromTcpIP: can't open IP Linkage" goto SetRasArpBindValueFromTcpIPEnd endif set compareSize = 0 set compareString = $(ProductSoftwareName)"_NdisWan" Split-String $(compareString) $(compareString) charList ForListDo $(charList) set-add compareSize = $(compareSize),1 EndForListDo set NdisWanList = {} GetRegValue $(KeyIpLinkage) "Bind" TmpList ForListDo *($(TmpList),4) Split-String $($), "\", BindList QueryListSize ListSize $(BindList) set ServiceName = *($(BindList), $(ListSize)) LibraryProcedure Result $(!LIBHANDLE) SetupStrncmp $(ServiceName) + $(compareString) $(compareSize) ifint $(Result) == 0 set NdisWanList = >($(NdisWanList), $($)) endif EndForListDo set RasArpLinkageKeyName = $(!NTN_ServiceBase)"\RASARP\Linkage" OpenRegKey $(!REG_H_LOCAL) "" $(RasArpLinkageKeyName) $(MAXIMUM_ALLOWED) + KeyRasArpLinkage ifstr $(KeyRasArpLinkage) != $(KeyNull) SetRegValue $(KeyRasArpLinkage) {Bind, 0, $(!REG_VT_MULTI_SZ), + $(NdisWanList)} CloseRegKey $(KeyRasArpLinkage) endif CloseRegKey $(KeyIpLinkage) set Status = STATUS_SUCCESSFUL SetRasArpBindValueFromTcpIPEnd=+ Debug-Output "SetRasArpBindValueFromTcpIP: entry" return $(Status) ;************************************************************************* ; end code taken from oemnsvra.inf for NDISWAN ;*************************************************************************Download Driver Pack
After your driver has been downloaded, follow these simple steps to install it.
Expand the archive file (if the download file is in zip or rar format).
If the expanded file has an .exe extension, double click it and follow the installation instructions.
Otherwise, open Device Manager by right-clicking the Start menu and selecting Device Manager.
Find the device and model you want to update in the device list.
Double-click on it to open the Properties dialog box.
From the Properties dialog box, select the Driver tab.
Click the Update Driver button, then follow the instructions.
Very important: You must reboot your system to ensure that any driver updates have taken effect.
For more help, visit our Driver Support section for step-by-step videos on how to install drivers for every file type.