|
|
1.1 root 1: ;**********************************************************************
2: ;
3: ; NAME: NCPASHEL.INF
4: ;
5: ; PURPOSE:
6: ;
7: ; This INF script is invoked by the Network Control
8: ; Panel Applet (NCPA).
9: ;
10: ;
11: ; COMMENTARY:
12: ;
13: ; The NCPA builds a command line to invoke SETUP, instructing
14: ; it to run this file. The other settings on the command line
15: ; tell NCPASHEL.INF what to invoke and in what mode.
16: ;
17: ; The primary function of this file is to hide the distinction
18: ; between invocation by the main install SETUP and later invocation
19: ; by the NCPA. This involves restoring the STF_XXXXX global
20: ; variables to their earlier settings, along with defining some
21: ; new ones to "fine-tune" the functions of the product-level
22: ; INF scripts.
23: ;
24: ;
25: ; HISTORY:
26: ;
27: ; DavidHov Created 4/4/92
28: ;
29: ;***********************************************************************
30: ;
31: ;
32: ;***********************************************************************
33: ;
34: ;
35: ;
36: ;***********************************************************************
37:
38: ;***********************************************************************
39: ;
40: ; Variables declared by SETUP.INF, the main INF for GUI Setup.
41: ;
42: ; Those marked with ** are established by the SETUP.EXE; the others
43: ; are obtained from detection or established programmatically by
44: ; SETUP.INF.
45: ;
46: ; The STF_* variables documented below are the globals which can be used
47: ; by shelled INFs:
48: ;
49: ;*************************************************************************
50: ;
51: ; ** 0. STF_HWND: Handle to setup window (hex string)
52: ;
53: ; ** 1. STF_SRCTYPE: DOS | ARC | UNC
54: ;
55: ; ** 2. STF_SRCDIR: NT Sources, e.g. f:\i386i\
56: ;
57: ; ** 3. STF_SRCBASE: Defined only for UNC srctype, the unc share, e.g.,
58: ; \\Orville\razzle.
59: ;
60: ; 4. STF_NTDRIVE: Destination NT Drive, e.g. d:
61: ;
62: ; 5. STF_NTPATH: Path to nt, e.g. d:\nt
63: ;
64: ; 6. STF_WINDOWSPATH: Path to windows, e.g. d:\nt\windows
65: ;
66: ; 7. STF_WINDOWSSYSPATH: Path to windows system, e.g. d:\nt\windows\System32
67: ;
68: ; ** 8. STF_CWDDIR: Path to place where setup is run from.,
69: ; e.g. d:\setup\
70: ;
71: ; 9. STF_LANGUAGE: Language to use (ENG | ...)
72: ;
73: ; 10. STF_INSTALL_MODE: EXPRESS | CUSTOM
74: ;
75: ; ** 11. STF_INSTALL_TYPE: SETUPRUN | SETUPBOOTED | NETDUMP | MAINTENANCE
76: ; (SETUPRUN: Setup is run off any source (network, cdrom,
77: ; ... from a running NT system)
78: ;
79: ; (SETUPBOOTED: Setupprep runs and then copies setup on the
80: ; system and runs GUI Setup..)
81: ;
82: ; (SETUPTOSHARE: Copy sources to destination STF_DSTDIR)
83: ;
84: ; (MAINTENANCE: MAINTENACE mode setup)
85: ;
86: ; (used to be FRESH | UPGRADE | NETDUMP)
87: ;
88: ; 12. STF_UPGRADE: YES | NO
89: ;
90: ; 13. STF_PLATFORM: I386 | MIPS | Alpha
91: ;
92: ; 14. STF_PROCESSOR: I386 | I486 | I586 or R2000 | R3000 | R4000 | Alpha_AXP.
93: ;
94: ; 15. STF_USERNAME: Username for account. "string" (no whitespaces, < 15)
95: ;
96: ; 16. STF_COMPUTERNAME: Computername to identify machine (no whitespaces, < 15)
97: ;
98: ; 17. STF_PRODUCT: WINNT | LANMANNT
99: ;
100: ; 18. STF_UNUSEDDRIVES: List of drives currently unused and available for
101: ; assignment. {E:, F:, ...., Z:}. Use routine in
102: ; subroutn.inf to allocate unused.
103: ;
104: ; nn. STF_NCDETECT: YES | NO determines if netcard detection is enabled
105: ;
106: ; Conditionally defined:
107: ;
108: ; ** 19. STF_DSTDIR: Only defined in SETUPTOSHARE. e.g., f:\beta\nt\i386\
109: ;
110: ; ** 20. STF_DSTTYPE as STF_SRCTYPE
111: ;
112: ; ** 21. STF_DSTBASE as STF_SRCBASE
113: ;
114: ; Others Sunil didn't mention:
115: ;
116: ; ** 22. STF_SRCINFPATH path to invoked (outermost) INF
117: ;
118: ; ** 23. STF_CONTEXTINFNAME path to currently executing INF
119: ;
120: ; ** 24. STF_SYS_INIT NO
121: ;
122: ;***********************************************************************
123: ;
124: ;***********************************************************************
125: ; Variables required for NCPA support
126: ;***********************************************************************
127: ;
128: ; 1) NTN_RegBase Universal Registry key name prefix.
129: ; BUGBUG: Archaic?
130: ;
131: ; 2) NTN_ServiceBase Top of Services Tree
132: ; 3) NTN_ServiceKeyName Name of service; no spaces/delimiters
133: ; allowed; may be NULL for new installations
134: ; 4) NTN_RegProduct name of HARDWARE or SOFTWARE Registry
135: ; key for component; will be null ("") for
136: ; new installations.
137: ;
138: ; 5) NTN_InstallMode "install", "deinstall", "configure",
139: ; "bind"
140: ;
141: ; 6) NTN_Origination "ncpa", "install"
142: ;
143: ; 7) NTN_Infname name (pathless) of INF file to execute
144: ; There are two special "name tokens":
145: ;
146: ; "NTLANMAN_Adapter" and
147: ; "NTLANMAN_Software"
148: ;
149: ; If the INF name is equal to one of these,
150: ; then the appropriate section of
151: ; NTLANMAN.INF is shelled to.
152: ;
153: ; 8) NTN_InstallPhase "primary","secondary".
154: ; "primary" implies main installation;
155: ; "secondary" implies product add-on installation.
156: ;
157: ;
158: ;
159: ;
160: ;***********************************************************************
161:
162:
163: [StfVariableDetect]
164:
165: STF_PROCESSOR = "" ? $(!LIBHANDLE) GetProcessor
166: STF_PLATFORM = "I386" ; BUGBUG-- How to establish?
167: ;
168: ;
169: ; Language to Use For interaction with user
170: ;
171:
172: STF_LANGUAGE = "" ? $(!LIBHANDLE) GetLanguage
173: LanguageList = ^(LanguageID, 1)
174: ;
175: ; Destination NT Directory relative to root of NT Drive
176: ;
177: STF_WINDOWSPATH = "" ? $(!LIBHANDLE) GetWindowsNtDir
178: STF_WINDOWSSYSPATH = "" ? $(!LIBHANDLE) GetWindowsNtSysDir
179: STF_NTPATH = $(!STF_WINDOWSPATH)
180: STF_COMPUTERNAME = "" ? $(!LIBHANDLE) GetMyComputerName
181: STF_BUSTYPE = "" ? $(!LIBHANDLE) GetMyBusType
182:
183: [StfVariableSyms]
184:
185: ProcessorID_I386 = I386
186: ProcessorID_I486 = I486
187: ProcessorID_I586 = I586
188: ProcessorID_R4000 = R4000
189: ProcessorID_Alpha = Alpha_AXP
190: PlatformID_I386 = I386
191: PlatformID_Mips = Mips
192: PlatformID_Alpha = Alpha
193:
194: ;
195: ; Version Information
196: ;
197:
198: STF_PRODUCT = WINNT ; BUGBUG-- Determine from Registry
199:
200: STF_USERNAME = "" ; BUGBUG-- Determine from API calls
201:
202: STF_INSTALL_MODE = "CUSTOM" ; It's always CUSTOM from the NCPA
203:
204: STF_UPDGRADE = NO ; BUGBUG-- TBI
205:
206: STF_NCDETECT = NO ; disable netcard detection
207: STF_NCOPTION = "" ; set defaults for other
208: STF_NCDETCARD = 99999 ; global netcard variables
209: STF_NCDETINFO = {} ; No detect information
210: STF_NC_PARAMS = {} ;
211: STF_NC_PNAMES = {} ;
212: STF_SRCDIR_KEYED = "" ; source dir as entered
213: STF_SRCDIR_USED = "" ; source dir as used
214: STF_SRCDIR_OVERRIDE = "" ; source dir override (see UTILITY.INF)
215: STF_SRCDIR_WINNT = "" ; WINNT override source path
216:
217: ; Establish the error dialog template overrides.
218:
219: STF_TEMPLATE_CRITERR = "CRITERR2"
220: STF_TEMPLATE_NONCRITERR = "NONCRITERR2"
221:
222: ;
223: ; DOS VDM Setup / OS2 Subsystem Setup
224: ;
225: STF_INSTALLED_OS = {} ? $(!LIBHANDLE) GetInstalledOSNames
226:
227: FatalErrorIndex = 1
228:
229: !Exit_Code = 0
230:
231: [DoAskOemsetupSource]
232:
233: read-syms DoAskUpgradeSrcDlgText$(!STF_LANGUAGE)
234: shell "subroutn.inf" DoAskSourceEx $($0) $(DlgText)
235: Return $($R0) $($R1) $($R2) $($R3)
236:
237:
238: ;***********************************************************************
239: ;
240: ; Primary control section.
241: ;
242: ;***********************************************************************
243:
244: [Shell Commands]
245: ;
246: ; Initialization code borrowed from SETUP.INF. Establish all the
247: ; STF_ variables not already created by initialization (in INIT.C).
248: ;
249: set-title "Windows NT Setup"
250: ;
251: ; Changing the literal 0 to a 1 will turn Debug-Output on.
252: ;
253: Set !G:DebugOutputControl = 0
254:
255: LoadLibrary "x" $(!STF_CWDDIR)setupdll.dll !LIBHANDLE
256: LoadLibrary "y" $(!STF_CWDDIR)ncpa.cpl !NCPA_HANDLE
257: ;
258: ; Establish the help IDs and help file.
259: ;
260: Shell "subroutn.inf" ReadSetupHelpIds
261: SetHelpFile "setupnt.hlp" $(!MinimumID) $(!MaximumID)
262:
263: set-subst LF = "\n"
264: StartWait
265: ;
266: ; Reestablish the SETUP STF_ variables as best we can.
267: ;
268: read-syms StfVariableSyms
269: read-syms StfVariableDetect
270: detect StfVariableDetect
271: Set !STF_NTPATH = $(!STF_WINDOWSSYSPATH)
272: ;
273: ; Get the product type from the registry
274: ;
275: OpenRegKey $(!REG_H_LOCAL) "" "System\CurrentControlSet\Control\ProductOptions" 33554432 KeyProductOption
276: ifstr(i) $(KeyProductOption) != ""
277: GetRegValue $(KeyProductOption) "ProductType" ProductTypeList
278: set TempProductType = *($(ProductTypeList),4)
279: ifstr(i) $(TempProductType) == "winnt"
280: set !STF_PRODUCT = WINNT
281: else-ifstr(i) $(TempProductType) == "lanmannt"
282: set !STF_PRODUCT = LANMANNT
283: endif
284: CloseRegKey $(KeyProductOptions)
285: endif
286:
287: ;
288: ; Determine the source location. If STF_SRCDIR is already set, use it.
289: ; Otherwise, try to extract it from the NCPA's home location in the Registry.
290: ;
291: ; Also check to see if this is an IDW installation. If so, all file copies
292: ; are suppressed on the theory that the tree copy operation has placed all
293: ; the binaries into %SystemRoot% already.
294: ;
295: Debug-Output "NCPASHEL.INF: STF_SRCDIR is "$(!STF_SRCDIR)
296:
297: OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\Microsoft\Ncpa\CurrentVersion" 33554432 KeyNcpa
298:
299: Set !STF_SRCDIR = ""
300: Set !STF_IDW = FALSE
301:
302: Ifstr(i) $(KeyNcpa) != ""
303: GetRegValue $(KeyNcpa) "IDW" IdwValueList
304: Set IdwValue = *($(IdwValueList),4)
305: Ifint $(IdwValue) > 0
306: Debug-Output "NCPASHEL.INF: IDW Installation"
307: Set !STF_IDW = TRUE
308: Endif
309: CloseRegKey $(KeyNcpa)
310: Else
311: Debug-Output "NCPASHEL.INF: COULDN'T OPEN NCPA KEY!"
312: Endif
313:
314: OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\Microsoft\Windows Nt\CurrentVersion" $(!REG_KEY_READ) KeyNt
315: Ifstr(i) $(KeyNt) != ""
316: GetRegValue $(KeyNt) "SourcePath" SourcePathValue
317: Set !STF_SRCDIR = *($(SourcePathValue),4)
318: Debug-Output "NCPASHEL.INF: SourcePath retrieved is "$(!STF_SRCDIR)
319: CloseRegKey $(KeyNt)
320: Endif
321:
322: Ifstr(i) $(!STF_SRCDIR) == ""
323: Set !STF_SRCDIR = "A:\"
324: Endif
325: ;
326: ; Extract the "setup in progress" variable from the Registry;
327: ; set global variables accordingly. If "setup in progress" flag is
328: ; on, set !NTN_InstallPhase to "primary", then look for the
329: ; "winnt source path" value; if found, set !STF_SRCDIR_WINNT.
330: ;
331: Set SetupInp = 0
332: Set !NTN_InstallPhase = secondary
333:
334: OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\Setup" $(!REG_KEY_READ) KeySetup
335: Ifstr(i) $(KeySetup) != ""
336: GetRegValue $(KeySetup) "SystemSetupInProgress" SetupInpValue
337: Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
338: Set SetupInp = *($(SetupInpValue),4)
339: Debug-Output "NCPASHEL.INF: SetupInp = "$(SetupInp)
340: Endif
341: Ifint $(SetupInp) == 1
342: Set !NTN_InstallPhase = primary
343: GetRegValue $(KeySetup) "WinntPath" SetupPathValue
344: Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
345: Set !STF_SRCDIR_WINNT = *($(SetupPathValue),4)
346: Debug-Output "NCPASHEL.INF: STF_SRCDIR_WINNT = "$(!STF_SRCDIR_WINNT)
347: Endif
348: Endif
349: CloseRegKey $(KeySetup)
350: Endif
351:
352: Debug-Output "NCPASHEL.INF: Setup phase = "$(!NTN_InstallPhase)
353: ;
354: ; Enable the netcard detection functions if necessary.
355: ; Don't check for errors, since each INF will report
356: ; the error if it really needs to use detection.
357: ;
358: ; We start detection for installations and configurations
359: ; exceptfor final review INFs, which are marked as installations.
360: ;
361: Ifstr(i) $(NTN_InfSection) == BindingsReview
362: Goto skipdetection
363: Endif
364: Ifstr(i) $(NTN_InstallMode) == install
365: Goto startdetection
366: Endif
367: Ifstr(i) $(NTN_InstallMode) == configure
368: Goto startdetection
369: Endif
370:
371: Goto skipdetection
372:
373: startdetection = +
374:
375: Debug-Output "NCPASHEL.INF: Enable netcard detection from NCPA.CPL"
376: Shell "NCPARAM.INF" Param_ControlDetection DTSTART
377:
378: skipdetection = +
379: ;
380: ; BUGBUG The processor type is currently not detected properly.
381: ; So temporarily forcibly set the processor type
382: ;
383: set STF_PROCESSOR = $(ProcessorID_I386)
384:
385: ;
386: ; Check processor type, see if it is supported, if so what platform does it
387: ; belong to. Set also the SYS variable to denote which set of sources we
388: ; are installing from
389: ;
390: ifstr(i) $(STF_PROCESSOR) == $(ProcessorID_I386)
391: set STF_PLATFORM = $(PlatformID_I386)
392: set SYS = $(ProcessorID_I386)
393: else-ifstr(i) $(STF_PROCESSOR) == $(ProcessorID_I486)
394: set STF_PLATFORM = $(PlatformID_I386)
395: set SYS = $(ProcessorID_I386)
396: else-ifstr(i) $(STF_PROCESSOR) == $(ProcessorID_I586)
397: set STF_PLATFORM = $(PlatformID_I386)
398: set SYS = $(ProcessorID_I386)
399: else-ifstr(i) $(STF_PROCESSOR) == $(ProcessorID_R4000)
400: set STF_PLATFORM = $(PlatformID_Mips)
401: set SYS = $(ProcessorID_R4000)
402: else-ifstr(i) $(STF_PROCESSOR) == $(ProcessorID_Alpha)
403: set STF_PLATFORM = $(PlatformID_Alpha)
404: set SYS = $(ProcessorID_Alpha)
405: else
406: set STF_PLATFORM = $(PlatformID_I386)
407: set SYS = $(ProcessorID_I386)
408: endif
409:
410: Ifstr(i) $(!STF_LANGUAGE) != "ENG" ; BUGBUG: temporary
411: Debug-Output "NCPASHEL: Language not set to English; resetting"
412: !STF_LANGUAGE = "ENG"
413: Endif
414:
415: read-syms ProgressCopy$(!STF_LANGUAGE)
416:
417: ;----------------------------------------------------------------------
418: ;
419: ; STF_ variables are now established.
420: ;
421: ; Establish by default the NCPA variables which the NCPA didn't.
422: ;
423: ;----------------------------------------------------------------------
424:
425: Ifstr(i) $(!NTN_RegBase) == ""
426: set !NTN_RegBase = ""
427: Endif
428:
429: set !NTN_ServiceBase = "SYSTEM\CurrentControlSet\SERVICES"
430: ;
431: ; Default the InstallMode to "configure"
432: ;
433: Ifstr(i) $(!NTN_InstallMode) == ""
434: Debug-Output "NCPASHEL:!NTN_InstallMode was not defined!"
435: set !NTN_InstallMode = "configure"
436: Endif
437:
438: Ifstr(i) $(!NTN_SoftwareBase) == ""
439: ; BUGBUG
440: ; set !NTN_SoftwareBase = "SOFTWARE\Description"
441: set !NTN_SoftwareBase = "SOFTWARE"
442: Endif
443:
444: set !NTN_Origination = "ncpa"
445:
446: ;----------------------------------------------------------------------
447: ;
448: ; NTN_ variables are now established.
449: ;
450: ; Prepare to Shell to target INF
451: ;
452: ;----------------------------------------------------------------------
453:
454: Ifstr(i) $(!NTN_Infname) == ""
455: goto fatalnoinfname
456: Endif
457:
458: Ifstr(i) $(!NTN_InfSection) == ""
459: Set !NTN_InfSection = "InstallOption"
460: Endif
461:
462: ;------------------------------------------------------------------------
463: ;
464: ; Shell to the given section of the component INF. If this is an
465: ; update/upgrade, ask the user for the location of the file.
466: ;
467: ;------------------------------------------------------------------------
468: ifstr(i) $(!NTN_InstallMode) == "Update"
469: Debug-Output "NCPASHEL.INF: Upgrade mode"
470: ;
471: ; First, ask for oemsetup.inf location
472: ; Then, pass the information to the inf file
473: ;
474: Shell "" DoAskOemsetupSource $(!STF_SRCDIR)
475:
476: Ifstr(i) $($ShellCode) != $(!SHELL_CODE_OK)
477: goto shellerror
478: Endif
479:
480: ifstr(i) $($R0) == STATUS_SUCCESSFUL
481: set !STF_SRCDIR = $($R1)
482: else-ifstr(i) $($R0) == STATUS_USERCANCEL
483: set Exit_Code = 1
484: goto end
485: else
486: set Exit_Code = 2
487: goto end
488: endif
489:
490: ;
491: ; Change NTN_Infname to refer to the OEMSETUP.INF file
492: ; pointed to by the user.
493: ;
494: Set !NTN_Infname = $(!STF_SRCDIR)oemsetup.inf
495: endif
496:
497: Ifstr(i) $(!NTN_InstallMode) == install
498: set AddCopy = YES
499: set DoCopy = YES
500: set DoConfig = YES
501: Else
502: set AddCopy = NO
503: set DoCopy = NO
504: set DoConfig = NO
505: Endif
506:
507: Debug-Output "NCPASHEL.INF: Shell to "$(!NTN_Infname)
508:
509: Shell $(!NTN_Infname) $(!NTN_InfSection) +
510: $(!STF_LANGUAGE) $(!NTN_InfOption) +
511: $(!STF_SRCDIR) $(AddCopy) $(DoCopy) $(DoConfig)
512:
513: Ifstr(i) $($ShellCode) != $(!SHELL_CODE_OK)
514: Debug-Output "NCPASHEL.INF: SHELL ERROR: "$($ShellCode)
515: goto shellerror
516: Endif
517:
518: Debug-Output "NCPASHEL: INF return: "$($R0)
519:
520: Ifstr(i) $($R0) == STATUS_SUCCESSFUL
521: set Exit_Code = 0
522: else-ifstr(i) $($R0) == STATUS_USERCANCEL
523: set Exit_Code = 1
524: else-ifstr(i) $($R0) == STATUS_NO_EFFECT
525: set Exit_Code = 3
526: else-ifstr(i) $($R0) == STATUS_REBIND
527: set Exit_Code = 4
528: else-ifstr(i) $($R0) == STATUS_REBOOT
529: set Exit_Code = 5
530: else
531: set Exit_Code = 2
532: Endif
533:
534: EndWait
535:
536: goto end
537:
538: ;------------------------------------------------------------------
539: ; Fatal error display functions
540: ;------------------------------------------------------------------
541: shellerror = +
542: read-syms ShellError$(!$ShellCode)$(!STF_LANGUAGE)
543: Debug-Output "NCPASHEL: SHELL ERROR: "$(Error)
544: goto fatal
545:
546: fatalnoinfname = +
547: set FatalErrorIndex = 2
548: goto fatalmsg
549:
550: fatalmsg = +
551: read-syms FatalError$(FatalErrorIndex)$(!STF_LANGUAGE)
552: Debug-Output "NCPASHEL: FATAL ERROR: "$(Error)
553: goto fatal
554:
555: fatal = +
556: read-syms FatalDlg$(!STF_LANGUAGE)
557: ui start "FatalError"
558: goto end
559:
560: ;------------------------------------------------------------------
561: ; Exit NCPASHEL.INF; return to NCPA
562: ;------------------------------------------------------------------
563: end = +
564: Ifstr(i) $(!LIBHANDLE) != ""
565: LibraryProcedure DontCare, $(!LIBHANDLE), DeleteAllConnections
566: Endif
567:
568: Debug-Output "NCPASHEL: NCPASHEL: returning to NCPA"
569: goto term
570: ;
571: ; Immediate exit
572: ;
573: term = +
574: Debug-Output "NCPASHEL: Bye."
575: exit
576:
577: ;***********************************************************************
578: ;
579: ; End of NCPASHEL.INF
580: ;
581: ;***********************************************************************
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.