;
;  Purpose:   Netcard setup information file for Windows NT 3.51 / NT 4.0
;
;  Author:    Tevin Chen
;
;  Date:      Apr, 2004
;

[Identification]
    OptionType = NetAdapter
[PlatformsSupported]
    PCI
[Options]
    FET

;============================================================================
[FileConstants]
UtilityInf      = "UTILITY.INF"
subroutineinf   = "SUBROUTN.INF"
SoftwareType    = "driver"
Exit_Code       = 0
NetEventDLL     = "%SystemRoot%\System32\netevent.dll"
IoLogMsgDLL     = "%SystemRoot%\System32\IoLogMsg.dll"
Manufacturer    = "VIA Technologies, Inc."

; Driver Version info
; VERSION.... 3.32
ProductMajorVersion = "3"
ProductMinorVersion = "32"
ProductVersion  = $(ProductMajorVersion)"."$(ProductMinorVersion)

; DEVICE_ID....
; (0x1106 == 4358)
VendorID = 4358

ProductSoftwareName     = "FETNDIS"
ProductSoftwareTitle    = "VIA Rhine Family Fast Ethernet Adapter Driver"
NT4Driver = "fetnd4.sys"
NT351Driver = "fetnd3.sys"
ProductSoftwareImagePathNT4 = "\SystemRoot\System32\drivers\"$(NT4Driver)
ProductSoftwareImagePathNT351 = "\SystemRoot\System32\drivers\"$(NT351Driver)
NetRuleSoftwareType     = "FETSys ndisDriver FETDriver"
NetRuleSoftwareUse      = $(SoftwareType)
NetRuleSoftwareBindForm = """FETSys"" yes no container"
NetRuleSoftwareClass    = {"FETDriver basic"}
NetRuleSoftwareSWBindable = {"FETDriver FETAdapter non exclusive 100"}

HelpFileName = "fetndh.hlp"
ProductHardwareName = "FETNDIS"

ProductHardwareFETVT3106STitle = "VIA Rhine III Management Adapter"
ProductHardwareFETVT3106JTitle = "VIA Rhine III Fast Ethernet Adapter"
ProductHardwareFETVT3065Title = "VIA Rhine II Fast Ethernet Adapter"
ProductHardwareFETVT3043Title = "VIA VT86C100A Rhine Fast Ethernet Adapter"
ProductHardwareFETDescription = "VIA Rhine Family Fast Ethernet Adapter"

NetRuleHardwareFETType  = "FET FETAdapter"
NetRuleHardwareFETClass = {"FETAdapter basic"}
AdapterFETType = 5  ;; PCI board
HelpFETId = 30
; DEVICE_ID....
; VT3043 (0x30431106 == 809701638)
VT3043CFID = 809701638

; VT3065 (0x30651106 == 811929862)
VT3065CFID = 811929862

; VT3106S (0x30531106 == 810750214)
VT3106SCFID = 810750214

; VT3106J (0x31061106 == 822481158)
VT3106JCFID = 822481158

; SubID....
; VT3106S (0x01061106 == 17174790 )
;VT3106SSubID = 17174790

; VT3106J (0x01051106 == 17109254 )
;VT3106JSubID = 17109254

; VT3065 (0x01021106 == 16912646)
;VT3065SubID = 16912646

; VT3043 (0x01001106 == 16781574)
;VT3043SubID = 16781574

NetRuleHardwareBindForm = " yes yes container"
ProductKeyName = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(ProductSoftwareName)"\CurrentVersion"
;ParamKeyName   = $(!NTN_ServiceBase)"\"$(ProductHardwareName)"\Parameters"

VT3106SDefaultParamList = { {ReceiveBuffers,$(NoTitle),$(!REG_VT_DWORD),64},+
                            {TransmitBuffers,$(NoTitle),$(!REG_VT_DWORD),64},+
                            {ReceiveBurstIndicate,$(NoTitle),$(!REG_VT_DWORD),64},+
                            {ReceiveThreshold,$(NoTitle),$(!REG_VT_DWORD),0},+
                            {TransmitThreshold,$(NoTitle),$(!REG_VT_DWORD),0},+
                            {BurstLength,$(NoTitle),$(!REG_VT_DWORD),1},+
                            {MapRegisters,$(NoTitle),$(!REG_VT_DWORD),32},+
                            {EarlyReceive,$(NoTitle),$(!REG_VT_DWORD),0},+
                            {EarlyTransmit,$(NoTitle),$(!REG_VT_DWORD),0},+
                            {ValidatePacketLen,$(NoTitle),$(!REG_VT_DWORD),0},+
                            {NetworkAddress,$(NoTitle),$(!REG_VT_SZ),"000000000000"},+
                            {ConnectionType,$(NoTitle),$(!REG_VT_DWORD),0},+
                            {NwayForce,$(NoTitle),$(!REG_VT_DWORD),1},+
                            {FlowCtrl,&(NoTitle),$(!REG_VT_DWORD),0},+
                            {AdaptiveInt,&(NoTitle),$(!REG_VT_DWORD),1},+
                            {8021pqtag,$(NoTitle),$(!REG_VT_DWORD),0},+
                            {VLANID,$(NoTitle),$(!REG_VT_DWORD),0} }

VT3106JDefaultParamList = { {ReceiveBuffers,$(NoTitle),$(!REG_VT_DWORD),64},+
                            {TransmitBuffers,$(NoTitle),$(!REG_VT_DWORD),64},+
                            {ReceiveBurstIndicate,$(NoTitle),$(!REG_VT_DWORD),64},+
                            {ReceiveThreshold,$(NoTitle),$(!REG_VT_DWORD),0},+
                            {TransmitThreshold,$(NoTitle),$(!REG_VT_DWORD),0},+
                            {BurstLength,$(NoTitle),$(!REG_VT_DWORD),1},+
                            {MapRegisters,$(NoTitle),$(!REG_VT_DWORD),32},+
                            {EarlyReceive,$(NoTitle),$(!REG_VT_DWORD),0},+
                            {EarlyTransmit,$(NoTitle),$(!REG_VT_DWORD),0},+
                            {ValidatePacketLen,$(NoTitle),$(!REG_VT_DWORD),0},+
                            {NetworkAddress,$(NoTitle),$(!REG_VT_SZ),"000000000000"},+
                            {ConnectionType,$(NoTitle),$(!REG_VT_DWORD),0},+
                            {NwayForce,$(NoTitle),$(!REG_VT_DWORD),1},+
                            {FlowCtrl,&(NoTitle),$(!REG_VT_DWORD),0}, +
                            {AdaptiveInt,&(NoTitle),$(!REG_VT_DWORD),1} }

VT3065DefaultParamList = { {ReceiveBuffers,$(NoTitle),$(!REG_VT_DWORD),64},+
                           {TransmitBuffers,$(NoTitle),$(!REG_VT_DWORD),64},+
                           {ReceiveBurstIndicate,$(NoTitle),$(!REG_VT_DWORD),64},+
                           {ReceiveThreshold,$(NoTitle),$(!REG_VT_DWORD),0},+
                           {TransmitThreshold,$(NoTitle),$(!REG_VT_DWORD),0},+
                           {BurstLength,$(NoTitle),$(!REG_VT_DWORD),1},+
                           {MapRegisters,$(NoTitle),$(!REG_VT_DWORD),32},+
                           {EarlyReceive,$(NoTitle),$(!REG_VT_DWORD),0},+
                           {EarlyTransmit,$(NoTitle),$(!REG_VT_DWORD),0},+
                           {ValidatePacketLen,$(NoTitle),$(!REG_VT_DWORD),0},+
                           {NetworkAddress,$(NoTitle),$(!REG_VT_SZ),"000000000000"},+
                           {ConnectionType,$(NoTitle),$(!REG_VT_DWORD),0},+
                           {NwayForce,$(NoTitle),$(!REG_VT_DWORD),1},+
                           {HWPhyReset,$(NoTitle),$(!REG_VT_DWORD),0},+
                           {FlowCtrl,&(NoTitle),$(!REG_VT_DWORD),0}, +
                           {AdaptiveInt,&(NoTitle),$(!REG_VT_DWORD),1} }

VT3043DefaultParamList = { {ReceiveBuffers,$(NoTitle),$(!REG_VT_DWORD),64},+
                           {TransmitBuffers,$(NoTitle),$(!REG_VT_DWORD),8},+
                           {ReceiveBurstIndicate,$(NoTitle),$(!REG_VT_DWORD),64},+
                           {ReceiveThreshold,$(NoTitle),$(!REG_VT_DWORD),0},+
                           {TransmitThreshold,$(NoTitle),$(!REG_VT_DWORD),0},+
                           {BurstLength,$(NoTitle),$(!REG_VT_DWORD),1},+
                           {MapRegisters,$(NoTitle),$(!REG_VT_DWORD),8},+
                           {EarlyReceive,$(NoTitle),$(!REG_VT_DWORD),0},+
                           {EarlyTransmit,$(NoTitle),$(!REG_VT_DWORD),0},+
                           {ValidatePacketLen,$(NoTitle),$(!REG_VT_DWORD),0},+
                           {NetworkAddress,$(NoTitle),$(!REG_VT_SZ),"000000000000"},+
                           {ConnectionType, $(NoTitle),$(!REG_VT_DWORD),0} }

ConnectionTypeParamList = { {Type,$(NoTitle),$(!REG_VT_SZ),"enum"},+
                            {ParamDesc,$(NoTitle),$(!REG_VT_SZ),"Connection Type"} }
ConnectionTypeEnumList = { {0,$(NoTitle),$(!REG_VT_SZ),"Auto-Negotiation"},+
                           {1,$(NoTitle),$(!REG_VT_SZ),"100BaseTx Half Duplex"},+
                           {2,$(NoTitle),$(!REG_VT_SZ),"100BaseTx Full Duplex"},+
                           {3,$(NoTitle),$(!REG_VT_SZ),"10BaseT   Half Duplex"},+
                           {4,$(NoTitle),$(!REG_VT_SZ),"10BaseT   Full Duplex"} }

NetworkAddressParamList = { {Type,$(NoTitle),$(!REG_VT_SZ),"edit"},+
                            {ParamDesc,$(NoTitle),$(!REG_VT_SZ),"Network Address"},+
                            {LimitText,$(NoTitle),$(!REG_VT_DWORD),12},+
                            {Optional,$(NoTitle),$(!REG_VT_DWORD),0} }

TransmitBuffersParamList = { {Type,$(NoTitle),$(!REG_VT_SZ),"int"},+
                             {ParamDesc,$(NoTitle),$(!REG_VT_SZ),"Transmit Buffers"},+
                             {Max,$(NoTitle),$(!REG_VT_DWORD),128},+
                             {Min,$(NoTitle),$(!REG_VT_DWORD),48} }

VT3043TransmitBuffersParamList = { {Type,$(NoTitle),$(!REG_VT_SZ),"int"},+
                                   {ParamDesc,$(NoTitle),$(!REG_VT_SZ),"Transmit Buffers"},+
                                   {Max,$(NoTitle),$(!REG_VT_DWORD),64},+
                                   {Min,$(NoTitle),$(!REG_VT_DWORD),4} }

ReceiveBuffersParamList = { {Type,$(NoTitle),$(!REG_VT_SZ),"int"},+
                            {ParamDesc,$(NoTitle),$(!REG_VT_SZ),"Receive Buffers"},+
                            {Max,$(NoTitle),$(!REG_VT_DWORD),128},+
                            {Min,$(NoTitle),$(!REG_VT_DWORD),64} }

FlowCtrlParamList = { {Type,$(NoTitle),$(!REG_VT_SZ),"enum"},+
                      {ParamDesc,$(NoTitle),$(!REG_VT_SZ),"Flow Control"} }
FlowCtrlEnumList = { {0,$(NoTitle),$(!REG_VT_SZ),"Hardware Default (Auto)"},+
                     {1,$(NoTitle),$(!REG_VT_SZ),"Disabled"},+
                     {2,$(NoTitle),$(!REG_VT_SZ),"Enabled"} }

AdaptiveIntParamList = { {Type,$(NoTitle),$(!REG_VT_SZ),"enum"},+
                         {ParamDesc,$(NoTitle),$(!REG_VT_SZ),"Adaptive Interrupt"} }

8021pqtagParamList = { {Type,$(NoTitle),$(!REG_VT_SZ),"enum"},+
                       {ParamDesc,$(NoTitle),$(!REG_VT_SZ),"802.1p/Q Tagging"} }

DisableEnableEnumList = { {0,$(NoTitle),$(!REG_VT_SZ),"Disabled"},+
                          {1,$(NoTitle),$(!REG_VT_SZ),"Enabled"} }

VLANIDParamList = { {Type,$(NoTitle),$(!REG_VT_SZ),"int"},+
                    {ParamDesc,$(NoTitle),$(!REG_VT_SZ),"VLAN ID"},+
                    {Max,$(NoTitle),$(!REG_VT_DWORD),4094},+
                    {Min,$(NoTitle),$(!REG_VT_DWORD),0} }

;============================================================================
[GeneralConstants]
Sub  = ""
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

NT351Version = "3.51"
NT40Version = "4.0"

;============================================================================
[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)

;============================================================================
[InstallOption]
    set Option   = $($1)
    set SrcDir   = $($2)
    set AddCopy  = $($3)
    set DoCopy   = $($4)
    set DoConfig = $($5)

    set LanguageList = ^(LanguagesSupported, 1)
    Ifcontains(i) $($0) NOT-IN $(LanguageList)
        Return STATUS_NOLANGUAGE
    endif

    set-subst LF = "\n"
    read-syms GeneralConstants
    read-syms FileConstants
    set NetRuleSoftwareBindable = $($R1)
    read-syms DialogConstants$(!STF_LANGUAGE)

    ifstr(i) $(!NTN_Origination) == "NCPA"
        set Continue = "OK"
    endif

    read-syms FileConstants$(!STF_LANGUAGE)
    detect date
    set-title  $(Function$(Option)Title)
    set to   = Begin
    set from = Begin
    set CommonStatus = STATUS_SUCCESSFUL
    EndWait

;----------------------------------------------------------------------------
Begin = +

    ; Get the version of NT from registry (for NT3.51/NT4.0)
    set CurrentVersionValue = ""
    OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\Microsoft\Windows NT\CurrentVersion" $(!REG_KEY_READ) KeyNt
    ifstr(i) $(KeyNt) != ""
        GetRegValue $(KeyNt) "CurrentVersion" CurrentVersionValue
        CloseRegKey $(KeyNt)
    endif

    set TargetVersion = *($(CurrentVersionValue),4)
    set TargetOS = ""
    ifstr $(TargetVersion) == $(NT351Version)
        set TargetOS = "NT351"
    else-ifstr $(TargetVersion) == $(NT40Version)
        set TargetOS = "NT4"
    else
        set Error = "This driver does not support Windows NT version "*($(CurrentVersionValue),4)" !"
        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(i) $(ProductKeyName) == $(!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

    set from = $(fatal)
    set to = $(fatal)
    goto $(StartLabel)
;----------------------------------------------------------------------------
installadapter = +

    OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct
    Ifstr $(KeyProduct) != $(KeyNull)
        CloseRegKey $(KeyProduct)
        Ifstr(i) !(NTN_RegBase) == $(ProductKeyName)
            Shell $(UtilityInf), VerExistedDlg, $(ProductSoftwareTitle), $(ProductVersion)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif
            goto end
        Else
            Shell $(UtilityInf), CardExistedDlg
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            ifstr(i) $($R1) != "OK"
                set CommonStatus = STATUS_USERCANCEL
                goto end
            endif
            set OldVersionExisted = $(TRUE)
        Endif
    Endif

    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

            set Error = $($R0)
            Goto fatal
        Else-Ifstr(i) $($R0) == STATUS_USERCANCEL
            Goto successful
        Endif
        
        Set SrcDir = $($R1)
    endif

    Goto installproduct
;----------------------------------------------------------------------------
configureadapter = +

    Ifstr(i) $(KeyProduct) == $(KeyNull)
        OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase) $(MAXIMUM_ALLOWED) KeyProduct
        Ifstr $(KeyProduct) == $(KeyNull)
            Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
            Goto fatalregistry
        Endif
    Endif

    Shell $(UtilityInf) FindService, $(KeyProduct)
    Ifint $($ShellCode) != $(!SHELL_CODE_OK)
        Goto ShellCodeError
    Endif

    Ifstr(i) $($R0) != NO_ERROR
        Goto fatalregistry
    endif

    set KeyParameters = $($R2)
    CloseRegKey $($R1)

    Ifstr $(KeyParameters) == $(KeyNull)
        set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
        goto fatalregistry
    endif

    set OldVersionExisted = $(TRUE)
    set ValueName = ""
    set ValueData = ""
    set ValueList = {}

    set PropKeyNameList = {}
    set PropKeyDescList = {}
    set KeyEnumValueList = {}
    set KeyEnumDescList = {}
    set DispTypeList = {}

    OpenRegKey $(KeyParameters) "" "UI" $(MAXIMUM_ALLOWED) H_UI
    ifstr $(H_UI) == $(KeyNull)
        set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE
        CloseRegKey $(KeyParameters)
        goto fatalregistry
    endif

    set UIKeyList = {}
    EnumRegKey $(H_UI) UIKeyList

    ForListDo $(UIKeyList)
        set UIKeyName = *($($), 1)
        set PropKeyNameList = >( $(PropKeyNameList), $(UIKeyName) )

        OpenRegKey $(H_UI) "" $(UIKeyName) $(MAXIMUM_ALLOWED) H_UIKey
        ifstr $(H_UIKey) == $(KeyNull)
            set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE
            CloseRegKey $(H_UI)
            goto fatalregistry
        endif

        EnumRegValue $(H_UIKey) ValueList

        ForListDo $(ValueList)
            set ValueName = *($($), 1)
            set ValueData = *($($), 4)

            ifstr(i) $(ValueName) == "Type"
                set DisplayType = $(ValueData)
                set DispTypeList = >( $(DispTypeList), $(DisplayType) )
            endif

            ifstr(i) $(ValueName) == "ParamDesc"
                set DisplayDesc = $(ValueData)
                set PropKeyDescList = >( $(PropKeyDescList), $(DisplayDesc) )
            endif

            ifstr(i) $(ValueName) == "Max"
                set MaxLimit = $(ValueData)
            endif

            ifstr(i) $(ValueName) == "Min"
                set MinLimit = $(ValueData)
            endif
        EndForListDo

        ifstr(i) $(DisplayType) == "int"
            set EnumValueStr = $(MinLimit)","$(MaxLimit)
            set KeyEnumValueList = >( $(KeyEnumValueList), $(EnumValueStr) )
            set KeyEnumDescList = >( $(KeyEnumDescList), "" )
        else-ifstr(i) $(DisplayType) == "edit"
            set KeyEnumValueList = >( $(KeyEnumValueList), "" )
            set KeyEnumDescList = >( $(KeyEnumDescList), "" )
        else-ifstr(i) $(DisplayType) == "enum"
            OpenRegKey $(H_UIKey) "" "enum" $(!REG_KEY_READ) H_Enum
            ifstr $(H_Enum) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE
                CloseRegKey $(H_UIKey)
                goto fatalregistry
            endif

            EnumRegValue $(H_Enum) EnumList

            set EnumValueStr = ""
            set EnumDescStr = ""
            set flag = $(FALSE)
            ForListDo $(EnumList)
                set EnumValue = *($($), 1)
                set EnumDesc = *($($), 4)

                ifint $(flag) == $(TRUE)
                    set EnumValueStr = $(EnumValueStr)","$(EnumValue)
                    set EnumDescStr = $(EnumDescStr)","$(EnumDesc)
                else
                    set EnumValueStr = $(EnumValue)
                    set EnumDescStr = $(EnumDesc)
                    set flag = $(TRUE)
                endif
            EndForListDo

            set KeyEnumValueList = >( $(KeyEnumValueList), $(EnumValueStr) )
            set KeyEnumDescList = >( $(KeyEnumDescList), $(EnumDescStr) )
        else
            ; Add Error Handling Code Here
        endif
    EndForListDo

    EnumRegValue $(KeyParameters) ValueList

    set CurrKeyValueList = {}

    ForListDo $(PropKeyNameList)
        set KeyName = $($)

        ForListDo $(ValueList)
            set ValueName = *($($), 1)
            set ValueData = *($($), 4)
            ifstr $(ValueName) == $(KeyName)
                set CurrKeyValueList = >($(CurrKeyValueList), $(ValueData))
            endif
        EndForListDo
    EndForListDo
    ;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) STATUS $(CurrKeyValueList)

    LoadLibrary "" $(!STF_WINDOWSSYSPATH)"\ntutil.dll" PropHandle
    LibraryProcedure SetResult, $(PropHandle), ShowProp, $(PropKeyDescList), +
                                                         $(CurrKeyValueList), +
                                                         $(KeyEnumValueList), +
                                                         $(KeyEnumDescList), +
                                                         $(DispTypeList), +
                                                         $(HelpFileName)
    FreeLibrary $(PropHandle)

    ifstr $(SetResult) == "PROPERTY_UI_USER_CANCEL"
        set CommonStatus = STATUS_USERCANCEL
        goto end
    endif

    ifstr $(SetResult) == $(CurrKeyValueList)
        set CommonStatus = STATUS_USERCANCEL
        goto end
    endif

    ifstr(i) $(!NTN_InstallMode) == configure
        goto updateparameters
    endif

;----------------------------------------------------------------------------
installproduct =+

    StartWait
    ; DEVICE_ID....
    ; 65535

    ; search device ID for 3043/3065/3106J/3106S
    set AdapterList65 = {}
    set AdapterList43 = {}
    set AdapterList106J = {}
    set AdapterList106S = {}
    set NoAdapter = $(TRUE)

    ; find 3043 adapters
    set-div DeviceID = $(VT3043CFID) 65535
    Shell $(UtilityInf), GetPCIInformation, $(VendorID) $(DeviceID)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
         goto ShellCodeError
    endif

    ifstr(i) $($R0) != {}
        set AdapterList43 = $($R0)
        set NoAdapter = $(FALSE)
    endif

    ; find 3065 adapters
    set-div DeviceID = $(VT3065CFID) 65535
    Shell $(UtilityInf), GetPCIInformation, $(VendorID) $(DeviceID)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        goto ShellCodeError
    endif

    ifstr(i) $($R0) != {}
        set AdapterList65 = $($R0)
        set NoAdapter = $(FALSE)
    endif

    ; find 3106J adapters
    set-div DeviceID = $(VT3106JCFID) 65535
    Shell $(UtilityInf), GetPCIInformation, $(VendorID) $(DeviceID)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        goto ShellCodeError
    endif

    ifstr(i) $($R0) != {}
        set AdapterList106J = $($R0)
        set NoAdapter = $(FALSE)
    endif
    
    ; find 3106S adapters
    set-div DeviceID = $(VT3106SCFID) 65535
    Shell $(UtilityInf), GetPCIInformation, $(VendorID) $(DeviceID)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        goto ShellCodeError
    endif

    ifstr(i) $($R0) != {}
        set AdapterList106S = $($R0)
        set NoAdapter = $(FALSE)
    endif
   
    ; no adapters was found
    ifint $(NoAdapter) == $(TRUE)
        set Error = $(CANNOT_FIND_ANY_CARD)
        set CommonStatus = USER_CANCEL
        set from = end
        goto nonfatal
    endif
    
    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

            set Error = $($R0)
            Goto fatal
        Else-Ifstr(i) $($R0) == STATUS_USERCANCEL
            Goto successful
        Endif
        Set SrcDir = $($R1)
    Endif

    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

    ; Chinghua - setting default values if user re-install the driver

    ifint $(OldVersionExisted) == $(TRUE)
        ; Update InfName and InfOption
        ;OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\Microsoft\Ncpa" $(MAXIMUM_ALLOWED) H_Ncpa
        ;ifstr $(H_Ncpa) == $(KeyNull)
        ;    Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
        ;    Goto fatalregistry
        ;endif

        ;GetRegValue $(H_Ncpa),"InfReturn", InfReturnList
        ;set InfReturnValue = *( $(InfReturnList), 4 )

        ;Split-String $(InfReturnValue) "," DestinationList
        ;set InfFileName = *( $(DestinationList), 1 )

        ;CloseRegKey $(H_Ncpa)

        Shell $(UtilityInf), ReduceInfPath, $(STF_CONTEXTINFNAME)
        set InfFileName = $($R0)

        OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName)"\NetRules" $(MAXIMUM_ALLOWED) H_NetRules
        ifstr $(H_NetRules) == $(KeyNull)
            Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
            Goto fatalregistry
        endif

        SetRegValue $(H_NetRules) {InfName,$(NoTitle),$(!REG_VT_SZ),$(InfFileName)}
        SetRegValue $(H_NetRules) {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}
        CloseRegKey $(H_NetRules)

        ; setting default value for 3106S ****************************
        ForListDo $(AdapterList106S)
            set BusNum = *( $($), 1 )
            set DeviceNum = *( $($), 2 )
            set Sub = "VT3106S"
            set Description = $(ProductHardware$(Option)Description)
            set Product = $(ProductHardwareName)

            OpenRegKey $(!REG_H_LOCAL) +
                       "" +
                       "SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards" +
                       $(!REG_KEY_READ) +
                       IE_KeyNetcards

            EnumRegKey $(IE_KeyNetcards) IE_KeyNameList

            ForListDo $(IE_KeyNameList)
                set IE_KeyName = *( $($), 1 )

                OpenRegKey $(IE_KeyNetcards) "" $(IE_KeyName) $(!REG_KEY_READ) IE_Card
                ifstr $(IE_Card) == $(KeyNull)
                    Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
                    Goto fatalregistry
                endif

                GetRegValue $(IE_Card),"ProductName", ProductNameInfo
                set CardProductName = *( $(ProductNameInfo), 4 )

                ifstr(i) $(CardProductName) == $(Product)
                    GetRegValue $(IE_Card), "ServiceName", ServiceNameInfo
                    set ServiceName = *( $(ServiceNameInfo), 4 )

                    OpenRegKey $(!REG_H_LOCAL) +
                               "" +
                               $(!NTN_ServiceBase)"\"$(ServiceName)"\Parameters" +
                               $(!REG_KEY_READWRITE) +
                               IE_KeyService
                    ifstr $(IE_KeyService) == $(KeyNull)
                        Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
                        Goto fatalregistry
                    endif

                    GetRegValue $(IE_KeyService), "BusNumber", BusInfo
                    GetRegValue $(IE_KeyService), "SlotNumber", SlotInfo
                    set CardBusNum = *( $(BusInfo), 4 )
                    set CardSlotNum = *( $(SlotInfo), 4 )

                    ifint $(CardBusNum) == $(BusNum)
                        ifint $(CardSlotNum) == $(DeviceNum)
                            ; Update InfName and InfOption
                            OpenRegKey $(IE_Card) "" "NetRules" $(MAXIMUM_ALLOWED) H_NetRules
                            ifstr $(H_NetRules) == $(KeyNull)
                                Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
                                Goto fatalregistry
                            endif

                            SetRegValue $(H_NetRules) {InfName,$(NoTitle),$(!REG_VT_SZ),$(InfFileName)}
                            SetRegValue $(H_NetRules) {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}
                            CloseRegKey $(H_NetRules)

                            ; Set default value
                            set NewValueList = $($(Sub)DefaultParamList)
                            set ParamPath = $(!NTN_ServiceBase)"\"$(ServiceName)"\Parameters"
                            OpenRegKey $(!REG_H_LOCAL) "" $(ParamPath) $(!REG_KEY_WRITE) KeyParam
                            Shell $(UtilityInf), AddValueList, $(KeyParam), $(NewValueList)

                            ; for 3106S UI registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>
                            CreateRegKey $(KeyParam) {"UI",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_UI
                            ifstr $(H_UI) == $(KeyNull)
                                OpenRegKey $(KeyParam) "" "UI" $(MAXIMUM_ALLOWED) H_UI
                                ifstr $(H_UI) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(KeyParam)
                                    goto fatalregistry
                                endif
                            endif

                            ; for 3106S ConnectionType registry >>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"ConnectionType",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_ConnectionType
                            ifstr $(H_ConnectionType) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "ConnectionType" $(MAXIMUM_ALLOWED) H_ConnectionType
                                ifstr $(H_ConnectionType) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            ; for 3106S ConnectionType Enum registry
                            CreateRegKey $(H_ConnectionType) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
                            ifstr $(H_Enum) == $(KeyNull)
                                OpenRegKey $(H_ConnectionType) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
                                ifstr $(H_Enum) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_ConnectionType)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_Enum)
                            CloseRegKey $(H_ConnectionType)

                            ; for 3106S NetworkAddress registry >>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"NetworkAddress",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_NetworkAddress
                            ifstr $(H_NetworkAddress) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "NetworkAddress" $(MAXIMUM_ALLOWED) H_NetworkAddress
                                ifstr $(H_NetworkAddress) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_NetworkAddress)

                            ; for 3106S TransmitBuffers registry >>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"TransmitBuffers",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_TransmitBuffers
                            ifstr $(H_TransmitBuffers) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "TransmitBuffers" $(MAXIMUM_ALLOWED) H_TransmitBuffers
                                ifstr $(H_TransmitBuffers) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_TransmitBuffers)

                            ; for 3106S ReceiveBuffers registry >>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"ReceiveBuffers",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_ReceiveBuffers
                            ifstr $(H_ReceiveBuffers) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "ReceiveBuffers" $(MAXIMUM_ALLOWED) H_ReceiveBuffers
                                ifstr $(H_ReceiveBuffers) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_ReceiveBuffers)

                            ; for 3106S FlowCtrl registry >>>>>>>>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"FlowCtrl",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_FlowCtrl
                            ifstr $(H_FlowCtrl) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "FlowCtrl" $(MAXIMUM_ALLOWED) H_FlowCtrl
                                ifstr $(H_FlowCtrl) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            ; for 3106S FlowCtrl Enum registry
                            CreateRegKey $(H_FlowCtrl) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
                            ifstr $(H_Enum) == $(KeyNull)
                                OpenRegKey $(H_FlowCtrl) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
                                ifstr $(H_Enum) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_FlowCtrl)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_Enum)
                            CloseRegKey $(H_FlowCtrl)

                            ; for 3106S AdaptiveInt registry >>>>>>>>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"AdaptiveInt",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_AdaptiveInt
                            ifstr $(H_AdaptiveInt) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "AdaptiveInt" $(MAXIMUM_ALLOWED) H_AdaptiveInt
                                ifstr $(H_AdaptiveInt) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            ; for 3106S AdaptiveInt Enum registry
                            CreateRegKey $(H_AdaptiveInt) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
                            ifstr $(H_Enum) == $(KeyNull)
                                OpenRegKey $(H_AdaptiveInt) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
                                ifstr $(H_Enum) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_AdaptiveInt)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_Enum)
                            CloseRegKey $(H_AdaptiveInt)

                            ; for 3106S 8021pqtag registry >>>>>>>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"8021pqtag",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_8021pqtag
                            ifstr $(H_8021pqtag) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "8021pqtag" $(MAXIMUM_ALLOWED) H_8021pqtag
                                ifstr $(H_8021pqtag) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

                            set NewValueList = $(8021pqtagParamList)
                            Shell $(UtilityInf), AddValueList, $(H_8021pqtag), $(NewValueList)
                            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                                goto ShellCodeError
                            endif

                            ; for 3106S 8021pqtag Enum registry
                            CreateRegKey $(H_8021pqtag) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
                            ifstr $(H_Enum) == $(KeyNull)
                                OpenRegKey $(H_8021pqtag) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
                                ifstr $(H_Enum) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_8021pqtag)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_Enum)
                            CloseRegKey $(H_8021pqtag)

                            ; for 3106S VLANID registry >>>>>>>>>>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"VLANID",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_VLANID
                            ifstr $(H_VLANID) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "VLANID" $(MAXIMUM_ALLOWED) H_VLANID
                                ifstr $(H_VLANID) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_VLANID)
                            CloseRegKey $(H_UI)

                            CloseRegKey $(KeyParam)

                            ; Update Software Title
                            set ParamPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\"$(IE_KeyName)
                            OpenRegKey $(!REG_H_LOCAL) "" $(ParamPath) $(!REG_KEY_WRITE) KeyParam
                            SetRegValue $(KeyParam) {Title,$(NoTitle),$(!REG_VT_SZ),"["$(IE_KeyName)"] "$(ProductHardware$(Option)$(Sub)Title)}
                            CloseRegKey $(KeyParam)

                            ; Update Version Number
                            set ParamPath = "SOFTWARE\"$(Manufacturer)"\"$(ProductSoftwareName)"\CurrentVersion"
                            OpenRegKey $(!REG_H_LOCAL) "" $(ParamPath) $(!REG_KEY_WRITE) KeyParam
                            SetRegValue $(KeyParam) {MajorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMajorVersion)}
                            SetRegValue $(KeyParam) {MinorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMinorVersion)}
                            CloseRegKey $(KeyParam)
                        endif
                    endif
                    CloseRegKey $(IE_KeyService)

                endif
                CloseRegKey $(IE_Card)

            EndForListDo
            CloseRegKey $(IE_KeyNetcards)

        EndForListDo

        
        ; setting default value for 3106J ****************************
        ForListDo $(AdapterList106J)
            set BusNum = *( $($), 1 )
            set DeviceNum = *( $($), 2 )
            set Sub = "VT3106J"
            set Description = $(ProductHardware$(Option)Description)
            set Product = $(ProductHardwareName)

            OpenRegKey $(!REG_H_LOCAL) +
                       "" +
                       "SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards" +
                       $(!REG_KEY_READ) +
                       IE_KeyNetcards

            EnumRegKey $(IE_KeyNetcards) IE_KeyNameList

            ForListDo $(IE_KeyNameList)
                set IE_KeyName = *( $($), 1 )

                OpenRegKey $(IE_KeyNetcards) "" $(IE_KeyName) $(!REG_KEY_READ) IE_Card
                ifstr $(IE_Card) == $(KeyNull)
                    Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
                    Goto fatalregistry
                endif

                GetRegValue $(IE_Card),"ProductName", ProductNameInfo
                set CardProductName = *($(ProductNameInfo), 4)

                ifstr(i) $(CardProductName) == $(Product)
                    GetRegValue $(IE_Card), "ServiceName", ServiceNameInfo
                    set ServiceName = *($(ServiceNameInfo), 4)
                    OpenRegKey $(!REG_H_LOCAL) +
                               "" +
                               $(!NTN_ServiceBase)"\"$(ServiceName)"\Parameters" +
                               $(!REG_KEY_READWRITE) +
                               IE_KeyService
                    ifstr $(IE_KeyService) == $(KeyNull)
                        Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
                        Goto fatalregistry
                    endif

                    GetRegValue $(IE_KeyService), "BusNumber", BusInfo
                    GetRegValue $(IE_KeyService), "SlotNumber", SlotInfo
                    set CardBusNum = *( $(BusInfo), 4 )
                    set CardSlotNum = *( $(SlotInfo), 4 )

                    ifint $(CardBusNum) == $(BusNum)
                        ifint $(CardSlotNum) == $(DeviceNum)
                            ; Update InfName and InfOption
                            OpenRegKey $(IE_Card) "" "NetRules" $(MAXIMUM_ALLOWED) H_NetRules
                            ifstr $(H_NetRules) == $(KeyNull)
                                Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
                                Goto fatalregistry
                            endif

                            SetRegValue $(H_NetRules) {InfName,$(NoTitle),$(!REG_VT_SZ),$(InfFileName)}
                            SetRegValue $(H_NetRules) {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}
                            CloseRegKey $(H_NetRules)

                            ; Set default value
                            set NewValueList = $($(Sub)DefaultParamList)
                            set ParamPath = $(!NTN_ServiceBase)"\"$(ServiceName)"\Parameters"
                            OpenRegKey $(!REG_H_LOCAL) "" $(ParamPath) $(!REG_KEY_WRITE) KeyParam
                            Shell  $(UtilityInf), AddValueList, $(KeyParam), $(NewValueList)

                            ; for 3106J UI registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>
                            CreateRegKey $(KeyParam) {"UI",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_UI
                            ifstr $(H_UI) == $(KeyNull)
                                OpenRegKey $(KeyParam) "" "UI" $(MAXIMUM_ALLOWED) H_UI
                                ifstr $(H_UI) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(KeyParam)
                                    goto fatalregistry
                                endif
                            endif

                            ; for 3106J ConnectionType registry >>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"ConnectionType",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_ConnectionType
                            ifstr $(H_ConnectionType) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "ConnectionType" $(MAXIMUM_ALLOWED) H_ConnectionType
                                ifstr $(H_ConnectionType) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            ; for 3106J ConnectionType Enum registry
                            CreateRegKey $(H_ConnectionType) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
                            ifstr $(H_Enum) == $(KeyNull)
                                OpenRegKey $(H_ConnectionType) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
                                ifstr $(H_Enum) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_ConnectionType)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_Enum)
                            CloseRegKey $(H_ConnectionType)

                            ; for 3106J NetworkAddress registry >>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"NetworkAddress",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_NetworkAddress
                            ifstr $(H_NetworkAddress) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "NetworkAddress" $(MAXIMUM_ALLOWED) H_NetworkAddress
                                ifstr $(H_NetworkAddress) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_NetworkAddress)

                            ; for 3106J TransmitBuffers registry >>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"TransmitBuffers",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_TransmitBuffers
                            ifstr $(H_TransmitBuffers) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "TransmitBuffers" $(MAXIMUM_ALLOWED) H_TransmitBuffers
                                ifstr $(H_TransmitBuffers) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_TransmitBuffers)

                            ; for 3106J ReceiveBuffers registry >>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"ReceiveBuffers",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_ReceiveBuffers
                            ifstr $(H_ReceiveBuffers) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "ReceiveBuffers" $(MAXIMUM_ALLOWED) H_ReceiveBuffers
                                ifstr $(H_ReceiveBuffers) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_ReceiveBuffers)

                            ; for 3106J FlowCtrl registry >>>>>>>>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"FlowCtrl",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_FlowCtrl
                            ifstr $(H_FlowCtrl) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "FlowCtrl" $(MAXIMUM_ALLOWED) H_FlowCtrl
                                ifstr $(H_FlowCtrl) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            ; for 3106J FlowCtrl Enum registry
                            CreateRegKey $(H_FlowCtrl) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
                            ifstr $(H_Enum) == $(KeyNull)
                                OpenRegKey $(H_FlowCtrl) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
                                ifstr $(H_Enum) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_FlowCtrl)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_Enum)
                            CloseRegKey $(H_FlowCtrl)

                            ; for 3106J AdaptiveInt registry >>>>>>>>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"AdaptiveInt",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_AdaptiveInt
                            ifstr $(H_AdaptiveInt) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "AdaptiveInt" $(MAXIMUM_ALLOWED) H_AdaptiveInt
                                ifstr $(H_AdaptiveInt) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            ; for 3106J AdaptiveInt Enum registry
                            CreateRegKey $(H_AdaptiveInt) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
                            ifstr $(H_Enum) == $(KeyNull)
                                OpenRegKey $(H_AdaptiveInt) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
                                ifstr $(H_Enum) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_AdaptiveInt)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_Enum)
                            CloseRegKey $(H_AdaptiveInt)

                            CloseRegKey $(KeyParam)

                            ; Update Software Title
                            set ParamPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\"$(IE_KeyName)
                            OpenRegKey $(!REG_H_LOCAL) "" $(ParamPath) $(!REG_KEY_WRITE) KeyParam
                            SetRegValue $(KeyParam) {Title,$(NoTitle),$(!REG_VT_SZ),"["$(IE_KeyName)"] "$(ProductHardware$(Option)$(Sub)Title)}
                            CloseRegKey $(KeyParam)

                            ; Update Version Number
                            set ParamPath = "SOFTWARE\"$(Manufacturer)"\"$(ProductSoftwareName)"\CurrentVersion"
                            OpenRegKey $(!REG_H_LOCAL) "" $(ParamPath) $(!REG_KEY_WRITE) KeyParam
                            SetRegValue $(KeyParam) {MajorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMajorVersion)}
                            SetRegValue $(KeyParam) {MinorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMinorVersion)}
                            CloseRegKey $(KeyParam)
                        endif
                    endif
                    CloseRegKey $(IE_KeyService)

                endif
                CloseRegKey $(IE_Card)

            EndForListDo
            CloseRegKey $(IE_KeyNetcards)

        EndForListDo


        ; setting default value for 3065 *****************************
        ForListDo $(AdapterList65)
            set BusNum = *( $($), 1 )
            set DeviceNum = *( $($), 2 )
            set Sub = "VT3065"
            set Description = $(ProductHardware$(Option)Description)
            set Product = $(ProductHardwareName)

            OpenRegKey $(!REG_H_LOCAL) +
                       "" +
                       "SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards" +
                       $(!REG_KEY_READ) +
                       IE_KeyNetcards

            EnumRegKey $(IE_KeyNetcards) IE_KeyNameList
            ForListDo $(IE_KeyNameList)
                set IE_KeyName = *( $($), 1 )

                OpenRegKey $(IE_KeyNetcards) "" $(IE_KeyName) $(MAXIMUM_ALLOWED) IE_Card
                ifstr $(IE_Card) == $(KeyNull)
                    Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
                    Goto fatalregistry
                endif

                GetRegValue $(IE_Card), "ProductName", ProductNameInfo
                set CardProductName = *( $(ProductNameInfo), 4 )

                ifstr(i) $(CardProductName) == $(Product)
                    GetRegValue $(IE_Card), "ServiceName", ServiceNameInfo
                    set ServiceName = *( $(ServiceNameInfo), 4 )

                    OpenRegKey $(!REG_H_LOCAL) +
                               "" +
                               $(!NTN_ServiceBase)"\"$(ServiceName)"\Parameters" +
                               $(!REG_KEY_READWRITE) +
                               IE_KeyService
                    ifstr $(IE_KeyService) == $(KeyNull)
                        Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
                        Goto fatalregistry
                    endif

                    GetRegValue $(IE_KeyService), "BusNumber", BusInfo
                    GetRegValue $(IE_KeyService), "SlotNumber", SlotInfo
                    set CardBusNum = *( $(BusInfo), 4 )
                    set CardSlotNum = *( $(SlotInfo), 4 )

                    ifint $(CardBusNum) == $(BusNum)
                        ifint $(CardSlotNum) == $(DeviceNum)
                            ; Update InfName and InfOption
                            OpenRegKey $(IE_Card) "" "NetRules" $(MAXIMUM_ALLOWED) H_NetRules
                            ifstr $(H_NetRules) == $(KeyNull)
                                Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
                                Goto fatalregistry
                            endif

                            SetRegValue $(H_NetRules) {InfName,$(NoTitle),$(!REG_VT_SZ),$(InfFileName)}
                            SetRegValue $(H_NetRules) {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}
                            CloseRegKey $(H_NetRules)

                            ; Set default value
                            set NewValueList = $($(Sub)DefaultParamList)
                            set ParamPath = $(!NTN_ServiceBase)"\"$(ServiceName)"\Parameters"
                            OpenRegKey $(!REG_H_LOCAL) "" $(ParamPath) $(!REG_KEY_WRITE) KeyParam
                            Shell $(UtilityInf), AddValueList, $(KeyParam), $(NewValueList)

                            ; for 3065 UI registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                            CreateRegKey $(KeyParam) {"UI",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_UI
                            ifstr $(H_UI) == $(KeyNull)
                                OpenRegKey $(KeyParam) "" "UI" $(MAXIMUM_ALLOWED) H_UI
                                ifstr $(H_UI) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(KeyParam)
                                    goto fatalregistry
                                endif
                            endif

                            ; for 3065 ConnectionType registry >>>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"ConnectionType",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_ConnectionType
                            ifstr $(H_ConnectionType) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "ConnectionType" $(MAXIMUM_ALLOWED) H_ConnectionType
                                ifstr $(H_ConnectionType) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            ; for 3065 ConnectionType Enum registry
                            CreateRegKey $(H_ConnectionType) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
                            ifstr $(H_Enum) == $(KeyNull)
                                OpenRegKey $(H_ConnectionType) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
                                ifstr $(H_Enum) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_ConnectionType)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_Enum)
                            CloseRegKey $(H_ConnectionType)

                            ; for 3065 NetworkAddress registry >>>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"NetworkAddress",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_NetworkAddress
                            ifstr $(H_NetworkAddress) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "NetworkAddress" $(MAXIMUM_ALLOWED) H_NetworkAddress
                                ifstr $(H_NetworkAddress) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_NetworkAddress)

                            ; for 3065 TransmitBuffers registry >>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"TransmitBuffers",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_TransmitBuffers
                            ifstr $(H_TransmitBuffers) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "TransmitBuffers" $(MAXIMUM_ALLOWED) H_TransmitBuffers
                                ifstr $(H_TransmitBuffers) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_TransmitBuffers)

                            ; for 3065 ReceiveBuffers registry >>>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"ReceiveBuffers",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_ReceiveBuffers
                            ifstr $(H_ReceiveBuffers) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "ReceiveBuffers" $(MAXIMUM_ALLOWED) H_ReceiveBuffers
                                ifstr $(H_ReceiveBuffers) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_ReceiveBuffers)

                            ; for 3065 FlowCtrl registry >>>>>>>>>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"FlowCtrl",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_FlowCtrl
                            ifstr $(H_FlowCtrl) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "FlowCtrl" $(MAXIMUM_ALLOWED) H_FlowCtrl
                                ifstr $(H_FlowCtrl) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            ; for 3065 FlowCtrl Enum registry
                            CreateRegKey $(H_FlowCtrl) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
                            ifstr $(H_Enum) == $(KeyNull)
                                OpenRegKey $(H_FlowCtrl) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
                                ifstr $(H_Enum) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_FlowCtrl)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_Enum)
                            CloseRegKey $(H_FlowCtrl)

                            ; for 3065 AdaptiveInt registry >>>>>>>>>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"AdaptiveInt",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_AdaptiveInt
                            ifstr $(H_AdaptiveInt) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "AdaptiveInt" $(MAXIMUM_ALLOWED) H_AdaptiveInt
                                ifstr $(H_AdaptiveInt) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            ; for 3065 AdaptiveInt Enum registry
                            CreateRegKey $(H_AdaptiveInt) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
                            ifstr $(H_Enum) == $(KeyNull)
                                OpenRegKey $(H_AdaptiveInt) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
                                ifstr $(H_Enum) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_AdaptiveInt)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_Enum)
                            CloseRegKey $(H_AdaptiveInt)

                            CloseRegKey $(KeyParam)

                            ; Update Software Title
                            set ParamPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\"$(IE_KeyName)
                            OpenRegKey $(!REG_H_LOCAL) "" $(ParamPath) $(!REG_KEY_WRITE) KeyParam
                            SetRegValue $(KeyParam) {Title,$(NoTitle),$(!REG_VT_SZ),"["$(IE_KeyName)"] "$(ProductHardware$(Option)$(Sub)Title)}
                            CloseRegKey $(KeyParam)

                            ; Update Version Number
                            set ParamPath = "SOFTWARE\"$(Manufacturer)"\"$(ProductSoftwareName)"\CurrentVersion"
                            OpenRegKey $(!REG_H_LOCAL) "" $(ParamPath) $(!REG_KEY_WRITE) KeyParam
                            SetRegValue $(KeyParam) {MajorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMajorVersion)}
                            SetRegValue $(KeyParam) {MinorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMinorVersion)}
                            CloseRegKey $(KeyParam)
                        endif
                    endif
                    CloseRegKey $(IE_KeyService)

                endif
                CloseRegKey $(IE_Card)

            EndForListDo
            CloseRegKey $(IE_KeyNetcards)

        EndForListDo

        ; setting default value for 3043 *****************************
        ForListDo $(AdapterList43)
            set BusNum = *( $($), 1 )
            set DeviceNum = *( $($), 2 )
            set Sub = "VT3043"
            set Description = $(ProductHardware$(Option)Description)
            set Product = $(ProductHardwareName)

            OpenRegKey $(!REG_H_LOCAL) +
                       "" +
                       "SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards" +
                       $(!REG_KEY_READ) +
                       IE_KeyNetcards

            EnumRegKey $(IE_KeyNetcards) IE_KeyNameList
            ForListDo $(IE_KeyNameList)
                set IE_KeyName = *( $($), 1 )
                OpenRegKey $(IE_KeyNetcards) "" $(IE_KeyName) $(!REG_KEY_READ) IE_Card
                ifstr $(IE_Card) == $(KeyNull)
                    Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
                    Goto fatalregistry
                endif

                GetRegValue $(IE_Card),"ProductName", ProductNameInfo
                set CardProductName = *( $(ProductNameInfo), 4 )

                ifstr(i) $(CardProductName) == $(Product)
                    GetRegValue $(IE_Card), "ServiceName", ServiceNameInfo
                    set ServiceName = *( $(ServiceNameInfo), 4 )

                    OpenRegKey $(!REG_H_LOCAL) +
                               "" +
                               $(!NTN_ServiceBase)"\"$(ServiceName)"\Parameters" +
                               $(!REG_KEY_READWRITE) +
                               IE_KeyService
                    ifstr $(IE_KeyService) == $(KeyNull)
                        Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
                        Goto fatalregistry
                    endif

                    GetRegValue $(IE_KeyService), "BusNumber", BusInfo
                    GetRegValue $(IE_KeyService), "SlotNumber", SlotInfo
                    set CardBusNum = *( $(BusInfo), 4 )
                    set CardSlotNum = *( $(SlotInfo), 4 )

                    ifint $(CardBusNum) == $(BusNum)
                        ifint $(CardSlotNum) == $(DeviceNum)
                            ; Update InfName and InfOption
                            OpenRegKey $(IE_Card) "" "NetRules" $(MAXIMUM_ALLOWED) H_NetRules
                            ifstr $(H_NetRules) == $(KeyNull)
                                Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
                                Goto fatalregistry
                            endif

                            SetRegValue $(H_NetRules) {InfName,$(NoTitle),$(!REG_VT_SZ),$(InfFileName)}
                            SetRegValue $(H_NetRules) {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}
                            CloseRegKey $(H_NetRules)

                            ; Set default value
                            set NewValueList = $($(Sub)DefaultParamList)
                            set ParamPath = $(!NTN_ServiceBase)"\"$(ServiceName)"\Parameters"
                            OpenRegKey $(!REG_H_LOCAL) "" $(ParamPath) $(!REG_KEY_WRITE) KeyParam
                            Shell  $(UtilityInf), AddValueList, $(KeyParam), $(NewValueList)

                            ; for 3043 UI registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                            CreateRegKey $(KeyParam) {"UI",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_UI
                            ifstr $(H_UI) == $(KeyNull)
                                OpenRegKey $(KeyParam) "" "UI" $(MAXIMUM_ALLOWED) H_UI
                                ifstr $(H_UI) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(KeyParam)
                                    goto fatalregistry
                                endif
                            endif

                            ; for 3043 ConnectionType registry >>>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"ConnectionType",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_ConnectionType
                            ifstr $(H_ConnectionType) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "ConnectionType" $(MAXIMUM_ALLOWED) H_ConnectionType
                                ifstr $(H_ConnectionType) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            ; for 3043 ConnectionType Enum registry
                            CreateRegKey $(H_ConnectionType) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
                            ifstr $(H_Enum) == $(KeyNull)
                                OpenRegKey $(H_ConnectionType) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
                                ifstr $(H_Enum) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_ConnectionType)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_Enum)
                            CloseRegKey $(H_ConnectionType)

                            ; for 3043 NetworkAddress registry >>>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"NetworkAddress",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_NetworkAddress
                            ifstr $(H_NetworkAddress) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "NetworkAddress" $(MAXIMUM_ALLOWED) H_NetworkAddress
                                ifstr $(H_NetworkAddress) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_NetworkAddress)

                            ; for 3043 TransmitBuffers registry >>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"TransmitBuffers",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_TransmitBuffers
                            ifstr $(H_TransmitBuffers) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "TransmitBuffers" $(MAXIMUM_ALLOWED) H_TransmitBuffers
                                ifstr $(H_TransmitBuffers) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

                            set NewValueList = $($(Sub)TransmitBuffersParamList)
                            Shell $(UtilityInf), AddValueList, $(H_TransmitBuffers), $(NewValueList)
                            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                                goto ShellCodeError
                            endif

                            CloseRegKey $(H_TransmitBuffers)

                            ; for 3043 ReceiveBuffers registry >>>>>>>>>>>>>>>>>
                            CreateRegKey $(H_UI) {"ReceiveBuffers",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_ReceiveBuffers
                            ifstr $(H_ReceiveBuffers) == $(KeyNull)
                                OpenRegKey $(H_UI) "" "ReceiveBuffers" $(MAXIMUM_ALLOWED) H_ReceiveBuffers
                                ifstr $(H_ReceiveBuffers) == $(KeyNull)
                                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                                    CloseRegKey $(H_UI)
                                    goto fatalregistry
                                endif
                            endif

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

                            CloseRegKey $(H_ReceiveBuffers)

                            CloseRegKey $(KeyParam)

                            ; Update Software Title
                            set ParamPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\"$(IE_KeyName)
                            OpenRegKey $(!REG_H_LOCAL) "" $(ParamPath) $(!REG_KEY_WRITE) KeyParam
                            SetRegValue $(KeyParam) {Title,$(NoTitle),$(!REG_VT_SZ),"["$(IE_KeyName)"] "$(ProductHardware$(Option)$(Sub)Title)}
                            CloseRegKey $(KeyParam)

                            ; Update Version Number
                            set ParamPath = "SOFTWARE\"$(Manufacturer)"\"$(ProductSoftwareName)"\CurrentVersion"
                            OpenRegKey $(!REG_H_LOCAL) "" $(ParamPath) $(!REG_KEY_WRITE) KeyParam
                            SetRegValue $(KeyParam) {MajorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMajorVersion)}
                            SetRegValue $(KeyParam) {MinorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMinorVersion)}
                            CloseRegKey $(KeyParam)
                        endif
                    endif
                    CloseRegKey $(IE_KeyService)

                endif
                CloseRegKey $(IE_Card)

            EndForListDo
            CloseRegKey $(IE_KeyNetcards)

        EndForListDo

    endif
    ; end of setting default values

    ifint $(OldVersionExisted) == $(FALSE)
        Shell $(UtilityInf), AddSoftwareComponent, $(Manufacturer), +
                                                   $(ProductSoftwareName), +
                                                   $(ProductSoftwareName), +
                                                   $(ProductSoftwareTitle), +
                                                   $(STF_CONTEXTINFNAME), +
                                                   $(ProductSoftwareImagePath$(TargetOS)), +
                                                   "kernel", +
                                                   "NDIS", +
                                                   {}, +
                                                   "", +
                                                   $(NetEventDLL)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif

        Set OEM_ABANDON_SOFTWARE = TRUE
        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),$(SoftwareType)},+
                             {MajorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMajorVersion)},+
                             {MinorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMinorVersion)},+
                             {Title,$(NoTitle),$(!REG_VT_SZ),$(ProductSoftwareTitle)},+
                             {Description,$(NoTitle),$(!REG_VT_SZ),$(ProductSoftwareDescription)},+
                             {ServiceName,$(NoTitle),$(!REG_VT_SZ),$(ProductSoftwareName)},+
                             {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*( $(Now),1 )} }
        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),$(NetRuleSoftwareType)},+
                             {use,$(NoTitle),$(!REG_VT_SZ),$(NetRuleSoftwareUse)}, +
                             {bindform,$(NoTitle),$(!REG_VT_SZ),$(NetRuleSoftwareBindForm)}, +
                             {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleSoftwareClass)}, +
                             {bindable,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleSoftwareSWBindable)}, +
                             {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)} }
        Shell $(UtilityInf), AddValueList, $(SoftNetRuleKey), $(NewValueList)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif

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

    endif

;----------------------------------------------------------------------------
InstallAdapter106S =+

    ifstr(i) $(AdapterList106S) == {}
        goto InstallAdapter106J
    endif

    ForListDo $(AdapterList106S)
        set BusNum = *($($),1)
        set DeviceNum = *($($),2)
        set FunctionNum = *($($),3)

        set Sub = "VT3106S"

        Shell $(UtilityInf), IsNetCardAlreadyInstalled, $(BusNum), +
                                                        $(DeviceNum), +
                                                        $(ProductHardware$(Option)$(Sub)Title), +
                                                        $(ProductHardwareName), +
                                                        "YES"
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif

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

        ifstr(i) $($R1) != "YES"
            Shell $(UtilityInf), AddHardwareComponent, $(ProductHardwareName), +
                                                       $(STF_CONTEXTINFNAME), +
                                                       $(ProductKeyName)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            ifint $($R4) != -1
                Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards\"$($R4))
            endif

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

            ; support unattended mode installation under windows NT 4.0 (AJ 03/22/1999)
            ifstr $(!STF_GUI_UNATTENDED) != "YES"
                ui pop 1
            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)"] "$(ProductHardware$(Option)$(Sub)Title)},+
                                 {Description,$(NoTitle),$(!REG_VT_SZ),$(ProductHardware$(Option)Description)},+
                                 {ProductName,$(NoTitle),$(!REG_VT_SZ),$(ProductHardwareName)},+
                                 {ServiceName,$(NoTitle),$(!REG_VT_SZ),$($R5)},+
                                 {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)} }
            Shell $(UtilityInf), AddValueList, $(HardNetCardKey), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            set BusTypeNum = 5
            set NewValueList = { {AdapterType,$(NoTitle),$(!REG_VT_DWORD),$(Adapter$(Option)Type)},+
                                 {MediaType,$(NoTitle),$(!REG_VT_DWORD),1},+
                                 {BusType,$(NoTitle),$(!REG_VT_DWORD),$(BusTypeNum)},+
                                 {AdapterCFID,$(NoTitle),$(!REG_VT_DWORD),$(VT3106SCFID)} }
            Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            ; for 3106S registery
            set NewValueList = $(VT3106SDefaultParamList)
            Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            ; for 3106S UI registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(HardParameterKey) {"UI",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" UIHandle
            ifstr $(UIHandle) == $(KeyNull)
                OpenRegKey $(HardParameterKey) "" "UI" $(MAXIMUM_ALLOWED) UIHandle
            endif
            ifstr $(UIHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(HardParameterKey)
                goto fatalregistry
            endif

            ; for 3106S ConnectionType registry >>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"ConnectionType",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" ConnectionTypeHandle
            ifstr $(ConnectionTypeHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "ConnectionType" $(MAXIMUM_ALLOWED) ConnectionTypeHandle
            endif
            ifstr $(ConnectionTypeHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            ; for 3106S ConnectionType Enum registry
            CreateRegKey $(ConnectionTypeHandle) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" EnumHandle
            ifstr $(EnumHandle) == $(KeyNull)
                OpenRegKey $(ConnectionTypeHandle) "" "enum" $(MAXIMUM_ALLOWED) EnumHandle
            endif
            ifstr $(EnumHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(ConnectionTypeHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(EnumHandle)
            CloseRegKey $(ConnectionTypeHandle)

            ; for 3106S NetworkAddress registry >>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"NetworkAddress",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" NetworkAddressHandle
            ifstr $(NetworkAddressHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "NetworkAddress" $(MAXIMUM_ALLOWED) NetworkAddressHandle
            endif
            ifstr $(NetworkAddressHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(NetworkAddressHandle)

            ; for 3106S TransmitBuffers registry >>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"TransmitBuffers",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" TransmitBuffersHandle
            ifstr $(TransmitBuffersHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "TransmitBuffers" $(MAXIMUM_ALLOWED) TransmitBuffersHandle
            endif
            ifstr $(TransmitBuffersHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(TransmitBuffersHandle)

            ; for 3106S ReceiveBuffers registry >>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"ReceiveBuffers",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" ReceiveBuffersHandle
            ifstr $(ReceiveBuffersHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "ReceiveBuffers" $(MAXIMUM_ALLOWED) ReceiveBuffersHandle
            endif
            ifstr $(ReceiveBuffersHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(ReceiveBuffersHandle)

            ; for 3106S FlowCtrl registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"FlowCtrl",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" FlowCtrlHandle
            ifstr $(FlowCtrlHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "FlowCtrl" $(MAXIMUM_ALLOWED) FlowCtrlHandle
            endif
            ifstr $(FlowCtrlHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            ; for 3106S FlowCtrl Enum registry
            CreateRegKey $(FlowCtrlHandle) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" EnumHandle
            ifstr $(EnumHandle) == $(KeyNull)
                OpenRegKey $(FlowCtrlHandle) "" "enum" $(MAXIMUM_ALLOWED) EnumHandle
            endif
            ifstr $(EnumHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(FlowCtrlHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(EnumHandle)
            CloseRegKey $(FlowCtrlHandle)

            ; for 3106S AdaptiveInt registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"AdaptiveInt",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" AdaptiveIntHandle
            ifstr $(AdaptiveIntHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "AdaptiveInt" $(MAXIMUM_ALLOWED) AdaptiveIntHandle
            endif
            ifstr $(AdaptiveIntHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            ; for 3106S AdaptiveInt Enum registry
            CreateRegKey $(AdaptiveIntHandle) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" EnumHandle
            ifstr $(EnumHandle) == $(KeyNull)
                OpenRegKey $(AdaptiveIntHandle) "" "enum" $(MAXIMUM_ALLOWED) EnumHandle
            endif
            ifstr $(EnumHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(AdaptiveIntHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(EnumHandle)
            CloseRegKey $(AdaptiveIntHandle)

            ; for 3106S 8021pqtag registry >>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"8021pqtag",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_8021pqtag
            ifstr $(H_8021pqtag) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "8021pqtag" $(MAXIMUM_ALLOWED) H_8021pqtag
            endif
            ifstr $(H_8021pqtag) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

            set NewValueList = $(8021pqtagParamList)
            Shell $(UtilityInf), AddValueList, $(H_8021pqtag), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            ; for 3106S 8021pqtag Enum registry
            CreateRegKey $(H_8021pqtag) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" EnumHandle
            ifstr $(EnumHandle) == $(KeyNull)
                OpenRegKey $(H_8021pqtag) "" "enum" $(MAXIMUM_ALLOWED) EnumHandle
            endif
            ifstr $(EnumHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(H_8021pqtag)
                goto fatalregistry
            endif

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

            CloseRegKey $(EnumHandle)
            CloseRegKey $(H_8021pqtag)

            ; for 3106S VLANID registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"VLANID",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" VLANIDHandle
            ifstr $(VLANIDHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "VLANID" $(MAXIMUM_ALLOWED) VLANIDHandle
            endif
            ifstr $(VLANIDHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(VLANIDHandle)

            CloseRegKey $(UIHandle)
        endif

        set TempProdName = """"$(ProductHardwareName)$(AdapterNumber)""""
        set TempBindForm = $(TempProdName)$(NetRuleHardwareBindForm)
        set NewValueList = { {type,$(NoTitle),$(!REG_VT_SZ),$(NetRuleHardware$(Option)Type)},+
                             {bindform,$(NoTitle),$(!REG_VT_SZ),$(TempBindForm)}, +
                             {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleHardware$(Option)Class)}, +
                             {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)} }
        Shell $(UtilityInf), AddValueList, $(HardNetRuleKey), $(NewValueList)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif

        CloseRegKey $(HardNetCardKey)
        CloseRegKey $(HardNetRuleKey)

        set NewValueList = { {BusNumber,$(NoTitle),$(!REG_VT_DWORD),$(BusNum)},+
                             {SlotNumber,$(NoTitle),$(!REG_VT_DWORD),$(DeviceNum)},+
                             {FunctionNumber,$(NoTitle),$(!REG_VT_DWORD),$(FunctionNum)} }
        Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(NewValueList)

        CloseRegKey $(HardParameterKey)

    EndForListDo

;----------------------------------------------------------------------------
InstallAdapter106J =+

    ifstr(i) $(AdapterList106J) == {}
        goto InstallAdapter65
    endif

    ForListDo $(AdapterList106J)
        set BusNum = *($($),1)
        set DeviceNum = *($($),2)
        set FunctionNum = *($($),3)

        set Sub = "VT3106J"

        Shell $(UtilityInf), IsNetCardAlreadyInstalled, $(BusNum), +
                                                        $(DeviceNum), +
                                                        $(ProductHardware$(Option)$(Sub)Title), +
                                                        $(ProductHardwareName), +
                                                        "YES"
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif

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

        ifstr(i) $($R1) != "YES"
            Shell $(UtilityInf), AddHardwareComponent, $(ProductHardwareName), +
                                                       $(STF_CONTEXTINFNAME), +
                                                       $(ProductKeyName)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            ifint $($R4) != -1
                Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards\"$($R4))
            endif

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

            ; support unattended mode installation under windows NT 4.0 (AJ 03/22/1999)
            ifstr $(!STF_GUI_UNATTENDED) != "YES"
                ui pop 1
            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)"] "$(ProductHardware$(Option)$(Sub)Title)},+
                                 {Description,$(NoTitle),$(!REG_VT_SZ),$(ProductHardware$(Option)Description)},+
                                 {ProductName,$(NoTitle),$(!REG_VT_SZ),$(ProductHardwareName)},+
                                 {ServiceName,$(NoTitle),$(!REG_VT_SZ),$($R5)},+
                                 {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)} }
            Shell $(UtilityInf), AddValueList, $(HardNetCardKey), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            set BusTypeNum = 5
            set NewValueList = { {AdapterType,$(NoTitle),$(!REG_VT_DWORD),$(Adapter$(Option)Type)},+
                                 {MediaType,$(NoTitle),$(!REG_VT_DWORD),1},+
                                 {BusType,$(NoTitle),$(!REG_VT_DWORD),$(BusTypeNum)},+
                                 {AdapterCFID,$(NoTitle),$(!REG_VT_DWORD),$(VT3106JCFID)} }
            Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            ; for 3106J registery
            set NewValueList = $(VT3106JDefaultParamList)
            Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            ; for 3106J UI registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(HardParameterKey) {"UI",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" UIHandle
            ifstr $(UIHandle) == $(KeyNull)
                OpenRegKey $(HardParameterKey) "" "UI" $(MAXIMUM_ALLOWED) UIHandle
            endif
            ifstr $(UIHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(HardParameterKey)
                goto fatalregistry
            endif

            ; for 3106J ConnectionType registry >>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"ConnectionType",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" ConnectionTypeHandle
            ifstr $(ConnectionTypeHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "ConnectionType" $(MAXIMUM_ALLOWED) ConnectionTypeHandle
            endif
            ifstr $(ConnectionTypeHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            ; for 3106J ConnectionType Enum registry
            CreateRegKey $(ConnectionTypeHandle) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" EnumHandle
            ifstr $(EnumHandle) == $(KeyNull)
                OpenRegKey $(ConnectionTypeHandle) "" "enum" $(MAXIMUM_ALLOWED) EnumHandle
            endif
            ifstr $(EnumHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(ConnectionTypeHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(EnumHandle)
            CloseRegKey $(ConnectionTypeHandle)

            ; for 3106J NetworkAddress registry >>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"NetworkAddress",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" NetworkAddressHandle
            ifstr $(NetworkAddressHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "NetworkAddress" $(MAXIMUM_ALLOWED) NetworkAddressHandle
            endif
            ifstr $(NetworkAddressHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(NetworkAddressHandle)

            ; for 3106J TransmitBuffers registry >>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"TransmitBuffers",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" TransmitBuffersHandle
            ifstr $(TransmitBuffersHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "TransmitBuffers" $(MAXIMUM_ALLOWED) TransmitBuffersHandle
            endif
            ifstr $(TransmitBuffersHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(TransmitBuffersHandle)

            ; for 3106J ReceiveBuffers registry >>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"ReceiveBuffers",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" ReceiveBuffersHandle
            ifstr $(ReceiveBuffersHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "ReceiveBuffers" $(MAXIMUM_ALLOWED) ReceiveBuffersHandle
            endif
            ifstr $(ReceiveBuffersHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(ReceiveBuffersHandle)

            ; for 3106J FlowCtrl registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"FlowCtrl",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" FlowCtrlHandle
            ifstr $(FlowCtrlHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "FlowCtrl" $(MAXIMUM_ALLOWED) FlowCtrlHandle
            endif
            ifstr $(FlowCtrlHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            ; for 3106J FlowCtrl Enum registry
            CreateRegKey $(FlowCtrlHandle) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" EnumHandle
            ifstr $(EnumHandle) == $(KeyNull)
                OpenRegKey $(FlowCtrlHandle) "" "enum" $(MAXIMUM_ALLOWED) EnumHandle
            endif
            ifstr $(EnumHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(FlowCtrlHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(EnumHandle)
            CloseRegKey $(FlowCtrlHandle)

            ; for 3106J AdaptiveInt registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"AdaptiveInt",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" AdaptiveIntHandle
            ifstr $(AdaptiveIntHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "AdaptiveInt" $(MAXIMUM_ALLOWED) AdaptiveIntHandle
            endif
            ifstr $(AdaptiveIntHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            ; for 3106J AdaptiveInt Enum registry
            CreateRegKey $(AdaptiveIntHandle) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" EnumHandle
            ifstr $(EnumHandle) == $(KeyNull)
                OpenRegKey $(AdaptiveIntHandle) "" "enum" $(MAXIMUM_ALLOWED) EnumHandle
            endif
            ifstr $(EnumHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(AdaptiveIntHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(EnumHandle)
            CloseRegKey $(AdaptiveIntHandle)

            CloseRegKey $(UIHandle)
        endif

        set TempProdName = """"$(ProductHardwareName)$(AdapterNumber)""""
        set TempBindForm = $(TempProdName)$(NetRuleHardwareBindForm)
        set NewValueList = { {type,$(NoTitle),$(!REG_VT_SZ),$(NetRuleHardware$(Option)Type)},+
                             {bindform,$(NoTitle),$(!REG_VT_SZ),$(TempBindForm)}, +
                             {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleHardware$(Option)Class)}, +
                             {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)} }
        Shell $(UtilityInf), AddValueList, $(HardNetRuleKey), $(NewValueList)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif

        CloseRegKey $(HardNetCardKey)
        CloseRegKey $(HardNetRuleKey)

        set NewValueList = { {BusNumber,$(NoTitle),$(!REG_VT_DWORD),$(BusNum)},+
                             {SlotNumber,$(NoTitle),$(!REG_VT_DWORD),$(DeviceNum)},+
                             {FunctionNumber,$(NoTitle),$(!REG_VT_DWORD),$(FunctionNum)} }
        Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(NewValueList)

        CloseRegKey $(HardParameterKey)

    EndForListDo

;----------------------------------------------------------------------------
InstallAdapter65 =+

    ifstr(i) $(AdapterList65) == {}
        goto InstallAdapter43
    endif

    ForListDo $(AdapterList65)
        set BusNum = *($($),1)
        set DeviceNum = *($($),2)
        set FunctionNum = *($($),3)

        set Sub = "VT3065"

        Shell $(UtilityInf), IsNetCardAlreadyInstalled, $(BusNum), +
                                                        $(DeviceNum), +
                                                        $(ProductHardware$(Option)$(Sub)Title), +
                                                        $(ProductHardwareName), +
                                                        "YES"
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif

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

        ifstr(i) $($R1) != "YES"
            Shell $(UtilityInf), AddHardwareComponent, $(ProductHardwareName), +
                                                       $(STF_CONTEXTINFNAME), +
                                                       $(ProductKeyName)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            ifint $($R4) != -1
                Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards\"$($R4))
            endif

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

            ; support unattended mode installation under windows NT 4.0 (AJ 03/22/1999)
            ifstr $(!STF_GUI_UNATTENDED) != "YES"
                ui pop 1
            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)"] "$(ProductHardware$(Option)$(Sub)Title)},+
                                 {Description,$(NoTitle),$(!REG_VT_SZ),$(ProductHardware$(Option)Description)},+
                                 {ProductName,$(NoTitle),$(!REG_VT_SZ),$(ProductHardwareName)},+
                                 {ServiceName,$(NoTitle),$(!REG_VT_SZ),$($R5)},+
                                 {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)} }
            Shell $(UtilityInf), AddValueList, $(HardNetCardKey), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            set BusTypeNum = 5
            set NewValueList = { {AdapterType,$(NoTitle),$(!REG_VT_DWORD),$(Adapter$(Option)Type)},+
                                 {MediaType,$(NoTitle),$(!REG_VT_DWORD),1},+
                                 {BusType,$(NoTitle),$(!REG_VT_DWORD),$(BusTypeNum)},+
                                 {AdapterCFID,$(NoTitle),$(!REG_VT_DWORD),$(VT3065CFID)} }
            Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            ; for 3065 registry
            set NewValueList = $(VT3065DefaultParamList)
            Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            ; for 3065 UI registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(HardParameterKey) {"UI",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" UIHandle
            ifstr $(UIHandle) == $(KeyNull)
                OpenRegKey $(HardParameterKey) "" "UI" $(MAXIMUM_ALLOWED) UIHandle
            endif
            ifstr $(UIHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(HardParameterKey)
                goto fatalregistry
            endif

            ; for 3065 ConnectionType registry >>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"ConnectionType",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" ConnectionTypeHandle
            ifstr $(ConnectionTypeHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "ConnectionType" $(MAXIMUM_ALLOWED) ConnectionTypeHandle
            endif
            ifstr $(ConnectionTypeHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            ; for 3065 ConnectionType Enum registry
            CreateRegKey $(ConnectionTypeHandle) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" EnumHandle
            ifstr $(EnumHandle) == $(KeyNull)
                OpenRegKey $(ConnectionTypeHandle) "" "enum" $(MAXIMUM_ALLOWED) EnumHandle
            endif
            ifstr $(EnumHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(ConnectionTypeHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(EnumHandle)
            CloseRegKey $(ConnectionTypeHandle)

            ; for 3065 NetworkAddress registry >>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"NetworkAddress",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" NetworkAddressHandle
            ifstr $(NetworkAddressHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "NetworkAddress" $(MAXIMUM_ALLOWED) NetworkAddressHandle
            endif
            ifstr $(NetworkAddressHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(NetworkAddressHandle)

            ; for 3065 TransmitBuffers registry >>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"TransmitBuffers",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" TransmitBuffersHandle
            ifstr $(TransmitBuffersHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "TransmitBuffers" $(MAXIMUM_ALLOWED) TransmitBuffersHandle
            endif
            ifstr $(TransmitBuffersHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(TransmitBuffersHandle)

            ; for 3065 ReceiveBuffers registry >>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"ReceiveBuffers",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" ReceiveBuffersHandle
            ifstr $(ReceiveBuffersHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "ReceiveBuffers" $(MAXIMUM_ALLOWED) ReceiveBuffersHandle
            endif
            ifstr $(ReceiveBuffersHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(ReceiveBuffersHandle)

            ; for 3065 FlowCtrl registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"FlowCtrl",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" FlowCtrlHandle
            ifstr $(FlowCtrlHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "FlowCtrl" $(MAXIMUM_ALLOWED) FlowCtrlHandle
            endif
            ifstr $(FlowCtrlHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            ; for 3065 FlowCtrl Enum registry
            CreateRegKey $(FlowCtrlHandle) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" EnumHandle
            ifstr $(EnumHandle) == $(KeyNull)
                OpenRegKey $(FlowCtrlHandle) "" "enum" $(MAXIMUM_ALLOWED) EnumHandle
            endif
            ifstr $(EnumHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(FlowCtrlHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(EnumHandle)
            CloseRegKey $(FlowCtrlHandle)

            ; for 3065 AdaptiveInt registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"AdaptiveInt",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" AdaptiveIntHandle
            ifstr $(AdaptiveIntHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "AdaptiveInt" $(MAXIMUM_ALLOWED) AdaptiveIntHandle
            endif
            ifstr $(AdaptiveIntHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            ; for 3065 AdaptiveInt Enum registry
            CreateRegKey $(AdaptiveIntHandle) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" EnumHandle
            ifstr $(EnumHandle) == $(KeyNull)
                OpenRegKey $(AdaptiveIntHandle) "" "enum" $(MAXIMUM_ALLOWED) EnumHandle
            endif
            ifstr $(EnumHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(AdaptiveIntHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(EnumHandle)
            CloseRegKey $(AdaptiveIntHandle)

            CloseRegKey $(UIHandle)
        endif

        set TempProdName = """"$(ProductHardwareName)$(AdapterNumber)""""
        set TempBindForm = $(TempProdName)$(NetRuleHardwareBindForm)
        set NewValueList = { {type,$(NoTitle),$(!REG_VT_SZ),$(NetRuleHardware$(Option)Type)},+
                             {bindform,$(NoTitle),$(!REG_VT_SZ),$(TempBindForm)}, +
                             {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleHardware$(Option)Class)}, +
                             {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)} }
        Shell $(UtilityInf), AddValueList, $(HardNetRuleKey), $(NewValueList)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif

        CloseRegKey $(HardNetCardKey)
        CloseRegKey $(HardNetRuleKey)

        set NewValueList = { {BusNumber,$(NoTitle),$(!REG_VT_DWORD),$(BusNum)},+
                             {SlotNumber,$(NoTitle),$(!REG_VT_DWORD),$(DeviceNum)},+
                             {FunctionNumber,$(NoTitle),$(!REG_VT_DWORD),$(FunctionNum)} }
        Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(NewValueList)

        CloseRegKey $(HardParameterKey)

    EndForListDo

;----------------------------------------------------------------------------
InstallAdapter43 =+

    ForListDo $(AdapterList43)
        set BusNum = *($($),1)
        set DeviceNum = *($($),2)
        set FunctionNum = *($($),3)

        set Sub = "VT3043"

        Shell $(UtilityInf), IsNetCardAlreadyInstalled, $(BusNum), +
                                                        $(DeviceNum), +
                                                        $(ProductHardware$(Option)$(Sub)Title), +
                                                        $(ProductHardwareName), +
                                                        "YES"
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif

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

        ifstr(i) $($R1) != "YES"
            Shell $(UtilityInf), AddHardwareComponent, $(ProductHardwareName),$(STF_CONTEXTINFNAME),$(ProductKeyName)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            ifint $($R4) != -1
                Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards\"$($R4))
            endif

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

            ; support unattended mode installation under windows NT 4.0 (AJ 03/22/1999)
            ifstr $(!STF_GUI_UNATTENDED) != "YES"
                ui pop 1
            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)"] "$(ProductHardware$(Option)$(Sub)Title)},+
                                 {Description,$(NoTitle),$(!REG_VT_SZ),$(ProductHardware$(Option)Description)},+
                                 {ProductName,$(NoTitle),$(!REG_VT_SZ),$(ProductHardwareName)},+
                                 {ServiceName,$(NoTitle),$(!REG_VT_SZ),$($R5)},+
                                 {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)} }
            Shell $(UtilityInf), AddValueList, $(HardNetCardKey), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            set BusTypeNum = 5
            set NewValueList = { {AdapterType,$(NoTitle),$(!REG_VT_DWORD),$(Adapter$(Option)Type)},+
                                 {MediaType,$(NoTitle),$(!REG_VT_DWORD),1},+
                                 {BusType,$(NoTitle),$(!REG_VT_DWORD),$(BusTypeNum)},+
                                 {AdapterCFID,$(NoTitle),$(!REG_VT_DWORD),$(VT3043CFID)} }
            Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            ; for 3043 registery
            set NewValueList = $(VT3043DefaultParamList)
            Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            ; for 3043 UI registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(HardParameterKey) {"UI",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" UIHandle
            ifstr $(UIHandle) == $(KeyNull)
                OpenRegKey $(HardParameterKey) "" "UI" $(MAXIMUM_ALLOWED) UIHandle
            endif
            ifstr $(UIHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(HardParameterKey)
                goto fatalregistry
            endif

            ; for 3043 ConnectionType registry >>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"ConnectionType",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" ConnectionTypeHandle
            ifstr $(ConnectionTypeHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "ConnectionType" $(MAXIMUM_ALLOWED) ConnectionTypeHandle
            endif
            ifstr $(ConnectionTypeHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            ; for 3043 ConnectionType Enum registry
            CreateRegKey $(ConnectionTypeHandle) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" EnumHandle
            ifstr $(EnumHandle) == $(KeyNull)
                OpenRegKey $(ConnectionTypeHandle) "" "enum" $(MAXIMUM_ALLOWED) EnumHandle
            endif
            ifstr $(EnumHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(ConnectionTypeHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(EnumHandle)
            CloseRegKey $(ConnectionTypeHandle)

            ; for 3043 NetworkAddress registry >>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"NetworkAddress",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" NetworkAddressHandle
            ifstr $(NetworkAddressHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "NetworkAddress" $(MAXIMUM_ALLOWED) NetworkAddressHandle
            endif
            ifstr $(NetworkAddressHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(NetworkAddressHandle)

            ; for 3043 TransmitBuffers registry >>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"TransmitBuffers",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" TransmitBuffersHandle
            ifstr $(TransmitBuffersHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "TransmitBuffers" $(MAXIMUM_ALLOWED) TransmitBuffersHandle
            endif
            ifstr $(TransmitBuffersHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(TransmitBuffersHandle)

            ; for 3043 ReceiveBuffers registry >>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(UIHandle) {"ReceiveBuffers",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" ReceiveBuffersHandle
            ifstr $(ReceiveBuffersHandle) == $(KeyNull)
                OpenRegKey $(UIHandle) "" "ReceiveBuffers" $(MAXIMUM_ALLOWED) ReceiveBuffersHandle
            endif
            ifstr $(ReceiveBuffersHandle) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(UIHandle)
                goto fatalregistry
            endif

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

            CloseRegKey $(ReceiveBuffersHandle)

            CloseRegKey $(UIHandle)
        endif

        set TempProdName = """"$(ProductHardwareName)$(AdapterNumber)""""
        set TempBindForm = $(TempProdName)$(NetRuleHardwareBindForm)
        set NewValueList = { {type,$(NoTitle),$(!REG_VT_SZ),$(NetRuleHardware$(Option)Type)},+
                             {bindform,$(NoTitle),$(!REG_VT_SZ),$(TempBindForm)}, +
                             {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleHardware$(Option)Class)}, +
                             {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)} }
        Shell $(UtilityInf), AddValueList, $(HardNetRuleKey), $(NewValueList)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif

        CloseRegKey $(HardNetCardKey)
        CloseRegKey $(HardNetRuleKey)

        set NewValueList = { {BusNumber,$(NoTitle),$(!REG_VT_DWORD),$(BusNum)},+
                             {SlotNumber,$(NoTitle),$(!REG_VT_DWORD),$(DeviceNum)},+
                             {FunctionNumber,$(NoTitle),$(!REG_VT_DWORD),$(FunctionNum)} }
        Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(NewValueList)

        CloseRegKey $(HardParameterKey)

    EndForListDo

;----------------------------------------------------------------------------
InstallAdapterOK =+
    EndWait
    goto successful

;----------------------------------------------------------------------------
updateparameters =+

    ForListDo $(PropKeyNameList)
        set KeyName = $($)
        set PropIndex = ~($(PropKeyNameList), $(KeyName))

        ifstr *($(SetResult), $(PropIndex)) != *($(CurrKeyValueList), $(PropIndex))
            set NewRegValue = *($(SetResult), $(PropIndex))
            set DispType = *($(DispTypeList), $(PropIndex))
            
            ifstr(i) $(DispType) == "edit"
                set NewValueList = {{$(KeyName),$(NoTitle),$(!REG_VT_SZ),$(NewRegValue)}}
            Else
                set NewValueList = {{$(KeyName),$(NoTitle),$(!REG_VT_DWORD),$(NewRegValue)}}
            Endif

            shell $(UtilityInf), AddValueList, $(KeyParameters), $(NewValueList)
            Ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            Endif
        endif
    EndForListDo

    goto successful

;----------------------------------------------------------------------------
bindingadapter =+
    set Error = "Binding: Sorry, not yet implemented."
    goto fatal

;----------------------------------------------------------------------------
removeadapter = +
    Ifstr(i) $(ProductKeyName) == $(!NTN_RegBase)
        Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), +
                                                      $(ProductSoftwareName)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif

        set RegistryErrorIndex = $($R0)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            goto fatalregistry
        endif
    Else
        Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), +
                                                      $(ProductSoftwareName), +
                                                      $(!NTN_RegBase)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif

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

    goto end

;----------------------------------------------------------------------------
UpgradeSoftware = +

    ; Upgrade each adapter
    set KeyNetcards = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards"
    OpenRegKey $(!REG_H_LOCAL) "" $(KeyNetcards) $(!REG_KEY_READ) H_Netcards

    EnumRegKey $(H_Netcards) AdapterNumList

    ForListDo $(AdapterNumList)
        set AdapterNum = *( $($), 1 )
        set H_Card = ""

        OpenRegKey $(H_Netcards) "" $(AdapterNum) $(MAXIMUM_ALLOWED) H_Card
        ifstr $(H_Card) == $(KeyNull)
            Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
            Goto fatalregistry
        endif

        ; Get ServiceName to open the registry
        GetRegValue $(H_Card) "ServiceName" KeyServiceName
        set AdapterServiceName = *( $(KeyServiceName), 4 )
        set KeyCardService = $(!NTN_ServiceBase)"\"$(AdapterServiceName)"\parameters"

        OpenRegKey $(!REG_H_LOCAL) "" $(KeyCardService) $(MAXIMUM_ALLOWED) H_AdapterService
        ifstr $(H_AdapterService) == $(KeyNull)
            Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
            Goto fatalregistry
        endif

        GetRegValue $(H_AdapterService) "AdapterCFID" ValueList
        set AdapterCFID = *( $(ValueList), 4 )

        ; for UI registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        CreateRegKey $(H_AdapterService) {"UI",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_UI
        ifstr $(H_UI) == $(KeyNull)
            OpenRegKey $(H_AdapterService) "" "UI" $(MAXIMUM_ALLOWED) H_UI
            ifstr $(H_UI) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(H_AdapterService)
                goto fatalregistry
            endif
        endif

        ; for ConnectionType registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        CreateRegKey $(H_UI) {"ConnectionType",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_ConnectionType
        ifstr $(H_ConnectionType) == $(KeyNull)
            OpenRegKey $(H_UI) "" "ConnectionType" $(MAXIMUM_ALLOWED) H_ConnectionType
            ifstr $(H_ConnectionType) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(H_UI)
                goto fatalregistry
            endif
        endif

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

        ; for ConnectionType Enum registry
        CreateRegKey $(H_ConnectionType) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
        ifstr $(H_Enum) == $(KeyNull)
            OpenRegKey $(H_ConnectionType) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
            ifstr $(H_Enum) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(H_ConnectionType)
                goto fatalregistry
            endif
        endif

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

        CloseRegKey $(H_Enum)
        CloseRegKey $(H_ConnectionType)

        ; for NetworkAddress registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        CreateRegKey $(H_UI) {"NetworkAddress",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_NetworkAddress
        ifstr $(H_NetworkAddress) == $(KeyNull)
            OpenRegKey $(H_UI) "" "NetworkAddress" $(MAXIMUM_ALLOWED) H_NetworkAddress
            ifstr $(H_NetworkAddress) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(H_UI)
                goto fatalregistry
            endif
        endif

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

        CloseRegKey $(H_NetworkAddress)

        ; for TransmitBuffers registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        CreateRegKey $(H_UI) {"TransmitBuffers",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_TransmitBuffers
        ifstr $(H_TransmitBuffers) == $(KeyNull)
            OpenRegKey $(H_UI) "" "TransmitBuffers" $(MAXIMUM_ALLOWED) H_TransmitBuffers
            ifstr $(H_TransmitBuffers) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(H_UI)
                goto fatalregistry
            endif
        endif

        ; for ReceiveBuffers registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        CreateRegKey $(H_UI) {"ReceiveBuffers",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_ReceiveBuffers
        ifstr $(H_ReceiveBuffers) == $(KeyNull)
            OpenRegKey $(H_UI) "" "ReceiveBuffers" $(MAXIMUM_ALLOWED) H_ReceiveBuffers
            ifstr $(H_ReceiveBuffers) == $(KeyNull)
                set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                CloseRegKey $(H_UI)
                goto fatalregistry
            endif
        endif


        Ifint $(AdapterCFID) == $(VT3106SCFID)
            ; Set 3106S TransmitBuffers value
            set NewValueList = $(TransmitBuffersParamList)
            Shell $(UtilityInf), AddValueList, $(H_TransmitBuffers), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            CloseRegKey $(H_TransmitBuffers)

            ; Set 3106S ReceiveBuffers value
            set NewValueList = $(ReceiveBuffersParamList)
            Shell $(UtilityInf), AddValueList, $(H_ReceiveBuffers), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            CloseRegKey $(H_ReceiveBuffers)

            ; for 3106S FlowCtrl registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(H_UI) {"FlowCtrl",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_FlowCtrl
            ifstr $(H_FlowCtrl) == $(KeyNull)
                OpenRegKey $(H_UI) "" "FlowCtrl" $(MAXIMUM_ALLOWED) H_FlowCtrl
                ifstr $(H_FlowCtrl) == $(KeyNull)
                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                    CloseRegKey $(H_UI)
                    goto fatalregistry
                endif
            endif

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

            ; for 3106S FlowCtrl Enum registry
            CreateRegKey $(H_FlowCtrl) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
            ifstr $(H_Enum) == $(KeyNull)
                OpenRegKey $(H_FlowCtrl) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
                ifstr $(H_Enum) == $(KeyNull)
                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                    CloseRegKey $(H_FlowCtrl)
                    goto fatalregistry
                endif
            endif

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

            CloseRegKey $(H_Enum)
            CloseRegKey $(H_FlowCtrl)

            ; for 3106S AdaptiveInt registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(H_UI) {"AdaptiveInt",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_AdaptiveInt
            ifstr $(H_AdaptiveInt) == $(KeyNull)
                OpenRegKey $(H_UI) "" "AdaptiveInt" $(MAXIMUM_ALLOWED) H_AdaptiveInt
                ifstr $(H_AdaptiveInt) == $(KeyNull)
                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                    CloseRegKey $(H_UI)
                    goto fatalregistry
                endif
            endif

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

            ; for 3106S AdaptiveInt Enum registry
            CreateRegKey $(H_AdaptiveInt) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
            ifstr $(H_Enum) == $(KeyNull)
                OpenRegKey $(H_AdaptiveInt) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
                ifstr $(H_Enum) == $(KeyNull)
                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                    CloseRegKey $(H_AdaptiveInt)
                    goto fatalregistry
                endif
            endif

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

            CloseRegKey $(H_Enum)
            CloseRegKey $(H_AdaptiveInt)

            ; for 3106S 8021pqtag registry >>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(H_UI) {"8021pqtag",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_8021pqtag
            ifstr $(H_8021pqtag) == $(KeyNull)
                OpenRegKey $(H_UI) "" "8021pqtag" $(MAXIMUM_ALLOWED) H_8021pqtag
                ifstr $(H_8021pqtag) == $(KeyNull)
                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                    CloseRegKey $(H_UI)
                    goto fatalregistry
                endif
            endif

            set NewValueList = $(8021pqtagParamList)
            Shell $(UtilityInf), AddValueList, $(H_8021pqtag), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            ; for 3106S 8021pqtag Enum registry
            CreateRegKey $(H_8021pqtag) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
            ifstr $(H_Enum) == $(KeyNull)
                OpenRegKey $(H_8021pqtag) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
                ifstr $(H_Enum) == $(KeyNull)
                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                    CloseRegKey $(H_8021pqtag)
                    goto fatalregistry
                endif
            endif

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

            CloseRegKey $(H_Enum)
            CloseRegKey $(H_8021pqtag)

            ; for 3106S VLANID registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(H_UI) {"VLANID",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_VLANID
            ifstr $(H_VLANID) == $(KeyNull)
                OpenRegKey $(H_UI) "" "VLANID" $(MAXIMUM_ALLOWED) H_VLANID
                ifstr $(H_VLANID) == $(KeyNull)
                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                    CloseRegKey $(H_UI)
                    goto fatalregistry
                endif
            endif

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

            CloseRegKey $(H_VLANID)
            CloseRegKey $(H_UI)

            set NewValueList = $(VT3106SDefaultParamList)
            set Sub = "VT3106S"

        Else-Ifint $(AdapterCFID) == $(VT3106JCFID)
            ; Set 3106J TransmitBuffers value
            set NewValueList = $(TransmitBuffersParamList)
            Shell $(UtilityInf), AddValueList, $(H_TransmitBuffers), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            CloseRegKey $(H_TransmitBuffers)

            ; Set 3106J ReceiveBuffers value
            set NewValueList = $(ReceiveBuffersParamList)
            Shell $(UtilityInf), AddValueList, $(H_ReceiveBuffers), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            CloseRegKey $(H_ReceiveBuffers)

            ; for 3106J FlowCtrl registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(H_UI) {"FlowCtrl",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_FlowCtrl
            ifstr $(H_FlowCtrl) == $(KeyNull)
                OpenRegKey $(H_UI) "" "FlowCtrl" $(MAXIMUM_ALLOWED) H_FlowCtrl
                ifstr $(H_FlowCtrl) == $(KeyNull)
                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                    CloseRegKey $(H_UI)
                    goto fatalregistry
                endif
            endif

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

            ; for 3106J FlowCtrl Enum registry
            CreateRegKey $(H_FlowCtrl) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
            ifstr $(H_Enum) == $(KeyNull)
                OpenRegKey $(H_FlowCtrl) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
                ifstr $(H_Enum) == $(KeyNull)
                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                    CloseRegKey $(H_FlowCtrl)
                    goto fatalregistry
                endif
            endif

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

            CloseRegKey $(H_Enum)
            CloseRegKey $(H_FlowCtrl)

            ; for 3106J AdaptiveInt registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(H_UI) {"AdaptiveInt",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_AdaptiveInt
            ifstr $(H_AdaptiveInt) == $(KeyNull)
                OpenRegKey $(H_UI) "" "AdaptiveInt" $(MAXIMUM_ALLOWED) H_AdaptiveInt
                ifstr $(H_AdaptiveInt) == $(KeyNull)
                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                    CloseRegKey $(H_UI)
                    goto fatalregistry
                endif
            endif

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

            ; for 3106J AdaptiveInt Enum registry
            CreateRegKey $(H_AdaptiveInt) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
            ifstr $(H_Enum) == $(KeyNull)
                OpenRegKey $(H_AdaptiveInt) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
                ifstr $(H_Enum) == $(KeyNull)
                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                    CloseRegKey $(H_AdaptiveInt)
                    goto fatalregistry
                endif
            endif

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

            CloseRegKey $(H_Enum)
            CloseRegKey $(H_AdaptiveInt)

            CloseRegKey $(H_UI)

            set NewValueList = $(VT3106JDefaultParamList)
            set Sub = "VT3106J"

        Else-Ifint $(AdapterCFID) == $(VT3065CFID)
            ; Set 3065 TransmitBuffers value
            set NewValueList = $(TransmitBuffersParamList)
            Shell $(UtilityInf), AddValueList, $(H_TransmitBuffers), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            CloseRegKey $(H_TransmitBuffers)

            ; Set 3065 ReceiveBuffers value
            set NewValueList = $(ReceiveBuffersParamList)
            Shell $(UtilityInf), AddValueList, $(H_ReceiveBuffers), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            CloseRegKey $(H_ReceiveBuffers)

            ; for 3065 FlowCtrl registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(H_UI) {"FlowCtrl",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_FlowCtrl
            ifstr $(H_FlowCtrl) == $(KeyNull)
                OpenRegKey $(H_UI) "" "FlowCtrl" $(MAXIMUM_ALLOWED) H_FlowCtrl
                ifstr $(H_FlowCtrl) == $(KeyNull)
                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                    CloseRegKey $(H_UI)
                    goto fatalregistry
                endif
            endif

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

            ; for 3065 FlowCtrl Enum registry
            CreateRegKey $(H_FlowCtrl) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
            ifstr $(H_Enum) == $(KeyNull)
                OpenRegKey $(H_FlowCtrl) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
                ifstr $(H_Enum) == $(KeyNull)
                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                    CloseRegKey $(H_FlowCtrl)
                    goto fatalregistry
                endif
            endif

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

            CloseRegKey $(H_Enum)
            CloseRegKey $(H_FlowCtrl)

            ; for 3065 AdaptiveInt registry >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            CreateRegKey $(H_UI) {"AdaptiveInt",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_AdaptiveInt
            ifstr $(H_AdaptiveInt) == $(KeyNull)
                OpenRegKey $(H_UI) "" "AdaptiveInt" $(MAXIMUM_ALLOWED) H_AdaptiveInt
                ifstr $(H_AdaptiveInt) == $(KeyNull)
                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                    CloseRegKey $(H_UI)
                    goto fatalregistry
                endif
            endif

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

            ; for 3065 AdaptiveInt Enum registry
            CreateRegKey $(H_AdaptiveInt) {"enum",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" H_Enum
            ifstr $(H_Enum) == $(KeyNull)
                OpenRegKey $(H_AdaptiveInt) "" "enum" $(MAXIMUM_ALLOWED) H_Enum
                ifstr $(H_Enum) == $(KeyNull)
                    set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
                    CloseRegKey $(H_AdaptiveInt)
                    goto fatalregistry
                endif
            endif

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

            CloseRegKey $(H_Enum)
            CloseRegKey $(H_AdaptiveInt)

            CloseRegKey $(H_UI)

            set NewValueList = $(VT3065DefaultParamList)
            set Sub = "VT3065"

        Else
            ; Set 3043 TransmitBuffers value
            set NewValueList = $(VT3043TransmitBuffersParamList)
            Shell $(UtilityInf), AddValueList, $(H_TransmitBuffers), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            CloseRegKey $(H_TransmitBuffers)

            ; Set 3043 ReceiveBuffers value
            set NewValueList = $(ReceiveBuffersParamList)
            Shell $(UtilityInf), AddValueList, $(H_ReceiveBuffers), $(NewValueList)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif

            CloseRegKey $(H_ReceiveBuffers)
            CloseRegKey $(H_UI)

            set NewValueList = $(VT3043DefaultParamList)
            set Sub = "VT3043"
        Endif

        shell $(UtilityInf), AddValueList, $(H_AdapterService), $(NewValueList)
        Ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        Endif

        ; Update Description, Title, Manufacturer
    	SetRegValue $(H_Card) {Manufacturer,$(NoTitle),$(!REG_VT_SZ),$(Manufacturer)}
    	SetRegValue $(H_Card) {Title,$(NoTitle),$(!REG_VT_SZ),"["$(AdapterNum)"] "$(ProductHardware$(Option)$(Sub)Title)}
    	SetRegValue $(H_Card) {Description,$(NoTitle),$(!REG_VT_SZ),$(ProductHardware$(Option)Description)}

        CloseRegKey $(H_Card)

        CloseRegKey $(H_AdapterService)

    EndForListDo

    CloseRegKey $(H_Netcards)



;    ; initialize driver parameter list
;    Ifstr(i) $(KeyProduct) == $(KeyNull)
;        OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase) $(MAXIMUM_ALLOWED) KeyProduct
;        Ifstr $(KeyProduct) == $(KeyNull)
;            Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
;            Goto fatalregistry
;        Endif
;    Endif

;    ; Get service key handle
;    Shell $(UtilityInf) FindService, $(KeyProduct)
;    Ifint $($ShellCode) != $(!SHELL_CODE_OK)
;        Goto ShellCodeError
;    Endif

;    Ifstr(i) $($R0) != NO_ERROR
;        Goto fatalregistry
;    endif

;    set KeyParameters = $($R2)
;    CloseRegKey $($R1)
;    Ifstr $(KeyParameters) == $(KeyNull)
;        set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
;        goto fatalregistry
;    endif


;    set OldVersionExisted = $(TRUE)
;    set ValueName = ""
;    set ValueData = ""
;    set ValueList = {}

;    EnumRegValue $(KeyParameters) ValueList
;    ForListDo $(ValueList)
;        set ValueItem = $($)
;        set ValueName = *($(ValueItem),1)
;        set ValueData = *($(ValueItem),4)

;        ifstr(i) $(ValueName) == "AdapterCFID"
;            set AdapterCFID = $(ValueData)
;        endif
;    EndForListDo

;    Ifint $(AdapterCFID) == $(VT3106SCFID)
;        set NewValueList = $(VT3106SDefaultParamList)
;        set Sub = "VT3106S"
;    Else-Ifint $(AdapterCFID) == $(VT3106JCFID)
;        set NewValueList = $(VT3106JDefaultParamList)
;        set Sub = "VT3106J"
;    Else-Ifint $(AdapterCFID) == $(VT3065CFID)
;        set NewValueList = $(VT3065DefaultParamList)
;        set Sub = "VT3065"
;    Else
;        set NewValueList = $(VT3043DefaultParamList)
;        set Sub = "VT3043"
;    Endif

;    shell $(UtilityInf), AddValueList, $(KeyParameters), $(NewValueList)
;    Ifint $($ShellCode) != $(!SHELL_CODE_OK)
;        goto ShellCodeError
;    Endif



;    ; Update Description, Software Title, Manufacturer Name
;    Split-String $(!NTN_RegBase) "\" DestinationList
;    set AdapterNum = *($(DestinationList), 11)

;    OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase) $(MAXIMUM_ALLOWED) KeyNetworkCards
;    Ifstr $(KeyNetworkCards) == $(KeyNull)
;        Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
;        Goto fatalregistry
;    Endif

;    SetRegValue $(KeyNetworkCards) {Manufacturer,$(NoTitle),$(!REG_VT_SZ),$(Manufacturer)}
;    SetRegValue $(KeyNetworkCards) {Title,$(NoTitle),$(!REG_VT_SZ),"["$(AdapterNum)"] "$(ProductHardware$(Option)$(Sub)Title)}
;    SetRegValue $(KeyNetworkCards) {Description,$(NoTitle),$(!REG_VT_SZ),$(ProductHardware$(Option)Description)}
;    CloseRegKey $(KeyNetworkCards)



    ; Copy new software
    OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct
    Ifstr $(KeyProduct) != $(KeyNull)
        Shell $(UtilityInf), GetInfFileNameFromRegistry, $(KeyProduct)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "ShellCode error"
            goto ShellCodeError
        endif

        set !UG_Filename = $($R0)
        install "Install-Update"
        ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS
            goto fatal
        endif

        SetRegValue $(KeyProduct) {MajorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMajorVersion)}
        SetRegValue $(KeyProduct) {MinorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMinorVersion)}

        CloseRegKey $(KeyProduct)
    Else
        goto fatalregistry
    Endif

    goto end

;----------------------------------------------------------------------------
successful = +
    goto end

;----------------------------------------------------------------------------
abandon = +
    ForListDo $(OEM_ABANDON_OPTIONS)
        Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), +
                                                        $(ProductSoftwareName), $($)
        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), +
                                                        $(ProductSoftwareName), FALSE
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif
        set RegistryErrorIndex = $($R0)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            goto fatalregistry
        endif
    endif
    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) == ""
        set Severity = NONFATAL
        Shell $(UtilityInf) RegistryErrorString "SETUP_FAIL"
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif
        set Error = $($R0)
    endif

    ; if in unattended mode, do not show error message
    ifstr $(!STF_GUI_UNATTENDED) != "YES"
        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
    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 abandon
    endif
    goto end

;----------------------------------------------------------------------------
end = +
    Return $(CommonStatus)

;----------------------------------------------------------------------------
[Install-Option]
    set STF_VITAL = ""
    ifstr(i) $(AddCopy) == "YES"
        AddSectionFilesToCopyList Files-PropUI $(SrcDir) $(!STF_WINDOWSSYSPATH)
        AddSectionFilesToCopyList Files-$(Option)-$(TargetOS) $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
        AddSectionFilesToCopyList Files-Help $(SrcDir) $(!STF_WINDOWSSYSPATH)
    endif
    ifstr(i) $(DoCopy) == "YES"
        set !STF_NCPA_FLUSH_COPYLIST = TRUE
        CopyFilesInCopyList
    endif
    Exit

;----------------------------------------------------------------------------
[Install-Hlp]
    set STF_VITAL = ""
    ifstr(i) $(AddCopy) == "YES"
        AddSectionFilesToCopyList Files-Help $(SrcDir) $(!STF_WINDOWSSYSPATH)
    endif
    ifstr(i) $(DoCopy) == "YES"
        set !STF_NCPA_FLUSH_COPYLIST = TRUE
        CopyFilesInCopyList
    endif
    Exit

;-------------------------------------------------------------------------------
[Install-Update]
    set STF_VITAL     = ""
    set STF_OVERWRITE = "VERIFYSOURCEOLDER"

    ; HELP....
    AddSectionFilesToCopyList Files-Inf $(SrcDir) $(!STF_WINDOWSSYSPATH)
    AddSectionFilesToCopyList Files-$(Option)-$(TargetOS) $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
    AddSectionFilesToCopyList Files-PropUI $(SrcDir) $(!STF_WINDOWSSYSPATH)
    AddSectionFilesToCopyList Files-Help $(SrcDir) $(!STF_WINDOWSSYSPATH)

    set !STF_NCPA_FLUSH_COPYLIST = TRUE
    CopyFilesInCopyList
    exit

;-------------------------------------------------------------------------------
[Install-UTIL]
    set STF_VITAL        = ""
    set STF_OVERWRITE    = "ALWAYS"

    AddSectionFilesToCopyList Files-PropUI $(SrcDir) $(!STF_WINDOWSSYSPATH)
    CopyFilesInCopyList
    ClearCopyList
    exit

;-------------------------------------------------------------------------------
[Source Media Descriptions]
    1  = "VIA Rhine Family Fast Ethernet Adapter Driver"

;-------------------------------------------------------------------------------
[ProductType]
STF_PRODUCT  = Winnt
STF_PLATFORM = I386
STF_PLATFORM = Alpha

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

[Files-FET-NT4]
1, fetnd4.sys  , SIZE=999

[Files-FET-NT351]
1, fetnd3.sys  , SIZE=999

[Files-PropUI]
1, ntutil.dll  , SIZE=999

[Files-Help]
1, fetndh.hlp  , SIZE=999

;============================================================================
[LanguagesSupported]
    ENG

[OptionsTextENG]
    FET  = "VIA Rhine Family Fast Ethernet Adapter Driver"

[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:"

ProductSoftwareDescription = "VIA Rhine Family Fast Ethernet Adapter Driver"
FunctionFETTitle = "VIA Rhine Family Fast Ethernet Adapter Setup"

ShellCodeErrorTitle     = "Error: "$(Function$(Option)Title)
ShellCodeErrorText      = "Shell Code Error."
CANNOT_FIND_ANY_CARD    = "Network card is not present in the system"

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