Metropoli BBS
VIEWER: update.inf MODE: TEXT (ASCII)
[FileKeyedClasses]
    Hal            = hal.dll
    Ntoskrnl       = ntoskrnl.exe
[FilesKeyedSections]
    FilesHal       = $(STF_HALDEST)
    FilesNtoskrnl  = $(STF_WINDOWSSYSPATH)
[FilesHal]
[FilesNtoskrnl]
    NTKRNLMP = 1, NTKRNLMP.EXE , RENAME=$(NEWFILE), NOLOG, UNDO
    NTOSKRNL = 1, NTOSKRNL.EXE , RENAME=$(NEWFILE), NOLOG, UNDO

[FileSections]
    FilesPrimary        = C:
    FilesPal            = $(STF_HALDEST)
    FilesWinnt          = $(STF_WINDOWSPATH)
    FilesSystem32       = $(STF_WINDOWSSYSPATH)
    FilesSystem         = $(STF_WINDOWSPATH)\system
    FilesDrivers        = $(STF_WINDOWSSYSPATH)\drivers
    FilesConfig         = $(STF_WINDOWSSYSPATH)\config
    FilesWinspool       = $(STF_WINDOWSSYSPATH)\spool
    FilesPrnDriver      = $(STF_WINDOWSSYSPATH)\spool\drivers\$(!STF_PRNPLATFORM)\1
    FilesPrnProc        = $(STF_WINDOWSSYSPATH)\spool\prtprocs\$(!STF_PRNPLATFORM)
    FilesDbgCom         = $(STF_WINDOWSPATH)\symbols\com
    FilesDbgCpl         = $(STF_WINDOWSPATH)\symbols\cpl
    FilesDbgDll         = $(STF_WINDOWSPATH)\symbols\dll
    FilesDbgDrv         = $(STF_WINDOWSPATH)\symbols\drv
    FilesDbgExe         = $(STF_WINDOWSPATH)\symbols\exe
    FilesDbgScr         = $(STF_WINDOWSPATH)\symbols\scr
    FilesDbgSys         = $(STF_WINDOWSPATH)\symbols\sys
[FileSectionsOsLoader]
    FilesOsLoader       = $(STF_OSLDEST)
[FileSectionsFPNW]
    FilesFpNwLogin      = $(STF_FPNWSYSPATH)\login
    FilesFpNwPublic     = $(STF_FPNWSYSPATH)\public
[FileSectionsIIS]
    FilesIIS            = $(STF_IISPATH)
[FileSectionsSSL]
    FilesSSL		= $(STF_WINDOWSSYSPATH)
[FileSectionsIE]
    FilesIE             = $(STF_IEPATH)
[FileSectionsCopyAlways]
    FilesSystem32CopyAlways = $(STF_WINDOWSSYSPATH)
    FilesDriversCopyAlways  = $(STF_WINDOWSSYSPATH)\drivers
[FileSectionsWINNT]
    FilesInfWinnt       = $(STF_WINDOWSSYSPATH)
[FileSectionsLANMANNT]
    FilesInfLanmanNT    = $(STF_WINDOWSSYSPATH)
[FileSectionsCopyAlwaysWINNT]
    FilesSystem32CopyAlwaysWinnt = $(STF_WINDOWSSYSPATH)
[FileSectionsCopyAlwaysLANMANNT]
    FilesSystem32CopyAlwaysLanmanNT = $(STF_WINDOWSSYSPATH)
[FilesPrimary]
[FilesOsLoader]
[FilesPal]
[FilesWinnt]
[FilesSystem32]
1 = 1, MSAFD.DLL   , RENAME=$(NEWFILE), NOLOG, UNDO
2 = 1, WS2HELP.DLL , RENAME=$(NEWFILE), NOLOG, UNDO

[FilesSystem]
[FilesDrivers]
1 = 1, SRV.SYS     , RENAME=$(NEWFILE), OVERWRITE=OLDER, VERSION="4,0,1381,1"

[FilesConfig]
[FilesWinspool]
[FilesPrnDriver]
[FilesPrnProc]
[FilesDbgCom]
[FilesDbgCpl]
[FilesDbgDll]
[FilesDbgDrv]
[FilesDbgExe]
[FilesDbgScr]
[FilesDbgSys]
[FilesInfWinnt]
[FilesInfLanmanNT]
[FilesSystem32CopyAlways]
[FilesDriversCopyAlways]
[FilesSystem32CopyAlwaysWINNT]
[FilesSystem32CopyAlwaysLANMANNT]
[FilesFpNwLogin]
[FilesFpNwPublic]
[FilesIIS]
1 = 1, W3SVC.DLL, RENAME=$(NEWFILE), OVERWRITE=OLDER, VERSION="4,0,1381,1"

[FilesSSL]
1 = 1, SCHANNEL.DLL, RENAME=$(NEWFILE), OVERWRITE=OLDER, VERSION="4,75,1381,1500"

[FilesIE]
1 = 1, IEXPLORE.EXE, RENAME=$(NEWFILE), OVERWRITE=OLDER, VERSION="4,40,1381,1"

[FileAttributes]
[ProcessorID]
    ProcessorID_I386  = I386
    ProcessorID_I486  = I486
    ProcessorID_I586  = I586
    ProcessorID_R4000 = R4000
[UiVars]
    STF_PLATFORMDET    = "" ? $(!LIBHANDLE) GetPlatform
    STF_CSDVER         = 256
    STF_BUILDVER       = 1381
    STF_CSD1_NT35      = 256
    STF_NT31_BUILDVER  = 528
    STF_NT35_BUILDVER  = 807
    STF_NT351_BUILDVER = 1057
    STF_NT40_BUILDVER  = 1381
    STF_NT40_MAJORVER  = 4
    STF_NT40_MINORVER  = 0
    STF_PRIMARY        = "C:"
    STF_NTDRIVE        = ""
    STF_WINDOWSPATH    = "" ? $(!LIBHANDLE) GetWindowsNtDir
    STF_WINDOWSSYSPATH = "" ? $(!LIBHANDLE) GetWindowsNtSysDir
    STF_CONTROLSET     = CurrentControlSet
    VolumeList         = {} ? $(!LIBHANDLE) GetHardDriveLetters
    VolumeFSList       = {} ? $(!LIBHANDLE) GetHardDriveFileSystems
    VolumeFreeList     = {} ? $(!LIBHANDLE) GetHardDriveFreeSpace
    DisketteList       = {} ? $(!LIBHANDLE) GetFloppyDriveLetters
[FreeSpaceI386]
    RequiredFreeWinnt  = 5
[FreeSpaceMips]
    RequiredFreeWinnt  = 5
[FreeSpaceppc]
    RequiredFreeWinnt  = 5
[FreeSpaceAlpha]
    RequiredFreeWinnt  = 5
[NVRAMVars]
    SystemPartition = "" ? $(!LIBHANDLE) GetNVRAMVar SYSTEMPARTITION
    OsLoader        = "" ? $(!LIBHANDLE) GetNVRAMVar OSLOADER
    OsLoadPartition = "" ? $(!LIBHANDLE) GetNVRAMVar OSLOADPARTITION
    OsLoadFilename  = "" ? $(!LIBHANDLE) GetNVRAMVar OSLOADFILENAME
[Shell Commands]
    set-title "Windows NT Setup"
    set-subst CR = "\r"
    set-subst LF = "\n"
    set STF_LANGUAGE = ENG
    set STF_LANGUAGE_TYPE = 9
    read-syms Strings
    shell "subroutn.inf" PushBillboard STATUSDLG $(Billboard1)
    set BillboardPushed = TRUE
    set IISPathFound = FALSE
    set CopySSL = TRUE
    set CopyLoader = TRUE
    set FPNWSysPathFound = FALSE
    set IEPathFound = FALSE
    set !LIBHANDLE      = ""
    set !PATCHLIBHANDLE = ""
    install   LoadSetupLibrary
    read-syms ProductType
    ifstr(i) $(!STF_PLATFORM) == I386
	set STF_PRNPLATFORM = "w32x86"
    else-ifstr(i) $(!STF_PLATFORM) == Mips
        set STF_PRNPLATFORM = "w32mips"
    else-ifstr(i) $(!STF_PLATFORM) == ppc
        set STF_PRNPLATFORM = "w32ppc"
    else-ifstr(i) $(!STF_PLATFORM) == Alpha
        set STF_PRNPLATFORM = "w32alpha"
    endif
    read-syms UiVars
    detect    UiVars
    install   LoadPatchLibrary
    read-syms FreeSpace$(!STF_PLATFORM)
    LibraryProcedure STATUS,$(!PATCHLIBHANDLE), CheckForRegistryCorruption
    ifstr(i) $(STATUS) != "OK"
         ifstr(i) $(BillboardPushed) == TRUE
             shell "subroutn.inf" PopBillboard
             set BillboardPushed = FALSE
         endif
         shell "subroutn.inf" SetupMessage $(STF_LANGUAGE) "FATAL" $(String6)
         goto patchnotdone
    endif
    ifstr(i) $(STF_PLATFORM) != $(STF_PLATFORMDET)
         ifstr(i) $(BillboardPushed) == TRUE
             shell "subroutn.inf" PopBillboard
             set BillboardPushed = FALSE
         endif
         shell "subroutn.inf" SetupMessage $(STF_LANGUAGE) "FATAL" $(String1)
         goto patchnotdone
    endif
    shell "registry.inf" CheckSetupModify
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        ifstr(i) $(BillboardPushed) == TRUE
            shell "subroutn.inf" PopBillboard
            set BillboardPushed = FALSE
        endif
        Debug-Output "shelling CheckSetupModify failed"
        goto patchnotdone
    else-ifstr(i) $($R0) != STATUS_SUCCESSFUL
        ifstr(i) $(BillboardPushed) == TRUE
            shell "subroutn.inf" PopBillboard
            set BillboardPushed = FALSE
        endif
        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "FATAL" $(String4)
        goto patchnotdone
    endif
    shell "" GetCheckedFree
    ifint $($ShellCode) == $(!SHELL_CODE_OK)
        ifstr(i) $($R0) == "STATUS_SUCCESSFUL"
            ifstr(i) $($R1) == "checked"
                shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "FATAL" $(String15)
                goto patchnotdone
            endif
        endif
    endif
    LibraryProcedure STATUS,$(!PATCHLIBHANDLE), CheckWindowsMajorVersion
    ifint $(STATUS) > $(STF_NT40_MAJORVER)
        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String18)
        goto patchnotdone
    else-ifint $(STATUS) = $(STF_NT40_MAJORVER)
        LibraryProcedure STATUS,$(!PATCHLIBHANDLE), CheckWindowsMinorVersion
        ifint $(STATUS) > $(STF_NT40_MINORVER)
            shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String18)
            goto patchnotdone
        endif
    endif
    LibraryProcedure STATUS,$(!PATCHLIBHANDLE), CheckBuildVersion
    ifint $(STATUS) <= $(STF_NT35_BUILDVER)
        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String16)
        goto patchnotdone
    else-ifint $(STATUS) < $(STF_NT40_BUILDVER)
        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String17)
        goto patchnotdone
    else-ifint $(STATUS) > $(STF_NT40_BUILDVER)
        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String18)
        goto patchnotdone
    endif
    shell "" GetCSDVersion
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        ifstr(i) $(BillboardPushed) == TRUE
            shell "subroutn.inf" PopBillboard
            set BillboardPushed = FALSE
        endif
        goto patchnotdone
    endif
    ifstr(i) $($R0) != "STATUS_SUCCESSFUL"
        goto patchnotdone
    else
        ifint $($R1) > $(!STF_CSDVER)
            ifstr(i) $(BillboardPushed) == TRUE
                shell "subroutn.inf" PopBillboard
                set BillboardPushed = FALSE
            endif
            shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String8)
            goto patchnotdone
        endif
    endif
    LibraryProcedure STATUS,$(!PATCHLIBHANDLE), GetLanguageType
    ifstr(i) $(STATUS) == ERROR
        goto patchnotdone
    else
        ifstr(i) $(STATUS) != $(STF_LANGUAGE_TYPE)
            shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String20)
            goto patchnotdone
        endif
    endif
    LibraryProcedure STATUS,$(!PATCHLIBHANDLE), GetFPNWPathName
    ifstr(i) $(STATUS) != "FAILURE"
        set STF_FPNWSYSPATH = $(STATUS)
        set FPNWSysPathFound = TRUE
    endif
    LibraryProcedure STATUS,$(!PATCHLIBHANDLE), GetIEPathName
    ifstr(i) $(STATUS) != "FAILURE"
        set STF_IEPATH = $(STATUS)
        set IEPathFound = TRUE
    endif
skip_patchvercheck = +
    GetDriveInPath !STF_NTDRIVE $(!STF_WINDOWSSYSPATH)
    ifint *($(VolumeFreeList), ~($(VolumeList), $(!STF_NTDRIVE))) < $(RequiredFreeWinnt)
        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String13a)$(RequiredFreeWinnt)$(String13b)$(!STF_NTDRIVE)$(String13c)
        goto patchnotdone
    endif
    set STF_PRODUCT = ""
    OpenRegKey $(!REG_H_LOCAL) "" "System\CurrentControlSet\Control\ProductOptions" 33554432 KeyProductOption
    ifstr(i) $(KeyProductOption) != ""
        GetRegValue $(KeyProductOption) "ProductType" ProductTypeList
        set TempProductType = *($(ProductTypeList),4)
        ifstr(i) $(TempProductType) == "winnt"
            set !STF_PRODUCT = WINNT
            set !PRODUCT_DIR = WINNT
        else-ifstr(i) $(TempProductType) == "lanmannt"
            set !STF_PRODUCT = LANMANNT
            set !PRODUCT_DIR = NTAS
        else-ifstr(i) $(TempProductType) == "servernt"
            set !STF_PRODUCT = SERVERNT
            set !PRODUCT_DIR = NTAS
        endif
        CloseRegKey $(KeyProductOptions)
    endif
    ifstr(i) $(STF_PRODUCT) == ""
        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String14)
        goto patchnotdone
    endif
    ifstr(i) $(!STF_PLATFORM) == I386
        set STF_HALDEST = $(!STF_WINDOWSSYSPATH)
        LibraryProcedure STATUS,$(!PATCHLIBHANDLE), GetOsLoaderDest
        ifstr(i) $(STATUS) == ERROR
            goto patchnotdone
        else
            set STF_OSLDEST = $(STATUS)
        endif
        set NtLdrName = $(STF_OSLDEST)"ntldr"
        LibraryProcedure STATUS,$(!PATCHLIBHANDLE), IsNTLDRVersionNewer $(NtLdrName)
        ifstr(i) $(STATUS) == "YES"
            set CopyLoader = FALSE
        endif
    else
        read-syms NVRAMVars
        detect    NVRAMVars
        LibraryProcedure STATUS,$(!PATCHLIBHANDLE), GetOsLoaderDest         +
                                                         $(SystemPartition) +
                                                         $(OsLoader)        +
                                                         $(OsLoadPartition) +
                                                         $(OsLoadFilename)
        ifstr(i) $(STATUS) == ERROR
            goto patchnotdone
        else
            set STF_OSLDEST = $(STATUS)
            set STF_HALDEST = $(STATUS)
        endif
    endif
    OpenRegKey $(!REG_H_LOCAL) "" "Software\Microsoft\INetStp" 33554432 KeySvc
    ifstr(i) $(KeySvc) != ""
        GetRegValue $(KeySvc) "InstallPath" DestPathValue
        set !STF_IISPATH0 = *($(DestPathValue), 4)
        ifstr(i) $(STF_IISPATH0) != ""
            set IISPathFound = TRUE
            set STF_IISPATH = $(STF_IISPATH0)
        endif
    endif
    CloseRegKey $(KeySvc)
    set FileToCheck = $(STF_WINDOWSSYSPATH)\schannel.dll
    LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FileToCheck)
    ifstr(i) $(STATUS) == YES
        LibraryProcedure Result $(!PATCHLIBHANDLE) GetSChannelFileDesc $(FileToCheck)
        ifstr(i) $(Result) == "128"
            shell "" QueryOkCancel $(String22)
            ifstr(i) $($R1) == "CANCEL"
                set CopySSL = FALSE
            endif
        endif
    endif
    read-syms FilesKeyedSections
    set KeyedClassKeys  = ^(FileKeyedClasses, 0)
    set KeyedClassFiles = ^(FileKeyedClasses, 1)
    set KeyedClassFilesList = {}
    ForListDo $(KeyedClassKeys)
        set TmpKey       = Files$($)
        set TmpFile      = #(FileKeyedClasses, $($), 1)
        set TmpFilePath  = $($(TmpKey))\$(TmpFile)
        set KeyedClassFilesList = >($(KeyedClassFilesList), $(TmpFilePath))
    EndForListDo
    LibraryProcedure STATUS,$(!PATCHLIBHANDLE), GetFileTypes $(KeyedClassFilesList)
    ifstr(i) $(STATUS) == ERROR
        goto patchnotdone
    else-ifstr(i) $(STATUS) == SETUPLOGNOTPRESENT
        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String11)
        goto patchnotdone
    else-ifstr(i) $(STATUS) == NTOSKRNLNOTFOUND
        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String21)
        goto patchnotdone
    else
        ForListDo $(KeyedClassKeys)
            set $($)Type = *($(STATUS), $(#))
        EndForListDo
    endif
    ifstr(i) $(BillboardPushed) == TRUE
        shell "subroutn.inf" PopBillboard
        set BillboardPushed = FALSE
    endif
    ifstr(i) $(Unattended) != TRUE
        shell "" QueryOkCancel $(String9)
        ifstr(i) $($R1) == "OK"
        else
            set String = $(String12)
            goto finish2
        endif
    endif
    shell "subroutn.inf" PushBillboard STATUSDLG $(Billboard2)
    set BillboardPushed = TRUE
    set MoveFileExList  = {}
    read-syms FileSections
    set FileSectionsList = ^(FileSections, 0)
    set FileSource  = $(!STF_SRCDIR)
    ForListDo $(FileSectionsList)
        set FileSection = $($)
        set FileDest    = $($($))
        set FileList    = ^($(FileSection), 0)
        ForListDo $(FileList)
            set FileKey          = $($)
            set File             = #($(FileSection), $(FileKey), 2)
            set FileDestFullPath = $(FileDest)\$(File)
            LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FileDestFullPath)
            ifstr(i) $(STATUS) == YES
                LibraryProcedure STATUS, $(!PATCHLIBHANDLE), IsFileOpenedExclusive $(FileDestFullPath)
                ifstr(i) $(STATUS) == ERROR
                    goto patchnotdone
                else
                    ifstr(i) $(STATUS) == "YES"
                        LibraryProcedure NEWFILE, $(!PATCHLIBHANDLE), GenerateTemporary $(FileDest)
                        ifstr(i) $(NEWFILE) == ERROR
                            goto patchnotdone
                        else
                            set FileComp = {$(FileDest)\$(NEWFILE), $(FileDestFullPath)}
                            set MoveFileExList = >($(MoveFileExList), $(FileComp))
                        endif
                    else
                        set NEWFILE = $(File)
                    endif
                    install Install-File
                endif
            endif
        EndForListDo
    EndForListDO
    set FileSource  = $(!STF_SRCDIR)
    ForListDo $(KeyedClassKeys)
        set FileSection = Files$($)
        set FileDest    = $($(FileSection))
        set FileKey     = $($($)Type)
        set KeyedClassChoices = ^(Files$($), 0)
        ifcontains(i) $(FileKey) in $(KeyedClassChoices)
            set File             = #(FileKeyedClasses, $($), 1)
            set FileDestFullPath = $(FileDest)\$(File)
            LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FileDestFullPath)
            ifstr(i) $(STATUS) == YES
                LibraryProcedure STATUS, $(!PATCHLIBHANDLE), IsFileOpenedExclusive $(FileDestFullPath)
                ifstr(i) $(STATUS) == ERROR
                    goto patchnotdone
                else
                    ifstr(i) $(STATUS) == "YES"
                        LibraryProcedure NEWFILE, $(!PATCHLIBHANDLE), GenerateTemporary $(FileDest)
                        ifstr(i) $(NEWFILE) == ERROR
                            goto patchnotdone
                        else
                            set FileComp = {$(FileDest)\$(NEWFILE), $(FileDestFullPath)}
                            set MoveFileExList = >($(MoveFileExList), $(FileComp))
                        endif
                    else
                        set NEWFILE = $(File)
                    endif
                    install Install-File
                endif
            endif
        endif
    EndForListDo
    ifstr(i) $(STF_PRODUCT) == "WINNT"
        set TEMP_PRODUCT = WINNT
    else
        set TEMP_PRODUCT = LANMANNT
    endif
    read-syms FileSections$(TEMP_PRODUCT)
    set FileSectionsList = ^(FileSections$(TEMP_PRODUCT), 0)
    set FileSource  = $(!STF_SRCDIR)$(PRODUCT_DIR)
    ForListDo $(FileSectionsList)
        set FileSection = $($)
        set FileDest    = $($($))
        set FileList    = ^($(FileSection), 0)
        ForListDo $(FileList)
            set FileKey      = $($)
            set File         = #($(FileSection), $(FileKey), 2)
            set FileDestFullPath = $(FileDest)\$(File)
            LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FileDestFullPath)
            ifstr(i) $(STATUS) == YES
                LibraryProcedure STATUS, $(!PATCHLIBHANDLE), IsFileOpenedExclusive $(FileDestFullPath)
                ifstr(i) $(STATUS) == ERROR
                    goto patchnotdone
                else
                    ifstr(i) $(STATUS) == "YES"
                        LibraryProcedure NEWFILE, $(!PATCHLIBHANDLE), GenerateTemporary $(FileDest)
                        ifstr(i) $(NEWFILE) == ERROR
                            goto patchnotdone
                        else
                            set FileComp = {$(FileDest)\$(NEWFILE), $(FileDestFullPath)}
                            set MoveFileExList = >($(MoveFileExList), $(FileComp))
                        endif
                    else
                        set NEWFILE = $(File)
                    endif
                    install Install-File
                endif
            endif
        EndForListDo
    EndForListDO
    ifstr(i) $(BillboardPushed) == TRUE
        shell "subroutn.inf" PopBillboard
        set BillboardPushed = FALSE
    endif
    read-syms FileSectionsCopyAlways
    set FileSectionsList = ^(FileSectionsCopyAlways, 0)
    set FileSource  = $(!STF_SRCDIR)
    ForListDo $(FileSectionsList)
        set FileSection = $($)
        set FileDest    = $($($))
        set FileList    = ^($(FileSection), 0)
        ForListDo $(FileList)
            set FileKey = $($)
            set File    = #($(FileSection), $(FileKey), 2)
            set NEWFILE = $(File)
            set FileDestFullPath = $(FileDest)\$(File)
            install Install-File
        EndForListDo
    EndForListDO
    read-syms FileSectionsCopyAlways$(TEMP_PRODUCT)
    set FileSectionsList = ^(FileSectionsCopyAlways$(TEMP_PRODUCT), 0)
    set FileSource  = $(!STF_SRCDIR)$(PRODUCT_DIR)
    ForListDo $(FileSectionsList)
        set FileSection = $($)
        set FileDest    = $($($))
        set FileList    = ^($(FileSection), 0)
        ForListDo $(FileList)
            set FileKey = $($)
            set File    = #($(FileSection), $(FileKey), 2)
            set NEWFILE = $(File)
            set FileDestFullPath = $(FileDest)\$(File)
            install Install-File
        EndForListDo
    EndForListDO
    ifstr(i) $(FPNWSysPathFound) == TRUE
        read-syms FileSectionsFPNW
        set FileSectionsList = ^(FileSectionsFPNW, 0)
        set FileSource  = $(!STF_SRCDIR)
        ForListDo $(FileSectionsList)
            set FileSection = $($)
            set FileDest    = $($($))
            set FileList    = ^($(FileSection), 0)
            ForListDo $(FileList)
                set FileKey      = $($)
                set File         = #($(FileSection), $(FileKey), 2)
                set FileDestFullPath = $(FileDest)\$(File)
                LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FileDestFullPath)
                ifstr(i) $(STATUS) == YES
                    LibraryProcedure STATUS, $(!PATCHLIBHANDLE), IsFileOpenedExclusive $(FileDestFullPath)
                    ifstr(i) $(STATUS) == ERROR
                        goto patchnotdone
                    else
                        ifstr(i) $(STATUS) == "YES"
                            LibraryProcedure NEWFILE, $(!PATCHLIBHANDLE), GenerateTemporary $(FileDest)
                            ifstr(i) $(NEWFILE) == ERROR
                                goto patchnotdone
                            else
                                set FileComp = {$(FileDest)\$(NEWFILE), $(FileDestFullPath)}
                                set MoveFileExList = >($(MoveFileExList), $(FileComp))
                            endif
                        else
                            set NEWFILE = $(File)
                        endif
                        install Install-File
                    endif
                endif
            EndForListDo
        EndForListDO
    endif
    ifstr(i) $(CopyLoader) == TRUE
        read-syms FileSectionsOsLoader
        set FileSectionsList = ^(FileSectionsOsLoader, 0)
        set FileSource  = $(!STF_SRCDIR)
        ForListDo $(FileSectionsList)
            set FileSection = $($)
            set FileDest    = $($($))
            set FileList    = ^($(FileSection), 0)
            ForListDo $(FileList)
                set FileKey      = $($)
                set File         = #($(FileSection), $(FileKey), 2)
                set FileDestFullPath = $(FileDest)\$(File)
                LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FileDestFullPath)
                ifstr(i) $(STATUS) == YES
                    LibraryProcedure STATUS, $(!PATCHLIBHANDLE), IsFileOpenedExclusive $(FileDestFullPath)
                    ifstr(i) $(STATUS) == ERROR
                        goto patchnotdone
                    else
                        ifstr(i) $(STATUS) == "YES"
                            LibraryProcedure NEWFILE, $(!PATCHLIBHANDLE), GenerateTemporary $(FileDest)
                            ifstr(i) $(NEWFILE) == ERROR
                                goto patchnotdone
                            else
                                set FileComp = {$(FileDest)\$(NEWFILE), $(FileDestFullPath)}
                                set MoveFileExList = >($(MoveFileExList), $(FileComp))
                            endif
                        else
                            set NEWFILE = $(File)
                        endif
                        install Install-File
                    endif
                endif
            EndForListDo
        EndForListDO
    endif
    ifstr(i) $(IISPathFound) == TRUE
        read-syms FileSectionsIIS
        set FileSectionsList = ^(FileSectionsIIS, 0)
        set FileSource  = $(!STF_SRCDIR)
        ForListDo $(FileSectionsList)
            set FileSection = $($)
            set FileDest    = $($($))
            set FileList    = ^($(FileSection), 0)
            ForListDo $(FileList)
                set FileKey      = $($)
                set File         = #($(FileSection), $(FileKey), 2)
                set FileDestFullPath = $(FileDest)\$(File)
                LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FileDestFullPath)
                ifstr(i) $(STATUS) == YES
                    LibraryProcedure STATUS, $(!PATCHLIBHANDLE), IsFileOpenedExclusive $(FileDestFullPath)
                    ifstr(i) $(STATUS) == ERROR
                        goto patchnotdone
                    else
                        ifstr(i) $(STATUS) == "YES"
                            LibraryProcedure NEWFILE, $(!PATCHLIBHANDLE), GenerateTemporary $(FileDest)
                            ifstr(i) $(NEWFILE) == ERROR
                                goto patchnotdone
                            else
                                set FileComp = {$(FileDest)\$(NEWFILE), $(FileDestFullPath)}
                                set MoveFileExList = >($(MoveFileExList), $(FileComp))
                            endif
                        else
                            set NEWFILE = $(File)
                        endif
                        install Install-File
                    endif
                endif
            EndForListDo
        EndForListDO
    endif
    ifstr(i) $(IEPathFound) == TRUE
        read-syms FileSectionsIE
        set FileSectionsList = ^(FileSectionsIE, 0)
        set FileSource  = $(!STF_SRCDIR)
        ForListDo $(FileSectionsList)
            set FileSection = $($)
            set FileDest    = $($($))
            set FileList    = ^($(FileSection), 0)
            ForListDo $(FileList)
                set FileKey      = $($)
                set File         = #($(FileSection), $(FileKey), 2)
                set FileDestFullPath = $(FileDest)\$(File)
                LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FileDestFullPath)
                ifstr(i) $(STATUS) == YES
                    LibraryProcedure STATUS, $(!PATCHLIBHANDLE), IsFileOpenedExclusive $(FileDestFullPath)
                    ifstr(i) $(STATUS) == ERROR
                        goto patchnotdone
                    else
                        ifstr(i) $(STATUS) == "YES"
                            LibraryProcedure NEWFILE, $(!PATCHLIBHANDLE), GenerateTemporary $(FileDest)
                            ifstr(i) $(NEWFILE) == ERROR
                                goto patchnotdone
                            else
                                set FileComp = {$(FileDest)\$(NEWFILE), $(FileDestFullPath)}
                                set MoveFileExList = >($(MoveFileExList), $(FileComp))
                            endif
                        else
                            set NEWFILE = $(File)
                        endif
                        install Install-File
                    endif
                endif
            EndForListDo
        EndForListDO
    endif
    ifstr(i) $(CopySSL) == TRUE
	read-syms FileSectionsSSL
	set FileSectionsList = ^(FileSectionsSSL, 0)
        set FileSource  = $(!STF_SRCDIR)
        ForListDo $(FileSectionsList)
            set FileSection = $($)
            set FileDest    = $($($))
            set FileList    = ^($(FileSection), 0)
            ForListDo $(FileList)
                set FileKey      = $($)
                set File         = #($(FileSection), $(FileKey), 2)
                set FileDestFullPath = $(FileDest)\$(File)
                LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FileDestFullPath)
                ifstr(i) $(STATUS) == YES
                    LibraryProcedure STATUS, $(!PATCHLIBHANDLE), IsFileOpenedExclusive $(FileDestFullPath)
                    ifstr(i) $(STATUS) == ERROR
                        goto patchnotdone
                    else
                        ifstr(i) $(STATUS) == "YES"
                            LibraryProcedure NEWFILE, $(!PATCHLIBHANDLE), GenerateTemporary $(FileDest)
                            ifstr(i) $(NEWFILE) == ERROR
                                goto patchnotdone
                            else
                                set FileComp = {$(FileDest)\$(NEWFILE), $(FileDestFullPath)}
                                set MoveFileExList = >($(MoveFileExList), $(FileComp))
                            endif
                        else
                            set NEWFILE = $(File)
                        endif
                        install Install-File
                    endif
                endif
            EndForListDo
        EndForListDO
    endif
    read-syms ProgressCopy$(!STF_LANGUAGE)
    install   Install-DoCopy
    ifstr(i) $(STF_INSTALL_OUTCOME) == "STF_USERQUIT"
        goto patchnotdone
    else-ifstr(i) $(STF_INSTALL_OUTCOME) == "STF_FAILURE"
        goto patchnotdone
    endif
    set FileSection = "FileAttributes"
    set FileList    = ^(FileSection, 0)
    ForListDo $(FileList)
        set FileKey          = $($)
        set File             = #($(FileSection), $(FileKey), 2)
        set FileDest         = #($(FileSection), $(FileKey), 3)
        set FilePerms        = #($(FileSection), $(FileKey), 4)
        set FileDestFullPath = $(FileDest)\$(File)
        ifstr(i) $(FilePerms) != ""
            LibraryProcedure STATUS,$(!PATCHLIBHANDLE),ChangeFileAttributes $(FilePerms) $(FileDestFullPath)
        endif
    EndForListDo
processmovefileex=+
    ForListDo $(MoveFileExList)
        set ExistingPath = *($($), 1)
        set NewPath      = *($($), 2)
        LibraryProcedure STATUS, $(!PATCHLIBHANDLE), CopyFileOnReboot $(ExistingPath) $(NewPath)
        ifstr(i) $(STATUS) == ERROR
            goto patchnotdone
        endif
    EndForListDo
    ifstr(i) $(!STF_PLATFORM) == I386
        set NtLdrPath = $(STF_OSLDEST)"ntldr"
        LibraryProcedure STATUS, $(!PATCHLIBHANDLE), ForceFileNoCompress $(NtLdrPath)
        ifstr(i) $(STATUS) == ERROR
            goto patchnotdone
        endif
    endif
patchdone =+
    ifstr(i) $(BillboardPushed) == TRUE
        shell "subroutn.inf" PopBillboard
        set BillboardPushed = FALSE
    endif
    shell "" DoRegistryModifications $(!STF_CSDVER)
    ifstr(i) $(Unattended) != TRUE
        read-syms SetupDoneDlg$(!STF_LANGUAGE)
        ui start "SetupDone"
        ifstr(i) $(DLGEVENT) == "CONTINUE"
            ui pop 1
            goto rebootend
        else
            ui pop 1
            goto finish1
        endif
    else
        goto rebootend
    endif
patchnotdone =+
    set String = $(String2)
finish2 =+
    ifstr(i) $(BillboardPushed) == TRUE
        shell "subroutn.inf" PopBillboard
        set BillboardPushed = FALSE
    endif
    shell "subroutn.inf" SetupMessage $(STF_LANGUAGE) "FATAL" $(String)
    goto finish1
finish1 =+
    install   FreeSetupLibrary
finish =+
    install   FreePatchLibrary
    exit
rebootend =+
    set Reboot = YES
    ifstr(i) $(Unattended) != TRUE
	install	Install-Shutdown
    else
	ifstr(i) $(ForceClose) != TRUE
	    set ForceAppsClosed = NO
	else
	    set ForceAppsClosed = YES
	endif
	install Install-Shutdown2
    endif
    goto finish1
    exit
[LoadPatchLibrary]
    LoadLibrary "x" $(CWD)\patchdll.dll !PATCHLIBHANDLE
    exit
[FreePatchLibrary]
    ifstr(i) $(!PATCHLIBHANDLE) != ""
        FreeLibrary $(!PATCHLIBHANDLE)
    endif
    exit
[LoadSetupLibrary]
    LoadLibrary "x" $(!STF_CWDDIR)setupdll.dll !LIBHANDLE
    exit
[FreeSetupLibrary]
    ifstr(i) $(!LIBHANDLE) != ""
        FreeLibrary $(!LIBHANDLE)
    endif
    exit
[Install-File]
    set STF_VITAL = ""
    AddSectionKeyFileToCopyList $(FileSection) $(FileKey) $(FileSource) $(FileDest)
    exit
[Install-DoCopy]
    CopyFilesInCopyList
    exit
[Install-Shutdown]
    LibraryProcedure STATUS,$(!LIBHANDLE),ShutdownSystem $(Reboot)
    exit
[Install-Shutdown2]
    LibraryProcedure STATUS,$(!PATCHLIBHANDLE),ShutdownSystem2 $(Reboot) $(ForceAppsClosed)
    exit
[RegistryConstants]
    MaskAllAccess          = 33554432
    NoTitle                = 0
    RegLastError           = $(!REG_ERROR_SUCCESS)
    CurrentControlSet      = "SYSTEM\CurrentControlSet"
    ServicesBaseName       = $(CurrentControlSet)"\Services"
    NetbtKeyPath           = $(ServicesBaseName)"\Netbt"
[DoRegistryModifications]
    set Status = STATUS_FAILED
    read-syms RegistryConstants
    set KeyPath   = { +
                     {SYSTEM,            $(NoTitle), $(MaskAllAccess)}, +
                     {CurrentControlSet, $(NoTitle), $(MaskAllAccess)}, +
                     {Control,           $(NoTitle), $(MaskAllAccess)}, +
                     {Windows,           $(NoTitle), $(MaskAllAccess)}, +
                    }
    set KeyValues = { +
                     {CSDVersion, $(NoTitle), $(!REG_VT_DWORD), $($0) } +
                    }
    shell "registry.inf" CreateKey $(!REG_H_LOCAL) $(KeyPath) $(KeyValues)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        goto endCSDVersionCreate
    endif
    ifstr(i) $($R0) != STATUS_SUCCESSFUL
        goto endCSDVersionCreate
    else
        CloseRegKey $($R1)
    endif
    set Status = STATUS_SUCCESSFUL
endCSDVersionCreate = +
    Return $(Status)
[GetCSDVersion]
    set Status = STATUS_SUCCESSFUL
    read-syms RegistryConstants
    set CSDVersion = 0
    set KeyName = "SYSTEM\CurrentControlSet\Control\Windows"
    OpenRegKey $(!REG_H_LOCAL) "" $(KeyName) $(!REG_KEY_READ) KeyHandle
    ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
        Debug-Output "REGISTRY.INF: Couldn't open windows nt software key for read access"
        goto end_GetCSDVersion
    endif
    GetRegValue $(KeyHandle) "CSDVersion" CSDVersionValue
    ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
        CloseRegKey $(KeyHandle)
        goto end_GetCSDVersion
    endif
    set CSDVersion =  *($(CSDVersionValue), 4)
    CloseRegKey $(KeyHandle)
end_GetCSDVersion = +
    Return $(Status) $(CSDVersion)
[GetCheckedFree]
    set Status = STATUS_SUCCESSFUL
    read-syms RegistryConstants
    set System = Free
    set KeyName = "Software\Microsoft\Windows NT\CurrentVersion"
    OpenRegKey $(!REG_H_LOCAL) "" $(KeyName) $(!REG_KEY_READ) KeyHandle
    ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
        Debug-Output "REGISTRY.INF: Couldn't open windows nt software key for read access"
        goto end_GetCheckedFree
    endif
    GetRegValue $(KeyHandle) "CurrentType" CurrentTypeValue
    ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
        CloseRegKey $(KeyHandle)
        goto end_GetCheckedFree
    endif
    Split-String *($(CurrentTypeValue), 4) " " CurrentTypeList
    ForListDo $(CurrentTypeList)
       ifstr(i) $($) == "free"
          set System = free
       else-ifstr(i) $($) == "checked"
          set System = checked
       endif
    EndForListDo
    CloseRegKey $(KeyHandle)
end_GetCheckedFree = +
    Return $(Status) $(System)
[QueryOkCancel]
    set DlgText = $($0)
    read-syms QueryOKCancelDlg$(!STF_LANGUAGE)
    ui start "SetupMessage"
    ifstr(i) $(DLGEVENT) == "OK"
        set Status     = STATUS_SUCCESSFUL
        set UserAction = $(DLGEVENT)
    else-ifstr(i) $(DLGEVENT) == "CANCEL"
        set Status     = STATUS_SUCCESSFUL
        set UserAction = $(DLGEVENT)
    else
        set Status     = STATUS_FAILED
        set UserAction = "CANCEL"
    endif
    Return $(Status) $(UserAction)
[Signature]
    FileType = MICROSOFT_FILE
[GetSignature]
    read-syms Signature
    return $(FileType)
[ProductType]
STF_PRODUCT  = Winnt
STF_PLATFORM = I386
[Source Media Descriptions]
    1  = "Windows NT 4.0 Update Disk #1"  , TAGFILE = disk1
    2  = "Windows NT 4.0 Update Disk #2"  , TAGFILE = disk2
    3  = "Windows NT 4.0 Update Disk #3"  , TAGFILE = disk3
    4  = "Windows NT 4.0 Update Disk #4"  , TAGFILE = disk4
    5  = "Windows NT 4.0 Update Disk #5"  , TAGFILE = disk5
    6  = "Windows NT 4.0 Update Disk #6"  , TAGFILE = disk6
    7  = "Windows NT 4.0 Update Disk #7"  , TAGFILE = disk7
    8  = "Windows NT 4.0 Update Disk #8"  , TAGFILE = disk8
    9  = "Windows NT 4.0 Update Disk #9"  , TAGFILE = disk9
    10 = "Windows NT 4.0 Update Disk #10" , TAGFILE = disk10
[Strings]
    String1 = "This update disk cannot be used on this platform."
    String2 = "Setup failed to update the system."
    String3 = "Setup has successfully updated your system."
    String4 = "You do not have permission to update the system.  Please contact your system administrator."
    String5 = "Setup failed to setup your updated files for secure operation."
    String6 = "Setup has detected that your Windows NT Workstation system configuration is in an "+
              "inconsistent state.  Setup cannot continue updating your system.  "+
              "Please re-install Windows NT Workstation."
    String8 = "Setup has detected that the version of the system installed is "+
              "newer than the update you are applying to it.  The update can render "+
              "your system unstartable."
    String9 = "Setup is going to update your Windows NT system with the English "+
              "version of the update program.  If you wish to cancel the update "+
              "process, please press Cancel or press OK to continue."
    String11 = "Setup couldn't find the setup.log file in your repair directory. "+
               "Setup cannot proceed to update your system.  Please copy the setup.log "+
               "file from your Emergency Repair Disk to your repair directory "+
               "and restart the update."
    String12 = "Setup has not updated your system.  If you wish to update your "+
               "system please run the update utility again."
    String13a = "Not enough hard disk space to run Setup.  Setup needs at least "
    String13b = "MB of free hard disk space on "
    String13c = " before it can be run.  Delete some"+
                " files and run the Update program again."
    String14  = "Setup cannot update your Windows NT files because it could not "+
                "determine your product type.  Your registry may be corrupt."
    String15  = "Setup cannot update your checked system.  The update can only "+
                "be applied to the retail system."
    String16  = "Setup cannot update your Windows NT files because your system is "+
                "NT 3.1, NT 3.5, or NT 3.51. Please upgrade your system to the retail Windows NT 4.0, "+
                "and then update your system."
    String17  = "Setup cannot update your Windows NT files because your system is "+
                "a pre-release of NT 4.0. Please upgrade your system to the retail "+
                "Windows NT 4.0, and then update your system."
    String18  = "Setup cannot update your Windows NT files because your system is "+
                "a version later than NT 4.0.  The update can only be applied "+
                "to Windows NT 4.0."
    String20  = "Setup cannot update your Windows NT files because the language "+
                "installed on your system is different from the Update language."
    String21  = "Setup cannot find the location of your NTOSKRNL.EXE file in SETUP.LOG.  "+
                "You may have renamed the Windows NT root directory since you first installed "+
                "your system.  For the Update to work correctly, you must rename "+
                "your root directory back to what it was when you first installed your system."
    String22  = "You have a domestic-version 128-bit PCT/SSL security provider installed on your machine."$(LF)$(LF)+
                "This Update contains only an export grade version 40-bit PCT/SSL security provider."$(LF)$(LF)+
                "Select Cancel to skip copying this file.  Your original 128-bit security provider will be left intact."$(LF)+
                "Please see the readme.txt for information on obtaining the updated 128-bit security provider."$(LF)$(LF)+
                "Want to overwrite?"
    Billboard1 = "Please wait..."
    Billboard2 = "Please wait while the files to be updated are determined..."
    Billboard3 = "Please wait while the Emergency Repair Disk is updated..."
[ProgressCopyENG]
    ProCaption   = "Windows NT Setup"
    ProCancel    = "Cancel"
    ProCancelMsg = "The Windows NT 4.0 files are not completely updated.  Are you sure you want "+
                   "to cancel copying files?"
    ProCancelCap = "Setup Message"
    ProText1     = "Copying:"
    ProText2     = "To:"
[SetupDoneDlgENG]
    Caption     = "Windows NT Setup"
    DlgText     = "Windows NT 4.0 has been updated. If you change or add "+
                  "any components to your system, you will need to "+
                  "reapply the update."$(!LF)$(!LF)+
                  "Remove disks from the floppy disk drives and "+
                  "choose Restart Computer to run the updated system."
    Reboot      = "&Restart Computer"
    Windows     = "E&xit to Windows NT"
    DlgType     = "Info"
    DlgTemplate = "REBOOT"
[QueryOKCancelDlgENG]
    STF_MB_TITLE = "Setup Message"
    DlgType      = "MessageBox"
    STF_MB_TEXT  = $(DlgText)
    STF_MB_TYPE  = 2
    STF_MB_ICON  = 4
    STF_MB_DEF   = 1
[ RETURN TO DIRECTORY ]