OEMSETUP.INF Driver File Contents (3c98x.zip)

	
[IntstallOptions]
 Install_3NIC_Diag = "NO"
 Install_Shortcuts = "NO"
 Install_Installer = "NO"	
 Install_On_Server = "YES"


[Identification]
 OptionType = NetAdapter


[PlatformsSupported]
 ISA
 EISA
 PCI
 "Jazz-Internal Bus"

[Options]
 3C90X 
 3C980


[DriverConstantsNDIS3]
 ND3NetEventDLL 		= "%SystemRoot%\System32\netevent.dll;%SystemRoot%\System32\drivers\el98xn3.sys"
 ND3ProdSWImagePath 		= "%SystemRoot%\System32\drivers\el98xn3.sys"
 ND3ProdSWUpgradePath 		= "\SystemRoot\System32\drivers\el98xn3.sys"


[DriverConstantsNDIS4]
 ND4NetEventDLL 		= "%SystemRoot%\System32\netevent.dll;%SystemRoot%\System32\drivers\el98xn4.sys"
 ND4ProdSWImagePath 		= "%SystemRoot%\System32\drivers\el98xn4.sys"
 ND4ProdSWUpgradePath 		= "\SystemRoot\System32\drivers\el98xn4.sys"


;**************************************************************************************************


[FileConstants]
 UtilityInf 			= "UTILITY.INF"
 subroutineinf 			= "SUBROUTN.INF"
 SWType 			= "driver"
 Exit_Code 			= 0
 IoLogMsgDLL 			= "%SystemRoot%\System32\IoLogMsg.dll"
 NetworkCardsKey 		= $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards\"
 FunctionTitle 			= "3Com 3C980x Adapter Card Setup"
 ; *** 3CNUMBER 		= "3C90X"
 3CNUMBER	 		= "3C980X"
 GROUP_NAME 			= "3Com EtherLink PCI NIC" 
 ProdHWXXXXXTitle 		= "3Com EtherLink PCI NIC "
 ProdHWXXXXXDesc 		= "3Com EtherLink PCI NIC "
 Manufacturer 			= "3Com"
 EtherDiskVersion 		= "2.1"
 ProdMajorVer 			= "2"
 ProdMinorVer 			= "1"
 ProdReview 			= "1"
 ProdVer 			= $(ProdMajorVer)"."$(ProdMinorVer) 
 ProdSWDesc 			= "3Com 3C98x 10/100 Server NIC Driver"
 ProdSWTitle 			= "3Com 3C98x 10/100 Server NIC Driver"
 ProdSWName 			= "EL980N4"
 NetRuleSWType 			= "EL980N4Sys ndisDriver EL980N4Driver"
 NetRuleSWUse 			= $(SWType)
 NetRuleSWBindForm 		= """EL980N4Sys"" yes no container"
 NetRuleSWClass 		= {"El98xDriver basic"}
 NetRuleSWBindable 		= {"EL980N4Driver El98xAdapter non exclusive 100"}
 ProdHWName 			= "EL980N4"
 NetRuleHWBindForm 		= " yes yes container"
 NetRuleHWType 			= "EL980N4 El98xAdapter"
 NetRuleHWClass 		= {"EL980N4Adapter basic"}
 ProdKeyName 			= $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(ProdSWName)"\CurrentVersion"
 ParamKeyName 			= $(!NTN_ServiceBase)"\"$(ProdHWName)"\Parameters"
 Hardware_Default 		= "HardwareDefault"
 DiagExe 			= TCAUDIAG
 NICPROP 			= NICPROP
 ; *** ??? next line
 DIAGCARDTYPE 			= "TCAUM90X"
 TrayIconExe 			= TCAUDIAG
 InstallerExe 			= TCAUDIAG
 UnInstallerEXE 		= UN3C90XA
 

;--------------------these NICs use old NDIS4 driver --------------------------------

 ProdHW38912Title = "3Com EtherLink Server 10/100 PCI NIC (3C980B-TX)"
 ProdHW38912Desc = "3Com EtherLink Server 10/100 PCI NIC (3C980B-TX)"

 ProdHW38917Title = "3Com EtherLink Server 10/100 PCI NIC (3C980C-TXM)"
 ProdHW38917Desc = "3Com EtherLink Server 10/100 PCI NIC (3C980C-TXM)"

 ProdHW38917HydraATitle = "3Com EtherLink Server 10/100 Dual Port A"
 ProdHW38917HydraBTitle = "3Com EtherLink Server 10/100 Dual Port B"
 ProdHW38917HydraDescription = "3Com EtherLink Server 10/100 PCI Dual Port Network Interface Card featuring DynamicAccess technology with Advanced Server Features."

;------------------------------------------------------------------------------------------------
 

; List of NICs
 CFIDList = {38912, 38917}
 AdapterType = 5


[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
 NT350VersionConstant 		= "3.50"
 NT310VersionConstant 		= "3.10"
 NT400VersionConstant 		= "(4.0)"
 INF_PROCESSER 			= "I386"
 PythonPresent			= "FALSE"
 LastCardRemoved 		= "TRUE"


[date]
 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)

 	ifstr(i) $($1) == ""
 		goto returnoptions
 	endif

 	set PlatformList = ^(PlatformsSupported, 1)

 	Ifcontains(i) $($1) in $(PlatformList)
 		goto returnoptions
 	else
 		set Status = STATUS_NOTSUPPORTED
 		goto finish_ReturnOptions
 	endif
 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)


[checkFileExist]
 DiagFound 			= {} ? $(!LIBHANDLE) FindFileInstances $(!STF_WINDOWSSYSPATH)"\tcaudiag.exe" 
















    		OpenRegKey $(!REG_H_LOCAL) "" "Software\Microsoft\Windows NT\CurrentVersion\NetworkCards" $(!REG_KEY_ALL_ACCESS) SWNWCardsKey
    		ifstr(i) $(SWNWCardsKey) != ""
      			EnumRegKey $(SWNWCardsKey) DriverList
      
				ForListDo $(DriverList)

        		set Driver = *($($), 1)
        		OpenRegKey $(!REG_H_LOCAL) "" "Software\Microsoft\Windows NT\CurrentVersion\NetworkCards\"$(Driver) +
          		$(!REG_KEY_ALL_ACCESS) DriverRootKey

        		Ifstr(i) $(DriverRootKey) != "" ; key exists
          			GetRegValue $(DriverRootKey) "ProductName" CurrentProductName

          			ifstr(i) (*($(CurrentProductName),4)) == "(El980n4)"
            				OpenRegKey $(!REG_H_LOCAL) "" "Software\Microsoft\Windows NT\CurrentVersion\NetworkCards\"$(Driver)"\NetRules" +
              				$(!REG_KEY_ALL_ACCESS) DriverNetRulesKey
	
            				Ifstr(i) $(DriverNetRulesKey) != "" ; key exists
              					SetRegValue $(DriverNetRulesKey) {"InfName" , 0, $(!REG_VT_SZ), $(NewINFFileName)}
            				Endif


            				;;; Change to support I.B.M. hot plug
							SetRegValue $(DriverRootKey) {"ProductName" , 0, $(!REG_VT_SZ), "EL980N4"}
							GetRegValue $(DriverRootKey) "ServiceName" CurrentServiceNameString
							set CurrentServiceName = *($(CurrentServiceNameString), 4)
							Split-String "$(CurrentServiceName)" "n" ServiceNameTokens
							set ServiceSuffix = *($(ServiceNameTokens), 3)
							set FullServiceName = "EL980N"$(ServiceSuffix)
							SetRegValue $(DriverRootKey) {"ServiceName", 0, $(!REG_VT_SZ), $(FullServiceName)}
							;;; End of changes to support hot plug

							;;; Change the description and title fields
							GetRegValue $(DriverRootKey) "Description" CurrentDescriptionString           
							GetRegValue $(DriverRootKey) "Title" CurrentTitleString
							set CurrentDescription = *($(CurrentDescriptionString), 4)
							set CurrentTitle = *($(CurrentTitleString), 4)

							ifstr(i) $(CurrentDescription) == "10/100Mb PCI"
								SetRegValue $(DriverRootKey) {"Description", 0, $(!REG_VT_SZ), "3C980B-TX Adapter w/ Server Software ver. 2.0"}
								Split-String "$(CurrentTitle)" "m" TitleTokens
								set TitlePrefix = *($(TitleTokens), 1)
								set FullTitle = $(TitlePrefix)"m EtherLink Server 10/100 PCI NIC"
								SetRegValue $(DriverRootKey) {"Title", 0, $(!REG_VT_SZ), $(FullTitle)}
							Endif
					Endif
				Endif

				CloseRegKey $(DriverRootKey)
				CloseRegKey $(DriverNetRulesKey)
				
				EndForListDo
			endif


			CloseRegKey $(SWNWCardsKey)
			OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services" $(!REG_KEY_ALL_ACCESS) ServicesKey
		    ifstr(i) $(ServicesKey) != ""
				EnumRegKey $(ServicesKey) DriverList

				ForListDo $(DriverList)

					set Driver = *($($), 1)
					OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services\"$(Driver)"\Parameters" +
					$(!REG_KEY_ALL_ACCESS) DriverKey

					Ifstr(i) $(DriverKey) != "" ; key exists
						  Split-String "$(Driver)" "n" DriverTokens
						  set DriverName = *($(DriverTokens), 1)
						  
						  ifstr(i) $(Driver) != "El980n4"
							
								ifstr(i) $(DriverName) == "El980"

								  ;;; This is a 980-Series 3Com driver. The name must be changed to uppercase
								  ;;; Changes to support hot plug for I.B.M.
								  ;;; First, save the old settings for this driver instance

								  OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services\"$(Driver) +
								  $(!REG_KEY_ALL_ACCESS) DriverInstanceKey

										Ifstr(i) $(DriverInstanceKey) != "" ; key exists
											GetRegValue $(DriverInstanceKey) "ErrorControl" SavedErrorControl
											GetRegValue $(DriverInstanceKey) "Start"        SavedStart
											GetRegValue $(DriverInstanceKey) "Type"         SavedType

											OpenRegKey $(DriverInstanceKey) "" "Linkage" $(!REG_KEY_ALL_ACCESS) DriverLinkageKey

											Ifstr(i) $(DriverLinkageKey) != "" ; key exists
												  GetRegValue $(DriverLinkageKey) "Bind"   SavedBind
												  GetRegValue $(DriverLinkageKey) "Export" SavedExport
												  GetRegValue $(DriverLinkageKey) "Route"  SavedRoute

												  OpenRegKey $(DriverLinkageKey) "" "Disabled" $(!REG_KEY_ALL_ACCESS) DriverLinkageDisabledKey

												  Ifstr(i) $(DriverLinkageDisabledKey) != "" ; key exists
													GetRegValue $(DriverLinkageDisabledKey) "Bind"   SavedDisabledBind
													GetRegValue $(DriverLinkageDisabledKey) "Export" SavedDisabledExport
													GetRegValue $(DriverLinkageDisabledKey) "Route"  SavedDisabledRoute
												  endif
											endif
                
											OpenRegKey $(DriverInstanceKey) "" "Parameters" $(!REG_KEY_ALL_ACCESS) DriverParametersKey

											Ifstr(i) $(DriverParametersKey) != "" ; key exists

												  GetRegValue $(DriverParametersKey) "ADAPTERNUMBER"    SavedADAPTERNUMBER
												  GetRegValue $(DriverParametersKey) "AdapterSeq"       SavedAdapterSeq
												  GetRegValue $(DriverParametersKey) "Base_Mac_Address" SavedBaseMacAddress
												  GetRegValue $(DriverParametersKey) "BusNumber"        SavedBusNumber
												  GetRegValue $(DriverParametersKey) "BusType"          SavedBusType
												  GetRegValue $(DriverParametersKey) "CardType"         SavedCardType
												  GetRegValue $(DriverParametersKey) "ErrorTolerance"   SavedErrorTolerance
												  GetRegValue $(DriverParametersKey) "MediaType"        SavedMediaType
												  GetRegValue $(DriverParametersKey) "Network_Address"  SavedNetworkAddress
												  GetRegValue $(DriverParametersKey) "SamplingRatio"    SavedSamplingRatio
												  GetRegValue $(DriverParametersKey) "SamplingWindow"   SavedSamplingWindow
												  GetRegValue $(DriverParametersKey) "SelfCheckLevel"   SavedSelfCheckLevel
												  GetRegValue $(DriverParametersKey) "Slot"             SavedSlot
												  GetRegValue $(DriverParametersKey) "SlotNumber"       SavedSlotNumber

												  OpenRegKey $(DriverParametersKey) "" "Tcpip" $(!REG_KEY_ALL_ACCESS) DriverTCPIPKey
												  Ifstr(i) $(DriverTCPIPKey) != "" ; key exists

														GetRegValue $(DriverTCPIPKey) "DefaultGateway"        SavedDefaultGateway
														GetRegValue $(DriverTCPIPKey) "EnableDHCP"            SavedEnableDHCP
														GetRegValue $(DriverTCPIPKey) "IPAddress"             SavedIPAddress
														GetRegValue $(DriverTCPIPKey) "IPInterfaceContext"    SavedIPInterfaceContext
														GetRegValue $(DriverTCPIPKey) "IPInterfaceContextMax" SavedIPInterfaceContextMax
														GetRegValue $(DriverTCPIPKey) "LLInterface"           SavedLLInterface
														GetRegValue $(DriverTCPIPKey) "PPTPFiltering"         SavedPPTPFiltering
														GetRegValue $(DriverTCPIPKey) "RawIPAllowedProtocols" SavedRawIPAllowedProtocols
														GetRegValue $(DriverTCPIPKey) "SubnetMask"            SavedSubnetMask
														GetRegValue $(DriverTCPIPKey) "TCPAllowedPorts"       SavedTCPAllowedPorts
														GetRegValue $(DriverTCPIPKey) "UDPAllowedPorts"       SavedUDPAllowedPorts
														GetRegValue $(DriverTCPIPKey) "UseZeroBroadcast"      SavedUseZeroBroadcast
												  endif
											endif
										endif

								  CloseRegKey $(DriverTCPIPKey)
								  CloseRegKey $(DriverParametersKey)
								  CloseRegKey $(DriverLinkageDisabledKey)
								  CloseRegKey $(DriverLinkageKey)
								  CloseRegKey $(DriverInstanceKey)

								  ;;; Delete this driver instance and recreate it with all caps

								  DeleteRegTree $(ServicesKey) $(Driver)

								  ;; Convert the driver instance name to all caps

								  Split-String "$(Driver)" "n" DriverNameTokens
								  set DriverNameSuffix = *($(DriverNameTokens), 3)
								  set DriverNameAsCAPS = "EL980N"$(DriverNameSuffix)

								  CreateRegKey $(ServicesKey) {$(DriverNameAsCAPS), 0, GenericClass} "" $(!REG_KEY_ALL_ACCESS) "" NewDriverKey
								  ifstr $(NewDriverKey) != ""

										SetRegValue $(NewDriverKey), {ErrorControl, $(NoTitle),$(!REG_VT_DWORD),*($(SavedErrorControl), 4)} 
										SetRegValue $(NewDriverKey), {Start, $(NoTitle),$(!REG_VT_DWORD),*($(SavedStart), 4)} 
										SetRegValue $(NewDriverKey), {Type, $(NoTitle),$(!REG_VT_DWORD),*($(SavedType), 4)} 

										CreateRegKey $(NewDriverKey) {"Linkage", 0, GenericClass} "" $(!REG_KEY_ALL_ACCESS) "" NewDriverLinkageKey

										ifstr $(NewDriverLinkageKey) != ""

											  ;;; Add in the values for the Linkage key
											  SetRegValue $(NewDriverLinkageKey) {Bind,$(NoTitle),$(!REG_VT_MULTI_SZ),*($(SavedBind), 4)}
											  SetRegValue $(NewDriverLinkageKey) {Export,$(NoTitle),$(!REG_VT_MULTI_SZ),*($(SavedExport), 4)}
											  SetRegValue $(NewDriverLinkageKey) {Route,$(NoTitle),$(!REG_VT_MULTI_SZ),*($(SavedRoute), 4)}

											  CreateRegKey $(NewDriverLinkageKey) {"Disabled", 0, GenericClass} "" $(!REG_KEY_ALL_ACCESS) "" NewDriverLinkageDisabledKey

											  ifstr $(NewDriverLinkageDisabledKey) != ""

												;;; Add in the values for the Disabled key
												SetRegValue $(NewDriverLinkageDisabledKey) {Bind,$(NoTitle),$(!REG_VT_MULTI_SZ),*($(SavedDisabledBind), 4)}
												SetRegValue $(NewDriverLinkageDisabledKey) {Export,$(NoTitle),$(!REG_VT_MULTI_SZ),*($(SavedDisabledExport), 4)}
												SetRegValue $(NewDriverLinkageDisabledKey) {Route,$(NoTitle),$(!REG_VT_MULTI_SZ),*($(SavedDisabledRoute), 4)}

											  endif

										endif

									  CreateRegKey $(NewDriverKey) {"Parameters", 0, GenericClass} "" $(!REG_KEY_ALL_ACCESS) "" NewDriverParamKey
									  ifstr $(NewDriverParamKey) != ""
											  SetRegValue $(NewDriverParamKey), {VersionNo, $(NoTitle),$(!REG_VT_DWORD),20} 
											  SetRegValue $(NewDriverParamKey), {shdinformmsgs, $(NoTitle),$(!REG_VT_DWORD),0} 
											  SetRegValue $(NewDriverParamKey), {shdwarnmsgs, $(NoTitle),$(!REG_VT_DWORD),0} 
											  SetRegValue $(NewDriverParamKey), {shderrormsgs, $(NoTitle),$(!REG_VT_DWORD),1} 
											  SetRegValue $(NewDriverParamKey) {"FlowControl", 0, $(!REG_VT_SZ), "YES"}
											  SetRegValue $(NewDriverParamKey) {"WakeOnMagic", 0, $(!REG_VT_SZ), "YES"}
											  SetRegValue $(NewDriverParamKey) {"WakeOnLink" , 0, $(!REG_VT_SZ), "NO"}
											  SetRegValue $(NewDriverParamKey) {"RWUMagic", 0, $(!REG_VT_SZ), "ENABLE"}
											  SetRegValue $(NewDriverParamKey), {ADAPTERNUMBER, $(NoTitle),$(!REG_VT_DWORD),*($(SavedADAPTERNUMBER), 4)} 
											  SetRegValue $(NewDriverParamKey), {AdapterSeq, $(NoTitle),$(!REG_VT_DWORD),*($(SavedAdapterSeq), 4)} 
											  SetRegValue $(NewDriverParamKey) {"Base_Mac_Address" , 0, $(!REG_VT_SZ), *($(SavedBaseMacAddress), 4)}
											  SetRegValue $(NewDriverParamKey), {BusNumber, $(NoTitle),$(!REG_VT_DWORD),*($(SavedBusNumber), 4)} 
											  SetRegValue $(NewDriverParamKey), {BusType, $(NoTitle),$(!REG_VT_DWORD),*($(SavedBusType), 4)} 
											  SetRegValue $(NewDriverParamKey), {CardType, $(NoTitle),$(!REG_VT_DWORD),*($(SavedCardType), 4)} 
											  SetRegValue $(NewDriverParamKey) {"ErrorTolerance" , 0, $(!REG_VT_SZ), *($(SavedErrorTolerance), 4)}
											  SetRegValue $(NewDriverParamKey), {MediaType, $(NoTitle),$(!REG_VT_DWORD),*($(SavedMediaType), 4)} 
											  SetRegValue $(NewDriverParamKey) {"Network_Address" , 0, $(!REG_VT_SZ), *($(SavedNetworkAddress), 4)}
											  SetRegValue $(NewDriverParamKey), {SamplingRatio, $(NoTitle),$(!REG_VT_DWORD),*($(SavedSamplingRatio), 4)} 
											  SetRegValue $(NewDriverParamKey), {SamplingWindow, $(NoTitle),$(!REG_VT_DWORD),*($(SavedSamplingWindow), 4)} 
											  SetRegValue $(NewDriverParamKey) {"SelfCheckLevel" , 0, $(!REG_VT_SZ), *($(SavedSelfCheckLevel), 4)}
											  SetRegValue $(NewDriverParamKey), {Slot, $(NoTitle),$(!REG_VT_DWORD),*($(SavedSlot), 4)} 
											  SetRegValue $(NewDriverParamKey), {SlotNumber, $(NoTitle),$(!REG_VT_DWORD),*($(SavedSlotNumber), 4)} 

											  CreateRegKey $(NewDriverParamKey) {"Tcpip", 0, GenericClass} "" $(!REG_KEY_ALL_ACCESS) "" NewDriverTCPIPKey
											  
											  ifstr $(NewDriverTCPIPKey) != ""
													;;; Add in the values for the Tcpip key
													SetRegValue $(NewDriverTCPIPKey) {DefaultGateway,$(NoTitle),$(!REG_VT_MULTI_SZ),*($(SavedDefaultGateway), 4)}
													SetRegValue $(NewDriverTCPIPKey), {EnableDHCP, $(NoTitle),$(!REG_VT_DWORD),*($(SavedEnableDHCP), 4)} 
													SetRegValue $(NewDriverTCPIPKey) {IPAddress,$(NoTitle),$(!REG_VT_MULTI_SZ),*($(SavedIPAddress), 4)}
													SetRegValue $(NewDriverTCPIPKey), {IPInterfaceContext, $(NoTitle),$(!REG_VT_DWORD),*($(SavedIPInterfaceContext), 4)} 
													SetRegValue $(NewDriverTCPIPKey), {IPInterfaceContextMax, $(NoTitle),$(!REG_VT_DWORD),*($(SavedIPInterfaceContextMax), 4)} 
													SetRegValue $(NewDriverTCPIPKey) {"LLInterface" , 0, $(!REG_VT_SZ), *($(SavedLLInterface), 4)}
													SetRegValue $(NewDriverTCPIPKey), {PPTPFiltering, $(NoTitle),$(!REG_VT_DWORD),*($(SavedPPTPFiltering), 4)} 
													SetRegValue $(NewDriverTCPIPKey) {RawIPAllowedProtocols,$(NoTitle),$(!REG_VT_MULTI_SZ),*($(SavedRawIPAllowedProtocols), 4)}
													SetRegValue $(NewDriverTCPIPKey) {SubnetMask,$(NoTitle),$(!REG_VT_MULTI_SZ),*($(SavedSubnetMask), 4)}
													SetRegValue $(NewDriverTCPIPKey) {TCPAllowedPorts,$(NoTitle),$(!REG_VT_MULTI_SZ),*($(SavedTCPAllowedPorts), 4)}
													SetRegValue $(NewDriverTCPIPKey) {UDPAllowedPorts,$(NoTitle),$(!REG_VT_MULTI_SZ),*($(SavedUDPAllowedPorts), 4)}
													SetRegValue $(NewDriverTCPIPKey), {UseZeroBroadcast, $(NoTitle),$(!REG_VT_DWORD),*($(SavedUseZeroBroadcast), 4)} 
											  endif
									  endif
								  endif

								  ;;; End of key recreation

								  ;;; END OF MASSIVE CHANGES
								  ;;; End of changes for hot plug

								Endif
						  Else   
            ;;; Full driver name = El980n4 -> Change this to uppercase
            ;;; Changes to support hot plug for I.B.M.
            ;;; Save all parameters to memory before recreating the keys
            OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services\el980n4" $(!REG_KEY_ALL_ACCESS) RootSvcsKey
            Ifstr(i) $(RootSvcsKey) != "" ; key exists
               OpenRegKey $(RootSvcsKey) "" "Security" $(!REG_KEY_ALL_ACCESS) RootSvcsSecurityKey
              ifstr(i) $(RootSvcsSecurityKey) != ""
                GetRegValue $(RootSvcsSecurityKey) "Security"  SavedSecurity
                CloseRegKey $(RootSvcsSecurityKey)
              endif

              OpenRegKey $(RootSvcsKey) "" "Linkage" $(!REG_KEY_ALL_ACCESS) RootSvcsLinkageKey
              ifstr(i) $(RootSvcsLinkageKey) != ""
                GetRegValue $(RootSvcsLinkageKey) "Bind"    SavedBind
	        GetRegValue $(RootSvcsLinkageKey) "Export"  SavedExport
                GetRegValue $(RootSvcsLinkageKey) "Route"   SavedRoute

                OpenRegKey $(RootSvcsLinkageKey) "" "Disabled" $(!REG_KEY_ALL_ACCESS) RootSvcsLinkageDisabledKey
                ifstr(i) $(RootSvcsLinkageDisabledKey) != ""
                  GetRegValue $(RootSvcsLinkageDisabledKey) "Bind"    SavedDisabledBind
                  GetRegValue $(RootSvcsLinkageDisabledKey) "Export"  SavedDisabledExport
                  GetRegValue $(RootSvcsLinkageDisabledKey) "Route"   SavedDisabledRoute
                  CloseRegKey $(RootSvcsLinkageDisabledKey)
                endif
                CloseRegKey $(RootSvcsLinkageKey)
              endif

              DeleteRegTree $(ServicesKey) "el980n4"
  
              ;;; Start of key recreation

            CreateRegKey $(ServicesKey) {"EL980N4", 0, GenericClass} "" $(!REG_KEY_ALL_ACCESS) "" NewEL980N4Key
            ifstr $(NewEL980N4Key) != ""
              SetRegValue $(NewEL980N4Key), {ErrorControl, $(NoTitle),$(!REG_VT_DWORD),0} 
              SetRegValue $(NewEL980N4Key), {Start, $(NoTitle),$(!REG_VT_DWORD),2} 
              SetRegValue $(NewEL980N4Key), {Type, $(NoTitle),$(!REG_VT_DWORD),1} 
              SetRegValue $(NewEL980N4Key) {"DisplayName", 0, $(!REG_VT_SZ), "3Com 3C980C Adapter Driver"}
              SetRegValue $(NewEL980N4Key) {"ImagePath", 0, $(!REG_VT_SZ), "\SystemRoot\System32\drivers\el98xn4.sys"}
              SetRegValue $(NewEL980N4Key) {"Group", 0, $(!REG_VT_SZ), "NDIS"}

              CreateRegKey $(NewEL980N4Key) {"Linkage", 0, GenericClass} "" $(!REG_KEY_ALL_ACCESS) "" NewEL980N4LinkageKey
              ifstr $(NewEL980N4LinkageKey) != ""
                ;;; Add in the values for the Linkage key
                SetRegValue $(NewEL980N4LinkageKey) {Bind,$(NoTitle),$(!REG_VT_MULTI_SZ),*($(SavedBind), 4)}
                SetRegValue $(NewEL980N4LinkageKey) {Export,$(NoTitle),$(!REG_VT_MULTI_SZ),*($(SavedExport), 4)}
                SetRegValue $(NewEL980N4LinkageKey) {Route,$(NoTitle),$(!REG_VT_MULTI_SZ),*($(SavedRoute), 4)}

                CreateRegKey $(NewEL980N4LinkageKey) {"Disabled", 0, GenericClass} "" $(!REG_KEY_ALL_ACCESS) "" NewEL980N4LinkageDisabledKey
                ifstr $(NewEL980N4LinkageDisabledKey) != ""
                  ;;; Add in the values for the Disabled key
                  SetRegValue $(NewEL980N4LinkageDisabledKey) {Bind,$(NoTitle),$(!REG_VT_MULTI_SZ),*($(SavedDisabledBind), 4)}
                  SetRegValue $(NewEL980N4LinkageDisabledKey) {Export,$(NoTitle),$(!REG_VT_MULTI_SZ),*($(SavedDisabledExport), 4)}
                  SetRegValue $(NewEL980N4LinkageDisabledKey) {Route,$(NoTitle),$(!REG_VT_MULTI_SZ),*($(SavedDisabledRoute), 4)}
                endif
              endif

              CreateRegKey $(NewEL980N4Key) {"Parameters", 0, GenericClass} "" $(!REG_KEY_ALL_ACCESS) "" NewEL980N4ParamKey
              ifstr $(NewEL980N4ParamKey) != ""
                set WakeOnLan = YES
                set WakeOnLink = NO 
                set ValueEnable = ENABLE 

                Set NewValueList = {{WakeOnMagic,$(NoTitle),$(!REG_VT_SZ),$(WakeOnLan)},+
		  {WakeOnLink,$(NoTitle),$(!REG_VT_SZ),$(WakeOnLink)},+
		  {RWUMagic,$(NoTitle),$(!REG_VT_SZ),$(ValueEnable)},+
		  {FLOWCONTROL,$(NoTitle),$(!REG_VT_SZ),$(ValueEnable)}}

                OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services\EL980N4\Parameters" +
                  $(!REG_KEY_ALL_ACCESS) NewSoftParameterKey 
                ifstr $(NewSoftParameterKey) != ""	
                  Shell $(UtilityInf), AddValueList, $(NewSoftParameterKey), $(NewValueList)
                  CreateRegKey $(NewSoftParameterKey) {"3CDefault" , 0, GenericClass} "" +
                    $(!REG_KEY_ALL_ACCESS) "" KeyNt2 

                  Set ThisValueList = {RWUMagic,$(NoTitle),$(!REG_VT_SZ),$(ValueEnable)}

                  OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\3Com\EL980N4" $(!REG_KEY_ALL_ACCESS) NDKeyNt 
                  ifstr $(KeyNt2) != ""	
                    SetRegValue $(KeyNt2 ) $(ThisValueList) 
                    CloseRegKey $(KeyNt2 )
                  endif
                endif
                CloseRegKey $(NewSoftParameterKey)
                CloseRegKey $(NDKeyNt)  ;l
              endif

                CreateRegKey $(NewEL980N4Key) {"Security", 0, GenericClass} "" $(!REG_KEY_ALL_ACCESS) "" NewEL980N4SecurityKey
                ifstr $(NewEL980N4SecurityKey) != ""
                  ;;; Add in the values for the Security key
                  SetRegValue $(NewEL980N4SecurityKey) {Security,$(NoTitle),$(!REG_VT_BIN),*($(SavedSecurity), 4)}
                endif
              endif
               ;;; End of key recreation

            endif
          endif
          ;;; End of changes for hot plug

        Endif
        CloseRegKey $(DriverKey)
      EndForListDo
    endif

    CloseRegKey $(SWel980n4Key)
    CloseRegKey $(SWel980n4CVKey)
    CloseRegKey $(SWel980n4NRKey)
    CloseRegKey $(ServicesKey)




// *** DIAG SECTION USES TCAUM90X AND NOT TCAUM980X THISMAY CAUSE TROUBLE. WATCH FOR IT.


[DiagRegistry]
 OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE" $(!REG_KEY_WRITE) SOFTKEY
 OpenRegKey $(SOFTKEY) "" "3Com" $(!REG_KEY_WRITE) COMKEY
 ifstr $(COMKEY) == ""
	CreateRegKey $(SOFTKEY) {"3Com", 0, GenericClass} "" $(!REG_KEY_WRITE) "" COMKEY
 endif
 
 OpenRegKey $(COMKEY) "" "TCAUDIAG" $(!REG_KEY_WRITE) TCAUDIAGKEY
 ifstr $(TCAUDIAGKEY) == ""
	CreateRegKey $(COMKEY) {"TCAUDIAG", 0, GenericClass} "" $(!REG_KEY_WRITE) "" TCAUDIAGKEY
 endif
 
 OpenRegKey $(TCAUDIAGKEY) "" "TCAUM98X" $(!REG_KEY_WRITE) TCAUM90XKEY
 ifstr $(TCAUM90XKEY) == ""
	CreateRegKey $(TCAUDIAGKEY) {"TCAUM98X", 0, GenericClass} "" $(!REG_KEY_WRITE) "" TCAUM90XKEY
 endif
 
 SetRegValue $(TCAUM90XKEY) {"DriverNames", 0, $(!REG_VT_SZ), "3C90X.COM;EL90X.DOS;SYSTEM\EL98XN3.SYS;SYSTEM\EL98XN4.SYS"}
 OpenRegKey $(TCAUM90XKEY) "" "Extensions" $(!REG_KEY_WRITE) ExtensionsKEY
 ifstr $(ExtensionsKEY) == ""
	CreateRegKey $(TCAUM90XKEY) {"Extensions", 0, GenericClass} "" $(!REG_KEY_WRITE) "" ExtensionsKEY
 endif
 
 OpenRegKey $(ExtensionsKEY) "" "DA" $(!REG_KEY_WRITE) DAKEY
 ifstr $(DAKEY) == ""
	CreateRegKey $(ExtensionsKEY) {"DA", 0, GenericClass} "" $(!REG_KEY_WRITE) "" DAKEY
 endif
 
 CloseRegKey $(SOFTKEY)
 CloseRegKey $(COMKEY)
 CloseRegKey $(TCAUDIAGKEY)
 CloseRegKey $(TCAUM90XKEY)
 CloseRegKey $(ExtensionsKEY)
 CloseRegKey $(DAKEY)
 return
 
 
[InstallOption]
 set CurrLang = $($0)
 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 IntstallOptions
 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 = +
 ;*********** add this to check correct platform supported********
   ifstr(i) $(!STF_PLATFORM) == "Alpha"      
      set CommonStatus = STATUS_USERCANCEL
      goto end
   else-ifstr(i) $(!STF_PLATFORM) == "Alpha_AXP"
      set CommonStatus = STATUS_USERCANCEL
      goto end
   endif
 ;*****************************************************************




 set CurrentVersionValue = ""
 OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\Microsoft\Windows Nt\CurrentVersion" $(!REG_KEY_READ) KeyNt
 Ifstr(i) $(KeyNt) != ""
	 GetRegValue $(KeyNt) "CurrentVersion" CurrentVersionValue
	 Debug-Output "$(InfFile) : WinNT CurrentVersion ="$(CurrentVersionValue)
	 CloseRegKey $(KeyNt)
 Endif
 
 ifstr(i) (*($(CurrentVersionValue),4)) == $(NT400VersionConstant)
	set NDIS_VER = NDIS4     
 else
	set NDIS_VER = NDIS3
 endif

 read-syms DriverConstants$(NDIS_VER)
 ifstr(i) (*($(CurrentVersionValue),4)) == $(NT310VersionConstant) 
	 Debug-Output "$(InfFile) : Configureadapter"
	 set Error = "Windows NT v3.10 is not support by this product"
	 goto fatal
 endif
  
 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) == configure   
	ifstr $(!STF_PLATFORM) == $(INF_PROCESSER)
		ifstr(i) $(Install_On_Server) == "YES"
   			
			RunProgram ExitCode "Windows Directory" "" srv_conf.exe 
		
   			; Determine whether the program has modified any SHD parameters
   			; If so, then prompt for a reboot. Also prompt for a reboot on
   			; an install or upgrade.
 
   			OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\3Com" $(!REG_KEY_ALL_ACCESS) KeyNt
   			Ifstr(i) $(KeyNt) != ""
    				GetRegValue $(KeyNt) "PromptForReboot" RebootRequiredList
    				set RebootRequired = *($(RebootRequiredList), 4)

    				Ifstr(i) $(RebootRequired) == "YES"
     					; Reset the reboot status to NO
     					SetRegValue $(KeyNt), {PromptForReboot, $(NoTitle),$(!REG_VT_SZ),"NO"}
     					set CommonStatus = STATUS_SUCCESSFUL
    				else
     					set CommonStatus = STATUS_USERCANCEL
    				Endif
  			Endif
  			
		CloseRegKey $(KeyNt)
 		else
  			set CommonStatus = STATUS_USERCANCEL
 	endif
 	goto end




	else-Ifstr(i) $(ProdKeyName) == $(!NTN_RegBase)
		Shell $(UtilityInf),RegistryErrorString,CANNOT_CONFIGURE_SOFTWARE
		ifint $($ShellCode) != $(!SHELL_CODE_OK)           
			goto ShellCodeError
		endif

		set Error = $($R0)
		set from = end
		set to = end
		goto nonfatalinfo

	else
		set StartLabel = configureadapter
	endif

 else
	set StartLabel = installadapter
	set OEM_ABANDON_OPTIONS = {}
	set OEM_ABANDON_SOFTWARE = FALSE
	set OEM_ABANDON_ON = TRUE
 endif


 Debug-Output "$(InfFile) : =================================================="
 Debug-Output "$(InfFile) : STF_CWDIR is: "$(!STF_CWDIR)
 Debug-Output "$(InfFile) : STF_SRCDIR is: "$(!STF_SRCDIR)
 Debug-Output "$(InfFile) : STF_LANGUAGE is: "$(!STF_LANGUAGE)
 Debug-Output "$(InfFile) : Option is: "$(Option)
 Debug-Output "$(InfFile) : !STF_NCN_InstallMode is:"$(!NTN_InstallMode)
 Debug-Output "$(InfFile) : !STF_NCDETECT is: "$(!STF_NCDETECT)
 Debug-Output "$(InfFile) : !STF_NCOPTION is: "$(!STF_NCOPTION)
 Debug-Output "$(InfFile) : !STF_NCDETCARD is: "$(!STF_NCDETCARD)
 Debug-Output "$(InfFile) : !STF_NCDETINFO is: "$(!STF_NCDETINFO)
 Debug-Output "$(InfFile) : !STF_GUI_UNATTENDED is: "$(!STF_GUI_UNATTENDED)
 Debug-Output "$(InfFile) : !STF_BusType is $(!STF_BUSTYPE)" 
 Debug-Output "$(InfFile) : !STF_BusTypeList is $(!STF_BUSTYPELIST)" 
 Debug-Output "$(InfFile) : =================================================="

 set from = $(fatal)
 set to = $(fatal)
 goto $(StartLabel)


installadapter = +
 Debug-Output "$(InfFile) : Installadapter" 
 OpenRegKey $(!REG_H_LOCAL) "" $(ProdKeyName) $(!REG_KEY_READ) KeyProduct
 Ifstr $(KeyProduct) != $(KeyNull)
	CloseRegKey $(KeyProduct)
	ifstr(i) !(NTN_RegBase) == $(ProdKeyName)
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "ShellCode error: cannot get an error string."
			goto ShellCodeError
		endif
		goto end
	endif
 Endif
 Goto adapteroptions 


configureadapter = +
 Debug-Output "$(InfFile) : Configureadapter"
 set Error = "Cannot configure the software component"
 goto fatal


adapteroptions = +
 Debug-Output "$(InfFile) : Adapteroptions"
 set from = adapteroptions
 ifstr(i) $(!NTN_InstallMode) == configure
	goto updateparameters
 endif


installproduct =+
 install "Install-OTHER"
 Debug-Output "$(InfFile) : installproduct"
 StartWait 
 set AdapterList = $($R1)

 Debug-Output "$(InfFile) : About to look for 3Com PCI Cards"
 set TargetVersion = *($(CurrentVersionValue),4)
 
 Debug-Output "$(InfFile) : Current Version:"$(TargetVersion)
 ifstr $(TargetVersion) == $(NT350VersionConstant) 
	Debug-Output "Running on WindowsNT 3.50"
	set Version350 = $(TRUE)
 else
	 Debug-Output "Running on WindowsNT 3.51 or higher"
	 set Version350 = $(FALSE)
 endif

 ifint $(Version350) == $(TRUE)
 Debug-Output "Running on WindowsNT v3.50, Not using PCI Detection!!!"

	ifstr $(!STF_GUI_UNATTENDED) == "YES"
		Debug-Output "$(InfFile) : Running in GUI unattended mode"
		ifstr(i) $(!AutoNetInterfaceType) != ""
			set BusInterfaceType = $(!AutoNetInterfaceType)
		else
			set BusInterfaceType = 5
		endif

		ifstr(i) $(!AutoNetBusNumber) != ""
			set BusNumber = $(!AutoNetBusNumber)
		else
			set BusNumber = 0
		endif

	set NTDetected = $(FALSE)
	set AdapterList = {{$(Option),0, XXXXX}} 
	Debug-Output "$(InfFile) : BusInterfaceType = $(BusInterfaceType)"
	Debug-Output "$(InfFile) : BusNumber = $(BusNumber)"
	
	else     ;;; GUI_UNATTENDED=NO
		Debug-Output "$(InfFile) : Running 3.50 Bus Dialog"
		set BusInterfaceType = 5
		set BusNumber = 0
		set NTDetected = $(FALSE)
		Shell $(UtilityInf),GetBusTypeDialog,$(ProdHWXXXXXDesc) $(BusInterfaceType) $(BusNumber)
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			 Debug-Output "ShellCode error."
			 goto ShellCodeError
		endif

		set BusInterfaceType = $($R1)
		set BusNumber = $($R2)
		set AdapterList = {{$(Option),0, XXXXX}} 
		Debug-Output "$(InfFile) : BusInterfaceType = $(BusInterfaceType)"
		Debug-Output "$(InfFile) : BusNumber = $(BusNumber)"
	endif    ;;; end check GUI_UNATTENDED


 else      ;;; Version350=FALSE
	 Debug-Output "$(InfFile) : Running 3.51 or higher using PCI Dectection"
	 set NTDetected = $(TRUE)
	 set Vendor = 4279 
	 set CFIDList = $(CFIDList)
	 Debug-Output "$(InfFile) : VendorID = $(Vendor)"
	 Debug-Output "$(InfFile) : CFIDList = $(CFIDList)"
	 set AdapterList = {}

	 ForListDo $(CFIDList)
		 set-div CFID = $($) 1
		 set DeviceID = $($)
		 Shell $(UtilityInf), GetPCIInformation, $(Vendor) $(CFID)
		 ifint $($ShellCode) != $(!SHELL_CODE_OK)
			goto ShellCodeError
		 endif

		 ForListDo $($R0)
			set AdapterList = >($(AdapterList), {*($($),1), *($($),2), $(DeviceID)})
		 EndForListDo

	 EndForListDo

	 ifstr(i) $(AdapterList) == {}                 
		 set Error = $(CANNOT_FIND_ANY_CARD)
		 set CommonStatus = USER_CANCEL
		 set from = end
		 goto nonfatal
	 endif
 endif 






 set ToInstallList = {}
 Debug-Output "$(InfFile) : Adapterlist = $(AdatperList)"

 ForListDo $(AdapterList)
	ifint $(NTDetected) == $(TRUE)
		 set DetectedBusNum = *($($),1)
		 set DetectedSlotNum = *($($),2)
		 set DeviceID = *($($),3)




 		; 1.) Call Executable to populate the reg key "SOFTWARE\3Com\PCI_DATA" with the PCI data the current instance of the NIC
		RunProgram ExitCode  "" "" $(SrcDir)PCI_DATA.EXE /$(DetectedBusNum) /$(DetectedSlotNum) 


		; 2.) Check open key for the data of interest. *** DeviceID, SubSystemID, SubVendorID, and VendorID are present
		
		OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\3Com\PCI_DATA" $(!REG_KEY_ALL_ACCESS) PCI_DATA_KEY 

		GetRegValue $(PCI_DATA_KEY) "DeviceID" Array_DeviceID
		GetRegValue $(PCI_DATA_KEY) "VendorID" Array_VendorID
		GetRegValue $(PCI_DATA_KEY) "SubSystemID" Array_SubSystemID
		GetRegValue $(PCI_DATA_KEY) "SubVendorID" Array_SubVendorID

		Set Value_DeviceID 	= *($(Array_DeviceID),4)
		Set Value_VendorID 	= *($(Array_VendorID),4)
		Set Value_SubSystemID 	= *($(Array_SubSystemID),4)
		Set Value_SubVendorID 	= *($(Array_SubVendorID),4)

		;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" "The detected DeviceID is ("$(Value_DeviceID)")"
		;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" "The detected VendorID is ("$(Value_VendorID)")"
		;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" "The detected SubSystemID is ("$(Value_SubSystemID)")"
		;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" "The detected SubVendorID is ("$(Value_SubVendorID)")"

		; 3.)	Stepthrough logic to determine card type

		; 3Com Product
		ifstr(i) $(Value_VendorID) == "10B7"

		; 3C980B-TX **************************************************************
		ifstr(i) $(Value_DeviceID) == "9800"
			set Product_Hardware_Title = $(ProdHW38912Title)
			set Product_Hardware_Desc = $(ProdHW38912Desc)
		endif

		; 3C980C-TXM *************************************************************
		ifstr(i) $(Value_DeviceID) == "9805"
			ifstr(i) $(Detected_SubSystemID) != "1201"
				ifstr(i) $(Value_SubSystemID) != "1202"
					set Product_Hardware_Title = $(ProdHW38917Title)
					set Product_Hardware_Desc =  $(ProdHW38917Desc)	
				endif
			endif
		endif

		; 3C982 Multi Cards

		; 3C982-TXM (Port A) ******************************************************
		ifstr(i) $(Value_DeviceID) == "9805"
			ifstr(i) $(Value_SubSystemID) == "1201"
				set Product_Hardware_Title = $(ProdHW38917HydraATitle)
				set Product_Hardware_Desc = $(ProdHW38917HydraDescription)
			endif
		endif

		; 3C982-TXM (Port B) *****************************************************
		ifstr(i) $(Value_DeviceID) == "9805"
			ifstr(i) $(Value_SubSystemID) == "1202"
				set Product_Hardware_Title = $(ProdHW38917HydraBTitle)
				set Product_Hardware_Desc = $(ProdHW38917HydraDescription)
			endif
		endif
	
	endif

	CloseRegKey $(PCI_DATA_KEY)
	
	; 980X CARD
	Shell $(UtilityInf), IsNetCardAlreadyInstalled, $(DetectedBusNum), +
	$(DetectedSlotNum), $(Product_Hardware_Desc), "EL980N4"



	;**** DO THIS BECAUSE WE NOW USE NEW NAMES FOR OUR CARDS, CHECK OLD NAME
	ifstr(i) $($R1) != "YES"         ;not installed yet, not sure, check oldnames
		; Take no action.
		else	;already installed with current name on ECD2.1
		goto endchecking                       
	endif

AddToNotList=+
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		goto ShellCodeError
	endif

	ifstr $($R0) != "NO_ERROR"
		set Error = $($R0)
		goto fatal
	endif

	;ifstr(i) $(ToInstallList) == {}     ; COMMENT THIS OUT TO INSTALL MULTIPLE NIC at a time
		ifstr(i) $($R1) != "YES"
			set ToInstallList = >($(ToInstallList), $($))
		endif 
	;endif


endchecking =+
	endif 
 EndForListDo


 
 ifstr(i) $(ToInstallList) == {}
	 set Error = $(CANNOT_FIND_ANY_UNINSTALLED_CARD)
	 set CommonStatus = USER_CANCEL
	 set from = end
	 goto nonfatal
 endif


 ForListDo $(ToInstallList)
	set-add AdapterSeq = $(AdapterSeq) , 1
	set DetectedBusNum = *($($),1)
	set DetectedSlotNum = *($($),2)
	set DeviceID = *($($),3)
	set BoomDetected = FALSE
	set NonBoomDetected = FALSE

; 1.) Call Executable to populate the reg key "SOFTWARE\3Com\PCI_DATA" with the PCI data the current instance of the NIC
		RunProgram ExitCode  "" "" $(SrcDir)PCI_DATA.EXE /$(DetectedBusNum) /$(DetectedSlotNum) 


		; 2.) Check open key for the data of interest. *** DeviceID, SubSystemID, SubVendorID, and VendorID are present
		
		OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\3Com\PCI_DATA" $(!REG_KEY_ALL_ACCESS) PCI_DATA_KEY 

		GetRegValue $(PCI_DATA_KEY) "DeviceID" Array_DeviceID
		GetRegValue $(PCI_DATA_KEY) "VendorID" Array_VendorID
		GetRegValue $(PCI_DATA_KEY) "SubSystemID" Array_SubSystemID
		GetRegValue $(PCI_DATA_KEY) "SubVendorID" Array_SubVendorID

		Set Value_DeviceID 	= *($(Array_DeviceID),4)
		Set Value_VendorID 	= *($(Array_VendorID),4)
		Set Value_SubSystemID 	= *($(Array_SubSystemID),4)
		Set Value_SubVendorID 	= *($(Array_SubVendorID),4)

		;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" "The detected DeviceID is ("$(Value_DeviceID)")"
		;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" "The detected VendorID is ("$(Value_VendorID)")"
		;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" "The detected SubSystemID is ("$(Value_SubSystemID)")"
		;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" "The detected SubVendorID is ("$(Value_SubVendorID)")"

		; 3.)	Stepthrough logic to determine card type

		; 3Com Product
		ifstr(i) $(Value_VendorID) == "10B7"

		; 3C980B-TX **************************************************************
		ifstr(i) $(Value_DeviceID) == "9800"
			set Product_Hardware_Title = $(ProdHW38912Title)
			set Product_Hardware_Desc = $(ProdHW38912Desc)
		endif

		; 3C980C-TXM *************************************************************
		ifstr(i) $(Value_DeviceID) == "9805"
			ifstr(i) $(Detected_SubSystemID) != "1201"
				ifstr(i) $(Value_SubSystemID) != "1202"
					set Product_Hardware_Title = $(ProdHW38917Title)
					set Product_Hardware_Desc =  $(ProdHW38917Desc)	
				endif
			endif
		endif

		; 3C982 Multi Cards

		; 3C982-TXM (Port A) ******************************************************
		ifstr(i) $(Value_DeviceID) == "9805"
			ifstr(i) $(Value_SubSystemID) == "1201"
				set Product_Hardware_Title = $(ProdHW38917HydraATitle)
				set Product_Hardware_Desc = $(ProdHW38917HydraDescription)
			endif
		endif

		; 3C982-TXM (Port B) *****************************************************
		ifstr(i) $(Value_DeviceID) == "9805"
			ifstr(i) $(Value_SubSystemID) == "1202"
				set Product_Hardware_Title = $(ProdHW38917HydraBTitle)
				set Product_Hardware_Desc = $(ProdHW38917HydraDescription)
			endif
		endif

	endif


	; The only 2 sequences that scan the PCI_DATA RegKey are done so don't just close the key: destroy the PCI_DATA key
	; and the full tree beneath it. 

	DeleteRegTree $(PCI_DATA_KEY) ""


	;3C98X CARD
	set CorrectProdSWDesc = $(ProdSWDesc)
	set CorrectProdSWTitle = $(ProdSWTitle)
	set CorrectProdHWName = $(ProdHWName)
	set CorrectProdSWName = $(ProdSWName)
	set CorrectNetRuleSWType = $(NetRuleSWType)
	set CorrectNetRuleSWBindForm = $(NetRuleSWBindForm)
	set CorrectNetRuleSWClass = $(NetRuleSWClass)
	set CorrectNetRuleSWBindable = $(NetRuleSWBindable)
	set CorrectNetRuleHWBindForm = $(NetRuleHWBindForm)
	set CorrectNetRuleHWType = $(NetRuleHWType)
	set CorrectNetRuleHWClass = $(NetRuleHWClass)
	set CorrectProdKeyName = $(ProdKeyName)
	set CorrectParamKeyName = $(ParamKeyName)


	ifstr(i) (*($(CurrentVersionValue),4)) == $(NT400VersionConstant) 
		set CorrectNetEventDLL = $(ND4NetEventDLL)
		set CorrectProdSWImagePath = $(ND4ProdSWImagePath)
		set CorrectProdSWUpgradePath = $(ND4ProdSWUpgradePath)
	else
		set CorrectNetEventDLL = $(ND3NetEventDLL)
		set CorrectProdSWImagePath = $(ND3ProdSWImagePath)
		set CorrectProdSWUpgradePath = $(ND3ProdSWUpgradePath)
	endif


	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\"$(CorrectProdHWName) $(!REG_KEY_READ) KeyNt
	CloseRegKey $(KeyNt)

	Ifstr(i) $(KeyNt) == "" ; Begin check Key=null

		Debug-Output "$(InfFile) : AddSoftwareComponent"
		Shell $(UtilityInf), AddSoftwareComponent, $(Manufacturer), +
		$(CorrectProdSWName), +
		$(CorrectProdSWName), +
		$(CorrectProdSWTitle), $(STF_CONTEXTINFNAME), +
		$(CorrectProdSWImagePath), "kernel", "NDIS", {}, "",+
		$(CorrectNetEventDLL)	
 		Set OEM_ABANDON_SOFTWARE = TRUE

		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			goto ShellCodeError
		endif

		set RegistryErrorIndex = $($R0)
		Ifstr(i) $(RegistryErrorIndex) != "NO_ERROR"
			EndWait
			CloseRegKey $($R1)
			CloseRegKey $($R2)
			CloseRegKey $($R3)
			CloseRegKey $($R4)
			CloseRegKey $($R5)
			goto fatalregistry
		endif

		;DEBUG:
		;	ifstr(i) $(BoomCard) == TRUE 
		;	 Set DlgText = "bOOM CARD"
		;        else
		;         Set DlgText = "90xbc CARD"
		;	endif
		;	Shell "Done Add Software comp to get keyhandle"
		;	Set DlgText = "firstDB "$(CorrectProdHWName)" "$(CorrectProdSWName)	
		;END DEBUG	

		Set SoftProductKey = $($R1)
		Set SoftNetRuleKey = $($R2)
		Set SoftServiceKey = $($R3)
		Set SoftParameterKey = $($R4)
		Set SoftLinkageKey = $($R5)
		set NewValueList = {{SoftwareType,$(NoTitle),$(!REG_VT_SZ),$(SWType)},+
		
		{MajorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProdMajorVer)},+
		{MinorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProdMinorVer)},+
		{Title,$(NoTitle),$(!REG_VT_SZ),$(CorrectProdSWTitle)},+
		{Description,$(NoTitle),$(!REG_VT_SZ),$(CorrectProdSWDesc)},+
		{Review,$(NoTitle),$(!REG_VT_DWORD),$(ProdReview)},+
		{ServiceName,$(NoTitle),$(!REG_VT_SZ),$(CorrectProdSWName)},+
		{InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)},+
		{EDVersion,$(NoTitle),$(!REG_VT_SZ),$(EtherDiskVersion)}}
		Shell $(UtilityInf), AddValueList, $(SoftProductKey), $(NewValueList)
		
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			goto ShellCodeError
		endif

		set RegistryErrorIndex = $($R0)
		Ifstr(i) $(RegistryErrorIndex) != "NO_ERROR"
			EndWait
			CloseRegKey $(SoftProductKey)
			CloseRegKey $(SoftNetRuleKey)
			CloseRegKey $(SoftServiceKey)
			CloseRegKey $(SoftParameterKey)
			CloseRegKey $(SoftLinkageKey)
			goto fatalregistry
		endif

		set NewValueList = {{type,$(NoTitle),$(!REG_VT_SZ),$(CorrectNetRuleSWType)},+
		
		{use,$(NoTitle),$(!REG_VT_SZ),$(NetRuleSWUse)}, +
		{bindform,$(NoTitle),$(!REG_VT_SZ),$(CorrectNetRuleSWBindForm)}, +
		{class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(CorrectNetRuleSWClass)}, +
		{bindable,$(NoTitle),$(!REG_VT_MULTI_SZ),$(CorrectNetRuleSWBindable)}, +
		{InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}}
		Shell $(UtilityInf), AddValueList, $(SoftNetRuleKey), $(NewValueList)
		
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			goto ShellCodeError
		endif

		set RegistryErrorIndex = $($R0)
		Ifstr(i) $(RegistryErrorIndex) != "NO_ERROR"
			EndWait
			CloseRegKey $(SoftProductKey)
			CloseRegKey $(SoftNetRuleKey)
			CloseRegKey $(SoftServiceKey)
			CloseRegKey $(SoftParameterKey)
			CloseRegKey $(SoftLinkageKey)
			goto fatalregistry
		endif

		;********** Add parameter for driver *************************

		set WakeOnLan 		= YES
		set WakeOnLink 		= NO 
		set ValueEnable 	= ENABLE 
		Set NewValueList 	= {{RWUMAGIC,$(NoTitle),$(!REG_VT_SZ),$(ValueEnable)},+
					  {FLOWCONTROL,$(NoTitle),$(!REG_VT_SZ),$(ValueEnable)}}
		

		Shell $(UtilityInf), AddValueList, $(SoftParameterKey), $(NewValueList)
		CreateRegKey $(SoftParameterKey) {"3CDefault" , 0, GenericClass} "" $(!REG_KEY_ALL_ACCESS) +
		 "" KeyNt2 

		;;;
		Set ThisValueList = {RWUMAGIC,$(NoTitle),$(!REG_VT_SZ),$(ValueEnable)}


		OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\3Com\"$(ProdSWName) $(!REG_KEY_ALL_ACCESS) NDKeyNt 
		ifstr $(KeyNt2) != ""	
			SetRegValue $(KeyNt2 ) $("ThisValueList") 
			CloseRegKey $(KeyNt2 )
		endif
		;;;

		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			goto ShellCodeError
		endif

		CloseRegKey $(SoftProductKey)
		CloseRegKey $(SoftNetRuleKey)
		CloseRegKey $(SoftServiceKey)
		CloseRegKey $(SoftParameterKey)
		CloseRegKey $(SoftLinkageKey)

		Ifstr(i) $(RegistryErrorIndex) != "NO_ERROR"
			EndWait
			goto fatalregistry
		endif
	
	;*************************************************************
	
	endif ; end check Key=null

	Debug-Output "$(InfFile) : DetectedBusNumber = $(DetectedBusNum)"
	Debug-Output "$(InfFile) : DetectedSlotNum = $(DetectedSlotNum)"
	Debug-Output "$(InfFile) : Installing Card at $(DetectedBusNum):$(DetectedSlotNum)!"

	Shell $(UtilityInf), AddHardwareComponent, $(CorrectProdHWName),$(STF_CONTEXTINFNAME),$(CorrectProdKeyName)
	ifint $($R4) != -1
		Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards\"$($R4))
	endif

	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		goto ShellCodeError
	endif

	set RegistryErrorIndex = $($R0)
	Ifstr(i) $(RegistryErrorIndex) != "NO_ERROR"
		EndWait
		CloseRegKey $($R1)
		CloseRegKey $($R2)
		CloseRegKey $($R3)
		goto fatalregistry
	endif

	Set HardNetCardKey = $($R1)
	Set HardNetRuleKey = $($R2)
	Set HardParameterKey = $($R3)
	set AdapterNumber = $($R4)


;	set NewValueList = {{Manufacturer,$(NoTitle),$(!REG_VT_SZ),$(Manufacturer)},+
;	{Title,$(NoTitle),$(!REG_VT_SZ),"["$($R4)"] "$(ProdHW$(DeviceID)Title)},+
;	{Description,$(NoTitle),$(!REG_VT_SZ),$(ProdHW$(DeviceID)Desc)},+
;	{ProductName,$(NoTitle),$(!REG_VT_SZ),$(CorrectProdHWName)},+
;	{ServiceName,$(NoTitle),$(!REG_VT_SZ),$($R5)},+
;	{InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)},+
;	{EDVersion,$(NoTitle),$(!REG_VT_SZ),$(EtherDiskVersion)},+
;	}

	set NewValueList = {{Manufacturer,$(NoTitle),$(!REG_VT_SZ),$(Manufacturer)},+
	{Title,$(NoTitle),$(!REG_VT_SZ),"["$($R4)"] "$(Product_Hardware_Title)},+
	{Description,$(NoTitle),$(!REG_VT_SZ),$(Product_Hardware_Desc)},+
	{ProductName,$(NoTitle),$(!REG_VT_SZ),$(CorrectProdHWName)},+
	{ServiceName,$(NoTitle),$(!REG_VT_SZ),$($R5)},+
	{InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)},+
	{EDVersion,$(NoTitle),$(!REG_VT_SZ),$(EtherDiskVersion)},+
	}

	; Workaround: Sometimes AddHardwareComponent can't return correct handle for HardNetCardKey
	; We have to manually open the key using adapter number returned from AddHardwareComponent	
	; might have to do the same for HardParameterKey

		OpenRegKey $(!REG_H_LOCAL) "" $(NetworkCardsKey)$($R4) $(!REG_KEY_SET_VALUE) HardNetCardKey

	; end workaround

	Shell $(UtilityInf), AddValueList, $(HardNetCardKey), $(NewValueList)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		goto ShellCodeError
	endif

	;set RegistryErrorIndex = $($R0)
	;Ifstr(i) $(RegistryErrorIndex) != "NO_ERROR"
	;EndWait
	;goto fatalregistry
	;endif

	set BusTypeNum = 5 
	set CardType = 2



	
	;	Set the card type to Type 2 as none of the device IDs below are supported under this product

	;	ifstr(i) $(DeviceID) == "36944"
	;		;set CardType = 0
	;	else-ifstr(i) $(DeviceID) == "36945"
	;		;set CardType = 0
	;	else-ifstr(i) $(DeviceID) == "36949"
	;		set CardType = 0
	;	else
	;		set CardType = 2
	;	endif 




	ifint $(NTDetected) == $(TRUE)
		set BusNumber = $(DetectedBusNum)
		set SlotNum = $(DetectedSlotNum) 
		set BusInterfaceType = $(BusTypeNum)
		Debug-Output "$(InfFile) : Set HardwareParameterKey = $(NewValueList)"
		Set NewValueList = 	{{BusNumber,$(NoTitle),$(!REG_VT_DWORD),$(BusNumber)},+
					{ADAPTERNUMBER,$(NoTitle),$(!REG_VT_DWORD),$(AdapterNumber)} +
					{AdapterSeq,$(NoTitle),$(!REG_VT_DWORD),$(AdapterSeq)}, +
					{shdinformmsgs, $(NoTitle),$(!REG_VT_DWORD),0} +
					{shdwarnmsgs, $(NoTitle),$(!REG_VT_DWORD),0} +
					{shderrormsgs, $(NoTitle),$(!REG_VT_DWORD),1} +
					{"FlowControl", 0, $(!REG_VT_SZ), "YES"} +
					{"WakeOnMagic", 0, $(!REG_VT_SZ), "YES"} +
					{"WakeOnLink" , 0, $(!REG_VT_SZ), "NO"} +
					{"RWUMagic", 0, $(!REG_VT_SZ), "ENABLE"} +
					{"SelfCheckLevel" , 0, $(!REG_VT_SZ), "Basic"} +
					{SamplingWindow, $(NoTitle),$(!REG_VT_DWORD),1024} +
					{SamplingRatio, $(NoTitle),$(!REG_VT_DWORD),50} +
					{"ErrorTolerance" , 0, $(!REG_VT_SZ), "Medium"} +
					{"Base_Mac_Address" , 0, $(!REG_VT_SZ), ""} +
					{"Network_Address" , 0, $(!REG_VT_SZ), ""} +
					{VersionNo, $(NoTitle),$(!REG_VT_DWORD),21} +
					{Slot,$(NoTitle),$(!REG_VT_DWORD),$(SlotNum)}}



		Debug-Output "$(InfFile) : Set HardwareParameterKey = $(NewValueList)"
		Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(NewValueList)

		ifint $($ShellCode) != $(!SHELL_CODE_OK)
		  goto ShellCodeError
		endif

		Set NewValueList = {{SlotNumber,$(NoTitle),$(!REG_VT_DWORD),$(SlotNum)},+
		{Media,$(NoTitle),$(!REG_VT_SZ),$(Hardware_Default)}}

		Debug-Output "$(InfFile) : Set HardwareParameterKey = $(NewValueList)"
		Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(NewValueList)

		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			goto ShellCodeError
		endif

	else  ; NTDetected != TRUE

		Set NewValueList = {+
		{BusNumber,$(NoTitle),$(!REG_VT_DWORD),$(BusNumber)},+
		{Media,$(NoTitle),$(!REG_VT_SZ),$(Hardware_Default)}}

		Debug-Output "$(InfFile) : Set HardwareParameterKey = $(NewValueList)"
		Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(NewValueList)

		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			goto ShellCodeError
		endif

	endif ;


	Set NewValueList = {{BusType,$(NoTitle),$(!REG_VT_DWORD),$(BusInterfaceType)},+
	{CardType,$(NoTitle),$(!REG_VT_DWORD),$(CardType)},+
	{MediaType,$(NoTitle),$(!REG_VT_DWORD),1},+
	}

	Debug-Output "$(InfFile) : Set HardwareParameterKey = $(NewValueList)"
	Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(NewValueList)

	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		goto ShellCodeError
	endif

	ifstr(i) $(!STF_GUI_UNATTENDED) == "YES"
		Shell $(UtilityInf), AddDefaultNetcardParameters, $(HardParameterKey)
	endif

	set TempProdName = """"$(CorrectProdHWName)$(AdapterNumber)""""
	set TempBindForm = $(TempProdName)$(CorrectNetRuleHWBindForm)
	set NewValueList = {{type,$(NoTitle),$(!REG_VT_SZ),$(CorrectNetRuleHWType)},+
	{bindform,$(NoTitle),$(!REG_VT_SZ),$(TempBindForm)}, +
	{class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(CorrectNetRuleHWClass)}, +
	{InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}}
 
	Debug-Output "$(InfFile) : HardwareRuleKey = $(NewValueList)"
	Shell $(UtilityInf), AddValueList, $(HardNetRuleKey), $(NewValueList)

	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		goto ShellCodeEror
	endif

;******************************************************************************************************************
;3CDefault
		set ValueEnable 	= ENABLE 
		Set ThisValueList 	= {{RWUMAGIC,$(NoTitle),$(!REG_VT_SZ),$(ValueEnable)},+
		                  	  {FLOWCONTROL,$(NoTitle),$(!REG_VT_SZ),$(ValueEnable)}}


		Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(ThisValueList)
		CreateRegKey $(HardParameterKey) {"3CDefault" , 0, GenericClass} "" $(!REG_KEY_ALL_ACCESS) +
	 	"" KeyNt2 

		Set ThisValueList = {RWUMAGIC,$(NoTitle),$(!REG_VT_SZ),$(ValueEnable)}
		SetRegValue $(KeyNt2) $("ThisValueList") 

;******************************************************************************************************************

	CloseRegKey $(HardNetCardKey)
	CloseRegKey $(HardNetRuleKey)
	CloseRegKey $(HardParameterKey)


	



		;*******************************************
		;* Driver History Information              *
		;* The following code adds Driver History  *
		;* Information to the system registry      *
		;*******************************************

		; Driver Information Entries
		; These items will be set by IHV...

		Set DriverMfgr = "3Com Corporation"                     ; IHV name
		Set DriverVersionID = "2.47.0.0"                     	; The IHV driver package version
		Set BaseDriverFileName = "EL98XN4.SYS"  	        	; Key file for version check
		Set BaseDriverFileVersion = "2.47.0.0"               	; Version in Key file


		; These items will be set to VENDOR values, and then set to OEM-specific by OEM
		Set DriverOEM = "3Com Corporation"                      ; name of the OEM
		Set DriverFamily = "NIC"                         	; device family (NIC, Storage, Video...)
		Set DriverProduct = "???"                   		; Specific Name of device (chipset, for example)
		Set DriverDescription = "EtherCD 2.1 Ndis4 Driver set"  ; Description of device (product name, OS or system supported)
		Set DriverOEMVersion = "2.47.0.0"                     	; OEM-specified version


		; This section is added to all INFs to add registry entries for Driver Info.
		set DriverInfoRegList = {"InstalledOptions",$(DriverOEM),$(DriverFamily),$(DriverMfgr),$(DriverProduct)}
		set DriverInfoKey = "SOFTWARE"
		OpenRegKey $(!REG_H_LOCAL) "" $(DriverInfoKey) $(!REG_KEY_CREATE_SUB_KEY) DriverInfoOldKeyHandle
		ifstr $(DriverInfoOldKeyHandle) == ""
		   shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" "DriverInfo registry failed. Could not open HKLM\Software ("$(RegLastError)")"
		   set DriverInfoFailed = "FAIL"
		else
		   ForListDo $(DriverInfoRegList)
			  Set NewDriverInfoKey = $(DriverInfoKey)"\"$($)
			  OpenRegKey $(!REG_H_LOCAL) "" $(NewDriverInfoKey) $(!REG_KEY_ALL_ACCESS) DriverInfoKeyHandle
			  ifstr(i) $(DriverInfoKeyHandle) == ""
				 CreateRegKey $(DriverInfoOldKeyHandle) {$($),0,GenericClass} "" $(!REG_KEY_ALL_ACCESS) "" DriverInfoKeyHandle
				 ifstr $(DriverInfoKeyHandle) == ""
					shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" "DriverInfo registry failed. Could not create key:"$($)" ("$(RegLastError)")"
					set DriverInfoFailed = "FAIL"
				 endif
			  endif
			  CloseRegKey $(DriverInfoOldKeyHandle)
			  set DriverInfoOldKeyHandle = $(DriverInfoKeyHandle)
			  set DriverInfoKey = $(NewDriverInfoKey)
		   EndForListDo
		endif

		ifstr $(DriverInfoFailed) != "FAIL"
		   SetRegValue $(DriverInfoKeyHandle) {"Description",0,$(!REG_VT_SZ),$(DriverDescription)}
		   SetRegValue $(DriverInfoKeyHandle) {"CurrentVer",0,$(!REG_VT_SZ),$(DriverOEMVersion)}
		   SetRegValue $(DriverInfoKeyHandle) {"Ver_"$(DriverOEMVersion),0,$(!REG_VT_SZ),$(DriverVersionID)}
		   SetRegValue $(DriverInfoKeyHandle) {" BaseDriverFileName",0,$(!REG_VT_SZ),$( BaseDriverFileName)}
		   SetRegValue $(DriverInfoKeyHandle) {" BaseDriverFileVersion",0,$(!REG_VT_SZ),$(BaseDriverFileVersion)}

		   CloseRegKey $(DriverInfoKeyHandle)
		endif

		;*******************************************
		;* End of Driver History Information       *
		;*******************************************




 ;******* CREATE DIAG REGISTRY FOR TOUCHDOWN SINCE WE SUPPORT IT **************
 ;
 ; Place an instance in the registry for each instance of the Nic card
 ;
 ;*****************************************************************************
 set TrayIconList = {TCAUDIAG,$(NoTitle),$(!REG_VT_SZ),$(DIAGCARDTYPE)} 

 OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\3Com\"$(CorrectProdSWName) $(!REG_KEY_ALL_ACCESS) NDKeyNt 
 ifstr $(NDKeyNt) != ""	
	SetRegValue $(NDKeyNt) $(TrayIconList) 
	CloseRegKey $(NDKeyNt)
 endif


 EndForListDo












 ;******* CREATE REGISTRY ENTRIES FOR COMPAQ HOT PLUG SUPPORT IF **************
 ;        HOT PLUG CURRENTLY SUPPORTED ON THIS SERVER
 ;
 ; Place an instance in the registry for ONE instance of the Nic card. Not each
 ; instance
 ;
 ;*****************************************************************************


 OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\Compaq\Cpqrcmc\ClassDLLs\NicMiniPort" $(!REG_KEY_WRITE) MiniPortKey
 ifstr $(MiniPortKey) != ""
   
; Hot plug support currently installed on this server

   CreateRegKey $(MiniPortKey) {"EL980N4", 0, GenericClass} "" $(!REG_KEY_WRITE) "" HotPlugServiceKey
   SetRegValue $(HotPlugServiceKey), {BaseOIDAddress, $(NoTitle),$(!REG_VT_DWORD), 4278322176} ;; 0xFF020400 in Hex
   SetRegValue $(HotPlugServiceKey), {SetOIDAddress, $(NoTitle),$(!REG_VT_DWORD), 4278321920}  ;; 0xFF020300 in Hex 

 endif

 CloseRegKey $(MiniPortKey)
 CloseRegKey $(HotPlugServiceKey)




OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services\HotSrv\SupportedDevices" $(!REG_KEY_WRITE) SupportedDevicesKey
ifstr $(SupportedDevicesKey) != ""
  CreateRegKey $(SupportedDevicesKey) {"10B7-9800-10B7-1000", 0, GenericClass} "" $(!REG_KEY_WRITE) "" 9800HotPlugKey
  CreateRegKey $(SupportedDevicesKey) {"10B7-9805-10B7-1000", 0, GenericClass} "" $(!REG_KEY_WRITE) "" 9805HotPlugKey
  ;CreateRegKey $(SupportedDevicesKey) {"10B7-9805-10B7-1201", 0, GenericClass} "" $(!REG_KEY_WRITE) "" PortAHotPlugKey
  ;CreateRegKey $(SupportedDevicesKey) {"10B7-9805-10B7-1202", 0, GenericClass} "" $(!REG_KEY_WRITE) "" PortBHotPlugKey

  SetRegValue $(9800HotPlugKey) {"FriendlyName", 0, $(!REG_VT_SZ), "3Com EtherLink Server 10/100 PCI NIC (3C980B-TX)"}
  SetRegValue $(9800HotPlugKey) {"DriverService", 0, $(!REG_VT_SZ), "EL980N4"}

  SetRegValue $(9805HotPlugKey) {"FriendlyName", 0, $(!REG_VT_SZ), "3Com EtherLink Server 10/100 PCI NIC (3C980C-TXM)"}
  SetRegValue $(9805HotPlugKey) {"DriverService", 0, $(!REG_VT_SZ), "EL980N4"}

  ;SetRegValue $(PortAHotPlugKey) {"FriendlyName", 0, $(!REG_VT_SZ), "3Com EtherLink Server 10/100 Dual Port A"}
  ;SetRegValue $(PortAHotPlugKey) {"DriverService", 0, $(!REG_VT_SZ), "EL980N4"}

  ;SetRegValue $(PortBHotPlugKey) {"FriendlyName", 0, $(!REG_VT_SZ), "3Com EtherLink Server 10/100 Dual Port B"}
  ;SetRegValue $(PortBHotPlugKey) {"DriverService", 0, $(!REG_VT_SZ), "EL980N4"}

endif
CloseRegKey $(SupportedDevicesKey)
CloseRegKey $(9800HotPlugKey)
CloseRegKey $(9805HotPlugKey)
;CloseRegKey $(PortAHotPlugKey)
;CloseRegKey $(PortBHotPlugKey)

; End Add Compaq in hot plug support *******************************************










install "Install-SHD"





set TrayIconList = {TCAUDIAG,$(NoTitle),$(!REG_VT_SZ),$(DIAGCARDTYPE)} 

 OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\3Com\TCAUDIAG" $(!REG_KEY_ALL_ACCESS) NDKeyNt 
 ifstr $(NDKeyNt) == ""	
	CreateRegKey $(!REG_H_LOCAL) {"SOFTWARE\3Com\TCAUDIAG", 0, GenericClass} "" $(!REG_KEY_WRITE) "" NDKeyNt
 endif
	SetRegValue $(NDKeyNt) $(TrayIconList) 
	CloseRegKey $(NDKeyNt)



; Paul May - 12/08/99 6:27pm
    ;;; Add in entries to support the DA/Touchdown integration - REALNICS Key
    OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\3Com\TCAUDIAG\RealNICs" $(!REG_KEY_ALL_ACCESS) RealNICsKey

    Ifstr(i) $(RealNICsKey) == "" ; key doesn't exist so create it
	CreateRegKey $(!REG_H_LOCAL) {"SOFTWARE\3Com\TCAUDIAG\RealNICs", 0, GenericClass} "" $(!REG_KEY_ALL_ACCESS) "" RealNICsKey
    endif

   
      Ifstr(i) $(RealNICsKey) != "" ; key exists

        OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services" $(!REG_KEY_ALL_ACCESS) ServicesKey
        Ifstr(i) $(ServicesKey) != "" ; key exists
          EnumRegKey $(ServicesKey) DriverList
          ForListDo $(DriverList)
            ;;; Check whether any python driver instances are present still
            ;;; If not, remove Touchdown and delete some leftover files
            set foundPythonInstance = FALSE
            set Driver = *($($), 1)
            Split-String "$(Driver)" "N" DriverTokens
            set DriverName = *($(DriverTokens), 1)
            ifstr(i) $(Driver) != "El980n4"
              ifstr(i) $(DriverName) == "El980"
                ;;; We have found a Python-related key
                set foundPythonInstance = TRUE
              endif
            endif

            ifstr(i) $(Driver) != "El98xn4"
              ifstr(i) $(DriverName) == "El98x"
                ;;; We have found a Python-related key
                set foundPythonInstance = TRUE
              endif
            endif

            Ifstr(i) $(foundPythonInstance) == "TRUE"
              ;; Add this driver instance name to the list of realNICs
              SetRegValue $(RealNICsKey) {$(Driver), 0, $(!REG_VT_SZ), ""}
            endif

            set found3ComClientInstance = FALSE
            Split-String "$(Driver)" "x" DriverTokens
            set DriverName = *($(DriverTokens), 1)
            ifstr(i) $(Driver) != "El90x"
              ifstr(i) $(DriverName) == "El90"
                ;;; We have found a 3Com client-related key
                set found3ComClientInstance = TRUE
              endif
            endif

            Split-String "$(Driver)" "d" DriverTokens
            set DriverName = *($(DriverTokens), 1)
            ifstr(i) $(Driver) != "El90xnd"
              ifstr(i) $(DriverName) == "El90xn"
                ;;; We have found a 3Com client-related key
                set found3ComClientInstance = TRUE
              endif
            endif

            Split-String "$(Driver)" "x" DriverTokens
            set DriverName = *($(DriverTokens), 1)
            ifstr(i) $(Driver) != "EL99X"
              ifstr(i) $(DriverName) == "El99"
                ;;; We have found a 3Com client-related key
                set found3ComClientInstance = TRUE
              endif
            endif

            Ifstr(i) $(found3ComClientInstance) == "TRUE"
              ;; Add this driver instance name to the list of realNICs
              SetRegValue $(RealNICsKey) {$(Driver), 0, $(!REG_VT_SZ), ""}
            endif

          EndForListDo

          CloseRegKey $(ServicesKey)
        Endif
      Endif


    CloseRegKey $(DiagKey)
    CloseRegKey $(RealNICsKey)
 
;End - Add in entries to support the DA/Touchdown integration - REALNICS Key


 ;;ifstr(i) (*($(CurrentVersionValue),4)) == $(NT400VersionConstant) 
 
 OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\"$(CorrectProdHWName) $(!REG_KEY_ALL_ACCESS) KeyService
 Ifstr $(KeyService) != "" 
	SetRegValue $(KeyService) {ImagePath,$(NoTitle),$(!REG_VT_SZ),$(CorrectProdSWUpgradePath)}
 else 
	goto fatalregistry 
 endif 

 CloseRegKey $(KeyService)
 OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\EventLog\System\"$(CorrectProdHWName) $(!REG_KEY_ALL_ACCESS) KeyEventLog
 Ifstr $(KeyEventLog) != "" 
	 SetRegValue $(KeyEventLog) {EventMessageFile,$(NoTitle),$(!REG_VT_SZ),$(CorrectNetEventDLL)} 
 else 
	goto fatalregistry 
 endif 

 CloseRegKey $(KeyEventLog)
 ;;endif


 ifint $(OldVersionExisted) == $(FALSE)
	Ifstr(i) $(DoCopy) == "YES"
		Shell $(UtilityInf), DoAskSource, $(!STF_CWDDIR), $(SrcDir) NO
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Goto ShellCodeError
		endif

	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 
 Endif


 ;******* CREATE DIAG REGISTRY FOR TOUCHDOWN SINCE WE SUPPORT IT **************

 set TrayIconList = {TCAUDIAG,$(NoTitle),$(!REG_VT_SZ),$(DIAGCARDTYPE)} 

 OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\3Com\TCAUDIAG" $(!REG_KEY_ALL_ACCESS) NDKeyNt 
 ifstr $(NDKeyNt) != ""	
	SetRegValue $(NDKeyNt) $(TrayIconList) 
	CloseRegKey $(NDKeyNt)
 endif

;******************************************************************************************
NextCommon =+
;******************************************************************************************

 ifint $(OldVersionExisted) == $(FALSE)
	Ifstr(i) $(DoCopy) == "YES"
		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
 
	Endif

 ;**************** check if 980XN and copy new NDIS4 driver ********************

 install "Install-OptionNewNDIS"
 ;install "Install-Option" 
	
endcurrent =+
	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
 endif


 EndWait
 goto successful

updateparameters =+
 Debug-Output "$(InfFile) : Updateparameters"
 set HardParameterKey = $($R3)
 
 ifint $($ShellCode) != $(!SHELL_CODE_OK)
	goto ShellCodeError
 endif

 CloseRegKey $(KeyParameters)
 goto successful

bindingadapter =+
 Debug-Output "$(InfFile) : bindingadapter"
 Return STATUS_SUCCESSFUL
 
 set Error = "Binding: Sorry, not yet implemented."
 goto fatal





















removeadapter = +

 ;****************************************************************************************
 ; Check if 905BC or Boomerang
 ;****************************************************************************************




 set CurrentCardPath =  $(!NTN_RegBase)
 set TitleValue = ""
 set CardTitle = ""
 set NameTokenList = ""

 OpenRegKey $(!REG_H_LOCAL) "" $(CurrentCardPath) $(!REG_KEY_READ) CurrentCardKey

 Ifstr(i) $(CurrentCardKey) != ""
	GetRegValue $(CurrentCardKey) "Title" TitleValue
	set CardTitle = *($(TitleValue), 4)
	Split-String $(CardTitle) "()" NameTokenList
	set NameCode = *($(NameTokenList), 3)
	CloseRegKey $(CurrentCardKey)
 Endif                         

;end checking currentCardKey
;****************************************************************************************


	set CorrectProdHWName = $(ProdHWName)
	set CorrectProdSWName = $(ProdSWName)
	set CorrectProdKeyName = $(ProdKeyName)


 Debug-Output "$(InfFile) : removeadapter"
 Debug-Output "$(InfFile) : ----> $(CorrectProdKeyName), $(!NTN_RegBase)"
 
 Ifstr(i) $(CorrectProdKeyName) == $(!NTN_RegBase)
	 Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), +
	 $(CorrectProdSWName)

	 ifint $($ShellCode) != $(!SHELL_CODE_OK)
		goto ShellCodeError
	 endif

	 set RegistryErrorIndex = $($R0)
	 Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
		goto fatalregistry
	 endif
 else
; Paul May - 12/04/99 10:01am
	; Populate Driver Instance
   	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase) $(!REG_KEY_ALL_ACCESS) CardIndexKey
   	Ifstr(i) $(CardIndexKey) != "" ; key exists
     		GetRegValue $(CardIndexKey) "ServiceName" ServiceNameList

     		;;; The name of the service being removed is stored in DriverInstance
     		set DriverInstance = *($(ServiceNameList), 4)
   	endif
   	CloseRegKey $(CardIndexKey)
; End - Populate Driver Instance

	 Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), +
	 $(CorrectProdSWName), $(!NTN_RegBase)
	 ifint $($ShellCode) != $(!SHELL_CODE_OK)
		goto ShellCodeError
	 endif

	 set RegistryErrorIndex = $($R0)
	 Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
		goto fatalregistry
	 endif
 endif







; ****************************************************************************************************************************
;
; Check_For_3C98X_Service
;
; The following routine checks for the presense of the Python service in the registry and sets the global flag
; "PythonPresent" accordingly
;
; ****************************************************************************************************************************


OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services" $(!REG_KEY_ALL_ACCESS) WindowsServicesKey

Ifstr(i) $(WindowsServicesKey) != "" ; key exists
	EnumRegKey $(WindowsServicesKey) ServicesList

	; Check whether any 3C98X driver instances are present
        ; Set Global Flag Accordingly
	set Count = "1"
	set PythonPresent = "FALSE"
	set NICINSTANCE = "0"


; This routine will loop though every key under "SYSTEM\CurrentControlSet\Services" till there are no more entries

ForListDo $(ServicesList)

	set CurrentServiceName = *($(ServicesList), $(Count))
	set ThisServiceName = *($(CurrentServiceName),1)
	

	; Check to see if the current Service Instance contains the string "EL980n4" case sensitively
	Split-String "$(ThisServiceName)" "N4" ParsedServiceNameList
	
	set ParsedServiceName 		= *($(ParsedServiceNameList),1)

	;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE), "NONFATAL", "The parsed service name is "$(ParsedServiceName)""	

	ifstr(i) $(ParsedServiceName) == "EL980"
		;Increment the Nic instace counter
		set-add NICINSTANCE = $(NICINSTANCE),"1"	
	endif

	;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE), "NONFATAL", "PythonPresent variable is "$(PythonPresent)""	



	; Increment Counter
	set-add Count = $(Count),"1"

	; Artificial trouble shooting limiting routine
	;	ifstr $(Count) == "3"
	;		Halt!
	;	endif


EndForListDo ;$(ServicesList)

CloseRegKey $(WindowsServicesKey)

; HALT!


 BailOut = +
 
	;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE), "NONFATAL", "Nicinstance variable is "$(NICINSTANCE)""	

 ifint $(NICINSTANCE) > "1"
	;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) NONFATAL "3C98X service still present in this machine."
 else-ifint $(NICINSTANCE) == "0"
	;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) NONFATAL "No more instances of 3C98X detected so it's time to cleanup!"
	
	install "Clean_Up_Registry"
	
	Set RemoveList = {}
   	Set DelOnRebootList = {}


	set RemoveList = >($(RemoveList), #(Files-RemoveList, srv_confe, 1))
	set RemoveList = >($(RemoveList), #(Files-RemoveList, srv_confh, 1))
	set RemoveList = >($(RemoveList), #(Files-RemoveList, srv_confu, 1))
	set RemoveList = >($(RemoveList), #(Files-RemoveList, pci_fix, 1))
	set RemoveList = >($(RemoveList), #(Files-RemoveList, pci_data, 1))
	set RemoveList = >($(RemoveList), #(Files-RemoveList, oemel98x, 1))
	set RemoveList = >($(RemoveList), #(Files-RemoveList, el98xn4d, 1))
	set RemoveList = >($(RemoveList), #(Files-RemoveList, el98xn4s, 1))

    ForListDo $(RemoveList)
        Debug-Output "Removing "$($)
        LibraryProcedure Status , $(!LIBHANDLE), DelFile $($)
        Debug-Output "Status is "$(Status)
    EndForListDo

   	ForListDo $(RemoveList)
          	Set DelStatus = ""
      		Debug-Output "Deleting File "$($)
      		Set FLibraryErrCtl = 1
      		
                	;LibraryProcedure DelStatus $(!UTILHANDLE), DelFile $($)
         		ifstr(i) $(DelStatus) == "FAILED"
                        	Set DelOnRebootList = >($(DelOnRebootList), $($))
         		EndIf
          	
                 	LibraryProcedure DelStatus $(!LIBHANDLE), DelFile $($)
      		
     	 
		Set FLibraryErrCtl = 0
   	EndForListDo

  	ForListDo $(DelOnRebootList)
        Debug-Output "File to remove on reboot = "$($)
        	AddFileToDeleteList $($)
        Set FLibraryErrCtl  = 1
        	;LibraryProcedure DelStatus $(!LIBHANDLE), DelFile $($)
        Set FLibraryErrCtl  = 0
          	
	EndForListDo


 else-ifint $(NICINSTANCE) == "1"
	;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) NONFATAL "No more instances of 3C98X detected so it's time to cleanup!"
	
	install "Clean_Up_Registry"
	
	Set RemoveList = {}
   	Set DelOnRebootList = {}


	set RemoveList = >($(RemoveList), #(Files-RemoveList, srv_confe, 1))
	set RemoveList = >($(RemoveList), #(Files-RemoveList, srv_confh, 1))
	set RemoveList = >($(RemoveList), #(Files-RemoveList, srv_confu, 1))
	set RemoveList = >($(RemoveList), #(Files-RemoveList, pci_fix, 1))
	set RemoveList = >($(RemoveList), #(Files-RemoveList, pci_data, 1))
	set RemoveList = >($(RemoveList), #(Files-RemoveList, oemel98x, 1))
	set RemoveList = >($(RemoveList), #(Files-RemoveList, el98xn4d, 1))
	set RemoveList = >($(RemoveList), #(Files-RemoveList, el98xn4s, 1))

    ForListDo $(RemoveList)
        Debug-Output "Removing "$($)
        LibraryProcedure Status , $(!LIBHANDLE), DelFile $($)
        Debug-Output "Status is "$(Status)
    EndForListDo

   	ForListDo $(RemoveList)
          	Set DelStatus = ""
      		Debug-Output "Deleting File "$($)
      		Set FLibraryErrCtl = 1
      		
                	;LibraryProcedure DelStatus $(!UTILHANDLE), DelFile $($)
         		ifstr(i) $(DelStatus) == "FAILED"
                        	Set DelOnRebootList = >($(DelOnRebootList), $($))
         		EndIf
          	
                 	LibraryProcedure DelStatus $(!LIBHANDLE), DelFile $($)
      		
     	 
		Set FLibraryErrCtl = 0
   	EndForListDo

  	ForListDo $(DelOnRebootList)
        Debug-Output "File to remove on reboot = "$($)
        	AddFileToDeleteList $($)
        Set FLibraryErrCtl  = 1
        	;LibraryProcedure DelStatus $(!LIBHANDLE), DelFile $($)
        Set FLibraryErrCtl  = 0
          	
	EndForListDo




 endif	

; End Check_For_3C98X_Service
; ****************************************************************************************************************************



; Paul May - 12/04/99 9:35am
 ;;; Remove the Service Name held in DriverInstance from the RealNICs key

 OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\3Com\TCAUDIAG\RealNICs" $(!REG_KEY_ALL_ACCESS) RealNICsKey
 Ifstr(i) $(RealNICsKey) != "" ; key exists
   EnumRegValue $(RealNICsKey) RealNICsList
   set RealNICsValues = {}
   ForListDo $(RealNICsList)
     set RealNICsArray = *($($), 1)
     ForListDo $(RealNICsArray)
       set DriverInstanceName = *($($), 1)
       QueryListSize RealNICsValuesSize $(RealNICsValues)
       ifstr(i) $(RealNICsValuesSize) == 0
         set RealNICsValues = {$(DriverInstanceName)}
       else
         set RealNICsValues = >($(RealNICsValues), $(DriverInstanceName))
       endif
     EndForListDo
   EndForListDo

   set NewRealNICsValues = {}

   ForListDo $(RealNICsValues)
     ifstr(i) *($($), 1) != $(DriverInstance)
       set NewRealNICsValues = >($(NewRealNICsValues), *($($), 1))
     endif
   EndForListDo

   CloseRegKey $(DiagKey)
   OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\3Com\TCAUDIAG" $(!REG_KEY_ALL_ACCESS) DiagKey
   Ifstr(i) $(DiagKey) != "" ; key exists
     DeleteRegTree $(DiagKey) "RealNICs"
     CreateRegKey $(DiagKey) {"RealNICs", 0, GenericClass} "" $(!REG_KEY_ALL_ACCESS) "" NewRealNICsKey
     Ifstr(i) $(NewRealNICsKey) != "" ; key exists
       ForListDo $(NewRealNICsValues)
         SetRegValue $(NewRealNICsKey) {*($($), 1), 0, $(!REG_VT_SZ), ""}
       EndForListDo
     Endif
   Endif
 Endif

 CloseRegKey $(NewRealNICsKey)
 CloseRegKey $(RealNICsKey)
 CloseRegKey $(DiagKey)

; End Remove the Service Name held in DriverInstance from the RealNICs key

 goto end



UpgradeSoftware = +

 set CurrentCardPath =  $(!NTN_RegBase)
 set TitleValue = ""
 set CardTitle = ""
 set NameTokenList = ""

 OpenRegKey $(!REG_H_LOCAL) "" $(CurrentCardPath) $(!REG_KEY_READ) CurrentCardKey
 Ifstr(i) $(CurrentCardKey) != ""
	GetRegValue $(CurrentCardKey) "Title" TitleValue
	set CardTitle = *($(TitleValue), 4)
	Split-String $(CardTitle) "()" NameTokenList
	set NameCode = *($(NameTokenList), 3)
	CloseRegKey $(CurrentCardKey)
 Endif                         


	; 980X CARD

	set CorrectProdHWName 		= $(ProdHWName)
	set CorrectProdSWName 		= $(ProdSWName)
	set CorrectNetRuleSWType 	= $(NetRuleSWType)
	set CorrectNetRuleSWBindForm 	= $(NetRuleSWBindForm)
	set CorrectNetRuleSWClass 	= $(NetRuleSWClass)
	set CorrectNetRuleSWBindable 	= $(NetRuleSWBindable)
	set CorrectNetRuleHWBindForm 	= $(NetRuleHWBindForm)
	set CorrectNetRuleHWType 	= $(NetRuleHWType)
	set CorrectNetRuleHWClass 	= $(NetRuleHWClass)
	set CorrectProdKeyName 		= $(ProdKeyName)
	set CorrectParamKeyName 	= $(ParamKeyName)

	ifstr(i) (*($(CurrentVersionValue),4)) == $(NT400VersionConstant) 
		set CorrectNetEventDLL = $(ND4NetEventDLL)
		set CorrectProdSWImagePath = $(ND4ProdSWImagePath)
		set CorrectProdSWUpgradePath = $(ND4ProdSWUpgradePath)
	else
		set CorrectNetEventDLL = $(ND3NetEventDLL)
		set CorrectProdSWImagePath = $(ND3ProdSWImagePath)
		set CorrectProdSWUpgradePath = $(ND3ProdSWUpgradePath)
	endif



 ;****************************************************************************************
 OpenRegKey $(!REG_H_LOCAL) "" $(CorrectProdKeyName) $(!REG_KEY_ALL_ACCESS) KeyProduct 
 Ifstr $(KeyProduct) != "" 
	Shell $(UtilityInf), GetInfFileNameFromRegistry, $(KeyProduct) 
	ifint $($ShellCode) != $(!SHELL_CODE_OK) 
		Debug-Output "ShellCode error" 
		goto ShellCodeError 
	endif 

	set !UG_Filename = $($R0) 
	install "Install-INF" 
	

	ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS 
		goto fatal 
	endif 

	SetRegValue $(KeyProduct) {MajorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProdMajorVer)} 
	SetRegValue $(KeyProduct) {MinorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProdMinorVer)} 
	SetRegValue $(KeyProduct) {Review,$(NoTitle),$(!REG_VT_DWORD),$(ProdReview)} 
	SetRegValue $(KeyProduct) {EDVersion,$(NoTitle),$(!REG_VT_SZ),$(EtherDiskVersion)} 
	CloseRegKey $(KeyProduct)

	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\"$(CorrectProdHWName) $(!REG_KEY_ALL_ACCESS) KeyService
	Ifstr $(KeyService) != "" 
		SetRegValue $(KeyService) {ImagePath,$(NoTitle),$(!REG_VT_SZ),$(CorrectProdSWUpgradePath)}
	else 
		goto fatalregistry
	endif  
	
	CloseRegKey $(KeyService) 
	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\EventLog\System\"$(CorrectProdHWName) $(!REG_KEY_ALL_ACCESS) KeyEventLog

	Ifstr $(KeyEventLog) != "" 
		SetRegValue $(KeyEventLog) {EventMessageFile,$(NoTitle),$(!REG_VT_SZ),$(CorrectNetEventDLL)} 
	else 
		goto fatalregistry 
	endif 

	CloseRegKey $(KeyEventLog)
OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase) $(!REG_KEY_ALL_ACCESS) KeyNt 

;******************************************************************************************************************
;Paul May 10/8/99
;Update Loop

		set ValueEnable = ENABLE 
		set Count 	= "0"
		set MaxLoop	= "128"
		
		Begin_Upgrade_Loop =+
		;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) WARNING "Count equals "$(Count)
		
		OpenRegKey $(KeyNt) "" $(CorrectProdHWName)$(Count)"\Parameters" $(!REG_KEY_ALL_ACCESS) TestKey 
		ifstr $(TestKey) != $(KeyNull) 
			OpenRegKey $(!REG_H_LOCAL) "" $(NetworkCardsKey)$(Count)"\NetRules" $(!REG_KEY_ALL_ACCESS) NetCardKey 
			ifstr $(NetCardKey) != $(KeyNull) 
				SetRegValue $(NetCardKey) {"InfName",$(NoTitle),$(!REG_VT_SZ),$(!UG_Filename)} 
				CloseRegKey $(NetCardKey) 
			else
				goto Emergency_Out
			endif 
			CloseRegKey $(TestKey) 
		endif 
	
		;Increment Loop counter then compare against maximum allowed value
		set-add Count = $(Count),"1"

		ifstr(i) $(Count) == $(MaxLoop)
			
			goto Emergency_Out
		else
			
			goto Begin_Upgrade_Loop
		endif

;******************************************************************************************************************
Emergency_Out =+

 else 
	goto fatalregistry 
 endif 





     install "Install-OptionNewNDIS"
     goto laststep   


upgradeOldNDIS =+

 ifstr $(!STF_PLATFORM) == $(INF_PROCESSER) 


	ifstr(i) (*($(CurrentVersionValue),4)) == $(NT400VersionConstant) 

		;OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" + 	 
		;$(!REG_KEY_ALL_ACCESS) KeyNt 	 

		;set TrayIconList = {TCASUTIEXE,$(NoTitle),$(!REG_VT_SZ),$(TrayIconExe)" -off"} 	 
		;SetRegValue $(KeyNt) $(TrayIconList) 

		;DeleteRegValue $(KeyNt) "COMSMDEXE"
		;CloseRegKey $(KeyNt) 	 

		ifstr $(Install_3NIC_Diag) == "YES" 
			Debug-Output "$(InfFile) : (Install_3NIC_Diag) == "YES"" 
			; Shell "", DiagRegistry 

			; ***
			 ;install "Install-3nicdiag" 

			set InstallMode_Save = $(!NTN_InstallMode) 
			set !NTN_InstallMode = install 
			set SRCDIR_OVERRIDE_Save = $(!STF_SRCDIR_OVERRIDE) 
			set !STF_SRCDIR_OVERRIDE = $(SrcDir) 

			Shell $(!STF_WINDOWSSYSPATH)\TCAITDI.INF, InstallOption, $(CurrLang), + 
			"TCAITDI" ,$(SrcDir), YES, YES, YES, NO 
			set !NTN_InstallMode = $(InstallMode_Save) 
			set !STF_SRCDIR_OVERRIDE = $(SRCDIR_OVERRIDE_Save) 
	 
			ifstr(i) $(Install_Shortcuts) == "YES" 
				Debug-Output "$(InfFile) : (Install_Shortcuts) == "YES"" 
				; *** Responsilibity of the MasterNavigator ***
				; RunProgram ExitCode "Windows Directory" "" $(UnInstallerEXE).EXE "-setup" 

				;Debug-Output "$(InfFile) : Enabling Tray Icon" 
				;OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" +
				;$(!REG_KEY_ALL_ACCESS) KeyNt 

				;set TrayIconList = {TCASUTIEXE,$(NoTitle),$(!REG_VT_SZ),$(TrayIconExe)" -off"} 
				;SetRegValue $(KeyNt) $(TrayIconList)
				;DeleteRegValue $(KeyNt) "COMSMDEXE" 
				;CloseRegKey $(KeyNt) 
			endif 
		endif 
	endif 
 endif



 ;********************************************************************************

 install "Install-Option"

 ;*********************************************************************************
laststep =+
 ;*********************************************************************************


 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

 ; *** Responsilibity of the MasterNavigator ***
 ; RunProgram ExitCode "Windows Directory" "" $(UnInstallerEXE).EXE "-upgrade" 
 goto end

successful = +
 Debug-Output "$(InfFile) : Successful"
 goto end

abandon = +
 Debug-Output "$(InfFile) : Abandon"
 ForListDo $(OEM_ABANDON_OPTIONS)
	 Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), +
	 $(CorrectProdSWName), $($)
	 ifint $($ShellCode) != $(!SHELL_CODE_OK)
		 goto ShellCodeError
	 endif

	 set RegistryErrorIndex = $($R0)
	 Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
		goto fatalregistry
	 endif	
 EndForListDo

 Ifstr(i) $(OEM_ABANDON_SOFTWARE) == TRUE
	Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), +
	$(CorrectProdSWName), FALSE
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		goto ShellCodeError
	endif

	detect checkFileExist
	set Uninst = *($(uninstFound), 1)
	set RegistryErrorIndex = $($R0)
	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
		goto fatalregistry
	endif
 endif
 goto end


warning = +
 Debug-Output "$(InfFile) : 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 = +
 Debug-Output "$(InfFile) : nonfatalinfo"
 Set CommonStatus = STATUS_USERCANCEL
 Set Severity = STATUS
 goto nonfatalmsg


nonfatal = +
 Debug-Output "$(InfFile) : nonfatal"
 Set Severity = NONFATAL
 goto nonfatalmsg


nonfatalmsg = +
 Debug-Output "$(InfFile) : nonfatalmsg"
 ifstr(i) $(Error) == ""
	Set Severity = NONFATAL
	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 "RemoveAdapter"
 endif


fatalregistry = +
 Debug-Output "$(InfFile) : fatalregistry"
 Shell $(UtilityInf) RegistryErrorString $(RegistryErrorIndex)
 ifint $($ShellCode) != $(!SHELL_CODE_OK)
	goto ShellCodeError
 endif
 set Error = $($R0)
 goto fatal


fatal = +
 Debug-Output "$(InfFile) : 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 = +
 ifint $($ShellCode) == $(!SHELL_CODE_NO_SUCH_INF)
	Debug-Output "$(InfFile) : ShellCodeError - SHELL_CODE_NO_SUCH_INF"
 else-ifint $($ShellCode) == $(!SHELL_CODE_NO_SUCH_SECTION)
	Debug-Output "$(InfFile) : ShellCodeError - SHELL_CODE_NO_SUCH_SECTION"
 else
	Debug-Output "$(InfFile) : ShellCodeError - SHELL_CODE_ERROR"
 endif

 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 = +
 Debug-Output "$(InfFile) : Setfailed"
 set CommonStatus = STATUS_FAILED
 ifstr(i) $(OEM_ABANDON_ON) == TRUE
	set OEM_ABANDON_ON = FALSE
	goto abandon
 endif
 goto end


end = +
 goto term


term = +
 Return $(CommonStatus)



[checkFileExist]
 uninstFound = {} ? $(!LIBHANDLE) FindFileInstances $(!STF_WINDOWSSYSPATH)"\un3c90xa.exe" 
 DiagFound = {} ? $(!LIBHANDLE) FindFileInstances $(!STF_WINDOWSSYSPATH)"\tcaudiag.exe" 

[Install-Option]
 set STF_VITAL = ""
 set STF_OVERWRITE = "VERIFYSOURCEOLDER"
 Debug-Output $(InfName)"Adding files: Files-$(NDIS_VER), SrcDir=$(SrcDir)"
 AddSectionFilesToCopyList Files-$(NDIS_VER) $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers

	; DA installationn is now the responsibility of the Master Navigator
	; ifstr(i) (*($(CurrentVersionValue),4)) == $(NT400VersionConstant) 
	; 	AddSectionFilesToCopyList Files-DA $(SrcDir) $(!STF_WINDOWSSYSPATH)
	; endif

 set !STF_NCPA_FLUSH_COPYLIST = TRUE
 CopyFilesInCopyList
 Exit

 ;***********************************************************************************
[Install-OptionNewNDIS]
 set STF_VITAL = ""
 set STF_OVERWRITE = "VERIFYSOURCEOLDER"
 Debug-Output $(InfName)"Adding files: Files-$(NDIS_VER), SrcDir=$(SrcDir)"
 AddSectionFilesToCopyList Files-980BC$(NDIS_VER) $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
 set !STF_NCPA_FLUSH_COPYLIST = TRUE
 CopyFilesInCopyList
 Exit
 ;**************************************************************************************

[Install-3nicdiag]
 set STF_VITAL = ""
 set STF_OVERWRITE = "VERIFYSOURCEOLDER"
 ;AddSectionFilesToCopyList Files-3nicdiag $(SrcDir) $(!STF_WINDOWSSYSPATH)
 ;AddSectionFilesToCopyList Files-Cpl $(SrcDir) $(!STF_WINDOWSPATH)
 set !STF_NCPA_FLUSH_COPYLIST = TRUE
 CopyFilesInCopyList
 Exit

[Install-INF]
 set STF_VITAL = ""
 AddSectionFilesToCopyList Files-Inf $(SrcDir) $(!STF_WINDOWSSYSPATH)
 set !STF_NCPA_FLUSH_COPYLIST = TRUE
 CopyFilesInCopyList
 Exit


[Install-Uninstaller]
 set STF_VITAL = ""
 set STF_OVERWRITE = "VERIFYSOURCEOLDER"
 AddSectionFilesToCopyList Files-Uninstaller $(SrcDir) $(!STF_WINDOWSSYSPATH)
 set !STF_NCPA_FLUSH_COPYLIST = TRUE
 CopyFilesInCopyList
 Exit

[Install-OTHER]
 set STF_VITAL = ""
 set STF_OVERWRITE = "VERIFYSOURCEOLDER"
 AddSectionFilesToCopyList Files-OTHER $(SrcDir) $(!STF_WINDOWSSYSPATH)
 set !STF_NCPA_FLUSH_COPYLIST = TRUE
 CopyFilesInCopyList
 Exit

[Install-SHD]
 set STF_VITAL = ""
 set STF_OVERWRITE = "VERIFYSOURCEOLDER"
 AddSectionFilesToCopyList Files-SHD $(SrcDir) $(!STF_WINDOWSSYSPATH)
 set !STF_OVERWRITE = TRUE
 set !STF_NCPA_FLUSH_COPYLIST = TRUE
 CopyFilesInCopyList
 Exit


[Clean_Up_Registry]
	
	; 1.) 
	OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\3Com" $(!REG_KEY_ALL_ACCESS) THIS_KEY
	DeleteRegTree $(THIS_KEY) "EL98X"
	CloseRegKey $(THIS_KEY)

	; 2.) 
	OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\3Com" $(!REG_KEY_ALL_ACCESS) THIS_KEY
	DeleteRegTree $(THIS_KEY) "EL980N4"
	CloseRegKey $(THIS_KEY)

	; 3.) 
	OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\InstalledOptions" $(!REG_KEY_ALL_ACCESS) THIS_KEY
	DeleteRegTree $(THIS_KEY) "3Com Corporation"
	CloseRegKey $(THIS_KEY)

	; 4.) 
	;OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\3Com\Update" $(!REG_KEY_ALL_ACCESS) THIS_KEY
	;DeleteRegTree $(THIS_KEY) "3C980X"
	;CloseRegKey $(THIS_KEY)

	; 5.) Clean Up Compaq Hot plug support registry entries
	OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\Compaq\Cpqrcmc\ClassDLLs\NicMiniPort" $(!REG_KEY_ALL_ACCESS) THIS_KEY
	DeleteRegTree $(THIS_KEY) "EL980N4"
	CloseRegKey $(THIS_KEY)

	Exit


[Source Media Descriptions]
 1 = "ECD210P980X", TAGFILE = 3CDdisk1 

[ProductType]
 STF_PRODUCT = Winnt

[Files-Inf] 
 1, oemsetup.inf,SIZE=36000, RENAME=$(!UG_Filename)

[Files-980BCNDIS3]
 1,EL98XN3.SYS , SIZE=25001

[Files-980BCNDIS4]
 1,EL98XN4.SYS , SIZE=25001

[Files-NDIS3]
 1,EL98XN3.SYS , SIZE=25001

[Files-NDIS4]
 1,EL98XN4.SYS , SIZE=25001

[Files-Uninstaller]
 1,UN3C90XA.EXE, SIZE=6617

[Files-SHD]
1,srv_conf.EXE, SIZE=307
1,srv_conf.HLP, SIZE=500

[Files-Other]
1,pci_fix.sys, SIZE=65


; The file list below was requested by Certification Group team members

[Files-RemoveList]
srv_confe        = $(!STF_WINDOWSSYSPATH)\srv_conf.exe
srv_confh        = $(!STF_WINDOWSSYSPATH)\srv_conf.hlp
srv_confu	 = $(!STF_WINDOWSSYSPATH)\srv_conf.ex_
pci_fix		 = $(!STF_WINDOWSSYSPATH)\pci_fix.sys
pci_data	 = $(!STF_WINDOWSSYSPATH)\pci_data.exe
oemel98x	 = $(!STF_WINDOWSSYSPATH)\oemel98x.inf
el98xn4d	 = $(!STF_WINDOWSSYSPATH)\driver\el98xn4.sys
el98xn4s	 = $(!STF_WINDOWSSYSPATH)\el98xn4.sys
;3c980x		 = $(!STF_WINDOWSSYSPATH)\3c980x.ini
;instinfo	 = $(!STF_WINDOWSSYSPATH)\instinfo.ini

[LanguagesSupported]
 ENG

[OptionsTextENG]
 3C980X = "3Com 3C98x 10/100 Server NIC"
 
[FileConstantsENG]
 ProCaption = "Windows NT NIC 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:"

 ConnectionList = ^(ConnectionChoices, 1)
 ConnectionValues = ^(ConnectionChoices, 2)
 NoList = ^(NoChoices, 1)
 NoValues = ^(NoChoices, 2)
 ShellCodeErrorTitle = "Error: "$(Function$(Option)Title)
 ShellCodeErrorText = "Shell Code Error."
 CANNOT_FIND_ANY_CARD = "Network card is not present in the system"
 CANNOT_FIND_ANY_UNINSTALLED_CARD = "All the NICs supported by this product have already been installed."

[DialogConstantsENG]
 Help = "&Help"
 Exit = "Cancel"
 OK = "OK"
 HelpContext = ""
 Continue = "Continue"
 Cancel = "Cancel"

;(%VER OEMSETUP.INF - Installation file for 3C98X - v2.1.0.57)
Download Driver Pack

How To Update Drivers Manually

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.

server: web3, load: 1.74