Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

633 lines
20 KiB

;**********************************************************************
;
; NAME: NCPASHEL.INF
;
; PURPOSE:
;
; This INF script is invoked by the Network Control
; Panel Applet (NCPA).
;
;
; COMMENTARY:
;
; The NCPA builds a command line to invoke SETUP, instructing
; it to run this file. The other settings on the command line
; tell NCPASHEL.INF what to invoke and in what mode.
;
; The primary function of this file is to hide the distinction
; between invocation by the main install SETUP and later invocation
; by the NCPA. This involves restoring the STF_XXXXX global
; variables to their earlier settings, along with defining some
; new ones to "fine-tune" the functions of the product-level
; INF scripts.
;
;
; HISTORY:
;
; DavidHov Created 4/4/92
;
;***********************************************************************
;
;
;***********************************************************************
;
;
;
;***********************************************************************
;***********************************************************************
;
; Variables declared by SETUP.INF, the main INF for GUI Setup.
;
; Those marked with ** are established by the SETUP.EXE; the others
; are obtained from detection or established programmatically by
; SETUP.INF.
;
; The STF_* variables documented below are the globals which can be used
; by shelled INFs:
;
;*************************************************************************
;
; ** 0. STF_HWND: Handle to setup window (hex string)
;
; ** 1. STF_SRCTYPE: DOS | ARC | UNC | NT
;
; ** 2. STF_SRCDIR: NT Sources, e.g. f:\i386i\
;
; ** 3. STF_SRCBASE: Defined only for UNC srctype, the unc share, e.g.,
; \\Orville\razzle.
;
; 4. STF_NTDRIVE: Destination NT Drive, e.g. d:
;
; 5. STF_NTPATH: Path to nt, e.g. d:\nt
;
; 6. STF_WINDOWSPATH: Path to windows, e.g. d:\nt\windows
;
; 7. STF_WINDOWSSYSPATH: Path to windows system, e.g. d:\nt\windows\System32
;
; ** 8. STF_CWDDIR: Path to place where setup is run from.,
; e.g. d:\setup\
;
; 9. STF_LANGUAGE: Language to use (ENG | ...)
;
; 10. STF_INSTALL_MODE: EXPRESS | CUSTOM
;
; ** 11. STF_INSTALL_TYPE: SETUPRUN | SETUPBOOTED | NETDUMP | MAINTENANCE
; (SETUPRUN: Setup is run off any source (network, cdrom,
; ... from a running NT system)
;
; (SETUPBOOTED: Setupprep runs and then copies setup on the
; system and runs GUI Setup..)
;
; (SETUPTOSHARE: Copy sources to destination STF_DSTDIR)
;
; (MAINTENANCE: MAINTENACE mode setup)
;
; (used to be FRESH | UPGRADE | NETDUMP)
;
; 12. STF_UPGRADE: YES | NO
;
; 13. STF_PLATFORM: I386 | MIPS | Alpha | ppc
;
; 14. STF_PROCESSOR: I386 | I486 | I586 or R2000 | R3000 | R4000 | Alpha_AXP.
;
; 15. STF_USERNAME: Username for account. "string" (no whitespaces, < 15)
;
; 16. STF_COMPUTERNAME: Computername to identify machine (no whitespaces, < 15)
;
; 17. STF_PRODUCT: WINNT | LANMANNT | SERVERNT
;
; 18. STF_UNUSEDDRIVES: List of drives currently unused and available for
; assignment. {E:, F:, ...., Z:}. Use routine in
; subroutn.inf to allocate unused.
;
; nn. STF_NCDETECT: YES | NO determines if netcard detection is enabled
;
; Conditionally defined:
;
; ** 19. STF_DSTDIR: Only defined in SETUPTOSHARE. e.g., f:\beta\nt\i386\
;
; ** 20. STF_DSTTYPE as STF_SRCTYPE
;
; ** 21. STF_DSTBASE as STF_SRCBASE
;
; Others Sunil didn't mention:
;
; ** 22. STF_SRCINFPATH path to invoked (outermost) INF
;
; ** 23. STF_CONTEXTINFNAME path to currently executing INF
;
; ** 24. STF_SYS_INIT NO
;
;***********************************************************************
;
;***********************************************************************
; Variables required for NCPA support
;***********************************************************************
;
; NTN_RegBase Location of product key in SOFTWARE hive.
; Set by NCPA.CPL as command line option.
;
; NTN_ServiceBase Top of Services Tree
;
; NTN_InstallMode "install", "deinstall", "configure",
; "bind"
; Set by NCPA.CPL as command line option.
;
; NTN_Origination "ncpa", "install"
;
; NTN_Infname name (pathless) of INF file to execute.
; Set by NCPA.CPL as command line option.
;
; If the INF name is equal to one of these,
; then the appropriate section of
; NTLANMAN.INF is shelled to.
;
; NTN_InfOption INF option name associated with this product.
;
; NTN_InstallPhase "primary","secondary".
; "primary" implies main installation;
; "secondary" implies product add-on installation.
;
;***********************************************************************
[StfVariableDetect]
!STF_PROCESSOR = "" ? $(!LIBHANDLE) GetProcessor
!STF_PLATFORM = "I386" ; BUGBUG-- How to establish?
;
;
; Language to Use For interaction with user
;
!STF_LANGUAGE = "" ? $(!LIBHANDLE) GetLanguage
LanguageList = ^(LanguageID, 1)
;
; Destination NT Directory relative to root of NT Drive
;
!STF_WINDOWSPATH = "" ? $(!LIBHANDLE) GetWindowsNtDir
!STF_WINDOWSSYSPATH = "" ? $(!LIBHANDLE) GetWindowsNtSysDir
!STF_NTPATH = $(!STF_WINDOWSPATH)
!STF_COMPUTERNAME = "" ? $(!LIBHANDLE) GetMyComputerName
!STF_BUSTYPE = "" ? $(!LIBHANDLE) GetMyBusType
!STF_BUSTYPELIST = "" ? $(!LIBHANDLE) GetMyBusTypeList
[StfVariableSyms]
!ProcessorID_I386 = I386
!ProcessorID_I486 = I486
!ProcessorID_I586 = I586
!ProcessorID_R4000 = R4000
!ProcessorID_Alpha = Alpha_AXP
!ProcessorID_PPC601 = PPC601
!ProcessorID_PPC603 = PPC603
!ProcessorID_PPC604 = PPC604
!ProcessorID_PPC620 = PPC620
!PlatformID_I386 = I386
!PlatformID_Mips = Mips
!PlatformID_Alpha = Alpha
!PlatformID_PPC = ppc
;
; Version Information
;
!STF_PRODUCT = WINNT ; BUGBUG-- Determine from Registry
!STF_USERNAME = "" ; BUGBUG-- Determine from API calls
!STF_INSTALL_MODE = "CUSTOM" ; It's always CUSTOM from the NCPA
!STF_UPDGRADE = NO ; BUGBUG-- TBI
!STF_NCDETECT = NO ; disable netcard detection
!STF_NCOPTION = "" ; set defaults for other
!STF_NCDETCARD = 99999 ; global netcard variables
!STF_NCDETINFO = {} ; No detect information
!STF_NC_PARAMS = {} ;
!STF_NC_PNAMES = {} ;
!STF_SRCDIR_KEYED = "" ; source dir as entered
!STF_SRCDIR_USED = "" ; source dir as used
!STF_SRCDIR_OVERRIDE = "" ; source dir override (see UTILITY.INF)
!STF_SRCDIR_WINNT = "" ; WINNT override source path
; Establish the error dialog template overrides.
!STF_TEMPLATE_CRITERR = "CRITERR2"
!STF_TEMPLATE_NONCRITERR = "NONCRITERR2"
;
; DOS VDM Setup / OS2 Subsystem Setup
;
!STF_INSTALLED_OS = {} ? $(!LIBHANDLE) GetInstalledOSNames
FatalErrorIndex = 1
Exit_Code = 0
[DoAskOemsetupSource]
read-syms DoAskUpgradeSrcDlgText$(!STF_LANGUAGE)
shell "subroutn.inf" DoAskSourceEx $($0) $(DlgText)
Return $($R0) $($R1) $($R2) $($R3)
;***********************************************************************
;
; Primary control section.
;
;***********************************************************************
[Shell Commands]
;
; Initialization code borrowed from SETUP.INF. Establish all the
; STF_ variables not already created by initialization (in INIT.C).
;
set-title "Windows NT Setup"
;
; Changing the literal 0 to a 1 will turn Debug-Output on.
;
Set !G:DebugOutputControl = 0
LoadLibrary "x" $(!STF_CWDDIR)setupdll.dll !LIBHANDLE
;
; Bind to NCPA.CPL. Defer this operation if we're
; installing new software.
;
Set !NCPA_HANDLE = ""
Ifstr(i) $(!NTN_InfSection) != OemSoftwareInstall
Debug-Output "NCPASHEL.INF: LoadLibrary on "$(!STF_CWDDIR)ncpa.cpl
LoadLibrary "y" $(!STF_CWDDIR)ncpa.cpl !NCPA_HANDLE
Endif
;
; Establish the help IDs and help file.
;
Shell "subroutn.inf" ReadSetupHelpIds
SetHelpFile "NetCfg.hlp" $(!MinimumID) $(!MaximumID)
set-subst LF = "\n"
StartWait
;
; Reestablish the SETUP STF_ variables as best we can.
;
read-syms StfVariableSyms
read-syms StfVariableDetect
detect StfVariableDetect
Set !STF_NTPATH = $(!STF_WINDOWSSYSPATH)
;
; Get the product type from the registry
;
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
else-ifstr(i) $(TempProductType) == "lanmannt"
set !STF_PRODUCT = LANMANNT
else-ifstr(i) $(TempProductType) == "servernt"
set !STF_PRODUCT = SERVERNT
endif
CloseRegKey $(KeyProductOptions)
endif
;
; Determine the source location. If STF_SRCDIR is already set, use it.
; Otherwise, try to extract it from the NCPA's home location in the Registry.
;
;
Debug-Output "NCPASHEL.INF: STF_SRCDIR is "$(!STF_SRCDIR)
Debug-Output "NCPASHEL.INF: NTN_SRCPATH is "$(!NTN_SRCPATH)
Ifstr(i) $(!NTN_SRCPATH) != ""
Set !STF_ORIGINAL_SRCDIR = $(!STF_SRCDIR)
Set !STF_SRCDIR = $(!NTN_SRCPATH)
Debug-Output "NCPASHEL.INF: Reset STF_SRCDIR to:"$(!STF_SRCDIR)
else
OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\Microsoft\Windows Nt\CurrentVersion" $(!REG_KEY_READ) KeyNt
Ifstr(i) $(KeyNt) != ""
GetRegValue $(KeyNt) "SourcePath" SourcePathValue
Set !STF_SRCDIR = *($(SourcePathValue),4)
Debug-Output "NCPASHEL.INF: SourcePath retrieved is "$(!STF_SRCDIR)
CloseRegKey $(KeyNt)
Endif
Ifstr(i) $(!STF_SRCDIR) == ""
Set !STF_SRCDIR = "A:\"
Endif
Endif
;
; Extract the "setup in progress" variable from the Registry;
; set global variables accordingly. If "setup in progress" flag is
; on, set !NTN_InstallPhase to "primary", then look for the
; "winnt source path" value; if found, set !STF_SRCDIR_WINNT.
;
Set SetupInp = 0
Set !NTN_InstallPhase = secondary
ifstr(i) $(!NTN_OVERIDEPHASE) != ""
Set !NTN_InstallPhase = $(!NTN_OVERIDEPHASE)
Else
OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\Setup" $(!REG_KEY_READ) KeySetup
Ifstr(i) $(KeySetup) != ""
GetRegValue $(KeySetup) "SystemSetupInProgress" SetupInpValue
Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
Set SetupInp = *($(SetupInpValue),4)
Debug-Output "NCPASHEL.INF: SetupInp = "$(SetupInp)
Endif
Ifint $(SetupInp) == 1
Set !NTN_InstallPhase = primary
GetRegValue $(KeySetup) "WinntPath" SetupPathValue
Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
Set !STF_SRCDIR_WINNT = *($(SetupPathValue),4)
Debug-Output "NCPASHEL.INF: STF_SRCDIR_WINNT = "$(!STF_SRCDIR_WINNT)
Endif
Endif
CloseRegKey $(KeySetup)
Endif
EndIf
Debug-Output "NCPASHEL.INF: NTN_InstallPhase = "$(!NTN_InstallPhase)
Debug-Output "NCPASHEL.INF: NTN_InfSection = "$(!NTN_InfSection)
Debug-Output "NCPASHEL.INF: NTN_InstallMode = "$(!NTN_InstallMode)
;
; Enable the netcard detection functions if necessary.
; Don't check for errors, since each INF will report
; the error if it really needs to use detection.
;
; We start detection for installations and configurations
; exceptfor final review INFs, which are marked as installations.
;
Ifstr(i) $(!NTN_Origination) == "install"
Goto skipdetection
Endif
Ifstr(i) $(!NTN_InfSection) == BindingsReview
Goto skipdetection
Endif
Ifstr(i) $(!NTN_InstallMode) == install
Goto startdetection
Endif
Ifstr(i) $(!NTN_InstallMode) == configure
Goto startdetection
Endif
Goto skipdetection
startdetection = +
Ifstr(i) $(!NCPA_HANDLE) != ""
Debug-Output "NCPASHEL.INF: Enable netcard detection from NCPA.CPL"
Shell "NCPARAM.INF" Param_ControlDetection DTSTART
Endif
skipdetection = +
;
; Check processor type, see if it is supported, if so what platform does it
; belong to. Set also the SYS variable to denote which set of sources we
; are installing from
;
ifstr(i) $(!STF_PROCESSOR) == $(!ProcessorID_I386)
set !STF_PLATFORM = $(!PlatformID_I386)
set !SYS = $(!ProcessorID_I386)
else-ifstr(i) $(!STF_PROCESSOR) == $(!ProcessorID_I486)
set !STF_PLATFORM = $(!PlatformID_I386)
set !SYS = $(!ProcessorID_I386)
else-ifstr(i) $(!STF_PROCESSOR) == $(!ProcessorID_I586)
set !STF_PLATFORM = $(!PlatformID_I386)
set !SYS = $(!ProcessorID_I386)
else-ifstr(i) $(!STF_PROCESSOR) == $(!ProcessorID_R4000)
set !STF_PLATFORM = $(!PlatformID_Mips)
set !SYS = $(!ProcessorID_R4000)
else-ifstr(i) $(!STF_PROCESSOR) == $(!ProcessorID_Alpha)
set !STF_PLATFORM = $(!PlatformID_Alpha)
set !SYS = $(!ProcessorID_Alpha)
else-ifstr(i) $(!STF_PROCESSOR) == $(!ProcessorID_PPC601)
set !STF_PLATFORM = $(!PlatformID_PPC)
set !SYS = $(!ProcessorID_PPC601)
else-ifstr(i) $(!STF_PROCESSOR) == $(!ProcessorID_PPC603)
set !STF_PLATFORM = $(!PlatformID_PPC)
set !SYS = $(!ProcessorID_PPC603)
else-ifstr(i) $(!STF_PROCESSOR) == $(!ProcessorID_PPC604)
set !STF_PLATFORM = $(!PlatformID_PPC)
set !SYS = $(!ProcessorID_PPC604)
else-ifstr(i) $(!STF_PROCESSOR) == $(!ProcessorID_PPC620)
set !STF_PLATFORM = $(!PlatformID_PPC)
set !SYS = $(!ProcessorID_PPC620)
else
set !STF_PLATFORM = $(!PlatformID_I386)
set !SYS = $(!ProcessorID_I386)
endif
Ifstr(i) $(!STF_LANGUAGE) != "ENG" ; BUGBUG: temporary
Debug-Output "NCPASHEL: Language not set to English; resetting"
!STF_LANGUAGE = "ENG"
Endif
read-syms ProgressCopy$(!STF_LANGUAGE)
;----------------------------------------------------------------------
;
; STF_ variables are now established.
;
; Establish by default the NCPA variables which the NCPA didn't.
;
;----------------------------------------------------------------------
Ifstr(i) $(!NTN_RegBase) == ""
set !NTN_RegBase = ""
Endif
set !NTN_ServiceBase = "SYSTEM\CurrentControlSet\SERVICES"
;
; Default the InstallMode to "configure"
;
Ifstr(i) $(!NTN_InstallMode) == ""
Debug-Output "NCPASHEL:!NTN_InstallMode was not defined!"
set !NTN_InstallMode = "configure"
Endif
Ifstr(i) $(!NTN_SoftwareBase) == ""
; BUGBUG
; set !NTN_SoftwareBase = "SOFTWARE\Description"
set !NTN_SoftwareBase = "SOFTWARE"
Endif
Ifstr(i) $(!NTN_Origination) == ""
set !NTN_Origination = "ncpa"
Endif
;----------------------------------------------------------------------
;
; NTN_ variables are now established.
;
; Prepare to Shell to target INF
;
;----------------------------------------------------------------------
Ifstr(i) $(!NTN_Infname) == ""
goto fatalnoinfname
Endif
Ifstr(i) $(!NTN_InfSection) == ""
Set !NTN_InfSection = "InstallOption"
Endif
;------------------------------------------------------------------------
;
; Shell to the given section of the component INF. If this is an
; update/upgrade, ask the user for the location of the file.
;
;------------------------------------------------------------------------
ifstr(i) $(!NTN_InstallMode) == "Update"
Debug-Output "NCPASHEL.INF: Upgrade mode"
;
; First, ask for oemsetup.inf location
; Then, pass the information to the inf file
;
Shell "" DoAskOemsetupSource $(!STF_SRCDIR)
Ifstr(i) $($ShellCode) != $(!SHELL_CODE_OK)
goto shellerror
Endif
ifstr(i) $($R0) == STATUS_SUCCESSFUL
set !STF_SRCDIR = $($R1)
else-ifstr(i) $($R0) == STATUS_USERCANCEL
set Exit_Code = 1
goto end
else
set Exit_Code = 2
goto end
endif
;
; Change NTN_Infname to refer to the OEMSETUP.INF file
; pointed to by the user.
;
Set !NTN_Infname = $(!STF_SRCDIR)oemsetup.inf
endif
Ifstr(i) $(!NTN_InstallMode) == install
set AddCopy = YES
set DoCopy = YES
set DoConfig = YES
Else-ifstr(i) $(!NTN_InstallMode) == "Update"
set AddCopy = YES
set DoCopy = YES
set DoConfig = NO
;
; If upgrade, check for option list.
;
Debug-Output "NCPASHEL.INF: Shell to "$(!NTN_Infname)
Shell $(!NTN_Infname) ReturnOptions $(!STF_LANGUAGE)
Ifstr(i) $($ShellCode) != $(!SHELL_CODE_OK)
Debug-Output "NCPASHEL.INF: SHELL ERROR: "$($ShellCode)
goto shellerror
Endif
Ifstr(i) $($R0) == "STATUS_SUCCESSFUL"
IfContains(i) $(!NTN_InfOption) in $($R1)
goto ContinueUpgrade
endif
endif
read-syms IncorrectOemsetupDisk$(!STF_LANGUAGE)
shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" $(ErrorText)
set Exit_Code = 1
goto end
ContinueUpgrade = +
Endif
;
; if we supplied a specific oem directory, use it
;
ifstr(i) $(!NTN_SRCPATH) != ""
Set !STF_SRCDIR_OVERRIDE = $(!STF_SRCDIR)
Endif
Shell $(!NTN_Infname) $(!NTN_InfSection) +
$(!STF_LANGUAGE) $(!NTN_InfOption) +
$(!STF_SRCDIR) $(AddCopy) $(DoCopy) $(DoConfig)
Ifstr(i) $($ShellCode) != $(!SHELL_CODE_OK)
Debug-Output "NCPASHEL.INF: SHELL ERROR: "$($ShellCode)
goto shellerror
Endif
Debug-Output "NCPASHEL: INF return: "$($R0)
Ifstr(i) $($R0) == STATUS_SUCCESSFUL
set Exit_Code = 0
else-ifstr(i) $($R0) == STATUS_USERCANCEL
set Exit_Code = 1
else-ifstr(i) $($R0) == STATUS_NO_EFFECT
set Exit_Code = 3
else-ifstr(i) $($R0) == STATUS_REBIND
set Exit_Code = 4
else-ifstr(i) $($R0) == STATUS_REBOOT
set Exit_Code = 5
else
set Exit_Code = 2
Endif
EndWait
goto end
;------------------------------------------------------------------
; Fatal error display functions
;------------------------------------------------------------------
shellerror = +
read-syms ShellError$(!$ShellCode)$(!STF_LANGUAGE)
Debug-Output "NCPASHEL: SHELL ERROR: "$(Error)
goto fatal
fatalnoinfname = +
set FatalErrorIndex = 2
goto fatalmsg
fatalmsg = +
read-syms FatalError$(FatalErrorIndex)$(!STF_LANGUAGE)
Debug-Output "NCPASHEL: FATAL ERROR: "$(Error)
goto fatal
fatal = +
read-syms FatalDlg$(!STF_LANGUAGE)
ui start "FatalError"
goto end
;------------------------------------------------------------------
; Exit NCPASHEL.INF; return to NCPA
;------------------------------------------------------------------
end = +
Ifstr(i) $(!LIBHANDLE) != ""
LibraryProcedure DontCare, $(!LIBHANDLE), DeleteAllConnections
Endif
Debug-Output "NCPASHEL: NCPASHEL: returning to NCPA"
goto term
;
; Immediate exit
;
term = +
Debug-Output "NCPASHEL: Bye."
exit
;***********************************************************************
;
; End of NCPASHEL.INF
;
;***********************************************************************