; ; Cairo.INF ; ; ; Temporary INF file where all Cairo-specific setup commands live. ; ; [DoCairoInitialization] set InitializationStatus = STATUS_SUCCESSFUL ; ; CAIRO BUGBUG: Initialize Cairo SCM ; ; Set PushDebugLevel = !G:DebugOutputControl ; set !G:DebugOutputControl = DebugCairoSteps ifstr(i) $(!STF_PRODUCT) != "WINNT" shell "cairo.inf" GetDrive ifstr(i) $($R0) != "STATUS_SUCCESSFUL" Debug-Output "NTCAIRO.INF: Failed to get OFS drive" read-syms FatalError20$(!STF_LANGUAGE) shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "FATAL" $(Fatal) ; goto setupnotdone set InitializationStatus = STATUS_FAILED Return $(InitializationStatus) Endif Debug-Output "CAIRO.INF: Starting RecOM/OFS" ; ; CAIRO BUGBUG: variable made public ; Set !ObjDrive = $($R1) shell "cairo.inf" RegSetEnvVar "CairoDrv" $(!ObjDrive) Debug-Output "NTCAIRO.INF: ObjDrive = "$(!ObjDrive) ; ; Remove the label from the drive so that format.com won't ask for it ; Debug-Output "NTCAIRO.INF: running label.exe" RunProgram RC "" "" $(!STF_WINDOWSSYSPATH)"\cmd.exe" /c $(!STF_WINDOWSSYSPATH)"\cmd.exe" /c $(!STF_WINDOWSSYSPATH)"\remlabel.cmd" $(!ObjDrive) Debug-Output "NTCAIRO.INF: label returned "$(RC) Shell "subroutn.inf" PushBillboard NETSTATUSDLG "Running format on "$(!ObjDrive) RunProgram RC "" "" $(!STF_WINDOWSSYSPATH)"\format.com" $(!ObjDrive) /fs:ofs /q Debug-Output "NTCAIRO.INF: Format returned "$(RC) Install Install-Create-Cairo-Dir Debug-Output "NTCAIRO.INF: Created directory "$(!ObjDrive)"\cairo" LoadLibrary "x" $(!STF_CWDDIR)setupdll.dll TMPHANDLE LibraryProcedure STATUS, $(TMPHANDLE), Delnode $(!ObjDrive)"\cairo\ds" FreeLibrary $(TMPHANDLE) Shell "subroutn.inf" PopBillboard Debug-Output "NTCAIRO.INF: Setting OLE to autostart" ; Moved to somewhere else ; shell "registry.inf" ModifyServicesEntry "OLE" $(!SERVICE_AUTO_START) ; shell "registry.inf" ModifyServicesEntry "CiFilter" $(!SERVICE_AUTO_START) ; set !G:DebugOutputControl = PushDebugLevel else Set !ObjDrive = $(!STF_NTDRIVE) Debug-Output "NTCAIRO.INF: ObjDrive = "$(!ObjDrive) shell "cairo.inf" RegSetEnvVar "CairoDrv" $(!ObjDrive) endif Debug-Output "NTCAIRO.INF: Initializing Cairo file" ifstr(i) $(!STF_NTPATH) == "" Debug-Output "!STF_NTPATH is NULL? "$(!STF_NTPATH) ifstr(i) $(!STF_WINDOWSPATH) == "" Debug-Output "WINDOWSPATH is NULL, too? "$(!STF_WINDOWSPATH) Else set CairoInstFile = $(!STF_WINDOWSPATH)"\CairoStd.ini" Endif Else set CairoInstFile = $(!STF_WINDOWSPATH)"\CairoStd.ini" Endif Debug-Output "NTCAIRO.INF: CairoInstFile set to: "$(CairoInstFile) shell "cairo.inf" UpdateCairoIniFile $(CairoInstFile) "Key" "Value" Debug-Output "NTCAIRO.INF: UpdateCairoInitFile returned "$($R0) shell "cairo.inf" UpdateCairoIniFile $(CairoInstFile) "ObjDrive" $(!ObjDrive) Return $(InitializationStatus) [GetCairoParams] set GetCairoParamsStatus = STATUS_FAILED ; set PushDebugLevel = !G:DebugOutputControl ; set !G:DebugOutputControl = DebugCairoSteps Debug-Output "NTCAIRO.INF: Getting uplevel password" ; shell "cairo.inf" GetDomainPassword ; ifstr(i) $($R0) == "STATUS_SUCCESSFUL" ; Set CairoDomainPassword = $($R1) ; else-ifstr(i) $($R0) == "STATUS_USE_DOWNLEVEL" ; Set CairoDomainPassword = $(!STF_PASSWORD) ; else ; goto SetupNotDone ; Endif Set !CairoDomainPassword = $(!STF_USERNAME) Debug-Output "NTCAIRO.INF: uplevel PW ="$(!CairoDomainPassword) Debug-Output "NTCAIRO.INF: Get Installation type" shell "cairo.inf" GetCairoInstallType ifstr(i) $($R0) == "STATUS_SUCCESSFUL" set !STF_DOMAIN_ROLE = $($R1) ifstr(i) $(!STF_PRODUCT) != "WINNT" ifstr(i) $(!STF_DOMAIN_ROLE) == "DC" set !STF_PRODUCT = "LANMANNT" else set !STF_PRODUCT = "SERVERNT" endif endif else goto endGetCairoParams Endif ifstr(i) $(!STF_DOMAIN_ROLE) == "DC" ; ; Get DC type shell "cairo.inf" GetDCType ifstr(i) $($R0) != "STATUS_SUCCESSFUL" goto endGetCairoParams endif ifstr $($R1) == "" goto endGetCairoParams else ; ; CAIRO BUGBUG: Variable made public ; set !DCType = $($R1) endif Debug-Output "NTCAIRO.INF: DC type is "$(!DCType)"." Endif ifstr(i) $(!STF_DOMAIN_ROLE) != STANDALONE Debug-Output "NTCAIRO.INF: Not standalone, so setting up domain" ; ; CAIRO BUGBUG: variable made global ; Set !AccountFile = $(!STF_WINDOWSSYSPATH)"\accounts.inf" Debug-Output "NTCAIRO.INF: Account file "$(!AccountFile) ; shell $(!AccountFile) setup $(!STF_USERNAME) shell "cairo.inf" GetCairoDomainAndOuLists ; ifint $($ShellCode) != $(!SHELL_CODE_OK) ; shell "cairo.inf" MsgBox "File: "$(!AccountFile)" is missing."+ ; "User's DomainName must be entered manually" ; else-ifstr(i) $($R0) != STATUS_SUCCESSFUL ; shell "cairo.inf" MsgBox "Error: "+$($R0)" Accessing: "+$(!AccountFile)+ ; "User's DomainName must be entered manually" ; else ; ; CAIRO BUGBUG: variable made public ; set !CairoDomainList = $($R1) set !CairoOuList = $($R2) Debug-Output "NTCAIRO.INF: CairoDomainList = "$(!CairoDomainList) Debug-Output "NTCAIRO.INF: CairoOuList = "$(!CairoOuList) ; endif shell "cairo.inf" GetCairoDomainPath $(!CairoDomainList) $(!CairoOuList) ifstr(i) $($R0) != "STATUS_SUCCESSFUL" goto endGetCairoParams endif ; ; CAIRO BUGBUG: variable made public ; set !CairoDomainName = $($R1) set !CairoOuName = $($R2) Debug-Output "NTCAIRO.INF: CairoDomainName = "$(!CairoDomainName) Debug-Output "NTCAIRO.INF: CairoOuName = "$(!CairoOuName) ifstr $(!CairoDomainName) == "" shell "cairo.inf" ErrMsg "Network domain not set! Aborting setup." goto endGetCairoParams endif ; Debug-Output "NTCAIRO.INF: setting workgroup from "$(CairoDomainName) ; RunProgram RC "" "" $(!STF_WINDOWSSYSPATH)"\SetDom.exe" $(CairoDomainName) Endif ; set !G:DebugOutputControl = PushDebugLevel set GetCairoParamsStatus = STATUS_SUCCESSFUL endGetCairoParams = + ; Return $(GetCairoParamsStatus) ;[DoCairoSetup] read-syms GeneralConstants ; read-syms BaseGeneralConstants ; ; ; ; LoadLibrary "x" $(!STF_CWDDIR)\ncpa.cpl NCPAHANDLE ; LibraryProcedure NCPA_RESULT $(NCPAHANDLE), CPlSetup $(!STF_HWND),+ ; STARTSVC, "OLE" ; FreeLibrary $(NCPAHANDLE) set DoCairoSetupStatus = STATUS_FAILED ; set PushDebugLevel = !G:DebugOutputControl ; set !G:DebugOutputControl = DebugCairoSteps Debug-Output "NTCAIRO.INF: Disabling Netlogon" LoadLibrary "x" $(!STF_CWDDIR)setupdll.dll TMPHANDLE LibraryProcedure DontCare, $(TMPHANDLE), SetupChangeServiceConfig, NetLogon,+ $(SERVICE_NO_CHANGE), 3, $(SERVICE_NO_CHANGE), "", "", "", "", "", "" FreeLibrary $(TMPHANDLE) Debug-Output "NTCAIRO.INF: Initializing Cairo file" ifstr(i) $(!STF_NTPATH) == "" Debug-Output "!STF_NTPATH is NULL? "$(!STF_NTPATH) ifstr(i) $(!STF_WINDOWSPATH) == "" Debug-Output "WINDOWSPATH is NULL, too? "$(!STF_WINDOWSPATH) Else set CairoInstFile = $(!STF_WINDOWSPATH)"\CairoStd.ini" Endif Else set CairoInstFile = $(!STF_WINDOWSPATH)"\CairoStd.ini" Endif Debug-Output "NTCAIRO.INF: CairoInstFile set to: "$(CairoInstFile) ; shell "cairo.inf" UpdateCairoIniFile $(CairoInstFile) "Key" "Value" ; Debug-Output "NTCAIRO.INF: UpdateCairoInitFile returned "$($R0) shell "cairo.inf" UpdateCairoIniFile $(CairoInstFile) "InstallType" $(!STF_DOMAIN_ROLE) shell "cairo.inf" UpdateCairoIniFile $(CairoInstFile) "UserName" $(!STF_USERNAME) shell "cairo.inf" UpdateCairoIniFile $(CairoInstFile) "DomainPassword" $(!CairoDomainPassword) shell "cairo.inf" UpdateCairoIniFile $(CairoInstFile) "MachineName" $(!STF_COMPUTERNAME) shell "cairo.inf" UpdateCairoIniFile $(CairoInstFile) "MachinePassword" $(!STF_COMPUTERNAME) shell "cairo.inf" UpdateCairoIniFile $(CairoInstFile) "MachineAddress" $(!STF_COMPUTERNAME) ; shell "cairo.inf" UpdateCairoIniFile $(CairoInstFile) "ObjDrive" $(!ObjDrive) shell "cairo.inf" UpdateCairoIniFile $(CairoInstFile) "InstallDir" "Cairo" shell "cairo.inf" UpdateCairoIniFile $(CairoInstFile) "DownlevelPassword" $(!STF_PASSWORD) shell "cairo.inf" UpdateCairoIniFile $(CairoInstFile) "DownlevelDomain" $(!STF_NTDOMAIN) Debug-Output "NTCAIRO.INF: Setup Installtype, Username, etc." ifstr(i) $(!STF_DOMAIN_ROLE) != STANDALONE shell "cairo.inf" UpdateCairoIniFile $(CairoInstFile) "CairoDomainName" $(!CairoDomainName) shell "cairo.inf" UpdateCairoIniFile $(CairoInstFile) "OuName" $(!CairoOuName) Endif ifstr $(!STF_DOMAIN_ROLE) == "DC" shell "cairo.inf" UpdateCairoIniFile $(CairoInstFile) "AdminGroupName" "AdminGroup" shell "cairo.inf" UpdateCairoIniFile $(CairoInstFile) "BackupGroupName" "BackupGroup" shell "cairo.inf" UpdateCairoIniFile $(CairoInstFile) "DCType" $(!DCType) endif Debug-Output "NTCAIRO.INF: running cairostd.exe" Shell "subroutn.inf" PushBillboard NETSTATUSDLG "Setting up base cairo " RunProgram RC "" "" $(!STF_WINDOWSSYSPATH)"\cairostd.exe" $(CairoInstFile) Shell "subroutn.inf" PopBillboard Debug-Output "cairostd.exe returned "$(RC) ifint $(RC) != 0 shell "cairo.inf" MsgBox "Standalone returned "$(RC). goto CairoSetupNotDone endif ; RunProgram RC "" "" $(!STF_WINDOWSSYSPATH)"\credini.exe" -u $(!STF_USERNAME) -p ""$(!STF_PASSWORD)"" ; ; ifstr(i) $(!STF_DOMAIN_ROLE) == STANDALONE ; set Status = STATUS_SUCCESS ; goto CairoSetupOuttaHere ; EndIf set DoReplicatedDC = 0 ifstr(i) $(!STF_DOMAIN_ROLE) == SERVER set DoJoinDom = 1 set DoMakeDc = 0 Endif ifstr(i) $(!STF_DOMAIN_ROLE) == WORKSTATION set DoJoinDom = 1 set DoMakeDc = 0 EndIf ifstr(i) $(!STF_DOMAIN_ROLE) == DC ifcontains(i) $(!DCType) in {FirstDC} set DoJoinDom = 0 set DoMakeDc = 1 Else ; should be one of {ReplicaDC} set DoJoinDom = 1 set DoMakeDc = 1 set DoReplicatedDC = 1 Endif Endif ifint $(DoJoinDom) == 1 Debug-Output "NTCAIRO.INF: Trying to join domain "$(!CairoDomainName) Shell "subroutn.inf" PushBillboard NETSTATUSDLG "Setting up a Workstation...." RunProgram RC "" "" $(!STF_WINDOWSSYSPATH)"\joindom.exe" $(CairoInstFile) shell "subroutn.inf" PopBillboard ifint $(RC) != 0 ifint $(RC) == 8 shell "cairo.inf" MsgBox "Workstation Setup Failed. "+ "This machine has no account on the DC. "+ "Standalone Cairo is installed, but you will need to "+ "run joindom once you have an account." else shell "cairo.inf" MsgBox "Standalone Cairo is installed, "+ "but Workstation Setup failed. joindom returned "$(RC). endif goto CairoSetupDone endif Endif ifint $(DoMakeDc) == 1 Debug-Output "NTCAIRO.INF: Running makedc (run for cover)" Shell "subroutn.inf" PushBillboard NETSTATUSDLG "Setting up a DC..." RunProgram RC "" "" $(!STF_WINDOWSSYSPATH)"\makedc.exe" $(CairoInstFile) Shell "subroutn.inf" PopBillboard ifint $(RC) != 0 shell "cairo.inf" MsgBox "MakeDC failed with error "$(RC) goto CairoSetupOuttaHere Endif ; ifstr(i) $(!STF_DOMAIN_ROLE) == "DC" ; RunProgram RC "" "" $(!STF_WINDOWSSYSPATH)"\SetDom.exe" -sid $(CairoDomainName) ; endif ifint $(DoReplicatedDC) == 0 Shell "subroutn.inf" PushBillboard NETSTATUSDLG "Creating account objects..." ; RunProgram RC "" "" $(!STF_WINDOWSSYSPATH)"\dsmgr.exe" -file $(!AccountFile) Shell "subroutn.inf" PopBillboard ifint $(RC) != 0 shell "cairo.inf" MsgBox "DSMgr failed with error "$(RC) goto CairoSetupOuttaHere Endif ifstr(i) $(!CairoDomainName) == "\msft" RunProgram RC "" "" $(!STF_WINDOWSSYSPATH)"\cmd.exe" /c $(!STF_WINDOWSSYSPATH)\mountdl.cmd Endif Endif ; Create the global catalog ; ; SKIP creating the Global Catalog until the new summary catalog ; support catches up ; ; Shell "subroutn.inf" PushBillboard NETSTATUSDLG "Creating global catalog..." ; ; RunProgram RC "" "" $(!STF_WINDOWSSYSPATH)"\gcconfig.exe" -configure ; Shell "subroutn.inf" PopBillboard ; ; We don't carre about error condition. gcconfig.exe will take care of it ; ; ifint $(RC) != 0 ; shell "cairo.inf" MsgBox "GCConfig failed with error "$(RC) ; goto CairoSetupOuttaHere ; Endif Endif CairoSetupDone = + ; ; setup alert system service ; shell "cairo.inf" DoAlertSystemSetup CairoSetupOuttaHere = + set DoCairoSetupStatus = STATUS_SUCCESSFUL Return $(DoCairoSetupStatus) ; goto $(retaddr) CairoSetupNotDone = + Return $(DoCairoSetupStatus) [DoCairoSetup] Return STATUS_SUCCESSFUL [Install-Create-Cairo-Dir] set STF_VITAL = "" CreateDir $(!ObjDrive)"\cairo" exit [GeneralConstants] Exit_Code = 0 BillboardVisible = 0 ; ; Return codes; Exit_Code is set to one of these ; ExitCodeOk = 0 ExitCodeCancel = 1 ExitCodeFatal = 2 ; ; Program flow control variables. ; retaddr = "" callresult = 0 from = "" to = "" ; ; Location of netcard product information ; NetworkCardKeyName = $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards" KeyNull = "" MAXIMUM_ALLOWED = 33554432 SERVICE_NO_CHANGE = 4294967295 KeyInfo = {} NoTitle = 0 UtilityInf = "UTILITY.INF" NcParamInf = "NCPARAM.INF" RasAutoInstall = 0 ComputerNameKeyName = "SYSTEM\CurrentControlSet\Control\ComputerName" [OfsVars] OfsChoiceList = {} ? $(!SETUPHANDLE) GetHardDriveLetters OfsChoiceFSList = {} ? $(!SETUPHANDLE) GetHardDriveFileSystems OfsChoiceSizeList = <> ? $(!SETUPHANDLE) GetHardDriveTotalSpace [RegistryConstants] MaskAllAccess = 33554432 NoTitle = 0 RegLastError = $(!REG_ERROR_SUCCESS) [RegisterOle2Files] Shell "subroutn.inf" PushBillboard NETSTATUSDLG "Running REGINI on Cairo .reg files ..." Set RegFileList = ^(RegIniFiles,1) ForListDo $(RegFileList) Set RegFiles = $(RegFiles)" "$(!STF_WINDOWSPATH)"\dump\"*($(RegFileList), $(#)) EndForListDo Debug-Output "NTCAIRO.INF: Reg file list is "$(RegFiles) ; RunProgram RC "" "" $(!STF_WINDOWSSYSPATH)"\cmd.exe" /c for %i in (%SystemRoot%\dump\*.reg) do regini %i >> %systemroot%\cairoreg.out RunProgram RC "" "" $(!STF_WINDOWSPATH)"\idw\regini.exe" $(RegFiles) Debug-Output "NTCAIRO.INF: Regini returned "$(RC) Shell "subroutn.inf" PopBillboard Return 0 [GetCairoInstallType] CairoInstallType =+ set Status = STATUS_FAILED ifstr(i) $(!STF_PRODUCT) == Winnt read-syms GCITWK$(!STF_LANGUAGE) else read-syms GCITAS$(!STF_LANGUAGE) endif ui start "Diskette" ifstr(i) $(DLGEVENT) == "CONTINUE" ui pop 1 ifstr(i) $(ListItemsOut) == "" set Status = STATUS_USERCANCEL else set CairoOptionChosenText = $(ListItemsOut) set Status = STATUS_SUCCESSFUL goto verify_CairoOption endif else-ifstr(i) $(DLGEVENT) == "BACK" ui pop 1 set Status = STATUS_USERCANCEL goto finish_CairoOption else ui pop 1 set Status = STATUS_FAILED goto finish_CairoOption endif verify_CairoOption = + read-syms VerifyInstallDlg$(!STF_LANGUAGE) ui start "VerifyName" ifstr(i) $(DLGEVENT) == "CONTINUE" set Status = STATUS_SUCCESSFUL ui pop 1 goto finish_CairoOption else-ifstr(i) $(DLGEVENT) == "BACK" ui pop 1 goto CairoInstallType else-ifstr(i) $(DLGEVENT) == "EXIT" shell "subroutn.inf" QueryUserQuit $(!STF_LANGUAGE) ifstr(i) $($R1) == "OK" set Status = STATUS_USERQUIT ui pop 1 goto finish_CairoOption else goto verify_CairoOption endif else ui pop 1 goto finish_CairoOption endif finish_CairoOption = + Return $(Status) $(CairoOptionChosenText) ;$(CairoOptionChosen) [GetPrimaryUser] set Status = STATUS_FAILED set Password = "" set Username = "" set NtDomain = "REDMOND" primuser= + read-syms PrimaryUserDlg$(!STF_LANGUAGE) EndWait ui start "GetUser" ifstr(i) $(DLGEVENT) == "CONTINUE" ifstr(i) *($(EditTextOut), 1) == "" read-syms NonFatalError15$(!STF_LANGUAGE) shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" $(NonFatal) set ReInit = NO goto primuser endif set Name = *($(EditTextOut), 1) ifstr(i) $(STATUS) == NO read-syms NonFatalError14$(!STF_LANGUAGE) shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" $(NonFatal) set ReInit = NO goto primuser endif set Username = *($(EditTextOut), 1) set NtDomain = *($(EditTextOut), 2) ifstr *($(EditTextOut), 3) == *($(EditTextOut), 4) ifstr(i) *($(EditTextOut), 3) == "" read-syms Warning3$(!STF_LANGUAGE) shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "WARNING" $(Warning) ifstr(i) $($R0) != STATUS_SUCCESSFUL else ifstr(i) $($R1) == "OK" else set ReInit = NO goto primuser endif endif endif set Password = *($(EditTextOut), 3) ui pop 1 set Status = STATUS_SUCCESSFUL goto finish_primuser else read-syms NonFatalError10$(!STF_LANGUAGE) shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" $(NonFatal) set DefEditCtl = 1 set ReInit = YES goto primuser endif else-ifstr(i) $(DLGEVENT) == "BACK" read-syms Warning2$(!STF_LANGUAGE) shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "WARNING" $(Warning) ifstr(i) $($R0) != STATUS_SUCCESSFUL ui pop 1 set Status = STATUS_USERCANCEL goto finish_primuser endif ifstr(i) $($R1) == "OK" set Status = STATUS_USERCANCEL ui pop 1 goto finish_primuser else set ReInit = NO goto primuser endif else ui pop 1 goto finish_primuser endif finish_primuser = + StartWait Return $(Status) $(Username) $(Password) $(NtDomain) [GCITENG] DlgType = List DlgTemplate = "OEMSINGLESEL" Caption = "Select Cairo Install Option" DlgText = "Choose Install Type. When in doubt choose "+ "Cairo Standalone option." Continue = "OK" Cancel = "Cancel" Help = "Help" CairoOptions = {DC, Server, Standalone, Workstation} ListItemsIn = $(CairoOptions) ListItemsOut = "Workstation" [GCITWKENG] DlgType = List DlgTemplate = "OEMSINGLESEL" Caption = "Select Cairo Install Option" DlgText = "Choose Install Type. When in doubt choose "+ "Cairo Standalone option." Continue = "OK" Cancel = "Cancel" Help = "Help" CairoOptions = {Standalone, Workstation} ListItemsIn = $(CairoOptions) ListItemsOut = "Workstation" [GCITASENG] DlgType = List DlgTemplate = "OEMSINGLESEL" Caption = "Select Cairo Install Option" DlgText = "Choose Install Type. When in doubt choose "+ "Cairo Standalone option." Continue = "OK" Cancel = "Cancel" Help = "Help" CairoOptions = {DC, Server} ListItemsIn = $(CairoOptions) ListItemsOut = "DC" [VerifyInstallDlgENG] Caption = "Cairo Setup" DlgText = "Please verify that the install type is correct."$(!LF)$(!LF)+ "Don't install a DC unless you are positive."$(!LF)$(!LF)+ "If you would like to change it, choose Change. "+ "Otherwise choose Continue." Static1Label = "Install Type:" Static1Text = $(CairoOptionChosenText) Continue = "Continue" Cancel = "&Change" Help = "&Help" Exit = "E&xit Setup" DlgType = "Info" DlgTemplate = "VERIFY_COMPUTER_NAME" HelpContext = $(!IDH_DB_COMPUTERNAMEV_INS) ;----------------------------------------------------------------------- ; ROUTINE: DoAlertSystemSetup ; ; DESCRIPTION: Call Alert System Service Config routine ; ; INPUTS: none ; ; OUTPUTS: $R0: STATUS_SUCCESSFUL | ; STATUS_FAILED ; ; NOTES: this will call AlertSys.Dll and request further setup from it. ; only during fresh install (NOT YET BUT SOON) ; ; A temporary fix was made to modify the AlertSystem so that it does ; not autostart during GUI mode since it's only dependant, OLE, will not start ; since it's implied dependant (EventLog) is not started so OLE terminates. ; So during GUI mode we then set the AlertSystem to to autostart. ; When 3.51 ships, OLE will then have a dependant of the event log ; and then this temporary change can be undone. ; ; ;------------------------------------------------------------------------ [DoAlertSystemSetup] ; ; initialize vars ; set Status = STATUS_SUCCESSFUL set CFG_HANDLE = "" set NCPA_HANDLE = "" ; ; set AlertSystem to autostart since OLE was not autostart but is now ; shell "registry.inf" ModifyServicesEntry "AlertSystem" $(!SERVICE_AUTO_START) ; ; only do this on fresh install ; ifstr(i) $(!STF_NTUPGRADE) != YES ; ; start the AlertSystem service ; LoadLibrary "x" $(!STF_CWDDIR)\ncpa.cpl NCPA_HANDLE ; but first start the event log, since OLE will not but it does require it ; LibraryProcedure NCPA_RESULT $(NCPA_HANDLE), CPlSetup $(!STF_HWND), STARTSVC, EventLog ; Set STATUS = *($(NCPA_RESULT),1) ; ifstr(i) $(STATUS) != "0" ; Debug-Output "Cairo.INF: [DoAlertSystemSetup] EventLog failed to start" ; endif ; ; now start the alertsystem ; LibraryProcedure NCPA_RESULT $(NCPA_HANDLE), CPlSetup $(!STF_HWND), STARTSVC, AlertSystem Set STATUS = *($(NCPA_RESULT),1) ifstr(i) $(STATUS) != "0" Debug-Output "Cairo.INF: [DoAlertSystemSetup] AlertSystem failed to start" endif FreeLibrary $(NCPA_HANDLE) ; ; call alert config routine ; LoadLibrary "x" $(!STF_CWDDIR)\AlertSys.dll CFG_HANDLE LibraryProcedure Result $(CFG_HANDLE) SetupAlertSystem ifstr(i) *($(Result),1) != SUCCESS Status = STATUS_FAILED Debug-Output "Cairo.INF: [DoAlertSystemSetup] "*($(Result),2) Endif FreeLibrary $(CFG_HANDLE) Endif Return $(Status) ;----------------------------------------------------------------------- ; ROUTINE: GetDrive ; ; DESCRIPTION: Get the drive letter of the object storage location ; ; INPUTS: none ; ; OUTPUTS: $R0: STATUS_SUCCESSFUL | ; STATUS_FAILED | ; STATUS_USERQUIT ; $R1: the drive letter. ;------------------------------------------------------------------------ [GetDrive] set Status = STATUS_FAILED LoadLibrary "x" $(!STF_CWDDIR)setupdll.dll !SETUPHANDLE read-syms OfsVars detect OfsVars FreeLibrary $(!SETUPHANDLE) Set DriveDisplayList = {} ; Choose an existing OFS drive, or the last in the list ForListDo $(OfsChoiceList) Set DriveDisplayList = >($(DriveDisplayList), *($(OfsChoiceList), $(#))" "*($(OfsChoiceFSList), $(#))" "*($(OfsChoiceSizeList), $(#))" MB") ifstr(i) *($(OfsChoiceFSList), $(#)) == "OFS" set OfsDefaultChoice = *($(DriveDisplayList), $(#)) else-ifstr(i) $(OfsDefaultChoice) == "" set OfsDefaultChoice = *($(DriveDisplayList), $(#)) endif EndForListDo display_getdrive_dlg = + read-syms OfsDriveDlg ui start "Diskette" ifstr(i) $(DLGEVENT) == "CONTINUE" ui pop 1 ifstr(i) $(ListItemsOut) == "" set Status = STATUS_USERCANCEL else set DrvIndex = ~($(DriveDisplayList), $(ListItemsOut)) set OfsDriveChosen = *($(OfsChoiceList), $(DrvIndex)) set Status = STATUS_SUCCESSFUL endif goto finish_getdrive else-ifstr(i) $(DLGEVENT) == "BACK" read-syms NonFatalError16$(!STF_LANGUAGE) shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" $(NonFatal) goto display_getdrive_dlg ; ui pop 1 ; set Status = STATUS_USERCANCEL ; goto finish_getdrive else ui pop 1 set Status = STATUS_FAILED goto finish_getdrive endif finish_getdrive = + Return $(Status) $(OfsDriveChosen) [RegSetEnvVar] read-syms RegistryConstants set Status = STATUS_FAILED ; Get the registry handle to the environment string storage. set KeyName = "System\CurrentControlSet\Control\Session Manager\Environment" OpenRegKey $(!REG_H_LOCAL) "" $(KeyName) $(MaskAllAccess) KeyHandle ifint $(RegLastError) != $(!REG_ERROR_SUCCESS) shell "cairo.inf" ErrMsg "Could not get registy key handle for the "+ "Environment. Error = "$(RegLastError) Return $(Status) endif ; Set the environment variable. set ValueInfo = {$($0), $(NoTitle), $(!REG_VT_EXPAND_SZ), $($1)} SetRegValue $(KeyHandle) $(ValueInfo) ifint $(RegLastError) != $(!REG_ERROR_SUCCESS) shell "cairo.inf" ErrMsg "Couldn't set "$($0)" variable! Error = "+ $(RegLastError) goto CloseReg endif ; Read the env var setting just to be sure it was set correctly. GetRegValue $(KeyHandle) $($0) Value ifint $(RegLastError) != $(!REG_ERROR_SUCCESS) shell "cairo.inf" ErrMsg "Couldn't read the "$($0)" value! Error = "+ $(RegLastError) goto CloseReg endif ifstr(i) *($(Value), 4) != $($1) shell "cairo.inf" ErrMsg "Environment variable "$($0)" not set "+ "correctly." goto CloseReg endif set Status = STATUS_SUCCESSFUL CloseReg =+ CloseRegKey $(KeyHandle) Return $(Status) [ErrMsg] read-syms ErrMsgDlg$(!STF_LANGUAGE) ui start "InfoMsg" Return [ErrMsgDlgENG] DlgType = "MessageBox" STF_MB_TITLE = "Cairo Setup Error" STF_MB_TEXT = $($0) STF_MB_ICON = 3 STF_MB_TYPE = 1 STF_MB_DEF = 1 [MsgBox] read-syms MsgBoxDlg$(!STF_LANGUAGE) ui start "InfoMsg" Return [MsgBoxDlgENG] DlgType = "MessageBox" STF_MB_TITLE = "Cairo Setup Message" STF_MB_TEXT = $($0) STF_MB_ICON = 5 STF_MB_TYPE = 1 STF_MB_DEF = 1 ;----------------------------------------------------------------------- ; ROUTINE: GetCairoDomainPath ; ; DESCRIPTION: Get the user's network domain name. ; ; INPUTS: The global var CairoDomainPath ; ; OUTPUTS: $R0: STATUS_SUCCESSFUL | ; STATUS_FAILED | ; STATUS_USERQUIT ; $R1: the domain name. ;------------------------------------------------------------------------ [GetCairoDomainPath] set Status = STATUS_FAILED read-syms CairoDomainDlg$(!STF_LANGUAGE) CairoDomainDlg =+ ui start "QueryDomain" ifstr(i) $(DLGEVENT) == "CONTINUE" set Value = $(Combo1Out) ui pop 1 ifstr $(Value) == "" shell "" ErrMsg "Empty domain name! Please enter a domain name." goto CairoDomainDlg endif install CheckIsInvalidName shell "" DbgMsg "IsInvalidName = "$(IsInvalidName) ifstr(i) $(IsInvalidName) == YES shell "" ErrMsg "Invalid domain name entered. Please reenter." goto CairoDomainDlg endif set Value = $(Combo2Out) ifstr $(Value) == "" shell "" ErrMsg "Empty Ou name! Please enter an Ou name." goto CairoDomainDlg endif install CheckIsInvalidName shell "" DbgMsg "IsInvalidName = "$(IsInvalidName) ifstr(i) $(IsInvalidName) == YES shell "" ErrMsg "Invalid domain name entered. Please reenter." goto CairoDomainDlg endif set Value1 = $(Combo1Out) set Value2 = $(Combo2Out) set Status = STATUS_SUCCESSFUL else-ifstr(i) $(DLGEVENT) == "EXIT" shell "" QueryUserQuit ifstr(i) $($R0) == "OK" ui pop 1 set Status = STATUS_USERQUIT else goto CairoDomainDlg endif endif return $(Status) $(Value1) $(Value2) [CairoDomainDlgENG] Caption = "Enter Cairo Domain Name and Ou Name" Continue = "&Continue" Cancel = "&Cancel" Help = "Helpless" Combo1Label = "&Domain Name:" Combo2Label = "&Ou Name:" DlgType = "MultiCombo" DlgTemplate = "M_SYSTEM_CAIRO" Combo1List = $(!CairoDomainList) Combo2List = $(!CairoOuList) ComboListItemsIn = { Combo1List, Combo2List } ComboListItemsOut = { Combo1Out, Combo2Out } Combo1Out = *( $(Combo1List), 1 ) Combo2Out = *( $(Combo2List), 1 ) DlgText = "Please enter the path of your cairo domain, and Ou name. "+ "Then press Continue." ; Edit1Label = "&Domain Name:" ; EditTextLim = 50 ; EditTextIn = $(!CairoDomainName) ;----------------------------------------------------------------------- ; ROUTINE: UpdateCairoIniFile ; ; DESCRIPTION: Writes out interesting information into a .ini file ; ; INPUTS: $0: Name of ini file ; ; $1: Key name ; ; $2: Key value ; ; OUTPUTS: $R0: STATUS_SUCCESSFUL on completion ;------------------------------------------------------------------------ [UpdateCairoIniFile] set Status = STATUS_SUCCESSFUL install FirstPassUpdIni return $(Status) [FirstPassUpdIni] CreateIniKeyValue $($0), "FirstPass" , $($1), $($2), O, V exit ;----------------------------------------------------------------------- ; ROUTINE: GetDomainPassword ; ; DESCRIPTION: Get the user's network domain password. ; ; INPUTS: None ; ; OUTPUTS: $R0: STATUS_SUCCESSFUL | ; STATUS_FAILED | ; STATUS_USERQUIT ; $R1: the domain password. ;------------------------------------------------------------------------ [GetDomainPassword] set Status = STATUS_FAILED read-syms DPasswordDlg$(!STF_LANGUAGE) PwDlg =+ ui start "QueryPassword" ifstr(i) $(DLGEVENT) == "CONTINUE" ifstr *($(EditTextOut), 1) == *($(EditTextOut), 2) set Value = *($(EditTextOut), 1) ui pop 1 ; Check name validity if non-null. Null is allowed. ifstr $(Value) != "" install CheckIsInvalidName ifstr(i) $(IsInvalidName) == YES shell "" ErrMsg "Invalid Cairo password entered. Please reenter." goto PwDlg endif endif set DPassword = $(Value) set Status = STATUS_SUCCESSFUL else ui pop 1 shell "" MsgBox "The entered passwords don't match! "+ "Please reenter them again." goto PwDlg endif else-ifstr(i) $(DLGEVENT) == "EXIT" shell "" QueryUserQuit ifstr(i) $($R0) == "OK" ui pop 1 set Status = STATUS_USERQUIT else goto PwDlg endif else-ifstr(i) $(DLGEVENT) == "HELP" set Status = STATUS_USE_DOWNLEVEL endif return $(Status) $(DPassword) [DPasswordDlgENG] DlgType = "MultiEdit" DlgTemplate = "QUERY_PASSWORD" Caption = "Enter Cairo Password" DlgText = "Please enter the password that is valid for Cairo Domain."+ "For now it is same as your user name (email name). "+ "Confirm Password field. Then press Continue." Edit1Label = "&Password:" Edit2Label = "&Confirm Password:" Continue = "&Continue" Help = "&Use Downlevel" Exit = "E&xit Setup" EditTextLim = {15, 15} EditTextIn = {"", ""} ;----------------------------------------------------------------------- ; ROUTINE: GetDCType ; ; DESCRIPTION: Get the type of cairo DC ; ; INPUTS: none ; ; OUTPUTS: $R0: STATUS_SUCCESSFUL | ; STATUS_FAILED | ; STATUS_USERQUIT ; $R1: the DC type ;------------------------------------------------------------------------ [GetDCType] gDCType =+ set Status = STATUS_FAILED read-syms GDCT$(!STF_LANGUAGE) ui start "Diskette" ifstr(i) $(DLGEVENT) == "CONTINUE" ui pop 1 ifstr(i) $(ListItemsOut) == "" set Status = STATUS_USERCANCEL else set CairoOptionChosenText = $(ListItemsOut) set CairoOptionChosen = *($($0), ~($(ListItemsIn), $(ListItemsOut))) shell "" YNQueryBox "DC Type:"$(!LF)" "$(CairoOptionChosenText)$(!LF)+ "Is this correct?" 1 ifstr(i) $($R0) == "no" goto gDCType endif ifstr(i) $($R0) == STATUS_USERQUIT set Status = STATUS_USER else set Status = STATUS_SUCCESSFUL endif endif goto finish_DCOption else-ifstr(i) $(DLGEVENT) == "BACK" ui pop 1 set Status = STATUS_USERCANCEL goto finish_DCOption else ui pop 1 set Status = STATUS_FAILED goto finish_DCOption endif finish_DCOption = + Return $(Status) $(CairoOptionChosenText) ;$(CairoOptionChosen) [GDCTENG] DlgType = List DlgTemplate = "OEMSINGLESEL" Caption = "Select DC Type" DlgText = "Choose DC Type. When in doubt choose "+ "FirstDC option." Continue = "OK" Cancel = "Cancel" Help = "Help" CairoOptions = {FirstDC, ReplicaDC} ListItemsIn = $(CairoOptions) ListItemsOut = "FirstDC" [OfsDriveDlg] Caption = "Select Cairo Object Drive" DlgText = "WARNING: The drive you select will be formatted for OFS" Continue = "&Format" Cancel = "Cancel" Help = "&Help" DlgType = List DlgTemplate = "OEMSINGLESEL" HelpContext = $(!IDH_DB_SEARCHDRIVE_INS) ListItemsIn = $(DriveDisplayList) ListItemsOut = $(OfsDefaultChoice) [AlertSystemENG] AlertServDisplayName = "Alert System" [PrimaryUserDlgENG] Caption = "Primary User Information" DlgText = "Please enter the Primary User's name and the user's "+ "NT domain and password here. The username must be 20 "+ "characters or less and the password must be 14 characters "+ "or less. Reenter the password in the Confirm Password "+ "field. " Edit1Label = "&Username:" GroupLabel = "NT Credentials" Edit2Label = "&NT Domain:" Edit3Label = "&NT Password:" Edit4Label = "&Confirm NT Password:" Continue = "Continue" Cancel = "Cancel" Help = "&Help" Exit = "E&xit Setup" DlgType = "MultiEdit" DlgTemplate = "PRIMARY_USER_SETUP" HelpContext = $(!IDH_DB_ACCOUNTSETUP_INS) EditTextLim = {20, 20, 14, 14} EditTextIn = {$(Username), $(NtDomain), "", ""} [FatalError20ENG] Fatal = "Failed to get OFS Drive." [NonFatalError10ENG] NonFatal = "The Password and the Confirm Password fields are different. "+ "Please enter both fields again." [NonFatalError14ENG] NonFatal = "Usernames may not start or end with a space, "+ "and the following characters are not allowed:"$(!LF)+ "/ \ [ ] "" : ; | < > + = , ? *" [NonFatalError15ENG] NonFatal = "You must enter a Username to set up a local account" [NonFatalError16ENG] NonFatal = "You must select a drive to contiue the installation." + "If you select an existing OFS drive, but do not want reformat " + "the drive, then you should cancel the format utility when it asks " + "you to confirm the operation." [Warning2ENG] Warning = "No local account will be set up." [Warning3ENG] Warning = "No password has been entered. Choose OK to leave the "+ "password blank, or Cancel if you want to enter a password." [RegIniFiles] ofs.reg dsys.reg account.reg dfs.reg dfsprov.reg dsobjs.reg samp32.reg repl.reg sc.reg sysmgmt.reg cxxflt.reg [GetCairoDomainAndOuLists] read-syms header return STATUS_SUCCESSFUL $(validdomains) $(validous) [header] ; this is where file constants go version = 2 domainprefix = validdomains = { \msft, \swat } validous = { redmond\bsd\dev, redmond\bsd\test, redmond\bsd\progman, redmond\bsd\admin, redmond\bsd\usered, redmond\bsd\marketing, redmond\bsd\misc, redmond\bsd\stress, redmond\bsd, redmond\bsd\cairo, redmond } validgroups = { DomainAdmins, DomainUsers, Dsys, Ofs, Net, Base, Shell, RpcOle, ACT }