OEMSETUP.INF Driver File Contents (wla_1017d1.zip)

;*********************************************
;     Copyright 2002, Compex Inc
;*********************************************

[Identification]
    OptionType              = NetAdapter

[Options]
    WaveLAN_PCMCIA
    WaveLAN_PCI

[OptionsTextENG]
    WaveLAN_PCMCIA          = "Wireless PC Card"
    WaveLAN_PCI             = "Wireless PCI Card"

[ProductConstants]
    Manufacturer            = "Agere Systems"
    FunctionTitle           = "Wireless Adapter Setup"
    SWProductDescription    = "Wireless NDIS 4 Miniport Driver"
    HWProductDescription    = "Wireless Network Adapter"

[ProductConstants-WaveLAN_PCMCIA]
    ConfigFileName          = "WNAGS52.CPL"
    HelpFileName            = "WNAGS.HLP"
    HelpCntName             = "WNAGS.CNT"
    DriverFileName          = "WLAGS52.SYS"

    CisList                 = {+
	                            {"Agere Systems",{"Compex iWaveport WL11A+","Wireless PC Card Model 0106","Wireless Integrated Card Model 0202","Wireless Embedded Card Model 0504"}},+
	                            {"IBM CORPORATION",{"IBM HIGH RATE WIRELESS LAN PC CARD"}},+
	                            {"Lucent Technologies",{"WaveLAN/IEEE"}},+
	                            {"TOSHIBA",{"WIRELESS LAN CARD"}},+
	                            {"Samsung Electronics",{"Samsung SEW-2001p Card","Samsung SEW-2001m Card"}},+
	                            {"Siemens",{"I-GATE 11M PC Card B"}},+
	                            {"Tyco Electronics",{"Tyco Electronics 802.11b Card"}},+
	                            {"Wireless",{"WLAN PC Card","WLAN Integrated Card","WLAN Embedded Card "}}+
                              }

    HWProductName           = "WLAGS52"
    HWProductTitle          = "Wireless PC Card"

    VendorDescription       = "Wireless PC Card"

    SWProductVersionVariant = "1"
    SWProductVersionMajor   = "7"
    SWProductVersionMinor   = "62"
    SWProductName           = $(HWProductName)
    SWProductTitle          = $(HWProductTitle)" Driver"
    SWProductPath           = "\SystemRoot\System32\drivers\"$(DriverFileName)
    SWProductVersion        = $(SWProductVersionMajor)"."$(SWProductVersionMinor)
    SWProductKeyName        = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(SWProductName)"\CurrentVersion"
    PcmciaKeyName           = $(!NTN_ServiceBase)"\PCMCIA\DataBase"

    DPPCMCIA                = 1
    BusType                 = 1

[ProductConstants-WaveLAN_PCI]
    ConfigFileName          = "WNAGS52.CPL"
    HelpFileName            = "WNAGS.HLP"
    HelpCntName             = "WNAGS.CNT"
    DriverFileName          = "WLAGS52.SYS"
    PciProductName          = "WaveLAN/PCI"
    HWProductName           = "WLAGS52"
    HWProductTitle          = "Wireless PCI Card"

    VendorDescription       = "Wireless PCI Card"
    
    SWProductVersionVariant = "1"
    SWProductVersionMajor   = "7"
    SWProductVersionMinor   = "62"
    SWProductName           = $(HWProductName)
    SWProductTitle          = $(HWProductTitle)" Driver"
    SWProductPath           = "\SystemRoot\System32\drivers\"$(DriverFileName)
    SWProductVersion        = $(SWProductVersionMajor)"."$(SWProductVersionMinor)
    SWProductKeyName        = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(SWProductName)"\CurrentVersion"
    BusType                 = 5

[NetRuleConstants]
    SoftwareType            = "driver"
    NetRuleSoftwareType     = $(HWProductName)"Sys ndisDriver "$(HWProductName)"Driver"
    NetRuleSoftwareUse      = $(SoftwareType)
    NetRuleSoftwareBindForm = """"$(HWProductName)"Sys"" yes no container"
    NetRuleSoftwareClass    = {$(HWProductName)"Driver basic"}
    NetRuleSoftwareBindable = {$(HWProductName)"Driver "$(HWProductName)"Adapter non exclusive 100"}
    NetRuleHardwareType     = $(HWProductName)" "$(HWProductName)"Adapter"
    NetRuleHardwareBindForm = " yes yes container"
    NetRuleHardwareClass    = {$(HWProductName)"Adapter basic"}
    NetworkCardsKeyName     = $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards\"

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Define parameters which will be conditionally added as
; values in the device parameters section.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[DriverParameters]
    SlotNumber                      = 0 ; for QL5332 based PCI adapter
    BusNumber                       = 0
    MediaType                       = 1
    PortType                        = 1
    IoBaseAddress                   = 1024
    InterruptNumber                 = 10
    DPDebugFlags                    = 0
    DriverVariant                   = $(SWProductVersionVariant)
    DriverMajor                     = $(SWProductVersionMajor)
    DriverMinor                     = $(SWProductVersionMinor)
    DriverEnable                    = 1
    Configured                      = 1

;---------------------------------------------------------------------------
; 1. Identify
;
; DESCRIPTION:   To verify that this INF deals with the same type of options
;                as we are choosing currently.
;
; INPUT:         None
;
; OUTPUT:        $($R0): STATUS: STATUS_SUCCESSFUL
;                $($R1): Option Type (COMPUTER ...)
;                $($R2): Diskette description
;---------------------------------------------------------------------------

[Identify]
;   Set !DebugOutputControl = 1
    Debug-Output "WVLANINF: Identify"
    Read-Syms Identification
    Set Status              = STATUS_SUCCESSFUL
    Set Identifier          = $(OptionType)
    Set Media               = #("Source Media Descriptions", 1, 1)
    Return $(Status) $(Identifier) $(Media)

;------------------------------------------------------------------------
; 2. ReturnOptions:
;
; DESCRIPTION:   To return the option list supported by this INF and the
;                localised text list representing the options.
;
;
; INPUT:         $($0):  Language used. ( ENG | FRN | ... )
;
; OUTPUT:        $($R0): STATUS: STATUS_SUCCESSFUL |
;                                STATUS_NOLANGUAGE
;                                STATUS_FAILED
;                                STATUS_NOTSUPPORTED
;
;                $($R1): Option List
;                $($R2): Option Text List
;------------------------------------------------------------------------

[ReturnOptions]
;   Set !DebugOutputControl = 1
    Debug-Output "WVLANINF: ReturnOptions"
    Set Status              = STATUS_FAILED
    Set OptionList          = {}
    Set OptionTextList      = {}
    Set LanguageList        = ^(LanguagesSupported, 1)
    IfContains(i) $($0) in $(LanguageList)
        IfStr(i) $($1) == ""
            Goto ReturnOptions_Success
        EndIf
        Set PlatformList    = ^(PlatformsSupported, 1)
        IfContains(i) $($1) in $(PlatformList)
            Goto ReturnOptions_Success
        Else
            Set Status = STATUS_NOTSUPPORTED
            Goto ReturnOptions_Failure
        EndIf
    Else
        Set Status = STATUS_NOLANGUAGE
        Goto ReturnOptions_Failure
    EndIf
ReturnOptions_Success = +
    Set OptionList          = ^(Options, 1)
    Set OptionTextList      = ^(OptionsText$($0), 1)
    Set Status              = STATUS_SUCCESSFUL
ReturnOptions_Failure = +
    Return $(Status) $(OptionList) $(OptionTextList)

; If the [ReturnOptions] section returns successfully, indicating
; the language is supported, Setup displays a dialog box from which
; the user can select a driver to install.  Setup then calls the
; [InstallOption] section, with the following parameters:
;
;       Language to use
;       OptionID to install
;       SourceDirectory
;       AddCopy  (yes/no)
;       DoCopy   (yes/no)
;       DoConfig (yes/no)
;
; ScrDir seems to always be A:\, even when you later install from
; the oemnad#.inf which is copied to the system32 directory.
;
; AddCopy and DoCopy are valid only when NTN_InstallMode = install.
; AddCopy is yes if the files should be added to the copy list.
; DoCopy is yes if CopyFilesInCopyList should be called.
;
; DoConfig is not used for network cards.
;
; This .INF file is automatically copied to the SYSTEM32 directory,
; by WinNT, and renamed so as to have a unique name.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; MAIN ENTRY POINT
;
;------------------------------------------------------------------------
;
; InstallOption:
;
;      This section is shelled to by main installation processing
;      or by NCPASHEL.INF during reconfig, removal, update, etc.
;
;
; FUNCTION:  To copy files representing Options
;            To configure the installed option
;            To update the registry for the installed option
;
; INPUT:     $($0):  Language to use
;            $($1):  OptionID to install
;            $($2):  SourceDirectory
;            $($3):  AddCopy  (YES | NO)
;            $($4):  DoCopy   (YES | NO)
;            $($5):  DoConfig (YES | NO)
;
; OUTPUT:    $($R0): STATUS: STATUS_SUCCESSFUL |
;                            STATUS_NOLANGUAGE |
;                            STATUS_USERCANCEL |
;                            STATUS_FAILED
;
;------------------------------------------------------------------------

[InstallOption]
;;;
;;; FIXME - Turn off debug messages before shipping
;;;
    Set SaveDebugOutputControl = $(!DebugOutputControl)
;   Set !DebugOutputControl = 1
    Debug-Output "WVLANINF: InstallOption"
;;;
;;; Get parameters from calling routine
;;;
    Set Option              = $($1)
    Set SrcDir              = $($2)
    Set AddCopy             = $($3)
    Set DoCopy              = $($4)
    Set DoConfig            = $($5)
    Set LanguageList        = ^(LanguagesSupported, 1)
;;;
;;; Check that language is supported, and abort if it is not.
;;;
    IfContains(i) $($0) NOT-IN $(LanguageList)
        Return STATUS_NOLANGUAGE
    EndIf
;;;
;;; Get defined strings.
;;;
    Read-Syms GeneralConstants
    Read-Syms FileConstants
    Read-Syms FileConstants-$(!STF_LANGUAGE)
    Read-Syms ProductConstants
    Read-Syms ProductConstants-$(Option)
    Read-Syms NetRuleConstants
    Read-Syms DriverParameters

;;;;;;;;; QL5332 based PCI adapter specific ;;;;;;;;;;;;;;;;;
    IfStr(i) $(Option) == "WaveLAN_PCI"

        ;;
        ;; Get the Version of Windows NT we are installing on.  This will allow us to use the
        ;; PCI Support that will be included in NT versions 3.51 and higher
        ;; NT v3.51 and higher have PCI detection code built in.
        ;;
        set CurrentVersionValue = ""
        OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\Microsoft\Windows Nt\CurrentVersion" $(!REG_KEY_READ) KeyNt
        Debug-Output "KeyNt="$(KeyNt)
        Ifstr(i) $(KeyNt) != ""
            GetRegValue $(KeyNt) "CurrentVersion" CurrentVersionValue
            Debug-Output "$(InfFile) $(Option): WinNT CurrentVersion ="$(CurrentVersionValue)
            CloseRegKey $(KeyNt)
        Endif
        set NT4VersionConstant = "4.0"
        ifstr(i) (*($(CurrentVersionValue),4)) != ($(NT4VersionConstant))    ;; NT v3.10, 3.50, 3.51 not supported!
            Debug-Output "$(InfFile) $(Option): WinNT CurrentVersion(4) ="(*($(CurrentVersionValue),4))
            Debug-Output "Nt4vconsta='$(NT4VersionConstant)'"
            set Error = "Windows NT v3.10, v3.50 and v3.51 are not supported by this product"
            Goto fatal
        endif

        ;; Since it has now been made sure that we are running Win-NT4, we can use the build-in PCI
        ;; support in the setup.

        Debug-Output "$(InfFile) $(Option): About to look on PCI bus for QL5332 based PCI Adapters"

        set NTDetected = $(TRUE)
        set VendorID = 4545       ; 0x11c1 is Agere Vendor ID
        set DeviceID = 43809      ; 0xAB21 is Wireless QL5332 PCI adapter id
        ;;set-div CFID = $($(Option)CFID) 1
        Debug-Output "$(InfFile) $(Option): Searching for PCI VendorID = $(VendorID), DeviceID = $(DeviceID)"
        ;;Shell $(UtilityInf), GetPCIInformation, $(VendorID) $(CFID)
        Shell $(UtilityInf), GetPCIInformation, $(VendorID) $(DeviceID)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "$(InfFile) $(Option): GetPCIInformation() routine failed"
            goto fatal
        endif
        ifstr(i) $($R0) == {}
            Debug-Output "$(InfFile) $(Option): No QL5332 based PCI adapter found."
            set QL5332PCIAdapterFound = $(FALSE)
            IfStr(i)      $(!NTN_InstallMode) == "install"
                set Error = "Setup did not find a wireless adapter in any PCI slot"
                Goto fatal
            endif
        else
            Debug-Output "$(InfFile) $(Option): QL5332 based PCI adapter found. Switching to PCI setup"
            set AdapterList = $($R0)
            ; "AdapterList" has the list of currently inserted QL5332 PCI adapters in the system!
            set Option = "WaveLAN_PCI"
            Debug-Output "$(InfFile) $(Option): Adapterlist = $(AdatperList)"
            ; Now walk through list of adapters (normally, it should be only one)
            ; See if the driver already has been installed for the PCI bus and slot where the adapter was found
            ; If so, skip install.
            ForListDo $(AdapterList)
                Set InstallCard = "YES"
                ifint $(NTDetected) == $(TRUE)
                    set QL5332PCIAdapterFound = $(TRUE)
                    set BusNumber = *($($),1)
                    set SlotNumber = *($($),2)
                
                    Debug-Output "$(InfFile) $(Option): DetectedBusNumber = $(BusNumber)"
                    Debug-Output "$(InfFile) $(Option): DetectedSlotNum = $(SlotNumber)"

                    Shell $(UtilityInf), IsNetCardAlreadyInstalled, $(BusNumber), +
                    $(SlotNumber), $(ProductHardware$(Option)Description), $(ProductHardwareName)

                    ifint $($ShellCode) != $(!SHELL_CODE_OK)
                        Debug-Output "$(InfFile) $(Option): PCIdetect, forlistdo, IsNetCardAlreadyInstalled failed"
                        goto ShellCodeError
                    endif
                    ifstr $($R0) != "NO_ERROR"
                        Debug-Output "$(InfFile) $(Option): PCIdetect, forlistdo, IsNetCardAlreadyInstalled returned != NO_ERROR"
                        set Error = $($R0)
                        goto fatal
                    endif
                    ifstr(i) $($R1) == "YES"
                        set InstallCard = "NO"  ;; Don't want to re-install, it's there already
                        Debug-Output "$(InfFile) $(Option): IsNetCardAlreadyInstalled says 'yes'. So don't reinstall."
                    endif
                endif
            EndForListDo
        endif
    endif
;;;;;;;;; END QL5332 based PCI adapter specific ;;;;;;;;;;;;;;;;
    Read-Syms DialogConstants-$(!STF_LANGUAGE)
;;;
;;; Get date
;;;
    Detect Date
    Set-Subst LF = "\n"
;;;
;;; Set title for this procedure
;;;
    Set-Title $(FunctionTitle)
    Set GoToLabel     = Begin
    Set ComeFromLabel = Begin
    Set CommonStatus  = STATUS_SUCCESSFUL
;;;
;;; Determine mode selected by user in NCPA
;;;
Begin = +
    EndWait
    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"
        Set StartLabel = ConfigureAdapter
    Else
        Set StartLabel = InstallAdapter
    EndIf

    Debug-Output $(SWProductName)": ============================================="
    Debug-Output $(SWProductName)": Option          = "$(Option)
    Debug-Output $(SWProductName)": SrcDir          = "$(SrcDir)
    Debug-Output $(SWProductName)": AddCopy         = "$(AddCopy)
    Debug-Output $(SWProductName)": DoCopy          = "$(DoCopy)
    Debug-Output $(SWProductName)": DoConfig        = "$(DoConfig)
    Debug-Output $(SWProductName)": STF_LANGUAGE    = "$(!STF_LANGUAGE)
    Debug-Output $(SWProductName)": STF_CWDIR       = "$(!STF_CWDIR)
    Debug-Output $(SWProductName)": NTN_InstallMode = "$(!NTN_InstallMode)
    Debug-Output $(SWProductName)": NTN_RegBase     = "$(!NTN_RegBase)
    Debug-Output $(SWProductName)": ============================================="

    Set ComeFromLabel = fatal
    Set GoToLabel = fatal
    Goto $(StartLabel)

InstallAdapter = +
    Debug-Output $(SWProductName)": InstallAdapter: "$(SWProductKeyName)
;;;
;;; See if the software has already been installed.
;;;
    StartWait
    OpenRegKey $(!REG_H_LOCAL) "" $(SWProductKeyName) $(MAXIMUM_ALLOWED) +
            hKeySWProduct
    IfStr $(hKeySWProduct) != $(hKeyNull)
        Debug-Output $(SWProductName)": Already Installed: "$(SWProductKeyName)
        IfStr(i) $(SWProductKeyName) == $(!NTN_RegBase)
;;;
;;;         The software is already installed, don't do it again.
;;;
            Shell $(UtilityInf), VerExistedDlg, +
                                    $(SWProductTitle), +
                                    $(SWProductVersion)
            IfInt $($ShellCode) != $(!SHELL_CODE_OK)
                Debug-Output $(SWProductName)": Cannot run VerExistedDlg"
                Goto ShellCodeError
            EndIf
            Debug-Output $(SWProductName)": Software already installed"
            Goto end
        Else
;;;
;;;         The software is already installed, now the user is adding 
;;;         a new hardware instance.  Let's make sure it's okay.
;;;
            Shell $(UtilityInf), CardExistedDlg
            IfInt $($ShellCode) != $(!SHELL_CODE_OK)
                Debug-Output $(SWProductName)": Cannot run CardExistedDlg"
                Goto ShellCodeError
            EndIf
            IfStr(i) $($R1) != "OK"
                Debug-Output $(SWProductName)": User cancelled install"
                Goto end
            EndIf
        EndIf
    Else
;;;
;;;     The software is not installed, so do it now.
;;;     Start by copying the files to the system disk.
;;;
        Debug-Output $(SWProductName)": First Time Install: "$(SWProductKeyName)
;       If this is not running via the NCPA, we need to change the 
;       SrcDir since DoAskSource won't prompt for the disk.  If the 
;       NCPA is not used, the files should be copied before launching 
;       the INF install, and you should do no file copies from the INF.
        IfStr(i) $(!NTN_InstallPhase) == "primary"
            Set SrcDir = "A:\"
        EndIf
;;;
;;;     If SrcDir is not set, ask the user to locate it for us.
;;;
        Set STF_INSTALL_OUTCOME = STF_SUCCESS
        IfStr(i) $(SrcDir) == ""
            Shell $(UtilityInf), DoAskSource, $(!STF_CWDDIR), "A:\", "NO"
            IfInt $($ShellCode) != $(!SHELL_CODE_OK)
                Set STF_INSTALL_OUTCOME = STATUS_SHELL_FAILED
            Else-IfStr(i) $($R0) == STATUS_FAILED
                Set STF_INSTALL_OUTCOME = STATUS_FAILED
            Else-IfStr(i) $($R0) == STATUS_USERCANCEL
                Set STF_INSTALL_OUTCOME = STATUS_USERCANCEL
            Else
                Set SrcDir = $($R1)
            EndIf
        EndIf
        IfStr(i) $(STF_INSTALL_OUTCOME) == STF_SUCCESS
            Install "Install-Software"
        Endif
        IfStr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS
            Debug-Output $(SWProductName)": Install-Software ERROR="$(STF_INSTALL_OUTCOME)
            Shell $(UtilityInf) RegistryErrorString "UNABLE_COPY_FILE"
            IfInt $($ShellCode) != $(!SHELL_CODE_OK)
                Goto ShellCodeError
            EndIf
            Set Error = $($R0)
            Goto fatal
        EndIf
;;;
;;;     Now add the software component to the registry.
;;;
        Debug-Output $(SWProductName)": AddSoftwareComponent"
        Debug-Output $(SWProductName)": Manufacturer = "$(Manufacturer)
        Debug-Output $(SWProductName)": SWProductName = "$(SWProductName)
        Debug-Output $(SWProductName)": SWProductTitle = "$(SWProductTitle)
        Debug-Output $(SWProductName)": STF_CONTEXTINFNAME = "$(STF_CONTEXTINFNAME)
        Debug-Output $(SWProductName)": SWProductPath = "$(SWProductPath)

        Set OEM_ABANDON_SOFTWARE = TRUE
        Shell $(UtilityInf), AddSoftwareComponent, +
                                $(Manufacturer), +
                                $(SWProductName), +
                                $(SWProductName), +
                                $(SWProductTitle), +
                                $(STF_CONTEXTINFNAME), +
                                $(SWProductPath), +
                                "kernel", "NDIS", {}, "", +
                                $(NetEventDLL)
        IfInt $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output $(SWProductName)": Cannot run AddSoftwareComponent"
            Goto ShellCodeError
        EndIf
        Set RegistryErrorIndex  = $($R0)
        Set hKeySWProduct       = $($R1)
        Set hKeySWNetRules      = $($R2)
        Set hKeySWService       = $($R3)
        Set hKeySWParameter     = $($R4)
        Set hKeySWLinkage       = $($R5)
        IfStr(i) $(RegistryErrorIndex) != NO_ERROR
            Debug-Output $(SWProductName)": AddSoftwareComponent ERROR="$(RegistryErrorIndex)
            Goto fatalRegistry
        EndIf
;;;
;;;     Write the values to the software product key.
;;;
        Debug-Output $(SWProductName)": AddValueList hKeySWProduct"
        Set NewValueList = {+
                {Description,$(NoTitle),$(!REG_VT_SZ),$(SWProductDescription)}, +
                {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}, +
                {MajorVersion,$(NoTitle),$(!REG_VT_DWORD),$(SWProductVersionMajor)}, +
                {MinorVersion,$(NoTitle),$(!REG_VT_DWORD),$(SWProductVersionMinor)}, +
                {ServiceName,$(NoTitle),$(!REG_VT_SZ),$(SWProductName)}, +
                {SoftwareType,$(NoTitle),$(!REG_VT_SZ),$(SoftwareType)}, +
                {Title,$(NoTitle),$(!REG_VT_SZ),$(SWProductTitle)} +
                }
        Shell  $(UtilityInf), AddValueList, $(hKeySWProduct), $(NewValueList)
        IfInt $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output $(SWProductName)": Cannot run AddValueList: hKeySWProduct"
            Goto ShellCodeError
        EndIf
        Set RegistryErrorIndex = $($R0)
        IfStr(i) $(RegistryErrorIndex) != NO_ERROR
            Debug-Output $(SWProductName)": AddValueList hKeySWProduct ERROR="$(RegistryErrorIndex)
            Goto fatalRegistry
        EndIf
;;;
;;;     Write the values to the software NetRules key.
;;;
        Debug-Output $(SWProductName)": AddValueList hKeySWNetRules"
        Set NewValueList = {+
                {bindable,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleSoftwareBindable)}, +
                {bindform,$(NoTitle),$(!REG_VT_SZ),$(NetRuleSoftwareBindForm)}, +
                {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleSoftwareClass)}, +
                {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}, +
                {type,$(NoTitle),$(!REG_VT_SZ),$(NetRuleSoftwareType)}, +
                {use,$(NoTitle),$(!REG_VT_SZ),$(NetRuleSoftwareUse)} +
                }
        Shell  $(UtilityInf), AddValueList, $(hKeySWNetRules), $(NewValueList)
        IfInt $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output $(SWProductName)": Cannot run AddValueList: hKeySWNetRules"
            Goto ShellCodeError
        EndIf
        Set RegistryErrorIndex = $($R0)
        IfStr(i) $(RegistryErrorIndex) != NO_ERROR
            Debug-Output $(SWProductName)": AddValueList hKeySWNetRules ERROR="$(RegistryErrorIndex)
            Goto fatalRegistry
        EndIf
;;;
;;;     If this is just a software install, we're done.
;;;
        Debug-Output $(SWProductName)": Software install complete"
    EndIf
;;;
;;; Okay, if we're here, it must be time to install a new hardware device.
;;;
    Debug-Output $(SWProductName)": AddHardwareComponent"
    Set OEM_ABANDON_HARDWARE = TRUE
    Shell $(UtilityInf), AddHardwareComponent, $(HWProductName), +
                            $(STF_CONTEXTINFNAME), $(SWProductKeyName)
    IfInt $($ShellCode) != $(!SHELL_CODE_OK)
        Debug-Output $(SWProductName)": Cannot run AddHardwareComponent"
        Goto ShellCodeError
    EndIf
    Set RegistryErrorIndex      = $($R0)
    Set hKeyNetCard             = $($R1)
    Set hKeyNetCardRules        = $($R2)
    Set hKeyDeviceParameters    = $($R3)
    Set NetCardNumber           = $($R4)
    Set ServiceName             = $($R5)
    IfInt $(NetCardNumber) != -1
        Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), +
                                    $(NetworkCardsKeyName)$(NetCardNumber))
    EndIf
    IfStr(i) $(RegistryErrorIndex) != NO_ERROR
        Debug-Output $(SWProductName)": AddHardwareComponent ERROR="$($R0)
        Goto fatalRegistry
    EndIf
;;;
;;; Now add the values to the NetworkCards\N subkey.
;;;
    Debug-Output $(SWProductName)": AddValueList hKeyNetCard"
    Set NewValueList = {+
            {Description,$(NoTitle),$(!REG_VT_SZ),$(HWProductDescription)}, +
            {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}, +
            {Manufacturer,$(NoTitle),$(!REG_VT_SZ),$(Manufacturer)}, +
            {ProductName,$(NoTitle),$(!REG_VT_SZ),$(HWProductName)}, +
            {ServiceName,$(NoTitle),$(!REG_VT_SZ),$(ServiceName)}, +
            {Title,$(NoTitle),$(!REG_VT_SZ),"["$(NetCardNumber)"] "$(HWProductTitle)} +
            }
    Shell  $(UtilityInf), AddValueList, $(hKeyNetCard), $(NewValueList)
    IfInt $($ShellCode) != $(!SHELL_CODE_OK)
        Debug-Output $(SWProductName)": Cannot run AddValueList: hKeyNetCard"
        Goto ShellCodeError
    EndIf
;;;
;;; Now add the values to the NetworkCards\N\NetRules subkey.
;;;
    Set TempBindForm = """"$(ServiceName)""""$(NetRuleHardwareBindForm)
    Set NewValueList = {+
            {bindform,$(NoTitle),$(!REG_VT_SZ),$(TempBindForm)}, +
            {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleHardwareClass)}, +
            {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}, +
            {type,$(NoTitle),$(!REG_VT_SZ),$(NetRuleHardwareType)}+
            }
    Shell  $(UtilityInf), AddValueList, $(hKeyNetCardRules), $(NewValueList)
    IfInt $($ShellCode) != $(!SHELL_CODE_OK)
        Debug-Output $(SWProductName)": Cannot run AddValueList: hKeyNetCardRules"
        Goto ShellCodeError
    EndIf
    Set RegistryErrorIndex = $($R0)
    IfStr(i) $(RegistryErrorIndex) != NO_ERROR
        Debug-Output $(SWProductName)": AddValueList: hKeyNetCardRules ERROR="$(RegistryErrorIndex)
        Goto fatalRegistry
    EndIf
;;;
;;; Now add the fixed values to the adapter parameters subkey.
;;;
    Set NewValueList = {+
            {BusNumber,$(NoTitle),$(!REG_VT_DWORD),$(BusNumber)}, +
            {BusType,$(NoTitle),$(!REG_VT_DWORD),$(BusType)}, +
            {MediaType,$(NoTitle),$(!REG_VT_DWORD),$(MediaType)} +
            }
    Shell  $(UtilityInf), AddValueList, $(hKeyDeviceParameters), $(NewValueList)
    IfInt $($ShellCode) != $(!SHELL_CODE_OK)
        Debug-Output $(SWProductName)": Cannot run AddValueList: hKeyDeviceParameters"
        Goto ShellCodeError
    EndIf
    Set RegistryErrorIndex = $($R0)
    IfStr(i) $(RegistryErrorIndex) != NO_ERROR
        Debug-Output $(SWProductName)": AddValueList: hKeyDeviceParameters ERROR="$(RegistryErrorIndex)
        Goto fatalRegistry
    EndIf

    IfStr(i) $(Option) == "WaveLAN_PCMCIA"
;;;
;;;     If PCMCIA adapter, add keys and values to allow NT to create 
;;;     attribute window when the system boots.
;;;
        OpenRegKey $(!REG_H_LOCAL) "" $(PcmciaKeyName) $(MAXIMUM_ALLOWED) +
                hKeyPcmciaDatabase
        IfStr $(hKeyPcmciaDatabase) == $(hKeyNull)
            Debug-Output $(SWProductName)": OpenRegKey failed to open: "$(PcmciaKeyName)
            Goto fatalRegistry
        EndIf
;;;
;;;
        Debug-Output "New nested ForListDo for adding registry entries"
        ForListDo $(CisList)
            set ListItem    = $($)
            set Vendor      = *($(ListItem),1)
            set ProductList = *($(ListItem),2)
;;;
;;;
;;;-------------------------------------------------------------------------------------------------
;;;         Try to create the keys in PCMCIA database, but don't fail if they're already there.
;;;         Adding key : Vendor
;;;-------------------------------------------------------------------------------------------------
            CreateRegKey $(hKeyPcmciaDatabase) {$(Vendor), 0, GenericClass} +
                            "" $(MAXIMUM_ALLOWED) "" hKeyPcmciaManufacturer
            IfStr $(hKeyPcmciaManufacturer) == $(hKeyNull)
                OpenRegKey $(hKeyPcmciaDatabase) "" $(Vendor) $(MAXIMUM_ALLOWED) +
                        hKeyPcmciaManufacturer
                IfStr $(hKeyPcmciaManufacturer) == $(hKeyNull)
                    Debug-Output $(SWProductName)": OpenRegKey failed to open: " +
                                    $(PcmciaKeyName)"\"$(Vendor)
                    Goto fatalRegistry
                EndIf
            EndIf

            ForListDo $(ProductList)
	               Debug-Output "Addding registry for "$(Vendor)"\"$($)
;;;-------------------------------------------------------------------------------------------------
;;;             Try to create product key under manufacturer key, but don't fail if it's already there.
;;;             Adding Key : Product
;;;-------------------------------------------------------------------------------------------------
                CreateRegKey $(hKeyPcmciaManufacturer) { $($), 0, GenericClass } "" +
                    $(MAXIMUM_ALLOWED) "" hKeyPcmciaProduct
                IfStr $(hKeyPcmciaProduct) == $(hKeyNull)
                    OpenRegKey $(hKeyPcmciaManufacturer) "" $($) $(MAXIMUM_ALLOWED) +
                            hKeyPcmciaProduct
                    IfStr $(hKeyPcmciaProduct) == $(hKeyNull)
                        Debug-Output $(SWProductName)": OpenRegKey failed to open: " +
                                        $(PcmciaKeyName)"\"$(Vendor)"\"$($)
                        Goto fatalRegistry
                    EndIf
                Endif
;;;-------------------------------------------------------------------------------------------------
;;;             Now write the values to the registry.
;;;-------------------------------------------------------------------------------------------------
                Set NewValueList = {+
                        {DeviceType,$(NoTitle),$(!REG_VT_SZ),"NET"}, +
                        {Driver,$(NoTitle),$(!REG_VT_SZ), $(SWProductName)}, +
                        {InfFileName,$(NoTitle),$(!REG_VT_SZ),$(!UG_Filename)}, +
                        {Option,$(NoTitle),$(!REG_VT_SZ),$(Option)}+
                        }
                Shell  $(UtilityInf), AddValueList, $(hKeyPcmciaProduct), $(NewValueList)
                IfInt $($ShellCode) != $(!SHELL_CODE_OK)
                    Debug-Output $(SWProductName)": Cannot run AddValueList: hKeyPcmciaProduct"
                    Goto ShellCodeError
                EndIf
                CloseRegKey $(hKeyPcmciaProduct)
            EndForListDo
        EndForListDo
    EndIf
    EndWait
    Goto ConfigureHardware

ConfigureAdapter = +
    IfStr(i) $(SWProductKeyName) == $(!NTN_RegBase)
;;;
;;;     Cannot configure software component
;;;
        Debug-Output $(SWProductName)": Can't configure software component: "$(SWProductKeyName)
        Shell $(UtilityInf), RegistryErrorString, CANNOT_CONFIGURE_SOFTWARE
        IfInt $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output $(SWProductName)":ShellCode: RegistryErrorString: "$($ShellCode)
            Goto ShellCodeError
        EndIf
        Set Error = $($R0)
        Set ComeFromLabel = end
        Set GoToLabel     = end
        Goto nonFatalInfo
    EndIf
;;;
;;; Configure hardware component
;;;
    Debug-Output $(SWProductName)": ConfigureAdapter"
;;;
;;; Open the hardware device key and parameters key
;;;
    OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase) $(MAXIMUM_ALLOWED) +
            hKeyNetCard
    IfStr $(hKeyNetCard) == $(hKeyNull)
        Debug-Output $(SWProductName)": OpenRegKey failed to open: "$(!NTN_RegBase)
        Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
        Goto fatalRegistry
    EndIf
    Shell $(UtilityInf) FindService, $(hKeyNetCard)
    IfInt $($ShellCode) != $(!SHELL_CODE_OK)
        Debug-Output $(SWProductName)": Cannot run FindService"
        Goto ShellCodeError
    EndIf
    IfStr(i) $($R0) != NO_ERROR
        Debug-Output $(SWProductName)": FindService ERROR="$($R0)
        Goto fatalRegistry
    EndIf
    Set hKeyDevice           = $($R1)
    Set hKeyDeviceParameters = $($R2)
    GetRegValue $(hKeyNetCard),"ServiceName", ServiceNameInfo
    Set ServiceName = *($(ServiceNameInfo), 4)

ConfigureHardware = +
    Debug-Output $(SWProductName)": ConfigureHardware"
;;;
;;; Make sure the device key has been found
;;;
    IfStr $(ServiceName) == ""
        Debug-Output $(SWProductName)": ServiceName not found"
        Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
        Goto fatalRegistry
    EndIf
    IfStr $(hKeyDeviceParameters) == $(hKeyNull)
        Debug-Output $(SWProductName)": Service\Parameters does not exist"
        Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
        Goto fatalRegistry
    EndIf
;;;
;;; Read the existing parameters from the registry
;;;
    Debug-Output $(SWProductName)": Reading parameters from registry"
    Set ValueName = ""
    Set ValueData = ""
    Set ValueStr  = ""
    Set ValueList = {}
    EnumRegValue $(hKeyDeviceParameters) ValueList
    ForListDo $(ValueList)
        Set ValueItem = $($)
        Set ValueName = *($(ValueItem),1)
        Set ValueData = *($(ValueItem),4)

        IfStr(i) $(ValueName) == "DebugFlags"
            Set DPDebugFlags = $(ValueData)

        Else-IfStr(i) $(ValueName) == "PCMCIA"
            Set DPPCMCIA = $(ValueData)
        
        Else-IfStr(i) $(ValueName) == "PortType"
            Set PortType = $(ValueData)

        Else-IfStr(i) $(ValueName) == "IoBaseAddress"
            Set IoBaseAddress = $(ValueData)

        Else-IfStr(i) $(ValueName) == "InterruptNumber"
            Set InterruptNumber = $(ValueData)

        Endif
    EndForListDo

writeParameters = +
    Debug-Output $(SWProductName)": writeParameters"
    IfStr(i) $(Option) == "WaveLAN_ISA"
        Set NewValueList = {+
                {DebugFlags,$(NoTitle),$(!REG_VT_DWORD),$(DPDebugFlags)}, +
                {PortType,$(NoTitle),$(!REG_VT_DWORD),$(PortType)} +
                }
    Else-IfStr(i) $(Option) == "WaveLAN_PCMCIA"
        Set NewValueList = {+
                {DebugFlags,$(NoTitle),$(!REG_VT_DWORD),$(DPDebugFlags)}, +
                {PCMCIA,$(NoTitle),$(!REG_VT_DWORD),$(DPPCMCIA)}, +
                {PortType,$(NoTitle),$(!REG_VT_DWORD),$(PortType)} +
                {IoBaseAddress,$(NoTitle),$(!REG_VT_DWORD),$(IoBaseAddress)} +
                {InterruptNumber,$(NoTitle),$(!REG_VT_DWORD),$(InterruptNumber)} +
                {VendorDescription,$(NoTitle),$(!REG_VT_SZ),$(VendorDescription)} +
;;;
                {DriverVariant,$(NoTitle),$(!REG_VT_DWORD),$(DriverVariant)} +
                {DriverMajor,$(NoTitle),$(!REG_VT_DWORD),$(DriverMajor)} +
                {DriverMinor,$(NoTitle),$(!REG_VT_DWORD),$(DriverMinor)} +
                {DriverEnable,$(NoTitle),$(!REG_VT_DWORD),$(DriverEnable)} +
                {Configured,$(NoTitle),$(!REG_VT_DWORD),$(Configured)} +
;;;
                }
    Else-IfStr(i) $(Option) == "WaveLAN_PCI"
        Debug-Output $(SWProductName)": writing PCI parameters to registry..."
        Set NewValueList = {+
            {DebugFlags,$(NoTitle),$(!REG_VT_DWORD),$(DPDebugFlags)}, +
            {VendorDescription,$(NoTitle),$(!REG_VT_SZ),$(VendorDescription)} +
            ;;;
            {DriverVariant,$(NoTitle),$(!REG_VT_DWORD),$(DriverVariant)} +
            {DriverMajor,$(NoTitle),$(!REG_VT_DWORD),$(DriverMajor)} +
            {DriverMinor,$(NoTitle),$(!REG_VT_DWORD),$(DriverMinor)} +
            {DriverEnable,$(NoTitle),$(!REG_VT_DWORD),$(DriverEnable)} +
            {Configured,$(NoTitle),$(!REG_VT_DWORD),$(Configured)} +
            ;;;
        }
    EndIf
    Shell  $(UtilityInf), AddValueList, $(hKeyDeviceParameters), $(NewValueList)
    IfInt $($ShellCode) != $(!SHELL_CODE_OK)
        Debug-Output $(SWProductName)": Cannot run AddValueList: hKeyDeviceParameters"
        Goto ShellCodeError
    EndIf
    Set RegistryErrorIndex = $($R0)
    IfStr(i) $(RegistryErrorIndex) != NO_ERROR
        Debug-Output $(SWProductName)": AddValueList: hKeyDeviceParameters ERROR="$(RegistryErrorIndex)
        Goto fatalRegistry
    EndIf

configureDialog = +
    Debug-Output $(SWProductName)": WavelanConfigure("$(Option)", "$(ServiceName)")"

    LoadLibrary "" $(ConfigFileName) hLibrary
    LibraryProcedure ConfigResult $(hLibrary) WavelanConfigure +
                        $(Option), $(ServiceName)
    FreeLibrary $(hLibrary)

    Debug-Output $(SWProductName)": WavelanConfigure Result="$(ConfigResult)

    Set CommonStatus = $(ConfigResult)
    IfStr(i) $(CommonStatus) == "STATUS_USERCANCEL"
        Goto end
    Else-IfStr(i) $(ConfigResult) != "STATUS_SUCCESSFUL"
        GoTo fatal
    EndIf
    Goto end

BindingAdapter = +
    Set Error =  $(SWProductName)": Setup does not support binding."
    Debug-Output $(Error)
    Goto fatal

RemoveAdapter = +
    Debug-Output $(SWProductName)": RemoveAdapter"
    IfStr(i) $(SWProductKeyName) == $(!NTN_RegBase)
;;;
;;;     Remove the software component only after all devices are removed.
;;;
        Debug-Output $(SWProductName)": Calling RemoveSoftwareComponent"
        Shell $(UtilityInf), RemoveSoftwareComponent, +
                                    $(Manufacturer), +
                                    $(SWProductName)
        IfInt $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output $(SWProductName)": Cannot run RemoveSoftwareComponent"
            Goto ShellCodeError
        EndIf
        Set RegistryErrorIndex = $($R0)
        IfStr(i) $(RegistryErrorIndex) != NO_ERROR
            Debug-Output $(SWProductName)": RemoveSoftwareComponent ERROR="$($R0)
            Goto fatalRegistry
        EndIf
    Else
;;;
;;;     Remove the specified device
;;;
        Debug-Output $(SWProductName)": Calling RemoveHardwareComponent"
        Shell $(UtilityInf), RemoveHardwareComponent, +
                                    $(Manufacturer), +
                                    $(HWProductName), +
                                    $(!NTN_RegBase)
        IfInt $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output $(SWProductName)": Cannot run RemoveHardwareComponent"
            Goto ShellCodeError
        EndIf
        Set RegistryErrorIndex = $($R0)
        IfStr(i) $(RegistryErrorIndex) != NO_ERROR
            Debug-Output $(SWProductName)": RemoveHardwareComponent ERROR="$($R0)
            Goto fatalRegistry
        EndIf
    EndIf
    Goto end

UpgradeSoftware = +
    Debug-Output $(SWProductName)": UpgradeSoftware"

;;;
;;;     For software upgrade, copy new files to the system directory.
;;;
        Debug-Output $(SWProductName)": Upgrade Software Component"
        OpenRegKey $(!REG_H_LOCAL) "" $(SWProductKeyName) $(MAXIMUM_ALLOWED) +
                hKeySWProduct
        IfStr $(hKeySWProduct) != $(hKeyNull)
            GetRegValue $(hKeySWProduct),"MajorVersion", VersionInfo
            Set MajorVersion = *($(VersionInfo), 4)
            GetRegValue $(hKeySWProduct),"MinorVersion", VersionInfo
            Set MinorVersion = *($(VersionInfo), 4)
            Set NeedUpgrade = FALSE
            IfInt $(MajorVersion) < $(SWProductVersionMajor)
                Set NeedUpgrade = TRUE
            Else-IfInt $(MajorVersion) == $(SWProductVersionMajor)
                IfInt $(MinorVersion) < $(SWProductVersionMinor)
                    Set NeedUpgrade = TRUE
                Endif
            Endif
            IfStr(i) $(NeedUpgrade) == TRUE
                Shell $(UtilityInf), GetInfFileNameFromRegistry, $(hKeySWProduct)
                IfInt $($ShellCode) != $(!SHELL_CODE_OK)
                    Debug-Output $(SWProductName)": Cannot run GetInfFileNameFromRegistry"
                    Goto ShellCodeError
                EndIf
                Set !UG_Filename = $($R0)
                IfStr(i) $(!UG_Filename) != ""
                    Shell $(UtilityInf), DoAskSource, $(!STF_CWDDIR), $(SrcDir), "YES"
                    IfInt $($ShellCode) != $(!SHELL_CODE_OK)
                        Set STF_INSTALL_OUTCOME = STATUS_SHELL_FAILED
                    Else-IfStr(i) $($R0) == STATUS_FAILED
                        Set STF_INSTALL_OUTCOME = STATUS_FAILED
                    Else-IfStr(i) $($R0) == STATUS_USERCANCEL
                        Set STF_INSTALL_OUTCOME = STATUS_USERCANCEL
                    Else
                        Set SrcDir = $($R1)
                        Install "Install-Update"
                    Endif
                    IfStr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS
                        Debug-Output $(SWProductName)": Install ERROR="$(STF_INSTALL_OUTCOME)
                        Goto fatal
                    EndIf
                Else
                    Debug-Output $(SWProductName)": InfFileName is NULL"
                EndIf
                SetRegValue $(hKeySWProduct) {MajorVersion,$(NoTitle),$(!REG_VT_SZ),$(SWProductVersionMajor)}
                SetRegValue $(hKeySWProduct) {MinorVersion,$(NoTitle),$(!REG_VT_SZ),$(SWProductVersionMinor)}
            EndIf
;;;
;;; I found the stuff I was looking for, so I finished now, goto end !
;;;
            Goto end
        Else
            ;;;
            ;;; this really means there is a problem
            ;;;
            Debug-Output $(SWProductName)": Cannot upgrade -- software was never installed"
            Goto fatalRegistry
        EndIf
    Goto end
;;;

abandon = +
    ForListDo $(OEM_ABANDON_OPTIONS)
        Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), +
            $(SWProductName), $($)
        IfInt $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output $(SWProductName)": Cannot run RemoveHardwareComponent"
            Goto ShellCodeError
        EndIf
        Set RegistryErrorIndex = $($R0)
        IfStr(i) $(RegistryErrorIndex) != NO_ERROR
            Debug-Output $(SWProductName)": RemoveHardwareComponent ERROR="$(RegistryErrorIndex)
            Goto fatalRegistry
        EndIf
    EndForListDo
    IfStr(i) $(OEM_ABANDON_SOFTWARE) == TRUE
        Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), +
            $(SWProductName), FALSE
        IfInt $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output $(SWProductName)": Cannot run RemoveSoftwareComponent"
            Goto ShellCodeError
        EndIf
        Set RegistryErrorIndex = $($R0)
        IfStr(i) $(RegistryErrorIndex) != NO_ERROR
            Debug-Output $(SWProductName)": RemoveSoftwareComponent ERROR="$(RegistryErrorIndex)
            Goto fatalRegistry
        EndIf
    EndIf
    Goto end

warning = +
    EndWait
    Shell $(SubRoutineInf) SetupMessage, $(!STF_LANGUAGE), "WARNING", $(Error)
    IfInt $($ShellCode) != $(!SHELL_CODE_OK)
        Debug-Output $(SWProductName)": Cannot run SetupMessage"
        Goto ShellCodeError
    EndIf
    IfStr(i) $($R1) == "OK"
        Debug-Output $(SWProductName)": WARNING goto "$(GoToLabel)
        Goto $(GoToLabel)
    Else-IfStr(i) $($R1) == "CANCEL"
        Debug-Output $(SWProductName)": WARNING goto "$(ComeFromLabel)
        Goto $(ComeFromLabel)
    Else
        Debug-Output $(SWProductName)": WARNING goto end"
        Goto end
    EndIf

nonFatalInfo = +
    Set CommonStatus = STATUS_USERCANCEL
    Set Severity = STATUS
    Goto nonFatalMsg

nonFatal = +
    Set Severity = nonFatal
    Goto nonFatalMsg

nonFatalMsg = +
    EndWait
    IfStr(i) $(Error) == ""
        Set Severity = nonFatal
        Shell $(UtilityInf) RegistryErrorString "SETUP_FAIL"
        IfInt $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output $(SWProductName)": Cannot run RegistryErrorString"
            Goto ShellCodeError
        EndIf
        Set Error = $($R0)
    EndIf
    Shell $(SubRoutineInf) SetupMessage, $(!STF_LANGUAGE), $(Severity), $(Error)
    IfInt $($ShellCode) != $(!SHELL_CODE_OK)
        Debug-Output $(SWProductName)": Cannot run SetupMessage"
        Goto ShellCodeError
    EndIf
    IfStr(i) $($R1) == "OK"
        Debug-Output $(SWProductName)": NONFATAL goto "$(ComeFromLabel)
        Goto $(ComeFromLabel)
    Else
        Debug-Output $(SWProductName)": NONFATAL goto end"
        Goto end
    EndIf

fatalRegistry = +
    Shell $(UtilityInf) RegistryErrorString $(RegistryErrorIndex)
    IfInt $($ShellCode) != $(!SHELL_CODE_OK)
        Debug-Output $(SWProductName)": Cannot run RegistryErrorString"
        Goto ShellCodeError
    EndIf
    Set Error = $($R0)
    Goto fatal

fatal = +
    IfStr(i) $(Error) == ""
        Shell $(UtilityInf) RegistryErrorString "SETUP_FAIL"
        IfInt $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output $(SWProductName)": Cannot run RegistryErrorString"
            Goto ShellCodeError
        EndIf
        Set Error = $($R0)
    EndIf
    Shell $(SubRoutineInf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $(Error)
    IfInt $($ShellCode) != $(!SHELL_CODE_OK)
        Debug-Output $(SWProductName)": Cannot run SetupMessage"
        Goto ShellCodeError
    EndIf
    Goto SetFailed

ShellCodeError = +
    Set DlgType      = "MessageBox"
    Set STF_MB_TITLE = "Error: "$(FunctionTitle)
    Set STF_MB_TEXT  = "Shell Code Error"
    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_HARDWARE) == TRUE
        Set OEM_ABANDON_HARDWARE = FALSE
        Goto abandon
    EndIf
    Goto end

end = +
;;;
;;; All done, close all open handles and return to setup program
;;;
    IfStr $(hKeySWProduct) != $(hKeyNull)
        CloseRegKey $(hKeySWProduct)
    EndIf
    IfStr $(hKeyDevice) != $(hKeyNull)
        CloseRegKey $(hKeyDevice)
    EndIf
    IfStr $(hKeyDeviceParameters) != $(hKeyNull)
        CloseRegKey $(hKeyDeviceParameters)
    EndIf
    IfStr $(hKeyNetCard) != $(hKeyNull)
        CloseRegKey $(hKeyNetCard)
    EndIf
    IfStr $(hKeyNetCardRules) != $(hKeyNull)
        CloseRegKey $(hKeyNetCardRules)
    EndIf
    IfStr $(hKeySWProduct) != $(hKeyNull)
        CloseRegKey $(hKeySWProduct)
    EndIf
    IfStr $(hKeySWNetRules) != $(hKeyNull)
        CloseRegKey $(hKeySWNetRules)
    EndIf
    IfStr $(hKeySWService) != $(hKeyNull)
        CloseRegKey $(hKeySWService)
    EndIf
    IfStr $(hKeySWParameter) != $(hKeyNull)
        CloseRegKey $(hKeySWParameter)
    EndIf
    IfStr $(hKeySWLinkage) != $(hKeyNull)
        CloseRegKey $(hKeySWLinkage)
    EndIf
    IfStr $(hKeyPcmciaDatabase) != $(hKeyNull)
        CloseRegKey $(hKeyPcmciaDatabase)
    EndIf
    IfStr $(hKeyPcmciaManufacturer) != $(hKeyNull)
        CloseRegKey $(hKeyPcmciaManufacturer)
    EndIf
    IfStr $(hKeyPcmciaProduct) != $(hKeyNull)
        CloseRegKey $(hKeyPcmciaProduct)
    EndIf
    IfStr $(hKeyService) != $(hKeyNull)
        CloseRegKey $(hKeyService)
    EndIf
    Set !DebugOutputControl = $(SaveDebugOutputControl)
    EndWait
    Return $(CommonStatus)

[Install-Software]
;   If this is an initial network install, DoCopy will be set to NO.
;   So we must ignore this directive and copy our DLL to the system
;   disk so we can run our configuration DLL.
    Debug-Output $(SWProductName)": Install-Software"
    Set STF_VITAL       = ""
    Set STF_OVERWRITE   = "VERIFYSOURCEOLDER"
    AddSectionFilesToCopyList Files-Dll $(SrcDir) $(!STF_WINDOWSSYSPATH)
    AddSectionFilesToCopyList Files-Driver $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
    Set !STF_NCPA_FLUSH_COPYLIST = TRUE
    CopyFilesInCopyList
    Exit

[Install-Update]
    Debug-Output $(SWProductName)": Install-Update"
    Set STF_VITAL       = ""
    Set STF_OVERWRITE   = "VERIFYSOURCEOLDER"
    AddSectionFilesToCopyList Files-Dll $(SrcDir) $(!STF_WINDOWSSYSPATH)
    AddSectionFilesToCopyList Files-Driver $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
    AddSectionFilesToCopyList Files-Inf $(SrcDir) $(!STF_WINDOWSSYSPATH)
    Set !STF_NCPA_FLUSH_COPYLIST = TRUE
    CopyFilesInCopyList
    Exit

[Date]
    Now                     = {} ? $(!LIBHANDLE) GetSystemDate

[Source Media Descriptions]
    1 = "Wireless Setup Disk"

[Files-Inf]
    1, OEMSETUP.INF, SIZE=99999, RENAME=$(!UG_Filename)

[Files-Dll]
    1, $(ConfigFileName), SIZE=199999 OVERWRITE=ALWAYS
    1, $(HelpFileName), SIZE=99999 OVERWRITE=ALWAYS
    1, $(HelpCntName), SIZE=99999 OVERWRITE=ALWAYS
    1, WCAGS52.EXE  SIZE=99999 OVERWRITE=ALWAYS
    1, WAAGS52.DLL, SIZE=99999 OVERWRITE=ALWAYS

[Files-Driver]
    1, $(DriverFileName), SIZE=99999 OVERWRITE=ALWAYS

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Define the environment supported by this installer
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[ProductType]
    STF_PRODUCT             = winNT
    STF_PLATFORM            = i386

[LanguagesSupported]
    ENG

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[PlatformsSupported]
    ISA
    PCI
    PCMCIA

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Define commonly used constants, values, and strings
;
[GeneralConstants]
    MAXIMUM_ALLOWED         = 33554432
    NoTitle                 = 0
    ExitCodeOk              = 0
    ExitCodeCancel          = 1
    ExitCodeFatal           = 2
    RegistryErrorIndex      = NO_ERROR
    DriverPath              = $(!STF_NTPATH)\drivers
    hKeyNull                = ""
    hKeySWProduct           = $(hKeyNull)
    hKeyDevice              = $(hKeyNull)
    hKeyDeviceParameters    = $(hKeyNull)
    hKeyNetCard             = $(hKeyNull)
    hKeyNetCardRules        = $(hKeyNull)
    hKeySWProduct           = $(hKeyNull)
    hKeySWNetRules          = $(hKeyNull)
    hKeySWService           = $(hKeyNull)
    hKeySWParameter         = $(hKeyNull)
    hKeySWLinkage           = $(hKeyNull)
    hKeyPcmciaDatabase      = $(hKeyNull)
    hKeyPcmciaManufacturer  = $(hKeyNull)
    hKeyPcmciaProduct       = $(hKeyNull)
    hKeyService             = $(hKeyNull)
    ServiceName             = ""
    NetCardNumber           = -1
    OEM_ABANDON_OPTIONS     = {}
    OEM_ABANDON_SOFTWARE    = FALSE
    OEM_ABANDON_HARDWARE    = FALSE

[FileConstants]
    UtilityInf              = "UTILITY.INF"
    SubRoutineInf           = "SUBROUTN.INF"
    ParamInf                = "NCPARAM.INF"
    NetEventDLL             = "%SystemRoot%\System32\netevent.dll"
    IoLogMsgDLL             = "%SystemRoot%\System32\IoLogMsg.dll"

[FileConstants-ENG]
    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:"

[DialogConstants-ENG]
    Help                    = "&Help"
    Exit                    = "Cancel"
    OK                      = "OK"
    HelpContext             = ""
    Continue                = "Continue"
    Cancel                  = "Cancel"
Download Driver Pack

How To Update Drivers Manually

After your driver has been downloaded, follow these simple steps to install it.

  • Expand the archive file (if the download file is in zip or rar format).

  • If the expanded file has an .exe extension, double click it and follow the installation instructions.

  • Otherwise, open Device Manager by right-clicking the Start menu and selecting Device Manager.

  • Find the device and model you want to update in the device list.

  • Double-click on it to open the Properties dialog box.

  • From the Properties dialog box, select the Driver tab.

  • Click the Update Driver button, then follow the instructions.

Very important: You must reboot your system to ensure that any driver updates have taken effect.

For more help, visit our Driver Support section for step-by-step videos on how to install drivers for every file type.

server: web4, load: 0.76