[Identification]
    OptionType = NetService
[Options]
    WKSTA
[FileConstants]
UtilityInf      = "UTILITY.INF"
subroutineinf   = "SUBROUTN.INF"
SoftwareType    = "service"
Exit_Code       = 0
NetEventDLL     = "%SystemRoot%\System32\netevent.dll"
IoLogMsgDLL     = "%SystemRoot%\System32\IoLogMsg.dll"
NetMsgDLL       = "%SystemRoot%\System32\NetMsg.dll"
Manufacturer    = "Microsoft"
ProductMajorVersion     = "3"
ProductMinorVersion     = "1"
ProductVersion  = $(ProductMajorVersion)"."$(ProductMinorVersion)
ProductWKSTAName        = "LanmanWorkstation"
ProductWKSTAImagePath   = "%SystemRoot%\System32\lmsvcs.exe"
NetRuleWKSTAType        = "wksta lmNetService lanmanWorkstation"
NetRuleWKSTAClass       = {"lanmanWorkstation lmNetService"}
NetRuleWKSTAUse         = $(SoftwareType)" yes yes"
NetRuleWKSTABindForm    = """LanmanWorkstation"" yes yes container"
ProductNETLOGONName     = "NetLogon"
ProductNETLOGONImagePath = "%SystemRoot%\System32\lsass.exe"
ProductALERTERName      = "Alerter"
ProductALERTERImagePath = "%SystemRoot%\System32\lmsvcs.exe"
ProductBROWSERDEVICEName       = "DGRcvr"
ProductBROWSERDEVICEImagePath  = "\SystemRoot\System32\drivers\browser.sys"
ProductBROWSERName      = "Browser"
ProductBROWSERImagePath = "%SystemRoot%\System32\lmsvcs.exe"
ProductMESSENGERName    = "Messenger"
ProductMESSENGERImagePath = "%SystemRoot%\System32\MsgSvc.exe"
ProductRDRName          = "Rdr"
ProductRDRImagePath     = "\SystemRoot\System32\drivers\rdr.sys"
ProductProviderImagePath = "%SystemRoot%\System32\ntlanman.dll"
ProductREPLName         = "Replicator"
ProductREPLImagePath    = "%SystemRoot%\System32\lmrepl.exe"
ProductMUPName          = "Mup"
ProductMUPImagePath     = "\SystemRoot\System32\drivers\mup.sys"
ProviderName            = $(ProductWKSTAName)
ProviderDeviceName      = "LanmanRedirector"
ProductKeyName  = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(Product$(Option)Name)"\CurrentVersion"
ParamKeyName    = $(!NTN_ServiceBase)"\"$(Product$(Option)Name)"\Parameters"
[GeneralConstants]
from      = ""
to        = ""
ExitCodeOk     = 0
ExitCodeCancel = 1
ExitCodeFatal  = 2
KeyNull         = ""
MAXIMUM_ALLOWED   = 33554432
RegistryErrorIndex = NO_ERROR
KeyProduct      = ""
KeyParameters   = ""
TRUE            = 1
FALSE           = 0
NoTitle            = 0
ExitState   = "Active"
OldVersionExisted = $(FALSE)
DriverPath      = $(!STF_NTPATH)\drivers
[date]
    Now = {} ? $(!LIBHANDLE) GetSystemDate
[DetectSystemMemory]
    SystemMemory    = "" ? $(!LIBHANDLE) GetMemorySize
[Identify]
    read-syms Identification
    set Status     = STATUS_SUCCESSFUL
    set Identifier = $(OptionType)
    set Media      = #("Source Media Descriptions", 1, 1)
    Return $(Status) $(Identifier) $(Media)
[ReturnOptions]
    set Status        = STATUS_FAILED
    set OptionList     = {}
    set OptionTextList = {}
    set LanguageList = ^(LanguagesSupported, 1)
    Ifcontains(i) $($0) in $(LanguageList)
        goto returnoptions
    else
        set Status = STATUS_NOLANGUAGE
        goto finish_ReturnOptions
    endif
returnoptions = +
    set OptionList     = ^(Options, 1)
    set OptionTextList = ^(OptionsText$($0), 1)
    set Status         = STATUS_SUCCESSFUL
finish_ReturnOptions = +
    Return $(Status) $(OptionList) $(OptionTextList)
[InstallOption]
    set Option   = $($1)
    set SrcDir   = $($2)
    set AddCopy  = $($3)
    set DoCopy   = $($4)
    set DoConfig = $($5)
    set LanguageList = ^(LanguagesSupported, 1)
    Ifcontains(i) $($0) NOT-IN $(LanguageList)
        Return STATUS_NOLANGUAGE
    endif
    Debug-Output "OEMNSVWK.INF: STF_CWDDIR is: "$(!STF_CWDDIR)
    Debug-Output "OEMNSVWK.INF: STF_LANGUAGE is: "$(!STF_LANGUAGE)
    set-subst LF = "\n"
    read-syms GeneralConstants
    read-syms FileConstants
    read-syms DialogConstants$(!STF_LANGUAGE)
    ifstr(i) $(!NTN_Origination) == "NCPA"
        set Continue = $(OK)
    endif
    read-syms FileConstants$(!STF_LANGUAGE)
    detect date
    detect DetectSystemMemory
    set-title  $(FunctionTitle)
    set to   = Begin
    set from = Begin
    set CommonStatus = STATUS_SUCCESSFUL
    EndWait
Begin = +
    Ifstr(i) $(!NTN_InstallMode) == deinstall
        ifstr(i) $(!NTN_InfOption) == "BROWSER"
            set Error = $(RemoveBrowserError)
            set from = end
            set to = end
            goto nonfatal
        endif
        set OEM_ABANDON_OPTIONS = {+
            $(ProductWKSTAName), +
            $(ProductNETLOGONName), +
            $(ProductALERTERName), +
            $(ProductBROWSERDEVICEName), +
            $(ProductBROWSERName), +
            $(ProductMESSENGERName), +
            $(ProductRDRName), +
            $(ProductREPLName), +
            $(ProductMUPName)}
        set StartLabel = removeadapter
    else-Ifstr(i) $(!NTN_InstallMode) == Update
        ifstr(i) $(!NTN_InfOption) == "BROWSER"
            set Error = $(UpdateBrowserError)
            set from = end
            set to = end
            goto nonfatal
        endif
        set StartLabel = UpgradeSoftware
    else-Ifstr(i) $(!NTN_InstallMode) == bind
        set StartLabel = bindingadapter
    else-Ifstr(i) $(!NTN_InstallMode) == configure
        ifstr(i) $(!NTN_InfOption) == "BROWSER"
            ifstr(i) $(!STF_PRODUCT) == "LANMANNT"
                set from = "end"
                set to = "end"
                goto ConfigureBrowser
            endif
        endif
        Shell $(UtilityInf),RegistryErrorString,CANNOT_CONFIGURE_SOFTWARE
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error: cannot get an error string."
            goto ShellCodeError
        endif
        set Error = $($R0)
        set from = end
        set to = end
        goto nonfatalinfo
    else
        set StartLabel = installadapter
        set OEM_ABANDON_OPTIONS = {}
    endif
    set DoWKSTA         = FALSE
    set DoNETLOGON      = FALSE
    set DoALERTER       = FALSE
    set DoBROWSERDEVICE = FALSE
    set DoMESSENGER     = FALSE
    set DoRDR           = FALSE
    set DoREPL          = FALSE
    set DoBROWSER       = FALSE
    set DoMUP           = FALSE
    Ifstr(i) $(Option) == WKSTA
        set DoWKSTA     = TRUE
        set DoNETLOGON  = TRUE
        set DoALERTER   = TRUE
        set DoBROWSERDEVICE = TRUE
        set DoMESSENGER = TRUE
        set DoRDR       = TRUE
        set DoMUP       = TRUE
        set DoBROWSER   = TRUE
        set DoREPL      = TRUE
    Else-ifstr(i) $(Option) == REPL
        Set DoREPL = TRUE
    Else-ifstr(i) $(Option) == NETLOGON
        Set DoNETLOGON = TRUE
    Else-ifstr(i) $(Option) == ALERTER
        Set DoALERTER = TRUE
    Else-ifstr(i) $(Option) == BROWSERDEVICE
        Set DoBROWSERDEVICE = TRUE
    Else-ifstr(i) $(Option) == BROWSER
        Set DoBROWSER = TRUE
    Else-ifstr(i) $(Option) == MESSENGER
        Set DoMESSENGER = TRUE
    Else-ifstr(i) $(Option) == RDR
        Set DoRDR = TRUE
    Else-ifstr(i) $(Option) == MUP
        Set DoMUP = TRUE
    Else
        Debug-Output "OEMNXPTC.INF: Unrecognized option"
    Endif
    set from = $(fatal)
    set to = $(fatal)
    goto $(StartLabel)
installadapter = +
    OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct
    Ifstr $(KeyProduct) != $(KeyNull)
        CloseRegKey $(KeyProduct)
        Shell $(UtilityInf), VerExistedDlg, $(Product$(Option)Title),+
            $(ProductVersion)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error: cannot get an error string."
            goto ShellCodeError
        endif
        goto end
    endif
    goto nextstep
nextstep = +
    StartWait
    Ifstr(i) $(!NTN_InstallMode) == install
        Ifint $(OldVersionExisted) == $(FALSE)
            goto installproduct
        endif
    endif
    goto writeparameters
installproduct = +
    ifstr(i) $(!NTN_InstallMode) == "install"
        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
    endif
    set OEM_ABANDON_ON  = TRUE
    ifstr(i) $(DoWKSTA) == TRUE
        Debug-Output "OEMNSVWK.INF: Install Workstation in registry."
        Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), $(ProductWKSTAName))
        Shell $(UtilityInf), AddSoftwareComponent, $(Manufacturer), +
            $(ProductWKSTAName), +
            $(ProductWKSTAName), +
            $(ProductWKSTADisplayName), $(STF_CONTEXTINFNAME), +
            $(ProductWKSTAImagePath), "autoserviceshare", "NetworkProvider", {}, "",+
            $(NetMsgDLL),"","","","workstation"
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error"
            goto ShellCodeError
        endif
        set RegistryErrorIndex = $($R0)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            EndWait
            Debug-Output "OEMNSVWK.INF: Registry error: add software components"
            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),$(ProductWKSTATitle)},+
                           {Description,$(NoTitle),$(!REG_VT_SZ),$(ProductWKSTADescription)},+
                           {ServiceName,$(NoTitle),$(!REG_VT_SZ),$(ProductWKSTAName)},+
                           {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}}
        Shell  $(UtilityInf), AddValueList, $(SoftProductKey), $(NewValueList)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error."
            goto ShellCodeError
        endif
        set RegistryErrorIndex = $($R0)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            EndWait
            Debug-Output "OEMNSVWK.INF: registry error: add value list."
            CloseRegKey $(SoftProductKey)
            CloseRegKey $(SoftNetRuleKey)
            CloseRegKey $(SoftServiceKey)
            CloseRegKey $(SoftLinkageKey)
            CloseRegKey $(SoftParameterKey)
            goto fatalregistry
        endif
        set NewValueList = {{type,$(NoTitle),$(!REG_VT_SZ),$(NetRuleWKSTAType)},+
                            {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleWKSTAClass)}, +
                            {use,$(NoTitle),$(!REG_VT_SZ),$(NetRuleWKSTAUse)}, +
                            {bindform,$(NoTitle),$(!REG_VT_SZ),$(NetRuleWKSTABindForm)}, +
                            {InfOption,$(NoTitle),$(!REG_VT_SZ),WKSTA}}
        Shell  $(UtilityInf), AddValueList, $(SoftNetRuleKey), $(NewValueList)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error."
            goto ShellCodeError
        endif
        set RegistryErrorIndex = $($R0)
        CloseRegKey $(SoftProductKey)
        CloseRegKey $(SoftNetRuleKey)
        CloseRegKey $(SoftServiceKey)
        CloseRegKey $(SoftParameterKey)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            CloseRegKey $(SoftLinkageKey)
            EndWait
            Debug-Output "OEMNSVWK.INF: Registry error: add value list."
            goto fatalregistry
        endif
        set NewValueList = {{OtherDependencies,$(NoTitle),$(!REG_VT_MULTI_SZ),{"Mup"}}}
        Shell  $(UtilityInf), AddValueList, $(SoftLinkageKey), $(NewValueList)
        CloseRegKey $(SoftLinkageKey)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error."
            goto ShellCodeError
        endif
        set RegistryErrorIndex = $($R0)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            EndWait
            Debug-Output "OEMNSVWK.INF: registry error: add value list."
            goto fatalregistry
        endif
    endif
    ifstr(i) $(DoNETLOGON) == TRUE
        Debug-Output "OEMNSVWK.INF: Install NETLOGON registry."
        Debug-Output "OEMNSVWK.INF: Product type is "$(!STF_PRODUCT)
        Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), $(ProductNETLOGONName))
        ifstr(i) $(!STF_PRODUCT) != "WINNT"
            Set NL_DependList = {"LanmanWorkstation", "LanmanServer"}
        else
            Set NL_DependList = {"LanmanWorkstation"}
        endif
        Shell $(UtilityInf), CreateService, $(ProductNETLOGONName), +
            $(ProductNETLOGONDisplayName), $(ProductNETLOGONImagePath), +
            "autoserviceshare", "RemoteValidation", $(NL_DependList), +
            "", $(NetMsgDLL), "", "", 1
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error"
            goto ShellCodeError
        endif
        set RegistryErrorIndex = $($R0)
        CloseRegKey $($R1)
        CloseRegKey $($R3)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            EndWait
            Debug-Output "OEMNSVWK.INF: Registry error: add software components"
            CloseRegKey $($R2)
            goto fatalregistry
        endif
        set NL_ParmKey = $($R2)
        set NewValueList = {{LanmanDirectory,$(NoTitle),$(!REG_VT_EXPAND_SZ),"%SystemRoot%"},+
                           {Update,$(NoTitle),$(!REG_VT_SZ),"no"},+
                           {Scripts,$(NoTitle),$(!REG_VT_EXPAND_SZ),"%SystemRoot%\system32\repl\import\scripts"},+
                           {DBFlag,$(NoTitle),$(!REG_VT_SZ),0}}
        Shell  $(UtilityInf), AddValueList, $(NL_ParmKey), $(NewValueList)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error."
            goto ShellCodeError
        endif
        set RegistryErrorIndex = $($R0)
        CloseRegKey $(NL_ParmKey)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            EndWait
            Debug-Output "OEMNSVWK.INF: registry error: add value list."
            goto fatalregistry
        endif
    endif
    ifstr(i) $(DoALERTER) == TRUE
        Debug-Output "OEMNSVWK.INF: Install Alerter registry"
        Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), $(ProductALERTERName))
        ifstr(i) $(!STF_PRODUCT) == "WINNT"
            set StartType = "serviceshare"
        else
            set StartType = "autoserviceshare"
        endif
        Shell $(UtilityInf), CreateService, $(ProductALERTERName), +
            $(ProductALERTERDisplayName), $(ProductALERTERImagePath), +
            $(StartType), "", +
            {"LanmanWorkstation"}, "", $(NetMsgDLL)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error"
            goto ShellCodeError
        endif
        set RegistryErrorIndex = $($R0)
        CloseRegKey $($R1)
        CloseRegKey $($R3)
        set ParametersKey = $($R2)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            EndWait
            Debug-Output "OEMNSVWK.INF: Registry error: add software components"
            goto fatalregistry
        endif
        Ifstr(i) $(!STF_PRODUCT) == "LANMANNT"
            LibraryProcedure NCPA_RESULT $(!NCPA_HANDLE), CPlSetup $(!STF_HWND), SECUREKEY, $(ParametersKey), 1
        endif
        set NewValueList = {{AlertNames,$(NoTitle),$(!REG_VT_MULTI_SZ),{}}}
        Shell  $(UtilityInf), AddValueList, $(ParametersKey), $(NewValueList)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error"
            goto ShellCodeError
        endif
        CloseRegKey $(ParametersKey)
    endif
    ifstr(i) $(DoBROWSERDEVICE) == TRUE
        Debug-Output "OEMNSVWK.INF: Install DatagramReceiver registry"
        Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), $(ProductBROWSERDEVICEName))
        Shell $(UtilityInf), CreateService, $(ProductBROWSERDEVICEName), +
            $(ProductBROWSERDEVICEDisplayName), $(ProductBROWSERDEVICEImagePath), +
            "system", "Network", {}, "",+
            $(NetEventDLL)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error"
            goto ShellCodeError
        endif
        set RegistryErrorIndex = $($R0)
        CloseRegKey $($R1)
        CloseRegKey $($R2)
        CloseRegKey $($R3)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            EndWait
            Debug-Output "OEMNSVWK.INF: Registry error: add software components"
            goto fatalregistry
        endif
    endif
    ifstr(i) $(DoBROWSER) == TRUE
        Debug-Output "OEMNSVWK.INF: Install Browser registry"
        Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), $(ProductBROWSERName))
        Set BrowServiceType = "serviceshare"
        Ifint $(SystemMemory) > 12096
            Set BrowServiceType = "autoserviceshare"
        Endif
        Shell $(UtilityInf), AddSoftwareComponent, $(Manufacturer), +
            $(ProductBROWSERName), +
            $(ProductBROWSERName), +
            $(ProductBROWSERDisplayName), $(STF_CONTEXTINFNAME), +
            $(ProductBROWSERImagePath), $(BrowServiceType), "",+
            {"LanmanWorkstation","LanmanServer"}, "",+
            $(NetEventDLL)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error"
            goto ShellCodeError
        endif
        set RegistryErrorIndex = $($R0)
        CloseRegKey $($R3)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            EndWait
            Debug-Output "OEMNSVWK.INF: Registry error: add software components"
            goto fatalregistry
        endif
        set BROWSER_ParmKey     = $($R4)
        set BROWSER_NetRuleKey  = $($R2)
        set BROWSER_ProductKey  = $($R1)
        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),$(ProductBROWSERTitle)},+
                           {Description,$(NoTitle),$(!REG_VT_SZ),$(ProductBROWSERDescription)},+
                           {ServiceName,$(NoTitle),$(!REG_VT_SZ),$(ProductBROWSERName)},+
                           {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}}
        Shell  $(UtilityInf), AddValueList, $(BROWSER_ProductKey), $(NewValueList)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error."
            goto ShellCodeError
        endif
        set RegistryErrorIndex = $($R0)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            EndWait
            Debug-Output "OEMNSVWK.INF: registry error: add value list."
            CloseRegKey $(BROWSER_ProductKey)
            CloseRegKey $(BROWSER_NetRuleKey)
            CloseRegKey $(BROWSER_ParmKey)
            goto fatalregistry
        endif
        CloseRegKey $(NROWSER_ProductKey)
        set NewValueList = {{InfOption,$(NoTitle),$(!REG_VT_SZ),BROWSER}}
        Shell  $(UtilityInf), AddValueList, $(BROWSER_NetRuleKey), $(NewValueList)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error."
            goto ShellCodeError
        endif
        set RegistryErrorIndex = $($R0)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            CloseRegKey $(SoftLinkageKey)
            EndWait
            Debug-Output "OEMNSVWK.INF: Registry error: add value list."
            CloseRegKey $(BROWSER_NetRuleKey)
            CloseRegKey $(BROWSER_ParmKey)
            goto fatalregistry
        endif
        CloseRegKey $(BROWSER_NetRuleKey)
        Ifstr(i) $(!STF_PRODUCT) == "LANMANNT"
            Set MaintainServerString = "Yes"
        Else
            Set MaintainServerString = "Auto"
        Endif
        set NewValueList = {{MaintainServerList,$(NoTitle),$(!REG_VT_SZ),$(MaintainServerString)},+
                           {IsDomainMaster,$(NoTitle),$(!REG_VT_SZ),"FALSE"}}
        Shell  $(UtilityInf), AddValueList, $(BROWSER_ParmKey), $(NewValueList)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error."
            goto ShellCodeError
        endif
        set RegistryErrorIndex = $($R0)
        CloseRegKey $(BROWSER_ParmKey)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            EndWait
            Debug-Output "OEMNSVWK.INF: registry error: add value list."
            goto fatalregistry
        endif
    endif
    ifstr(i) $(DoMESSENGER) == TRUE
        Debug-Output "OEMNSVWK.INF: Install Messenger registry"
        Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), $(ProductMESSENGERName))
        Shell $(UtilityInf), CreateService, $(ProductMESSENGERName), +
            $(ProductMESSENGERDisplayName), $(ProductMESSENGERImagePath), +
            "autoserviceshare", "", {"LanmanWorkstation"}, ""
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error"
            goto ShellCodeError
        endif
        set RegistryErrorIndex = $($R0)
        CloseRegKey $($R1)
        CloseRegKey $($R2)
        CloseRegKey $($R3)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            EndWait
            Debug-Output "OEMNSVWK.INF: Registry error: add software components"
            goto fatalregistry
        endif
    endif
    ifstr(i) $(DoRDR) == TRUE
        Debug-Output "OEMNSVWK.INF: Install Rdr registry"
        Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), $(ProductRDRName))
        Shell $(UtilityInf), CreateService, $(ProductRDRName), +
            $(ProductRDRDisplayName), $(ProductRDRImagePath), +
            "system", "Network", {}, "", +
            $(NetEventDLL)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error"
            goto ShellCodeError
        endif
        set RegistryErrorIndex = $($R0)
        CloseRegKey $($R1)
        CloseRegKey $($R2)
        CloseRegKey $($R3)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            EndWait
            Debug-Output "OEMNSVWK.INF: Registry error: add software components"
            goto fatalregistry
        endif
        Debug-Output "OEMNSVWK.INF: Add NetworkProvider"
        Shell $(UtilityInf), AddNetworkProvider, $(ProviderName), +
            $(ProductProviderImagePath), $(ProductProviderName), +
            $(ProviderDeviceName)
        set RegistryErrorIndex = $($R0)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            EndWait
            Debug-Output "OEMNSVWK.INF: Registry error: add software components"
            goto fatalregistry
        endif
    endif
    ifstr(i) $(DoMUP) == TRUE
        Debug-Output "OEMNSVWK.INF: Install MUP registry"
        Shell $(UtilityInf), CreateService, $(ProductMUPName), +
            $(ProductMUPDisplayName), $(ProductMUPImagePath), +
            "system", "Network", {}, "",+
            $(IoLogMsgDLL)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error"
            goto ShellCodeError
        endif
        Set RegistryErrorIndex = $($R0)
        Ifstr(i) $(RegistryErrorIndex) != SERVICE_ALREADY_EXISTS
            Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
                EndWait
                Debug-Output "OEMNSVWK.INF: Registry error adding MUP: "$(RegistryErrorIndex)
                goto fatalregistry
            Endif
            CloseRegKey $($R1)
            CloseRegKey $($R2)
            CloseRegKey $($R3)
            Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), $(ProductMUPName))
        Endif
    endif
    Ifstr(i) $(DoREPL) == TRUE
        Debug-Output "OEMNSVWK.INF: Install Replicator registry"
        Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), $(ProductREPLName))
        Shell $(UtilityInf), CreateService, $(ProductREPLName), +
            $(ProductREPLDisplayName), $(ProductREPLImagePath), +
            "service", "",+
            {"LanmanWorkstation","LanmanServer"}, "", $(NetMsgDLL), +
            "", "Application"
        Ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error; Replicator"
            Goto ShellCodeError
        Endif
        set RegistryErrorIndex = $($R0)
        Set RP_SrvKey = $($R1)
        Set RP_ParmKey = $($R2)
        CloseRegKey $($R3)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            EndWait
            Debug-Output "OEMNSVWK.INF: Registry error: add software components"
            CloseRegKey $(RP_SrvKey)
            CloseRegKey $(RP_ParmKey)
            goto fatalregistry
        endif
        Ifstr(i) $(!STF_PRODUCT) == "LANMANNT"
            Set ReplImportControl = 3
            Set ReplSecurity = 6
        Else
            Set ReplImportControl = 2
            Set ReplSecurity = 2
        Endif
        LibraryProcedure NCPA_RESULT $(!NCPA_HANDLE), CPlSetup $(!STF_HWND), SECUREKEY, $(RP_ParmKey), $(ReplSecurity)
        Set NewValueList = {{Replicate,$(NoTitle),$(!REG_VT_DWORD),$(ReplImportControl)},+
                            {ImportPath,$(NoTitle),$(!REG_VT_EXPAND_SZ),"%SystemRoot%\System32\Repl\Import"},+
                            {ExportPath,$(NoTitle),$(!REG_VT_EXPAND_SZ),"%SystemRoot%\System32\Repl\Export"}}
        Shell  $(UtilityInf), AddValueList, $(RP_ParmKey), $(NewValueList)
        Ifint $($ShellCode) != $(!SHELL_CODE_OK)
            Debug-Output "OEMNSVWK.INF: ShellCode error."
            Goto ShellCodeError
        Endif
        Set RegistryErrorIndex = $($R0)
        CloseRegKey $(RP_ParmKey)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            EndWait
            Debug-Output "OEMNSVWK.INF: registry error: add value list."
            CloseRegKey $(RP_SrvKey)
            goto fatalregistry
        Endif
        Debug-Output "OEMNSVWK.INF: Create Replicator keys and directories"
        CreateRegKey $(RP_SrvKey) {"Exports",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" ExportsKey
        CreateRegKey $(RP_SrvKey) {"Imports",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" ImportsKey
        LibraryProcedure NCPA_RESULT $(!NCPA_HANDLE), CPlSetup $(!STF_HWND), SECUREKEY, $(ExportsKey), 2
        LibraryProcedure NCPA_RESULT $(!NCPA_HANDLE), CPlSetup $(!STF_HWND), SECUREKEY, $(ImportsKey), 2
        CloseRegKey $(ExportsKey)
        CloseRegKey $(ImportsKey)
        CloseRegKey $(RP_SrvKey)
        Install Install-Repl-Dirs
    Endif
    Goto writeparameters
writeparameters = +
    EndWait
    goto successful
ConfigureBrowser = +
    set FLibraryErrCtl = 1
    LibraryProcedure ResultList $(!NCPA_HANDLE), CPlBROWSER $(!STF_HWND)
    Set Result = *($(ResultList),1)
    ifint $(Result) == 0
        set CommonStatus = STATUS_REBOOT
    else-ifint $(Result) == 1
        set CommonStatus = STATUS_USERCANCEL
    else
        set RegistryErrorIndex = $(Result)
        goto fatalregistry
    endif
    goto successful
bindingadapter =+
    set Error = "Binding: Sorry, not yet implemented."
    goto fatal
removeadapter = +
    ifcontains(i) $(ProductWKSTAName) in $(OEM_ABANDON_OPTIONS)
        Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), +
           $(ProductWKSTAName)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
           Debug-Output "OEMNSVWK.INF: ShellCode error"
           goto ShellCodeError
        endif
        set RegistryErrorIndex = $($R0)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
           goto fatalregistry
        endif
    endif
    ifcontains(i) $(ProductBROWSERName) in $(OEM_ABANDON_OPTIONS)
        Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), +
           $(ProductBROWSERName)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
           Debug-Output "OEMNSVWK.INF: ShellCode error"
           goto ShellCodeError
        endif
        set RegistryErrorIndex = $($R0)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
           goto fatalregistry
        endif
    endif
    Set RemoveOptions = {+
        $(ProductNETLOGONName), +
        $(ProductALERTERName), +
        $(ProductBROWSERDEVICEName), +
        $(ProductMESSENGERName), +
        $(ProductRDRName), +
        $(ProductREPLName), +
        $(ProductMUPName)}
    ForListDo  $(RemoveOptions)
        ifcontains(i) $($) in $(OEM_ABANDON_OPTIONS)
           Shell $(UtilityInf), RemoveService, $($), "YES"
           ifint $($ShellCode) != $(!SHELL_CODE_OK)
               Debug-Output "OEMNSVWK.INF: ShellCode error"
               goto ShellCodeError
           endif
           set RegistryErrorIndex = $($R0)
           Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
               goto fatalregistry
           endif
        endif
    EndForListDo
    Shell $(UtilityInf) RemoveNetworkProvider $(ProviderName)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        Debug-Output "OEMNSVWK.INF: ShellCode error"
        goto ShellCodeError
    endif
    set RegistryErrorIndex = $($R0)
    Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
        goto fatalregistry
    endif
    goto end
UpgradeSoftware = +
    ifstr(i) $(ProductKeyName) == $(!NTN_RegBase)
        OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct
        Ifstr $(KeyProduct) != $(KeyNull)
            GetRegValue $(KeyProduct),"MajorVersion", VersionInfo
            set Version = *($(VersionInfo), 4)
            Shell $(UtilityInf), GetInfFileNameFromRegistry, $(KeyProduct)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                Debug-Output "ShellCode error"
                goto ShellCodeError
            endif
            set !UG_Filename = $($R0)
            ifstr(i) $(!UG_Filename) != ""
                install "Install-Update"
                ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS
                    goto fatal
                endif
            endif
            SetRegValue $(KeyProduct) {MajorVersion,$(NoTitle),$(!REG_VT_SZ),$(ProductMajorVersion)}
            SetRegValue $(KeyProduct) {MinorVersion,$(NoTitle),$(!REG_VT_SZ),$(ProductMinorVersion)}
            ifint $(Version) != $(ProductVersion)
            endif
            CloseRegKey $(KeyProduct)
        else
            goto fatalregistry
        endif
    endif
    goto end
successful = +
    goto end
warning = +
    Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "WARNING", $(Error)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        goto ShellCodeError
    endif
    ifstr(i) $($R1) == "OK"
        goto $(to)
    else-ifstr(i) $($R1) == "CANCEL"
        goto $(from)
    else
        goto end
    endif
nonfatalinfo = +
    Set CommonStatus = STATUS_USERCANCEL
    Set Severity = STATUS
    goto nonfatalmsg
nonfatal = +
    Set Severity = NONFATAL
    goto nonfatalmsg
nonfatalmsg = +
    ifstr(i) $(Error) == ""
        Set Severity = NONFATAL
        Shell $(UtilityInf) RegistryErrorString "SETUP_FAIL"
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif
        set Error = $($R0)
    endif
    Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), $(Severity), $(Error)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        goto ShellCodeError
    endif
    ifstr(i) $($R1) == "OK"
        goto $(from)
    else
        goto "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 removeadapter
    endif
    goto end
end = +
    goto term
term = +
    Return $(CommonStatus)
[Install-Option]
    set STF_VITAL = ""
    ifstr(i) $(AddCopy) == "YES"
        AddSectionFilesToCopyList Files-$(Option) $(SrcDir) $(!STF_WINDOWSSYSPATH)
        AddSectionFilesToCopyList Files-Drivers $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
    endif
    ifstr(i) $(DoCopy) == "YES"
       set !STF_NCPA_FLUSH_COPYLIST = TRUE
       CopyFilesInCopyList
    endif
    ifstr(i) $(DoConfig) == "YES"
    endif
    Exit
[Install-Update]
   set STF_VITAL        = ""
   set STF_OVERWRITE    = "VERIFYSOURCEOLDER"
   AddSectionFilesToCopyList Files-$(Option) $(SrcDir) $(!STF_WINDOWSSYSPATH)
   AddSectionFilesToCopyList Files-Drivers $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
   AddSectionFilesToCopyList Files-Inf $(SrcDir) $(!STF_WINDOWSSYSPATH)
   set !STF_NCPA_FLUSH_COPYLIST = TRUE
   CopyFilesInCopyList
   Exit
[Install-Repl-Dirs]
   Set STF_VITAL = ""
   CreateDir $(!STF_WINDOWSSYSPATH)\Repl
   CreateDir $(!STF_WINDOWSSYSPATH)\Repl\Export
   CreateDir $(!STF_WINDOWSSYSPATH)\Repl\Export\Scripts
   CreateDir $(!STF_WINDOWSSYSPATH)\Repl\Import
   CreateDir $(!STF_WINDOWSSYSPATH)\Repl\Import\Scripts
   Exit
[Source Media Descriptions]
    1	= "Windows NT Advanced Server Setup Disk #1"   , TAGFILE = disk1
    2	= "Windows NT Advanced Server Setup Disk #2"   , TAGFILE = disk2
    3	= "Windows NT Advanced Server Setup Disk #3"   , TAGFILE = disk3
    4	= "Windows NT Advanced Server Setup Disk #4"   , TAGFILE = disk4
    5	= "Windows NT Advanced Server Setup Disk #5"   , TAGFILE = disk5
    6	= "Windows NT Advanced Server Setup Disk #6"   , TAGFILE = disk6
    7	= "Windows NT Advanced Server Setup Disk #7"   , TAGFILE = disk7
    8	= "Windows NT Advanced Server Setup Disk #8"   , TAGFILE = disk8
    9	= "Windows NT Advanced Server Setup Disk #9"   , TAGFILE = disk9
    10	= "Windows NT Advanced Server Setup Disk #10"  , TAGFILE = disk10
    11	= "Windows NT Advanced Server Setup Disk #11"  , TAGFILE = disk11
    12	= "Windows NT Advanced Server Setup Disk #12"  , TAGFILE = disk12
    13	= "Windows NT Advanced Server Setup Disk #13"  , TAGFILE = disk13
    14	= "Windows NT Advanced Server Setup Disk #14"  , TAGFILE = disk14
    15	= "Windows NT Advanced Server Setup Disk #15"  , TAGFILE = disk15
    16	= "Windows NT Advanced Server Setup Disk #16"  , TAGFILE = disk16
    17	= "Windows NT Advanced Server Setup Disk #17"  , TAGFILE = disk17
    18	= "Windows NT Advanced Server Setup Disk #18"  , TAGFILE = disk18
    19	= "Windows NT Advanced Server Setup Disk #19"  , TAGFILE = disk19
    20	= "Windows NT Advanced Server Setup Disk #20"  , TAGFILE = disk20
    21	= "Windows NT Advanced Server Setup Disk #21"  , TAGFILE = disk21
    22	= "Windows NT Advanced Server Setup Disk #22"  , TAGFILE = disk22
    23	= "Windows NT Advanced Server Setup Disk #23"  , TAGFILE = disk23
    24	= "Windows NT Advanced Server Setup Disk #24"  , TAGFILE = disk24
    25	= "Windows NT Advanced Server Setup Disk #25"  , TAGFILE = disk25
    26	= "Windows NT Advanced Server Setup Disk #26"  , TAGFILE = disk26
    27	= "Windows NT Advanced Server Setup Disk #27"  , TAGFILE = disk27
    28	= "Windows NT Advanced Server Setup Disk #28"  , TAGFILE = disk28
    29	= "Windows NT Advanced Server Setup Disk #29"  , TAGFILE = disk29
[ProductType]
STF_PRODUCT  = LanmanNT
STF_PLATFORM = I386
[Files-Inf]
2,	oemsetup.inf,	 SIZE=1000,	RENAME=$(!UG_Filename)
[Files-Drivers]
10, SMBTRSUP.SYS, SIZE=18432
10,BROWSER.SYS , SIZE=62464
10,RDR.SYS , SIZE=225280
[Files-WKSTA]
10, BROWSER.DLL, SIZE=55808
10,WKSSVC.DLL , SIZE=99840
10,LMREPL.EXE , SIZE=128512
[LanguagesSupported]
    ENG
[OptionsTextENG]
    WKSTA       = "Workstation"
[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:"
RemoveBrowserError = "The Browser may not be removed. Use the Services Control Panel Applet to disable the Browser."
UpdateBrowserError = "You must update the Windows Workstation in order to update the Browser."
FunctionTitle   = "Workstation Services Setup"
ProductWKSTADescription         = "Microsoft Windows Workstation Service"
ProductNETLOGONDescription      = "Microsoft Network Authentication Service"
ProductALERTERDescription       = "Microsoft Alerter Service"
ProductBROWSERDEVICEDescription        = "Microsoft Datagram Receiver"
ProductBROWSERDescription       = "Microsoft Network Browser Service"
ProductMESSENGERDescription     = "Microsoft Messenger Service"
ProductRDRDescription           = "Microsoft Redirector Service"
ProductREPLDescription          = "Microsoft Directory Replicator Service"
ProductMUPDescription           = "Microsoft MUP Service"
ProviderRDRName                 = "NT Lan Manager"
ProductWKSTADisplayName = "Workstation"
ProductWKSTATitle       = "Workstation"
ProductNETLOGONDisplayName = "Net Logon"
ProductNETLOGONTitle    = "Net Logon"
ProductALERTERDisplayName = "Alerter"
ProductALERTERTitle     = "Alerter"
ProductBROWSERDEVICEDisplayName = "Datagram Receiver"
ProductBROWSERDEVICETitle      = "Datagram Receiver"
ProductBROWSERDisplayName = "Computer Browser"
ProductBROWSERTitle     = "Computer Browser"
ProductMESSENGERDisplayName = "Messenger"
ProductMESSENGERTitle   = "Messenger"
ProductRDRDisplayName   = "Rdr"
ProductRDRTitle         = "Redirector"
ProductProviderName = "Microsoft Windows Network"
ProductREPLDisplayName  = "Directory Replicator"
ProductREPLTitle        = "Directory Replicator"
ProductMUPDisplayName   = "Mup"
ProductMUPTitle         = "Mup"
ShellCodeErrorTitle     = "Error: "$(FunctionTitle)
ShellCodeErrorText      = "Shell Code Error."
[DialogConstantsENG]
Help        = "&Help"
Exit        = "Cancel"
OK          = "OK"
HelpContext = ""
Continue    = "Continue"
Cancel      = "Cancel"
[FileDependentDlgENG]



