; file version: 1.6.0.7 ;%VER 3Com OEMSETUP.INF 1.6.0.7 [Identification] OptionType = NetTransport [LanguagesSupported] ENG [Options] DAPassThru [OptionsTextENG] PassThru = "DynamicAccess Intermediate Driver" [FileConstants] UtilityInf = "UTILITY.INF" subroutineinf = "SUBROUTN.INF" TransportSoftwareType = "transport" AdapterSoftwareType = "driver" Exit_Code = 0 NetEventDLL = "%SystemRoot%\System32\drivers\daprot.sys" Manufacturer = "3Com" ProductMajorVersion = "1" ProductMinorVersion = "5.0" ProductVersion = $(ProductMajorVersion)"."$(ProductMinorVersion) TransportProductSoftwareName = "DAPassThruTransport" AdapterProductSoftwareName = "DAPassThru" AdapterProductHardwareName = "DAPassThru" ProductSoftwareImagePath = "\SystemRoot\System32\drivers\DAprot.sys" ProductMiniportSoftwareImagePath = "\SystemRoot\System32\drivers\DAmini.sys" TransportNetRuleSoftwareType = "DAPassThruTransport DAPassThruTransport" TransportNetRuleSoftwareClass = {"DAPassThruTransport basic"} TransportNetRuleSoftwareUse = $(TransportSoftwareType)" none none" TransportNetRuleSoftwareBindForm = """DAPassThruTransport"" yes yes container" TransportNetRuleSoftwareBindable = {"DAPassThruTransport ndisDriver non non 100"} AdapterNetRuleSoftwareType = "DAPassThruSys ndisDriver DAPassThruDriver" AdapterNetRuleSoftwareUse = $(AdapterSoftwareType) AdapterNetRuleSoftwareBindForm = """DAPROT"" yes no container" AdapterNetRuleSoftwareClass = {"DAPassThruDriver basic"} AdapterNetRuleSoftwareBindable = {"DAPassThruDriver DAPassThruAdapter non exclusive 100"} AdapterNetRuleHardwareType = "DAPassThru DAPassThruAdapter" AdapterNetRuleHardwareBindForm = " yes yes container" AdapterNetRuleHardwareClass = {"DAPassThruAdapter basic"} TransportProductKeyName = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(TransportProductSoftwareName)"\CurrentVersion" TransportParamKeyName = $(!NTN_ServiceBase)"\"$(TransportProductSoftwareName)"\Parameters" TransportServiceKeyName = $(!NTN_ServiceBase)"\"$(TransportProductSoftwareName) TransportLinkageKeyName = $(!NTN_ServiceBase)"\"$(TransportProductSoftwareName)"\Linkage" TransportLinkageDisabledKeyName = $(!NTN_ServiceBase)"\"$(TransportProductSoftwareName)"\Linkage\Disabled" AdapterProductKeyName = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(AdapterProductSoftwareName)"\CurrentVersion" AdapterParamKeyName = $(!NTN_ServiceBase)"\"$(AdapterProductSoftwareName)"\Parameters" AdapterServiceKeyName = $(!NTN_ServiceBase)"\"$(AdapterProductSoftwareName) AdapterLinkageKeyName = $(!NTN_ServiceBase)"\"$(AdapterProductSoftwareName)"\Linkage" [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 = "DAPassThru Driver" TransportProductSoftwareDescription = "DAPassThru Driver Transport" TransportProductSoftwareDisplayName = "DAPassThru Driver Transport" TransportProductSoftwareTitle = "DAPassThru Driver Transport" AdapterProductSoftwareDescription = "DAPassThru Driver Adapter" AdapterProductSoftwareDisplayName = "DAPassThru Driver Adapter" AdapterProductSoftwareTitle = "DAPassThru Driver Adapter" ProductHardwareDescription = "DAPassThru Driver Virtual Adapter" ProductHardwareDisplayName = "DAPassThru Driver Virtual Adapter" ProductHardwareTitle = "DAPassThru Driver Virtual Adapter" ShellCodeErrorTitle = "Error: "$(FunctionTitle) ShellCodeErrorText = "Shell Code Error." [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 DisableOtherReviewBindings = $(!STF_WINDOWSPATH)"\System32\DASetup.exe" DisableOtherReviewBindingsText = "DisableOtherReviews" StartDetachedText = "StartDetachedReview" DASetupNT = $(!STF_WINDOWSPATH)"\System32\DASetup.exe" SetupINFName = $(!STF_WINDOWSPATH)"\System32\oemsetup.INF" DASmartN = $(!STF_WINDOWSPATH)"\System32\DASmartN.exe" PostProcessInf = $(!STF_WINDOWSPATH)"\System32\PRUN.INF" DA15CFGEXE = $(!STF_WINDOWSPATH)"\System32\da15cfg.exe" DASERVERCPL = $(!STF_WINDOWSPATH)"\System32\daserver.cpl" DASERVERHLP = $(!STF_WINDOWSPATH)"\System32\daserver.hlp" ;DA15CFGINI = $(!STF_WINDOWSPATH)"\System32\da15cfg.ini" DACFGCPL = $(!STF_WINDOWSPATH)"\System32\Pacecfg.cpl" DACFGCPLSAV= $(!STF_WINDOWSPATH)"\System32\Pacecfg.sav" DACFGHLP = $(!STF_WINDOWSPATH)"\System32\dacfg.hlp" ;DACFGAPPLST= $(!STF_WINDOWSPATH)"\System32\dacfgapp.lst" ReviewProgramsTxt = "ReviewPrograms" ProductSoftwareImagePathTxt = $(!STF_WINDOWSPATH)"\System32\drivers\DAprot.sys" ProductMiniportSoftwareImagePathTxt = $(!STF_WINDOWSPATH)"\System32\drivers\DAmini.sys" InstallInProcess = "DAInstallInProcess" TotalNumberOfNICs = 64 TotalNumberOfGroups = 32 ;half of the TotalNumberOfNICs [date] Now = {} ? $(!LIBHANDLE) GetSystemDate [platform] STF_PLATFORM = "" ? $(!LIBHANDLE) GetPlatform [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) [InstallOption] set !DebugOutputControl = 1 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 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 detect platform set-title $(FunctionTitle) set to = Begin set from = Begin set CommonStatus = STATUS_SUCCESSFUL EndWait Begin = + Ifstr(i) $(!NTN_InstallMode) == deinstall set StartLabel = deinstall else-Ifstr(i) $(!NTN_InstallMode) == update set StartLabel = update else-Ifstr(i) $(!NTN_InstallMode) == bind set StartLabel = bind else-Ifstr(i) $(!NTN_InstallMode) == configure set StartLabel = configure else set StartLabel = install endif set RadioDefault = 2 set RadioIn = {$(RadioDefault)} set from = $(fatal) set to = $(fatal) goto $(StartLabel) install =+ ;Debug: ; Set DlgText = "oemsetup.INF: install=+ Section" ; Shell "Subroutn.Inf" SetupMessage $(!STF_LANGUAGE) "WARNING" $(DlgText) ; ifint $($ShellCode) != $(!SHELL_CODE_OK) ; set RegistryErrorIndex = ERROR ; endif OpenRegKey $(!REG_H_LOCAL) "" $(TransportProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct Ifstr $(KeyProduct) != $(KeyNull) CloseRegKey $(KeyProduct) Shell $(UtilityInf), VerExistedDlg, $(TransportProductSoftwareTitle),+ $(ProductVersion) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif goto end endif CloseRegKey $(KeyProduct) goto installproduct installproduct = + StartWait ifint $(OldVersionExisted) == $(FALSE) Ifstr(i) $(DoCopy) == "YES" 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 Goto fatal Else-Ifstr(i) $($R0) == STATUS_USERCANCEL Goto successful Endif Set SrcDir = $($R1) Debug-Output "PassThru: oemsetup.inf: SrcDir "$(SrcDir) Endif Shell "" StripTrailSlash $(SrcDir) set PlatformDir = $($R0)"\"$(STF_PLATFORM) set InfDir = $($R0)"\" 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 Debug-Output "PassThru: Adding Transport Software Component to Registry" Shell $(UtilityInf), AddSoftwareComponent, $(Manufacturer), + $(TransportProductSoftwareName), + $(TransportProductSoftwareName), + $(TransportProductSoftwareDisplayName), $(STF_CONTEXTINFNAME), + $(ProductSoftwareImagePath), "transport", "NDIS", {}, "",+ $(NetEventDLL) set RegistryErrorIndex = $($R0) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR EndWait CloseRegKey $($R1) CloseRegKey $($R2) CloseRegKey $($R3) CloseRegKey $($R4) CloseRegKey $($R5) goto fatalregistry endif Set SoftProductKey = $($R1) Set SoftNetRuleKey = $($R2) Set SoftServiceKey = $($R3) Set SoftParameterKey = $($R4) Set SoftLinkageKey = $($R5) set NewValueList = {{SoftwareType,$(NoTitle),$(!REG_VT_SZ),$(TransportSoftwareType)},+ {MajorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMajorVersion)},+ {MinorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMinorVersion)},+ {Title,$(NoTitle),$(!REG_VT_SZ),$(TransportProductSoftwareTitle)},+ {Description,$(NoTitle),$(!REG_VT_SZ),$(TransportProductSoftwareDescription)},+ {ServiceName,$(NoTitle),$(!REG_VT_SZ),$(TransportProductSoftwareName)},+ {Review,$(NoTitle),$(!REG_VT_DWORD),1},+ {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}} Shell $(UtilityInf), AddValueList, $(SoftProductKey), $(NewValueList) set RegistryErrorIndex = $($R0) Ifstr $(RegistryErrorIndex) != NO_ERROR CloseRegKey $(SoftProductKey) CloseRegKey $(SoftNetRuleKey) CloseRegKey $(SoftServiceKey) CloseRegKey $(SoftParameterKey) CloseRegKey $(SoftLinkageKey) goto fatalregistry endif set NewValueList = {{type,$(NoTitle),$(!REG_VT_SZ),$(TransportNetRuleSoftwareType)}, + {use,$(NoTitle),$(!REG_VT_SZ),$(TransportNetRuleSoftwareUse)}, + {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(TransportNetRuleSoftwareClass)}, + {bindform,$(NoTitle),$(!REG_VT_SZ),$(TransportNetRuleSoftwareBindForm)}, + {bindable,$(NoTitle),$(!REG_VT_MULTI_SZ),$(TransportNetRuleSoftwareBindable)}, + {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 $(SoftParameterKey) CloseRegKey $(SoftLinkageKey) goto fatalregistry endif CloseRegKey $(SoftProductKey) CloseRegKey $(SoftNetRuleKey) CloseRegKey $(SoftServiceKey) CloseRegKey $(SoftParameterKey) CloseRegKey $(SoftLinkageKey) Debug-Output "PassThru: Adding Adapter Software Component to Registry" Shell $(UtilityInf), AddSoftwareComponent, $(Manufacturer), + $(AdapterProductSoftwareName), + $(AdapterProductSoftwareName), + $(AdapterProductSoftwareDisplayName), $(STF_CONTEXTINFNAME), + $(ProductMiniportSoftwareImagePath), "kernel", "NDIS", {}, "",+ $(NetEventDLL) set RegistryErrorIndex = $($R0) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR EndWait CloseRegKey $($R1) CloseRegKey $($R2) CloseRegKey $($R3) CloseRegKey $($R4) CloseRegKey $($R5) goto fatalregistry endif Set SoftProductKey = $($R1) Set SoftNetRuleKey = $($R2) Set SoftServiceKey = $($R3) Set SoftParameterKey = $($R4) Set SoftLinkageKey = $($R5) set NewValueList = {{SoftwareType,$(NoTitle),$(!REG_VT_SZ),$(AdapterSoftwareType)},+ {MajorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMajorVersion)},+ {MinorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMinorVersion)},+ {Title,$(NoTitle),$(!REG_VT_SZ),$(AdapterProductSoftwareTitle)},+ {Description,$(NoTitle),$(!REG_VT_SZ),$(AdapterProductSoftwareDescription)},+ {ServiceName,$(NoTitle),$(!REG_VT_SZ),$(AdapterProductSoftwareName)},+ {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}} Shell $(UtilityInf), AddValueList, $(SoftProductKey), $(NewValueList) set RegistryErrorIndex = $($R0) Ifstr $(RegistryErrorIndex) != NO_ERROR CloseRegKey $(SoftProductKey) CloseRegKey $(SoftNetRuleKey) CloseRegKey $(SoftServiceKey) CloseRegKey $(SoftParameterKey) CloseRegKey $(SoftLinkageKey) goto fatalregistry endif set NewValueList = {{type,$(NoTitle),$(!REG_VT_SZ),$(AdapterNetRuleSoftwareType)}, + {use,$(NoTitle),$(!REG_VT_SZ),$(AdapterNetRuleSoftwareUse)}, + {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(AdapterNetRuleSoftwareClass)}, + {bindform,$(NoTitle),$(!REG_VT_SZ),$(AdapterNetRuleSoftwareBindForm)}, + {bindable,$(NoTitle),$(!REG_VT_MULTI_SZ),$(AdapterNetRuleSoftwareBindable)}, + {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 $(SoftParameterKey) CloseRegKey $(SoftLinkageKey) goto fatalregistry endif CloseRegKey $(SoftProductKey) CloseRegKey $(SoftNetRuleKey) CloseRegKey $(SoftServiceKey) CloseRegKey $(SoftParameterKey) CloseRegKey $(SoftLinkageKey) OpenRegKey $(!REG_H_LOCAL) "" $(TransportParamKeyName) $(MAXIMUM_ALLOWED) DAParamKey SetRegValue $(DAParamKey) {$(InstallInProcess),$(NoTitle),$(!REG_VT_DWORD),2} endif EndWait goto successful bind =+ ; ; When user terminates NCPA, bind is invoked. Therefore, without knowing ; what the user has done to the NCPA (add new card, remove a card, etc.), ; bind has to find out and does things accordingly. ; If this not the binding review for the Transport Driver exit out ifstr(i) $(!NTN_RegBase) != $(TransportProductKeyName) goto successful endif ; Open the Group_Info Key in the registry and set the Registry_Lock Key Set RegKey = "SOFTWARE\3Com\DA\Server\Group_Info" Debug-Output "CreateList: about to open "$(RegKey) OpenRegKey $(!REG_H_LOCAL) "" $(RegKey) $(MAXIMUM_ALLOWED) GroupInfoKey ifstr(i) $(GroupInfoKey) == "" Debug-Output "PassThru: creating "$(RegKey)" key under the Software" CreateRegKey $(!REG_H_LOCAL) {$(RegKey),$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" GroupInfoKey ifstr(i) $(GroupInfoKey) == "" Debug-Output "Create List: failed to open and create the Group_info Key" goto fatalregistry endif endif ;**** Copy TCP info from the Primary Virtuals to the Primary Reals RunProgram ExitCode "" "" $(DASetupNT) t ; ; Open the Linkage Key of the Virtual Protocol and get the Bind Value ; to get the entire list of cards bound to the Virtual Protocol ; Debug-Output "PassThru: Reviewing bindings in "$(TransportLinkageKeyName) OpenRegKey $(!REG_H_LOCAL) "" $(TransportLinkageKeyName) $(MAXIMUM_ALLOWED) TransportLinkageKey ifstr(i) $(TransportLinkageKey) != "" GetRegValue $(TransportLinkageKey) "Bind" BindList Debug-Output "PassThru: BindList: "$(BindList) Set Binding = *($(BindList),4) Debug-Output "PassThru: Binding: "$(Binding) CloseRegKey $(TransportLinkageKey) else Debug-Output "PassThru: failed to open Linkage Key for "$(TransportServiceKeyName) goto fatalregistry endif ; ; Parse the Bindings to create a list of Adapter cards ; set CardList = {} set NICIndex = 0 ForListDo $(Binding) Split-String $($), "\", BindInfo QueryListSize BindListSize $(BindInfo) set CardName = *($(BindInfo),$(BindListSize)) Debug-Output "PassThru: Cardname: "$(CardName) ifstr(i) $(CardList) == {} set CardList = {$(CardName)} else set CardList = >($(CardList),$(CardName)) endif EndForListDo ;************************** Beginning of read in Group_info key from registry ******************* ; Create Group list for holding virtual and real nics in their groups Set MasterGroupList = {} set RealNICsThatNeedAGroupList = {} set VirtualNICsToBeCreatedList = {} set VirtualNICsToBeCreatedVLAN_IDsList = {} set VirtualNICsToBeDeletedList = {} Set GlobalAssignedRealNICList = {} Set GlobalAssignedVirtualNICList = {} Set CreateGroupIndex = 1 BuildNextGroup = + Debug-Output "PassThru: BuildNextGroup: "$(CreateGroupIndex) OpenRegKey $(GroupInfoKey) "" $(CreateGroupIndex) $(MAXIMUM_ALLOWED) GroupKey ifstr(i) $(GroupKey) == "" Debug-Output "PassThru: BuildNextGroup: This group Does not exist in the registry" ; if The group does not exist in the registry create a null entry ifstr(i) $(MasterGroupList) == {} set MasterGroupList = {{0,{},{}}} else set MasterGroupList = >($(MasterGroupList),{0,{},{}}) endif else Debug-Output "PassThru: BuildNextGroup: This group is in the registry" set RealNICList = {} set VirtualNICList = {} set AddedVirtualNIC = NO ;########################## Begin Processing of the Real Adapters Group info key ########################## OpenRegKey $(GroupKey) "" Real_NICs $(MAXIMUM_ALLOWED) GroupRealNICKey ifstr(i) $(GroupRealNICKey) != "" ;Enumerate all of the values in the Registry key, add them to the list and change thier group IDs EnumRegValue $(GroupRealNICKey) GroupRealNICKeyList ForListDo $(GroupRealNICKeyList) Set NICServiceName = *( $($), 1 ) Set RegKey = $(!NTN_ServiceBase)"\"$(NICServiceName)"\Parameters" OpenRegKey $(!REG_H_LOCAL) "" $(RegKey) $(MAXIMUM_ALLOWED) NICServiceNameKey ifstr(i) $(NICServiceNameKey) != "" SetRegValue $(NICServiceNameKey) {"DA_Group_ID",$(NoTitle),$(!REG_VT_DWORD),$(CreateGroupIndex)} ifstr(i) $(RegLastError) != 0 ; if we can't set the DA_Group_ID key we must fail goto fatalregistry endif CloseRegKey $(NICServiceNameKey) ; add this NIC to the Group list for this group ifstr(i) $(RealNICList) == {} set RealNICList = {$(NICServiceName)} else set RealNICList = >($(RealNICList),$(NICServiceName)) endif ; Add this NIC to the global NIC list to match it to the bind enumeration ifstr(i) $(GlobalAssignedRealNICList) == {} set GlobalAssignedRealNICList = {$(NICServiceName)} else set GlobalAssignedRealNICList = >($(GlobalAssignedRealNICList),$(NICServiceName)) endif else ;The card does not exist anymore and needs to be removed from the Group DeleteRegValue $(GroupRealNICKey) *( $($), 1) endif EndForListDo CloseRegKey $(GroupRealNICKey) endif ;########################## End Processing of the Real Adapters Group info key ########################## ;@@@@@@@@@@@@@@@@@@@@@@@@@@ Begin Processing of the Virtual Adapters Group info key @@@@@@@@@@@@@@@@@@@@@@@@@@ OpenRegKey $(GroupKey) "" Virtual_NICs $(MAXIMUM_ALLOWED) GroupVirtualNICKey ifstr(i) $(GroupVirtualNICKey) != "" ;Enumerate all of the values in this group Registry key, add them to the list and change thier group IDs EnumRegValue $(GroupVirtualNICKey) GroupVirtualNICKeyList ForListDo $(GroupVirtualNICKeyList) Set NICServiceName = *( $($), 1 ) Set VLAN_ID = *( $($), 4 ) Set RegKey = $(!NTN_ServiceBase)"\"$(NICServiceName)"\Parameters" OpenRegKey $(!REG_H_LOCAL) "" $(RegKey) $(MAXIMUM_ALLOWED) NICServiceNameKey ifstr(i) $(NICServiceNameKey) != "" ifstr(i) $(RealNICList) != {} ; We need to place the DA_Group_ID key in the registry and place the VNIC in the VirtualNICList SetRegValue $(NICServiceNameKey) {"DA_Group_ID",$(NoTitle),$(!REG_VT_DWORD),$(CreateGroupIndex)} ifstr(i) $(RegLastError) != 0 ; if we can't set the DA_Group_ID key we must fail goto fatalregistry endif CloseRegKey $(NICServiceNameKey) ; add this NIC to the Group list for this group ifstr(i) $(VirtualNICList) == {} set VirtualNICList = {$(NICServiceName)} else set VirtualNICList = >($(VirtualNICList),$(NICServiceName)) endif ; Add this NIC to the global NIC list to match it to the bind enumeration ifstr(i) $(GlobalAssignedVirtualNICList) == {} set GlobalAssignedVirtualNICList = {$(NICServiceName)} else set GlobalAssignedVirtualNICList = >($(GlobalAssignedVirtualNICList),$(NICServiceName)) endif else ; Since there are no real NICs in the group we must place it into the VirtualNICsToBeDeletedList ifstr(i) $(VirtualNICsToBeDeletedList) == {} set VirtualNICsToBeDeletedList = {$(NICServiceName))} else set VirtualNICsToBeDeletedList = >($(VirtualNICsToBeDeletedList),$(NICServiceName)) endif endif else ;The virtual NIC does not exist anymore and needs to be readded or it is a new VLAN ; and needs to be added if there are any real NICs ifstr(i) $(RealNICList) != {} set AddedVirtualNIC = YES ifstr(i) $(VirtualNICsToBeCreatedList) == {} set VirtualNICsToBeCreatedList = {$(CreateGroupIndex)} set VirtualNICsToBeCreatedVLAN_IDsList = {$(VLAN_ID)} else set VirtualNICsToBeCreatedList = >($(VirtualNICsToBeCreatedList),$(CreateGroupIndex)) set VirtualNICsToBeCreatedVLAN_IDsList = >($(VirtualNICsToBeCreatedVLAN_IDsList),$(VLAN_ID)) endif DeleteRegValue $(GroupVirtualNICKey) $(NICServiceName) endif endif EndForListDo CloseRegKey $(GroupVirtualNICKey) endif ;@@@@@@@@@@@@@@@@@@@@@@@@@@ End Processing of the Virtual Adapters Group info key @@@@@@@@@@@@@@@@@@@@@@@@@@ ; ;Finish processing this group by adding it to the master list or Deleteing the Group Key if all of the Real NICs were removed ; CloseRegKey $(GroupKey) ifstr(i) $(RealNICList) != {} ; If there are any real adapters left in the group ifstr(i) $(VirtualNICList) == {} ifstr(i) $(AddedVirtualNIC) == NO ; if there are no Virtual Adapters for this group and none were added Create a new Virtual ifstr(i) $(VirtualNICsToBeCreatedList) == {} set VirtualNICsToBeCreatedList = {$(CreateGroupIndex)} else set VirtualNICsToBeCreatedList = >($(VirtualNICsToBeCreatedList),$(CreateGroupIndex)) endif endif endif ifstr(i) $(MasterGroupList) == {} set MasterGroupList = {{1,$(RealNICList),$(VirtualNICList)}} else set MasterGroupList = >($(MasterGroupList),{1,$(RealNICList),$(VirtualNICList)}) endif Debug-Output "PassThru: Processing RealNICList "$(RealNICList)"..." Debug-Output "PassThru: Processing VirtualNICList "$(VirtualNICList)"..." else Debug-Output "PassThru: There were no real adapters in this group in the registry" ; If there are no real adapters left in the group DeleteRegTree $(GroupInfoKey) $(CreateGroupIndex) ifstr(i) $(MasterGroupList) == {} set MasterGroupList = {{0,{},{}}} else set MasterGroupList = >($(MasterGroupList),{0,{},{}}) endif endif endif ifstr(i) $(CreateGroupIndex) != $(TotalNumberOfGroups) ;If we haven't tried all of the possible groups then goto the top of the loop Set-add CreateGroupIndex = $(CreateGroupIndex), 1 goto BuildNextGroup endif Debug-Output "PassThru: Processing GlobalAssignedRealNICList "$(GlobalAssignedRealNICList)"..." Debug-Output "PassThru: Processing GlobalAssignedVirtualNICList "$(GlobalAssignedVirtualNICList)"..." ;************************** End of read in Group_Info key from registry ***************************** ;************************** Beginning of the section to transverse the Binding tree ***************** ; For each real and virtual NIC process them correctly and place them in the correct list ; Set CardParamKey = "" ForListDo $(CardList) Debug-Output "PassThru: Processing "$($)"..." ifstr(i) $(CardParamKey) != "" CloseRegKey $(CardParamKey) Set CardParamKey = "" endif Set RegKey = $(!NTN_ServiceBase)"\"$($)"\Parameters" OpenRegKey $(!REG_H_LOCAL) "" $(RegKey) $(MAXIMUM_ALLOWED) CardParamKey ifstr(i) $(CardParamKey) == "" CreateRegKey $(!REG_H_LOCAL) {$(RegKey),$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" CardParamKey ifstr(i) $(CardParamKey) == "" Debug-Output "Create List: failed to open or create $($) parameters Key" goto fatalregistry endif endif ; ; Check if this is a virtual adapter that WE created. ; and process it if it is ; Split-String $($), "1234567890", ServiceNameSplitList Ifcontains(i) "DAPassThru" in $(ServiceNameSplitList) ;*********************** Begin Processing of Virtual Adapter in Bind list ****************** Debug-Output "PassThru: Processing "$($)" as a virtual adapter" Set GroupIDRecord = "" GetRegValue $(CardParamKey) "DA_Group_ID" GroupIDRecord ifstr(i) $(GroupIDRecord) == "" Debug-Output "PassThru: Processing "$($)" has no DA_Group_ID" ; The DA_Group_ID Value is not in the registry and we need to remove this Virtual NIC ifstr(i) $(VirtualNICsToBeDeletedList) == {} set VirtualNICsToBeDeletedList = {$($)} else set VirtualNICsToBeDeletedList = >($(VirtualNICsToBeDeletedList),$($)) endif Debug-Output "PassThru: no Group_ID "$($)" added to VirtualNICsToBeDeletedList "$(VirtualNICsToBeDeletedList) goto continueCardList else ;Check if the card is in the GlobalAssignedVirtualNICList Ifcontains(i) $($) not-in $(GlobalAssignedVirtualNICList) ; if the card is not in the list then put it in the VirtualNICsToBeDeletedList ifstr(i) $(VirtualNICsToBeDeletedList) == {} set VirtualNICsToBeDeletedList = {$($)} else set VirtualNICsToBeDeletedList = >($(VirtualNICsToBeDeletedList),$($)) endif Debug-Output "PassThru: not in GlobalAssignedVirtualNICList "$($)" added to VirtualNICsToBeDeletedList "$(VirtualNICsToBeDeletedList) endif goto continueCardList endif ;*********************** End Processing of Virtual Adapter in Bind list ****************** endif ; ; Wedge supports only media type # 1 NICs ; We must see if the NIC is not media Type 1 and if it is not don't touch it ; ; ################### Begin search for non-ethernet NICs #################################### Set MediaTypeRecord = "" GetRegValue $(CardParamKey) "MediaType" MediaTypeRecord ifstr(i) $(MediaTypeRecord) == "" goto continueCardList endif Set MediaTypeValue = *($(MediaTypeRecord),4) ifstr(i) $(MediaTypeValue) != 1 goto continueCardList else-ifstr(i) $(MediaTypeValue) == 1 Set MediaTypeValue = *($(MediaTypeRecord),4) ; ;if ATM mediatype, don't create virtual NIC ; ; Get Title field of mapped Nic: ; Set RealNICCard = $($) Set RegKey = $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards" OpenRegKey $(!REG_H_LOCAL) "" $(RegKey) $(MAXIMUM_ALLOWED) NetCardKey ifstr(i) $(NetCardKey) != "" EnumRegKey $(NetCardKey) NetCardKeyList ForListDo $(NetCardKeyList) Set NetCardNum = *( $($), 1 ) Set RegKey = $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards\"$(NetCardNum) OpenRegKey $(!REG_H_LOCAL) "" $(RegKey) $(MAXIMUM_ALLOWED) NetCardNumKey GetRegValue $(NetCardNumKey) "ServiceName" NetCardServiceNameValue Set NetCardServiceName = *( $(NetCardServiceNameValue), 4 ) ifstr(i) $(NetCardServiceName) == $(RealNICCard) GetRegValue $(NetCardNumKey) "Title" NetCardTitleRec Set NetCardTitle = *( $(NetCardTitleRec), 4 ) endif EndForListDo endif CloseRegKey $(NetCardKey) CloseRegKey $(NetCardNumKey) Split-String $(NetCardTitle), " ", itemizedTitle Ifcontains "ATM" in $(itemizedTitle) goto continueCardList else set anATMCard = 0 ForListDo $(itemizedTitle) Split-String $($), "M", ATMPrependTitle Ifcontains "AT" in $(ATMPrependTitle) set anATMCard = 1 endif Split-String $($), "A", ATMAppendTitle Ifcontains "TM" in $(ATMAppendTitle) set anATMCard = 1 else ForListDo $(ATMAppendTitle) Split-String $($), "M", ATMInsideTitle Ifcontains "T" in $(ATMInsideTitle) set anATMCard = 1 endif EndForListDo endif EndForListDo ifstr(i) $(anATMCard) == "1" goto continueCardList endif endif endif ; ################### End search for non-ethernet NICs #################################### ;*** We now know that this is an EtherNet NIC and a adapter that we support and that ;*** it is not a virtual Adapter that we created ;*********************** Begin Processing of a Real Adapter in Bind list ****************** Debug-Output "PassThru: Processing "$($)" as a real adapter" Set GroupIDRecord = "" GetRegValue $(CardParamKey) "DA_Group_ID" GroupIDRecord ifstr(i) $(GroupIDRecord) == "" ; If the DA_Group_ID Key is not in the registry then we must add this Real Adapter to the ; RealNICsThatNeedAGroupList ifstr(i) $(RealNICsThatNeedAGroupList) == {} set RealNICsThatNeedAGroupList = {$($)} else set RealNICsThatNeedAGroupList = >($(RealNICsThatNeedAGroupList),$($)) endif Debug-Output "PassThru: no group_id key "$($)" added to RealNICsThatNeedAGroupList "$(RealNICsThatNeedAGroupList) goto continueCardList else ;Check if the card is in the GlobalAssignedRealNICList Ifcontains(i) $($) not-in $(GlobalAssignedRealNICList) ; if the card is not in the list then put it in the RealNICsThatNeedAGroupList ifstr(i) $(RealNICsThatNeedAGroupList) == {} set RealNICsThatNeedAGroupList = {$($)} else set RealNICsThatNeedAGroupList = >($(RealNICsThatNeedAGroupList),$($)) endif Debug-Output "PassThru: not in GlobalAssignedRealNICList "$($)" added to RealNICsThatNeedAGroupList "$(RealNICsThatNeedAGroupList) endif goto continueCardList endif ;*********************** End Processing of a Real Adapter in Bind list ****************** continueCardList = + EndForListDo ;************************** end of the section to transverse the Binding tree ***************** ;&&&&&&&&&&&&&&&&&&&&&&&&&& Begining of Processing RealNICsThatNeedAGroupList &&&&&&&&&&&&&&&&& ; For each real NIC in this list we must first find a group that is not in use. Then we ; add it to that group and create a Virtual Adapter to go with it. Set RealNICsThatNeedAGroupListAlreadyProcessed = {} Set RealNICsThatNeedAGroupListAlreadyProcessedDA_Group_IDs = {} Set searchgroupindex = 1 Debug-Output "PassThru: Processing RealNICsThatNeedAGroupList "$(RealNICsThatNeedAGroupList) ForListDo $(RealNICsThatNeedAGroupList) Ifcontains(i) $($) not-in $(RealNICsThatNeedAGroupListAlreadyProcessed) RealSearchNextGroup = + ; &&& find a group that has not already been used in the MasterGroupList ifstr(i) *(*($(MasterGroupList), $(searchgroupindex)),1) == 0 Debug-Output "PassThru: Processing RealSearchNextGroup found empty group "$(searchgroupindex) ifstr(i) $(CardParamKey) != "" CloseRegKey $(CardParamKey) Set CardParamKey = "" endif Set RegKey = $(!NTN_ServiceBase)"\"$($)"\Parameters" OpenRegKey $(!REG_H_LOCAL) "" $(RegKey) $(MAXIMUM_ALLOWED) CardParamKey ifstr(i) $(CardParamKey) == "" CreateRegKey $(!REG_H_LOCAL) {$(RegKey),$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" CardParamKey ifstr(i) $(CardParamKey) == "" Debug-Output "Create List: failed to open and create $($) parameters Key" goto fatalregistry endif endif ; &&& give this Real nic that DA_Group_ID SetRegValue $(CardParamKey) {"DA_Group_ID",$(NoTitle),$(!REG_VT_DWORD),$(searchgroupindex)} ifstr(i) $(RegLastError) != 0 ; if we can't set the DA_Group_ID key we must fail goto fatalregistry endif ;&&& add a virtual nic to the list of virtual Nics to be added ifstr(i) $(VirtualNICsToBeCreatedList) == {} set VirtualNICsToBeCreatedList = {$(searchgroupindex)} else set VirtualNICsToBeCreatedList = >($(VirtualNICsToBeCreatedList), $(searchgroupindex)) endif ;&&& add the Nic to the RealNICsThatNeedAGroupListAlreadyProcessed so it does not get processed again ifstr(i) $(RealNICsThatNeedAGroupListAlreadyProcessed) == {} set RealNICsThatNeedAGroupListAlreadyProcessed = {$($)} set RealNICsThatNeedAGroupListAlreadyProcessedDA_Group_IDs = {$(searchgroupindex)} else set RealNICsThatNeedAGroupListAlreadyProcessed = >($(RealNICsThatNeedAGroupListAlreadyProcessed),$($)) set RealNICsThatNeedAGroupListAlreadyProcessedDA_Group_IDs = >($(RealNICsThatNeedAGroupListAlreadyProcessedDA_Group_IDs),$(searchgroupindex)) endif ; increment to the next group because the registry will not be set yet ifstr(i) $(searchgroupindex) != $(TotalNumberOfGroups) ;If we haven't tried all of the possible groups then goto the top of the loop Set-add searchgroupindex = $(searchgroupindex), 1 else Set searchgroupindex = $(TotalNumberOfGroups) endif else Debug-Output "PassThru: Processing RealSearchNextGroup found used group "$(searchgroupindex) ; the DA_Group_ID is already in use and cannot be used so move to the next DA_Group_ID ifstr(i) $(searchgroupindex) != $(TotalNumberOfGroups) ;If we haven't tried all of the possible groups then goto the top of the loop Set-add searchgroupindex = $(searchgroupindex), 1 goto RealSearchNextGroup else Set searchgroupindex = $(TotalNumberOfGroups) endif endif endif EndForListDo Debug-Output "PassThru: Processing RealNICsThatNeedAGroupList "$(RealNICsThatNeedAGroupList)" -> "$(RealNICsThatNeedAGroupListAlreadyProcessed) ;&&&&&&&&&&&&&&&&&&&&&&&&&& End of Processing RealNICsThatNeedAGroupList &&&&&&&&&&&&&&&&& ;%%%%%%%%%%%%%%%%%%%%%%%%%% Begin of Processing VirtualNICsToBeCreatedList %%%%%%%%%%%%%%%%%%%%% ; For each entry in this list we must create a Virtual Adapter Set VirtualNICsToBeCreatedListAlreadyProcessed = {} Set VirtualNICsToBeCreatedListAlreadyProcessedDA_Group_IDs = {} Set VirtualNICsToBeCreatedListAlreadyProcessedVLAN_IDs = $(VirtualNICsToBeCreatedVLAN_IDsList) Debug-Output "PassThru: Processing VirtualNICsToBeCreatedList "$(VirtualNICsToBeCreatedList) ForListDo $(VirtualNICsToBeCreatedList) ; ; Now add a virtual hardware component to represent the ELAN ; Debug-Output "PassThru: Adding Adapter Hardware Component to Registry" Shell $(UtilityInf), AddHardwareComponent, + $(AdapterProductHardwareName), + $(STF_CONTEXTINFNAME), + $(AdapterProductKeyName) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "PassThru: ShellCode error." goto ShellCodeError endif set RegistryErrorIndex = $($R0) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR Debug-Output "PassThru: Failed to Add Hardware Component" CloseRegKey $($R1) CloseRegKey $($R2) CloseRegKey $($R3) goto fatalregistry endif ; ; Add Basic information for virtual NICs set KeyParameters = $($R3) set KeyAdapterRules = $($R2) set AdapterNumber = $($R4) set VirtNICTitle = "3Com DynamicAccess Virtual NIC" set VirtNICDesc = "3Com DynamicAccess Virtual NIC" set NewValueList = {{Manufacturer,$(NoTitle),$(!REG_VT_SZ),$(Manufacturer)},+ {Title,$(NoTitle),$(!REG_VT_SZ),"["$($R4)"] "$(VirtNICTitle)},+ {Description,$(NoTitle),$(!REG_VT_SZ),$(VirtNICDesc)},+ {ProductName,$(NoTitle),$(!REG_VT_SZ),$(AdapterProductHardwareName)},+ {ServiceName,$(NoTitle),$(!REG_VT_SZ),$($R5)},+ {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}} Shell $(UtilityInf), AddValueList, $($R1), $(NewValueList) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "PassThru: ShellCode error" goto ShellCodeError endif CloseRegKey $($R1) set TempProdName = """"$(AdapterProductHardwareName)$(AdapterNumber)"""" set TempBindForm = $(TempProdName)$(AdapterNetRuleHardwareBindForm) set NewValueList = {{type,$(NoTitle),$(!REG_VT_SZ),$(AdapterNetRuleHardwareType)},+ {bindform,$(NoTitle),$(!REG_VT_SZ),$(TempBindForm)}, + {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(AdapterNetRuleHardwareClass)}, + {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}} Shell $(UtilityInf), AddValueList, $(KeyAdapterRules), $(NewValueList) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "PassThru: ShellCode error." goto ShellCodeError endif set RegistryErrorIndex = $($R0) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR EndWait Debug-Output "PassThru: Registry error: add value list." CloseRegKey $(KeyParameters) CloseRegKey $(KeyAdapterRules) goto fatalregistry endif CloseRegKey $(KeyAdapterRules) Set NewValueList = {{DA_Group_ID,$(NoTitle),$(!REG_VT_SZ),$($)},+ {virtualNicNumber,$(NoTitle),$(!REG_VT_SZ),$(AdapterNumber)},+ {MediaType,$(NoTitle),$(!REG_VT_DWORD),$(MediaTypeValue)}} Shell $(UtilityInf), AddValueList, $(KeyParameters), $(NewValueList) CloseRegKey $(KeyParameters) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "PassThru: ShellCode error." goto ShellCodeError endif ; Create a key of the type ; PassThru2\Parameters\Signature\ ; Set SigRegKey = $(!NTN_ServiceBase)"\"$(AdapterProductHardwareName)$(AdapterNumber)"\Parameters\Signature" Debug-Output "SigRegKey is "$(SigRegKey) CreateRegKey $(!REG_H_LOCAL) {$(SigRegKey),$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" SigKey ifstr(i) $(SigKey) == "" Debug-Output "Failed to create "$(SigRegKey) endif set RegistryErrorIndex = $($R0) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR Debug-Output "PassThru: Registry error: Add value list" goto fatalregistry endif ; ; Note that a virtual adapter was added by adding it to the correct lists so we can add these to ; the registry later ; ifstr(i) $(VirtualNICsToBeCreatedListAlreadyProcessed) == {} set VirtualNICsToBeCreatedListAlreadyProcessed = {$(AdapterProductHardwareName)$(AdapterNumber)} set VirtualNICsToBeCreatedListAlreadyProcessedDA_Group_IDs = {$($)} else set VirtualNICsToBeCreatedListAlreadyProcessed = >($(VirtualNICsToBeCreatedListAlreadyProcessed), $(AdapterProductHardwareName)$(AdapterNumber)) set VirtualNICsToBeCreatedListAlreadyProcessedDA_Group_IDs = >($(VirtualNICsToBeCreatedListAlreadyProcessedDA_Group_IDs), $($)) endif EndForListDo ;%%%%%%%%%%%%%%%%%%%%%%%%%% END of Processing VirtualNICsToBeCreatedList %%%%%%%%%%%%%%%%%%%%% ;@@@@@@@@@@@@@@@@@@@@@@ Begining of Writing the MasterGroupList into the registry @@@@@@@@@@@@@@@@@@@ ; For each group in the MasterGroupList we want to write the information back to the registry Set WriteGroupIndex = 1 WriteNextGroup = + ifstr(i) *(*($(MasterGroupList), $(WriteGroupIndex)),1) == 0 ; if the group is not in the list and the key is in the registry Delete the Whole key becuase it should not be there OpenRegKey $(GroupInfoKey) "" $(WriteGroupIndex) $(MAXIMUM_ALLOWED) GroupKey ifstr $(GroupKey) != "" CloseRegKey $(GroupKey) DeleteRegTree $(GroupInfoKey) $(WriteGroupIndex) endif else OpenRegKey $(GroupInfoKey) "" $(WriteGroupIndex) $(MAXIMUM_ALLOWED) GroupKey ifstr $(GroupKey) == "" CreateRegKey $(GroupInfoKey) {$(WriteGroupIndex),$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" GroupKey ifstr(i) $(GroupKey) == "" Debug-Output "Create List: failed to open and create $(WriteGroupIndex) group Key" goto fatalregistry else SetRegValue $(GroupKey) {DA_Group_Number,$(NoTitle),$(!REG_VT_DWORD),$(WriteGroupIndex)} SetRegValue $(GroupKey) {DA_Group_Name,$(NoTitle),$(!REG_VT_SZ),"Group "$(WriteGroupIndex)} endif endif ;For each Real Nic in the RealNicsInThisGroupList Check if it already in the registry and if it is not, add it set RealNicsInThisGroupList = *(*($(MasterGroupList), $(WriteGroupIndex)),2) OpenRegKey $(GroupKey) "" Real_NICs $(MAXIMUM_ALLOWED) GroupRealNICKey ifstr $(GroupRealNICKey) == "" CreateRegKey $(GroupKey) {Real_NICs,$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" GroupRealNICKey ifstr(i) $(GroupRealNICKey) == "" Debug-Output "Create List: failed to open and create $(WriteGroupIndex) Real_NICs Key" goto fatalregistry endif endif ForListDo $(RealNicsInThisGroupList) set RealNicRecord = "" GetRegValue $(GroupRealNICKey) $($) RealNicRecord ifstr(i) $(RealNicRecord) == "" ;This means that this Real Nic is not in the Group key for this group ; We will add it SetRegValue $(GroupRealNICKey) {$($),$(NoTitle),$(!REG_VT_SZ),""} endif EndForListDo CloseRegKey $(GroupRealNICKey) ;For each Virtual Nic in the VirtualNicsInThisGroupList Check if it already in the registry and if it is not, add it set VirtualNicsInThisGroupList = *(*($(MasterGroupList), $(WriteGroupIndex)),3) OpenRegKey $(GroupKey) "" Virtual_NICs $(MAXIMUM_ALLOWED) GroupVirtualNICKey ifstr $(GroupVirtualNICKey) == "" CreateRegKey $(GroupKey) {Virtual_NICs,$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" GroupVirtualNICKey ifstr(i) $(GroupVirtualNICKey) == "" Debug-Output "Create List: failed to open and create $(WriteGroupIndex) group Key" goto fatalregistry endif endif ForListDo $(VirtualNicsInThisGroupList) set VirtualNicRecord = "" GetRegValue $(GroupVirtualNICKey) $($) VirtualNicRecord ifstr(i) $(VirtualNicRecord) == "" ;This means that this Virtual Nic is not in the Group key for this group ; We will add it SetRegValue $(GroupVirtualNICKey) {$($),$(NoTitle),$(!REG_VT_SZ),""} endif EndForListDo CloseRegKey $(GroupVirtualNICKey) CloseRegKey $(GroupKey) endif ifstr(i) $(WriteGroupIndex) != $(TotalNumberOfGroups) ;If we haven't tried all of the possible groups then goto the top of the loop Set-add WriteGroupIndex = $(WriteGroupIndex), 1 goto WriteNextGroup endif ;@@@@@@@@@@@@@@@@@@@@@@ END of Writing the MasterGroupList into the registry @@@@@@@@@@@@@@@@@@@@@@@@ ;!!!!!!!!!!!!!!!!!!!!!! Beginging of writing RealNICsThatNeedAGroupListAlreadyProcessed into the registry !!!!!!!!!!!!!!!!!!! ; For each real NIC in this list we must create a group key in the registry and add the information to that key ForListDo $(RealNICsThatNeedAGroupListAlreadyProcessed) OpenRegKey $(GroupInfoKey) "" *($(RealNICsThatNeedAGroupListAlreadyProcessedDA_Group_IDs), $(#)) $(MAXIMUM_ALLOWED) GroupKey ifstr $(GroupKey) != "" ;This should never happen but if it does we should Delete the Key Debug-Output "The Group key in the registry is the same that was given to a New NIC found" CloseRegKey $(GroupKey) DeleteRegTree $(GroupInfoKey) *($(RealNICsThatNeedAGroupListAlreadyProcessedDA_Group_IDs), $(#)) endif ;!!!Create the Key and Place the Basic Group Informatin into the registry CreateRegKey $(GroupInfoKey) {*($(RealNICsThatNeedAGroupListAlreadyProcessedDA_Group_IDs), $(#)),$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" GroupKey ifstr(i) $(GroupKey) == "" Debug-Output "Create List: failed to open and create *($(RealNICsThatNeedAGroupListAlreadyProcessedDA_Group_IDs), $(#)) GroupKey" goto fatalregistry else SetRegValue $(GroupKey) {DA_Group_Number,$(NoTitle),$(!REG_VT_DWORD),*($(RealNICsThatNeedAGroupListAlreadyProcessedDA_Group_IDs), $(#))} SetRegValue $(GroupKey) {DA_Group_Name,$(NoTitle),$(!REG_VT_SZ),"Group "*($(RealNICsThatNeedAGroupListAlreadyProcessedDA_Group_IDs), $(#))} endif ;Place the Real NIC in the Registry OpenRegKey $(GroupKey) "" Real_NICs $(MAXIMUM_ALLOWED) GroupRealNICKey ifstr $(GroupRealNICKey) == "" CreateRegKey $(GroupKey) {Real_NICs,$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" GroupRealNICKey ifstr(i) $(GroupKey) == "" Debug-Output "Create List: failed to open and create $(WriteGroupIndex) group Key" goto fatalregistry endif endif SetRegValue $(GroupRealNICKey) {$($),$(NoTitle),$(!REG_VT_SZ),""} CloseRegKey $(GroupRealNICKey) CloseRegKey $(GroupKey) EndForListDo ;!!!!!!!!!!!!!!!!!!!!!! END of writing RealNICsThatNeedAGroupListAlreadyProcessed into the registry !!!!!!!!!!!!!!!!!!! ;%%%%%%%%%%%%%%%%%%%%%%%%%% Beginging of writing VirtualNICsToBeCreatedListAlreadyProcessed into the registry %%%%%%%%%%%%%%%%%%%%% ; For each virtual NIC that was created we must add the information to the registry Debug-Output "PassThru: adding to reg VirtualNICsToBeCreatedListAlreadyProcessed "$(VirtualNICsToBeCreatedListAlreadyProcessed) ForListDo $(VirtualNICsToBeCreatedListAlreadyProcessed) OpenRegKey $(GroupInfoKey) "" *($(VirtualNICsToBeCreatedListAlreadyProcessedDA_Group_IDs), $(#)) $(MAXIMUM_ALLOWED) GroupKey ifstr $(GroupKey) == "" ;This should never happen but if it does we shouldDelete the Virtual NIC Debug-Output "The Group key in the registry we were going to add a virtual NIC to does not exist, so we are deleting this VNIC" ifstr(i) $(VirtualNICsToBeDeletedList) == {} set VirtualNICsToBeDeletedList = {$($)} else set VirtualNICsToBeDeletedList = >($(VirtualNICsToBeDeletedList),$($)) endif else ;Place the Virtual NIC in the Registry OpenRegKey $(GroupKey) "" Virtual_NICs $(MAXIMUM_ALLOWED) GroupVirtualNICKey ifstr $(GroupVirtualNICKey) == "" CreateRegKey $(GroupKey) {Virtual_NICs,$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" GroupVirtualNICKey ifstr(i) $(GroupVirtualNICKey) == "" Debug-Output "Create List: failed to open and create $(WriteGroupIndex) group Key" goto fatalregistry endif endif set VirtualNicRecord = "" GetRegValue $(GroupVirtualNICKey) $($) VirtualNicRecord Debug-Output "PassThru: $(VirtualNicRecord) $($)" ifstr(i) $(VirtualNicRecord) == "" ;This means that this Virtual Nic is not in the Group key for this group and we should add it Debug-Output "PassThru: adding "$($)" to group "*($(VirtualNICsToBeCreatedListAlreadyProcessedDA_Group_IDs), $(#))" in reg" SetRegValue $(GroupVirtualNICKey) {$($),$(NoTitle),$(!REG_VT_DWORD),*($(VirtualNICsToBeCreatedListAlreadyProcessedVLAN_IDs), $(#))} endif CloseRegKey $(GroupVirtualNICKey) CloseRegKey $(GroupKey) endif EndForListDo ;%%%%%%%%%%%%%%%%%%%%%%%%%% END of writing VirtualNICsToBeCreatedListAlreadyProcessed into the registry %%%%%%%%%%%%%%%%%%%%% ;************************ Begining of Processing VirtualNICsToBeDeletedList ********************** ; For each real NIC in this list we must first find a group that is not in use. Then we ; add it to that group and create a Virtual Adapter to go with it. Set VirtualNICsToBeDeletedListAlreadyProcessed = {} Debug-Output "PassThru: Processing VirtualNICsToBeDeletedList "$(VirtualNICsToBeDeletedList) ForListDo $(VirtualNICsToBeDeletedList) Ifcontains(i) $($) not-in $(VirtualNICsToBeCreatedListAlreadyProcessed) Ifcontains(i) $($) not-in $(VirtualNICsToBeDeletedListAlreadyProcessed) Set RegKey = $(!NTN_ServiceBase)"\"$($)"\Parameters\" OpenRegKey $(!REG_H_LOCAL) "" $(RegKey) $(MAXIMUM_ALLOWED) virtualNicParams ifstr(i) $(virtualNicParams) != "" ; The virtual Nic is really there so remove it GetRegValue $(virtualNicParams) "virtualNicNumber" virtualNicNumberIndex set virtualNicNumberValue = *($(virtualNicNumberIndex),4) Set RegKey = $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards\"$(virtualNicNumberValue) Shell $(UtilityInf), RemoveHardwareComponent,+ $(Manufacturer),$(AdapterProductSoftwareName),$(RegKey) ;*** add this NIC to the Already Processed List ifstr(i) $(VirtualNICsToBeDeletedListAlreadyProcessed) == {} set VirtualNICsToBeDeletedListAlreadyProcessed = {$($)} else set VirtualNICsToBeDeletedListAlreadyProcessed = >($(VirtualNICsToBeDeletedListAlreadyProcessed), $($)) endif endif endif endif EndForListDo ;************************ END of Processing VirtualNICsToBeDeletedList ********************** ; update the Group_Info key with all the latest info RunProgram ExitCode "" "" $(DASetupNT) g ; if this is not during DA install check on whether to disable review bindings and cause extra bindings Set RegKey = $(TransportParamKeyName) OpenRegKey $(!REG_H_LOCAL) "" $(RegKey) $(MAXIMUM_ALLOWED) DAParamKey set InProcessRec = "" GetRegValue $(DAParamKey) $(InstallInProcess) InProcessRec ifstr(i) $(InProcessRec) == "" ; This is not during install so check ;Disable the protocols bindings on the first pass but not on the second set disableBindingRec = "" GetRegValue $(DAParamKey) IsSecondPass disableBindingRec ifstr(i) $(disableBindingRec) == "" ;This is first pass and so we will disable bindings and create key SetRegValue $(DAParamKey) {"IsSecondPass",$(NoTitle),$(!REG_VT_DWORD),1} RunProgram ExitCode "" "" $(DisableOtherReviewBindings) 4 else ;This is the second pass so remove the IsSecondPass value DeleteRegValue $(DAParamKey) "IsSecondPass" RunProgram ExitCode "" "" $(DisableOtherReviewBindings) 5 endif ; ; If we added or removed a virtual adapter, tell NCPA to review bindings ; again after this completes. ; ifstr(i) $(VirtualNICsToBeCreatedListAlreadyProcessed) == {} ifstr(i) $(GlobalAssignedVirtualNICList) == {} ;If all of the Virtual NICs were deleted we should remove DA goto LastCardRemoved endif endif GetRegValue $(DAParamKey) $(StartDetachedText) StartDetachedRec ifstr(i) $(StartDetachedRec) == "" SetRegValue $(DAParamKey) {$(StartDetachedText),$(NoTitle),$(!REG_VT_DWORD),1} StartDetachedProcess STATUS_SUCCESSFUL "" "" $(DASetupNT) 1 endif NoExtraReviewBinding =+ endif goto successful deinstall =+ ; ; To synch TCP/IP configuration again with current setup. ; RunProgram ExitCode "" "" $(DASetupNT) t ; Done synch TCP/IP Split-String $(!NTN_RegBase), "\", RegLoc Ifcontains(i) "NetworkCards" in $(RegLoc) ; Removing just the virtual NIC is not allowed: ;dialog#1 Set DlgText = "If you want to uninstall 3Com's DynamicAccess software, select the DAPassThru Driver Transport, on the Protocol Page, and click Remove." Shell "Subroutn.Inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" $(DlgText) ifint $($ShellCode) != $(!SHELL_CODE_OK) set RegistryErrorIndex = ERROR endif Return STATUS_SUCCESSFUL endif Ifcontains(i) "DAPassThru" in $(RegLoc) ; Removing just the virtual NIC is not allowed: ;dialog#2 Set DlgText = "What do you want to do? (1) If you want to remove 3Com's DynamicAccess software, select DAPassThru Transport protocol, on the Protocol Page, and click Remove. (2) If you want to remove your Adapter, select the adapter and click Remove. Do no remove the 3Com's virtual NIC." Shell "Subroutn.Inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" $(DlgText) ifint $($ShellCode) != $(!SHELL_CODE_OK) set RegistryErrorIndex = ERROR endif Return STATUS_SUCCESSFUL endif ;dialog0 Set DlgText = "You are about to uninstall the 3Com DynamicAccess Protocol!" Shell "Subroutn.Inf" SetupMessage $(!STF_LANGUAGE) "WARNING" $(DlgText) ifint $($ShellCode) != $(!SHELL_CODE_OK) set RegistryErrorIndex = ERROR endif ifstr $($R1) == "CANCEL" Return STATUS_SUCCESSFUL endif LastCardRemoved =+ ; Open the Linkage Key of the Virtual Protocol and get the Bind Value ; to get the entire list of cards bound to the Virtual Protocol ; OpenRegKey $(!REG_H_LOCAL) "" $(TransportLinkageKeyName) $(MAXIMUM_ALLOWED) TransportLinkageKey ifstr(i) $(TransportLinkageKey) != "" GetRegValue $(TransportLinkageKey) "Bind" BindList Debug-Output "PassThru: Remove: BindList: "$(BindList) Set Binding = *($(BindList),4) Debug-Output "PassThru: Remove: Binding: "$(Binding) CloseRegKey $(TransportLinkageKey) else Debug-Output "PassThru: failed to open key "$(TransportLinkageKeyName) goto skipRemoveBindings endif set CardList = {} set CreateCardList = {} ForListDo $(Binding) Split-String $($), "\", BindInfo QueryListSize BindListSize $(BindInfo) set CardName = *($(BindInfo),$(BindListSize)) Debug-Output "PassThru: Remove: Cardname: "$(CardName) ifstr(i) $(CardList) == {} set CardList = {$(CardName)} else set CardList = >($(CardList),$(CardName)) endif EndForListDo Debug-Output "PassThru: Cardlist: "$(CardList) ; ; For each real LAN adapter in the list... ; ForListDo $(CardList) Set RegKey = $(!NTN_ServiceBase)"\"$($)"\Parameters" OpenRegKey $(!REG_H_LOCAL) "" $(RegKey) $(MAXIMUM_ALLOWED) NICparamkey ifstr(i) $(NICparamkey) != "" Split-String $($), "1234567890", ServiceNameSplitList Ifcontains(i) "DAPassThru" in $(ServiceNameSplitList) ;For each virtual adapter remove its Hardware component and delete its ; mappedNics GetRegValue $(NICparamkey) "virtualNicNumber" VirtNICNoRec Set VirtNICNo = *($(VirtNICNoRec),4) Set AdapterRegBase = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\"$(VirtNICNo) Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), + $(AdapterProductSoftwareName), $(AdapterRegBase) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "PassThru: ShellCode error" goto ShellCodeError endif else ;Remove the FT LB network address set DANetworkAddressRec = "" GetRegValue $(NICparamkey) "DA_NETWORKADDRESS" DANetworkAddressRec ifstr(i) $(DANetworkAddressRec) != "" set DANetworkAddressValue = *($(DANetworkAddressRec),4) SetRegValue $(NICparamkey) {"NETWORKADDRESS",$(NoTitle),$(!REG_VT_SZ),$(DANetworkAddressValue)} DeleteRegValue $(NICparamkey) "DA_NETWORKADDRESS" else set NetworkAddressRec = "" GetRegValue $(NICparamkey) "NETWORKADDRESS" NetworkAddressRec ifstr(i) $(NetworkAddressRec) != "" set NetworkAddressValue = *($(NetworkAddressRec),4) ifstr(i) $(NetworkAddressValue) == "00A024CC6981" DeleteRegValue $(NICparamkey) "NETWORKADDRESS" endif endif endif ;** remove the DA registry values under the real NIC DeleteRegValue $(NICparamkey) "DA_Group_ID" DeleteRegValue $(NICparamkey) "DA_Primary_NIC" endif CloseRegKey $(NICparamkey) endif continueRemoveBindings =+ EndForListDo skipRemoveBindings =+ Set RegKey = "SOFTWARE\3Com\DA" OpenRegKey $(!REG_H_LOCAL) "" $(RegKey) $(MAXIMUM_ALLOWED) SoftwareDAKey ifstr(i) $(SoftwareDAKey) != "" Debug-Output "PassThru: about to delete $(RegKey)\Server" DeleteRegTree $(SoftwareDAKey) "Server" CloseRegKey $(SoftwareDAKey) else Debug-Output "PassThru: Failed to delete $(RegKey)\Server" endif Debug-Output "PassThru: Removing "$(TransportProductSoftwareName)" Software Component from Registry" Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), + $(TransportProductSoftwareName) RemovePassThru = + Set RegKey = $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion" OpenRegKey $(!REG_H_LOCAL) "" $(RegKey) $(MAXIMUM_ALLOWED) NTVersionKey GetRegValue $(NTVersionKey) "CurrentVersion" NTVersionRec Set NTVersion = *($(NTVersionRec),4) CloseRegKey $(NTVersionKey) RunProgram ExitCode "" "" $(DASetupNT) d AddfileToDeleteList $(ProductSoftwareImagePathTxt) AddfileToDeleteList $(ProductMiniportSoftwareImagePathTxt) AddfileToDeleteList $(PostProcessInf) AddfileToDeleteList $(DASetupNT) AddfileToDeleteList $(SetupINFName) AddfileToDeleteList $(DASmartN) AddfileToDeleteList $(DA15CFGEXE) AddfileToDeleteList $(DASERVERCPL) AddfileToDeleteList $(DASERVERHLP) ;AddfileToDeleteList $(DA15CFGINI) AddfileToDeleteList $(DACFGHLP) ;AddfileToDeleteList $(DACFGCPL) ;done in restore pacecfg in .c program AddfileToDeleteList $(DACFGCPLSAV) ;AddfileToDeleteList $(DACFGAPPLST) Set RegKey = $(!NTN_ServiceBase) OpenRegKey $(!REG_H_LOCAL) "" $(RegKey) $(MAXIMUM_ALLOWED) PassThru_Key ifstr(i) $(PassThru_Key) != "" Debug-Output "PassThru: about to delete "$(RegKey) DeleteRegTree $(PassThru_Key) $(AdapterProductSoftwareName) CloseRegKey $(PassThru_Key) else Debug-Output "PassThru: Failed to delete "$(RegKey) endif goto end configure =+ set Error = "To configure the server features you must close the Network Control Panel, select start, settings, control panel then double click on the DynamicAccess Server Software Icon." set from = end goto nonfatalinfo update = + set Error = "Update Not Implemented, Remove and Reinstall" set from = end goto nonfatalinfo 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 = + 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 deinstall endif goto end end = + goto term term = + Return $(CommonStatus) [StripTrailSlash] Split-String $($0) "\" InList QueryListSize InListSize, $(InList) Ifint $(InListSize) <= 1 Return $($0) Endif Set NewString = "" ForListDo $(InList) ifint $(#) < $(InListSize) Set NewString = $(NewString)$($) else-ifstr $($) != "\" Set NewString = $(NewString)$($) endif EndForListDo Return $(NewString) [Install-Option] set STF_VITAL = "" ifstr(i) $(AddCopy) == "YES" Debug-Output "PassThru: oemsetup.inf: PlatformDir "$(PlatformDir) ;AddSectionFilesToCopyList Files-Platform-Drivers $(PlatformDir) $(!STF_WINDOWSSYSPATH)\drivers AddSectionFilesToCopyList Files-Platform-Drivers $(InfDir) $(!STF_WINDOWSSYSPATH)\drivers AddSectionFilesToCopyList Post-Process-Program $(InfDir) $(!STF_WINDOWSSYSPATH) AddSectionFilesToCopyList Files-Platform-Utility $(InfDir) $(!STF_WINDOWSSYSPATH) AddSectionFilesToCopyList Files-Inf $(InfDir) $(!STF_WINDOWSSYSPATH) 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-Platform-Drivers $(PlatformDir) $(!STF_WINDOWSSYSPATH)\drivers AddSectionFilesToCopyList Files-Platform-Drivers $(InfDir) $(!STF_WINDOWSSYSPATH)\drivers AddSectionFilesToCopyList Files-Platform-Utility $(InfDir) $(!STF_WINDOWSSYSPATH) AddSectionFilesToCopyList Files-Inf $(InfDir) $(!STF_WINDOWSSYSPATH) exit [Source Media Descriptions] 1 = "DAPassThru Driver Installation Disk", TAGFILE = disk1 [ProductType] STF_PRODUCT = Winnt [Files-Inf] ;1, oemsetup.INF, SIZE=999, RENAME=$(!UG_Filename) 1, oemsetup.INF, SIZE=999 [Files-Platform-Drivers] ;1, passthru.SYS , SIZE=999 1, DAMINI.SYS , SIZE=999 1, DAPROT.SYS, SIZE=999 [Files-Platform-Utility] 1, DASetup.EXE, SIZE=999 1, DA15cfg.EXE, SIZE=999 1, DAcfg.hlp, SIZE=999 1, DASmartN.EXE, SIZE=999 1, DAServer.hlp, SIZE=999 1, DAServer.cpl, SIZE=999 ;1, DA15cfg.INI, SIZE=999 ;1, Pacecfg.cpl, SIZE=999 ;1, DAcfgApp.lst, SIZE=999 ;1, DADeinstallNT.EXE, SIZE=999 [Post-Process-Program] 1, PRUN.INF, SIZE=999 [DialogConstantsENG] Help = "&Help" Exit = "Cancel" OK = "OK" HelpContext = "" Continue = "Continue" Cancel = "Cancel"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.