;*********************************************************************** ; ; OEMNSVSV.INF ; ; Server SETUP INF file. ; ; History: ; davidhov 00-Feb-1992 Created ; terryk 27-Feb-1992 Reorganize section location ; added comment ; terryk 03-Mar-1992 Changed to server setup ; terryk 02-Apr-1992 Code review changed ; davidhov 03-Apr-1992 Enhanced to use new INF section ; structure from SunilP, et al. ; ;*********************************************************************** ;----------------------------------------------------------------------- ; OPTION TYPE ; ----------- ; This identifies the Option type we are dealing with. The different ; possible types are: ; ; COMPUTER, DISPLAY, MOUSE, KEYBOARD, LAYOUT, SCSI, PRINTER, ... ; ; Types specific to networking: ; ; NetAdapter, a netcard / adapter combination or just a netcard ; NetDriver, just a netcard driver ; NetTransport, a complete NDIS-compliant TDI transport stack ; NetService, an NT networking service ; NetWork, a complete network ensemble. ; NetProvider a complete network which supports NT MPR protocol ;----------------------------------------------------------------------- [Identification] OptionType = NetService ;----------------------------------------------------------------------- ; OPTION LIST ; ----------- ; This section lists the OEM Option key names. These keys are locale ; independent and used to represent the option in a locale independent ; manner. ; ;----------------------------------------------------------------------- [Options] SRV ; XACTSRV ;*********************************************************************** ; CONSTANTS FOR USING DIALOGS ;*********************************************************************** [FileConstants] ; ; File names, etc. ; UtilityInf = "UTILITY.INF" subroutineinf = "SUBROUTN.INF" SoftwareType = "service" Exit_Code = 0 ;ShellCode = 0 ; ; EventLog Message File ; NetEventDLL = "%SystemRoot%\System32\netevent.dll" IoLogMsgDLL = "%SystemRoot%\System32\IoLogMsg.dll" ; ; Product Info ; Manufacturer = "Microsoft" ProductMajorVersion = "4" ProductMinorVersion = "0" ProductVersion = $(ProductMajorVersion)"."$(ProductMinorVersion) ProductOpSupportWKSTA = 132 ; 0x0084 ; Display,Removable,NOT Properties,Not Updatable ProductOpSupportSERVER = 134 ; 0x0086 ; Display,Removable,Properties,Not Updatable ; ; Software ; ProductSRVName = "LanmanServer" ProductSRVImagePath = "%SystemRoot%\System32\services.exe" NetRuleSRVType = "srv lmNetService lanmanServer" NetRuleSRVClass = {"lanmanServer lmNetService"} NetRuleSRVUse = $(SoftwareType)" yes yes" NetRuleSRVBindForm = """LanmanServer"" yes yes container" ; ProductXACTSRVName = "XactSrv" ProductXACTSRVImagePath = "%SystemRoot%\System32\services.exe" ProductSRVSRVName = "Srv" ; DavidHov,6/11: Use NT-style name for ImagePath ProductSRVSRVImagePath = "\SystemRoot\System32\drivers\srv.sys" ; ; Registry Key ; ProductKeyName = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(Product$(Option)Name)"\CurrentVersion" ParamKeyName = $(!NTN_ServiceBase)"\"$(Product$(Option)Name)"\Parameters" SessMgrMemMgtKeyName = "SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" [GeneralConstants] ; ; Program flow control variables. ; from = "" to = "" ; ; Return codes; Exit_Code is set to one of these ; ExitCodeOk = 0 ExitCodeCancel = 1 ExitCodeFatal = 2 KeyNull = "" MAXIMUM_ALLOWED = 33554432 SERVICE_NO_CHANGE = 4294967295 RegistryErrorIndex = NO_ERROR KeyProduct = "" KeyParameters = "" TRUE = 1 FALSE = 0 NoTitle = 0 ExitState = "Active" OldVersionExisted = $(FALSE) DriverPath = $(!STF_NTPATH)\drivers [date] ; Now is a list which contains { Sec from 1-1-1970, Year, Month, Day, Hour, ; Minute, Second } Now = {} ? $(!LIBHANDLE) GetSystemDate [DetectSystemMemory] SystemMemory = "" ? $(!LIBHANDLE) GetMemorySize ;--------------------------------------------------------------------------- ; 1. Identify ; ; DESCRIPTION: To verify that this INF deals with the same type of options ; as we are choosing currently. ; ; INPUT: None ; ; OUTPUT: $($R0): STATUS: STATUS_SUCCESSFUL ; $($R1): Option Type (COMPUTER ...) ; $($R2): Diskette description ;--------------------------------------------------------------------------- [Identify] ; ; read-syms Identification set Status = STATUS_SUCCESSFUL set Identifier = $(OptionType) set Media = #("Source Media Descriptions", 1, 1) Return $(Status) $(Identifier) $(Media) ;------------------------------------------------------------------------ ; 2. ReturnOptions: ; ; DESCRIPTION: To return the option list supported by this INF and the ; localised text list representing the options. ; ; ; INPUT: $($0): Language used. ( ENG | FRN | ... ) ; ; OUTPUT: $($R0): STATUS: STATUS_SUCCESSFUL | ; STATUS_NOLANGUAGE ; STATUS_FAILED ; ; $($R1): Option List ; $($R2): Option Text List ;------------------------------------------------------------------------ [ReturnOptions] ; ; set Status = STATUS_FAILED set OptionList = {} set OptionTextList = {} ; ; Check if the language requested is supported ; set LanguageList = ^(LanguagesSupported, 1) Ifcontains(i) $($0) in $(LanguageList) goto returnoptions else set Status = STATUS_NOLANGUAGE goto finish_ReturnOptions endif ; ; form a list of all the options and another of the text representing ; returnoptions = + set OptionList = ^(Options, 1) set OptionTextList = ^(OptionsText$($0), 1) set Status = STATUS_SUCCESSFUL finish_ReturnOptions = + Return $(Status) $(OptionList) $(OptionTextList) ;----------InstallOption------------------------------------------------- ; ; InstallOption: ; ; This section is shelled to by main installation processing ; or by NCPASHEL.INF during reconfig, removal, update, etc. ; ; ; FUNCTION: To copy files representing Options ; To configure the installed option ; To update the registry for the installed option ; ; INPUT: $($0): Language to use ; $($1): OptionID to install ; $($2): SourceDirectory ; $($3): AddCopy (YES | NO) ; $($4): DoCopy (YES | NO) ; $($5): DoConfig (YES | NO) ; ; OUTPUT: $($R0): STATUS: STATUS_SUCCESSFUL | ; STATUS_NOLANGUAGE | ; STATUS_USERCANCEL | ; STATUS_FAILED ; ;------------------------------------------------------------------------ [InstallOption] ; ; extract parameters ; set Option = $($1) set SrcDir = $($2) set AddCopy = $($3) set DoCopy = $($4) set DoConfig = $($5) ; ; Check if the language requested is supported ; set LanguageList = ^(LanguagesSupported, 1) Ifcontains(i) $($0) NOT-IN $(LanguageList) Return STATUS_NOLANGUAGE endif Debug-Output "OEMNSVSV.INF: STF_CWDDIR is: "$(!STF_CWDDIR) Debug-Output "OEMNSVSV.INF: STF_LANGUAGE is: "$(!STF_LANGUAGE) ; define all the constants set-subst LF = "\n" read-syms GeneralConstants read-syms FileConstants read-syms DialogConstants$(!STF_LANGUAGE) ifstr(i) $(!NTN_Origination) == "NCPA" set Continue = $(OK) endif read-syms FileConstants$(!STF_LANGUAGE) detect date detect DetectSystemMemory set-title $(FunctionTitle) set to = Begin set from = Begin ; ; Assume all is well. ; set CommonStatus = STATUS_SUCCESSFUL EndWait ; ; Set up the operation-mode-based variables and gaily welcome ; the user. If the "install mode" variable is improperly set, ; assume this is a new installation. ; Begin = + Ifstr(i) $(!NTN_InstallMode) == deinstall set StartLabel = removeadapter set OEM_ABANDON_OPTIONS = { $(ProductSRVName), + $(ProductXACTSRVName), $(ProductSRVSRVName)} else-Ifstr(i) $(!NTN_InstallMode) == Update set StartLabel = UpgradeSoftware else-Ifstr(i) $(!NTN_InstallMode) == bind set StartLabel = bindingadapter else-Ifstr(i) $(!NTN_InstallMode) == configure ifstr(i) $(!STF_PRODUCT) != "WINNT" set CommonStatus = STATUS_REBOOT set StartLabel = configureadapter else Shell $(UtilityInf),RegistryErrorString,CANNOT_CONFIGURE_SOFTWARE ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "OEMNSVSV.INF: ShellCode error: cannot get an error string." goto ShellCodeError endif set CommonStatus = STATUS_USERCANCEL set Error = $($R0) set from = end set to = end goto nonfatal endif else set StartLabel = installadapter set OEM_ABANDON_OPTIONS = {} endif ; ; set up default parameter ; ifstr(i) $(!STF_PRODUCT) == "WINNT" set Size = 1 else set Size = 3 endif set RadioDefault = $(Size) set RadioIn = {$(RadioDefault)} set Lmannounce = 0 set CheckItemsIn = {OFF} set DoSRV = FALSE set DoXACTSRV = FALSE set DoSRVSRV = FALSE ifstr(i) $(Option) == SRV set DoSRV = TRUE ; set DoXACTSRV = TRUE set DoSRVSRV = TRUE else-ifstr(i) $(Option) == XACTSRV set DoXACTSRV = TRUE endif set from = $(fatal) set to = $(fatal) goto $(StartLabel) ;----------------------------------------------- ; Installation Section ;----------------------------------------------- installadapter = + ; ; First, check whether the same version of the software exists ; OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct Ifstr $(KeyProduct) != $(KeyNull) ; ; Same version already existed in the local machine ; Popup the dialog and ask the user whether he wants to continue ; CloseRegKey $(KeyProduct) Shell $(UtilityInf), VerExistedDlg, $(Product$(Option)Title),+ $(ProductVersion) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "ShellCode error: cannot get an error string." goto ShellCodeError endif goto end endif goto adapteroptions ;----------------------------------------------- ; Configuration Section ;----------------------------------------------- ; ; Get the current values of all the parameters ; configureadapter = + ; ; Get the other parameters; they're attached to the service parameters key ; OpenRegKey $(!REG_H_LOCAL) "" $(ParamKeyName) $(MAXIMUM_ALLOWED) KeyParameters Ifstr $(KeyParameters) == $(KeyNull) set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE Debug-Output "Cannot find component service" goto fatalregistry endif set OldVersionExisted = $(TRUE ) set ValueName = "" set ValueData = "" set ValueStr = "" set ValueList = {} ; ; Get the old values ; EnumRegValue $(KeyParameters) ValueList ForListDo $(ValueList) set ValueItem = $($) set ValueName = *($(ValueItem),1) set ValueData = *($(ValueItem),4) Ifstr(i) $(ValueName) == "Size" set Size = $(ValueData) else-ifstr(i) $(ValueName) == "Lmannounce" set Lmannounce = $(ValueData) endif EndForListDo ; ; Adjust Size for LargeSystemCache setting ; ; first set LargeSystemCache to something invalid set LargeSystemCacheOrg = 2 OpenRegKey $(!REG_H_LOCAL) "" $(SessMgrMemMgtKeyName) $(MAXIMUM_ALLOWED) KeySessMgrMemMgt Ifstr $(KeySessMgrMemMgt) != $(KeyNull) GetRegValue $(KeySessMgrMemMgt), "LargeSystemCache", LSCInfo Debug-Output "GetRegValue returned "$(RegLastError) ifint $(RegLastError) == $(!REG_ERROR_SUCCESS) Debug-Output "GetRegValue of LargeSystemCache successful" set LargeSystemCacheOrg = *($(LSCInfo), 4) Debug-Output "LargeSystemCacheOrg ="$(LargeSystemCacheOrg) ifint $(Size) == 3 ifint $(LargeSystemCacheOrg) == 0 set Size = 4 endif endif endif CloseRegKey $(KeySessMgrMemMgt) endif set RadioDefault = $(Size) set RadioIn = {$(RadioDefault)} ifint $(Lmannounce) == 1 set CheckItemsIn = {ON} else set CheckItemsIn = {OFF} endif CloseRegKey $(KeyParameters) goto adapteroptions ; ; Let the user bang on the options until satisfied. ; adapteroptions = + ifstr(i) $(DoSRV) == TRUE Ifstr(i) $(!NTN_InstallMode) == "configure" set from = adapteroptions read-syms FileDependentDlg$(!STF_LANGUAGE) ui start "InputDlg" ifstr(i) $(DLGEVENT) == "CONTINUE" set Size = *($(RadioOut),1) Debug-Output "OEMNSVSV.INF: Size = "$(Size) set Lmannounce = *($(CheckItemsOut),1) Debug-Output "OEMNSVSV.INF: Lmannounce = "$(Lmannounce) ui pop 1 goto nextstep else-ifstr(i) $(DLGEVENT) == "BACK" set CommonStatus = STATUS_USERCANCEL Debug-Output "Action: exit. Bye." ui pop 1 goto end else ; ; Unknown command ; ui pop 1 Debug-Output "OEMNSVSV.INF: Action unknown. Bye." goto end endif endif endif ; ; If installing, go create the necessary keys; ; if configuring, they're already open. ; nextstep = + StartWait ifstr(i) $(!NTN_InstallMode) == "install" Ifstr(i) $(DoCopy) == "YES" Shell $(UtilityInf), DoAskSource, $(!STF_CWDDIR), $(SrcDir) YES Ifint $($ShellCode) != $(!SHELL_CODE_OK) Goto ShellCodeError Else-Ifstr(i) $($R0) == STATUS_FAILED Shell $(UtilityInf) RegistryErrorString "ASK_SOURCE_FAIL" ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif set Error = $($R0) Goto fatal Else-Ifstr(i) $($R0) == STATUS_USERCANCEL Goto successful Endif Set SrcDir = $($R1) Endif install "Install-Option" ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS Shell $(UtilityInf) RegistryErrorString "UNABLE_COPY_FILE" ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif set Error = $($R0) goto fatal endif endif set OEM_ABANDON_ON = TRUE ifstr(i) $(DoSRV) == TRUE ifint $(OldVersionExisted) == $(FALSE) Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), $(ProductSRVName)) Set SrvServiceType = "autoserviceshare" Ifint $(SystemMemory) < 12287 Set SrvServiceType = "serviceshare" Endif Shell $(UtilityInf), AddSoftwareComponent, $(Manufacturer), + $(ProductSRVName), + $(ProductSRVName), + $(ProductSRVDisplayName), $(STF_CONTEXTINFNAME), + $(ProductSRVImagePath), $(SrvServiceType), "", {}, "", + $(NetEventDLL),"","","","server" ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "ShellCode error" goto ShellCodeError endif set RegistryErrorIndex = $($R0) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR EndWait Debug-Output "Registry error: add software components" CloseRegKey $($R1) CloseRegKey $($R2) CloseRegKey $($R3) CloseRegKey $($R4) goto fatalregistry endif ; ; At this point: ; $R1 contains the product version key handle; ; $R2 contains the NetRules subkey handle; ; $R3 contains the new Services key handle; and ; $R4 contains the Parameters key ; Set SoftProductKey = $($R1) Set SoftNetRuleKey = $($R2) Set SoftServiceKey = $($R3) set KeyParameters = $($R4) Set SoftLinkageKey = $($R5) ifstr(i) $(!STF_PRODUCT) == "WINNT" set ProductOpSupport = $(ProductOpSupportWKSTA) else set ProductOpSupport = $(ProductOpSupportSERVER) endif set NewValueList = {{SoftwareType,$(NoTitle),$(!REG_VT_SZ),$(SoftwareType)},+ {MajorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMajorVersion)},+ {MinorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMinorVersion)},+ {Title,$(NoTitle),$(!REG_VT_SZ),$(ProductSRVTitle)},+ {Description,$(NoTitle),$(!REG_VT_SZ),$(ProductSRVDescription)},+ {ServiceName,$(NoTitle),$(!REG_VT_SZ),$(ProductSRVName)},+ {OperationsSupport,$(NoTitle),$(!REG_VT_DWORD),$(ProductOpSupport)},+ {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}} Shell $(UtilityInf), AddValueList, $(SoftProductKey), $(NewValueList) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "ShellCode error." goto ShellCodeError endif set RegistryErrorIndex = $($R0) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR EndWait Debug-Output "Resgitry error: add value list." CloseRegKey $(SoftProductKey) CloseRegKey $(SoftNetRuleKey) CloseRegKey $(SoftServiceKey) CloseRegKey $(KeyParameters) CloseRegKey $(SoftLinkageKey) goto fatalregistry endif set NewValueList = {{type,$(NoTitle),$(!REG_VT_SZ),$(NetRuleSRVType)},+ {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleSRVClass)}, + {use,$(NoTitle),$(!REG_VT_SZ),$(NetRuleSRVUse)}, + {bindform,$(NoTitle),$(!REG_VT_SZ),$(NetRuleSRVBindForm)}, + {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}} Shell $(UtilityInf), AddValueList, $(SoftNetRuleKey), $(NewValueList) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "ShellCode error." goto ShellCodeError endif set RegistryErrorIndex = $($R0) CloseRegKey $(SoftProductKey) CloseRegKey $(SoftNetRuleKey) CloseRegKey $(SoftLinkageKey) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR EndWait Debug-Output "OEMNSVSV.INF: Registry error: add value list." CloseRegKey $(KeyParameters) goto fatalregistry endif CreateRegKey $(SoftServiceKey) {"AutotunedParameters",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" AutoTunedKey CreateRegKey $(SoftServiceKey) {"Shares",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" SharesKey set NewValueList = {{NullSessionPipes,$(NoTitle),$(!REG_VT_MULTI_SZ),{"COMNAP","COMNODE","SQL\QUERY","SPOOLSS","LLSRPC","EPMAPPER","LOCATOR"}},+ {NullSessionShares,$(NoTitle),$(!REG_VT_MULTI_SZ),{"COMCFG", "DFS$"}} } Shell $(UtilityInf), AddValueList, $(KeyParameters), $(NewValueList) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "ShellCode error." goto ShellCodeError endif set RegistryErrorIndex = $($R0) CloseRegKey $(SoftServiceKey) CloseRegKey $(AutoTunedKey) CloseRegKey $(SharesKey) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR EndWait Debug-Output "OEMNSVSV.INF: Registry error: add value list." CloseRegKey $(KeyParameters) goto fatalregistry endif ; ; make sure license service is now autostarted if it is installed ; OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services\LicenseService" + $(!REG_KEY_ALL_ACCESS) LICENSESERVICEKEY Ifstr(i) $(LICENSESERVICEKEY) != "" shell "registry.inf" ModifyServicesEntry "LicenseService" $(!SERVICE_AUTO_START) Endif CloseRegKey $(LICENSESERVICEKEY) endif goto writeparameters ; ; REQUIRED: $(KeyParameters) contains service Parameters key handle ; writeparameters = + ; ; Add the rest of the parameters to the Services area ; ifstr(i) $(Lmannounce) == "ON" set LmannounceValue = 1 else set LmannounceValue = 0 endif ifint $(Size) == 4 set LargeSystemCache = 0 set Size = 3 else-ifint $(Size) == 3 set LargeSystemCache = 1 else set LargeSystemCache = 0 endif set NewValueList = {{Size,$(NoTitle),$(!REG_VT_DWORD),$(Size)},+ {Lmannounce,$(NoTitle),$(!REG_VT_DWORD),$(LmannounceValue)} } ifint $(OldVersionExisted) == $(TRUE) OpenRegKey $(!REG_H_LOCAL) "" $(ParamKeyName) $(MAXIMUM_ALLOWED) KeyParameters endif Shell $(UtilityInf), AddValueList, $(KeyParameters), $(NewValueList) set RegistryErrorIndex = $($R0) CloseRegKey $(KeyParameters) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR goto fatalregistry endif ; ; Set the LargeSystemCache parameter if installing a large server ; ifint $(LargeSystemCache) != $(LargeSystemCacheOrg) OpenRegKey $(!REG_H_LOCAL) "" $(SessMgrMemMgtKeyName) $(MAXIMUM_ALLOWED) KeySessMgrMemMgt SetRegValue $(KeySessMgrMemMgt) {LargeSystemCache,$(NoTitle),$(!REG_VT_DWORD),$(LargeSystemCache)} ifint $(RegLastError) != $(!REG_ERROR_SUCCESS) set RegistryErrorIndex = UNABLE_WRITE_REGISTRY CloseRegKey $(KeySessMgrMemMgt) goto fatalregistry endif CloseRegKey $(KeySessMgrMemMgt) endif endif ; ; Install the XactSrv service ; ifstr(i) $(DoXACTSRV) == TRUE ifint $(OldVersionExisted) == $(FALSE) Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), $(ProductXACTSRVName)) Shell $(UtilityInf), CreateService, $(ProductXACTSRVName), + $(ProductXACTDisplayName), $(ProductXACTSRVImagePath), "serviceshare", "", + {"LanmanServer"}, "" ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "ShellCode error" goto ShellCodeError endif set RegistryErrorIndex = $($R0) CloseRegKey $($R1) CloseRegKey $($R2) CloseRegKey $($R3) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR EndWait Debug-Output "Registry error: adding XACTSRV service" goto fatalregistry endif endif endif ; ; Handle the server base service driver ; ifstr(i) $(DoSRVSRV) == TRUE ifint $(OldVersionExisted) == $(FALSE) Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), $(ProductSRVSRVName)) Shell $(UtilityInf), CreateService, $(ProductSRVSRVName), + $(ProductSRVSRVDisplayName), $(ProductSRVSRVImagePath), "system", "Network", {}, "",+ $(NetEventDLL) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "ShellCode error" goto ShellCodeError endif set RegistryErrorIndex = $($R0) CloseRegKey $($R1) CloseRegKey $($R2) CloseRegKey $($R3) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR EndWait Debug-Output "Registry error: adding Srv service" goto fatalregistry endif endif endif ; ; EndWait goto successful ;----------------------------------------------- ; Binding section ;----------------------------------------------- bindingadapter =+ set Error = "Binding: Sorry, not yet implemented." goto fatal ;----------------------------------------------- ; Removeadapter section ;----------------------------------------------- removeadapter = + ; ; Don't allow removal on NTAS ifstr(i) $(!STF_PRODUCT) == "LANMANNT" set RegistryErrorIndex = CANT_REMOVE_SERVER_NTAS goto fatalregistry endif ; ; Remove Server service ; ifcontains(i) $(ProductSRVName) in $(OEM_ABANDON_OPTIONS) Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), + $(ProductSRVName) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "ShellCode error" goto ShellCodeError endif set RegistryErrorIndex = $($R0) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR goto fatalregistry endif endif ; ; remove XactSrv and SrvSrv service ; ForListDo {$(ProductXACTSRVName), $(ProductSRVSRVName)} ifcontains(i) $($) in $(OEM_ABANDON_OPTIONS) Shell $(UtilityInf), RemoveService, $($), "YES" ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "ShellCode error" goto ShellCodeError endif set RegistryErrorIndex = $($R0) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR goto fatalregistry endif endif EndForListDo goto end ;----------------------------------------------- ; Upgrade Software section ;----------------------------------------------- UpgradeSoftware = + ; Upgrade software component ; OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct Ifstr $(KeyProduct) != $(KeyNull) install "Install-Update" ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS goto fatal endif ; Upgrade the version number ; SetRegValue $(KeyProduct) {MajorVersion,$(NoTitle),$(!REG_VT_SZ),$(ProductMajorVersion)} SetRegValue $(KeyProduct) {MinorVersion,$(NoTitle),$(!REG_VT_SZ),$(ProductMinorVersion)} ; ; Update description and op support ; ifstr(i) $(!STF_PRODUCT) == "WINNT" set ProductOpSupport = $(ProductOpSupportWKSTA) else set ProductOpSupport = $(ProductOpSupportSERVER) endif SetRegValue $(KeyProduct) {Description,$(NoTitle),$(!REG_VT_SZ),$(ProductSRVDescription)} SetRegValue $(KeyProduct) {OperationsSupport,$(NoTitle),$(!REG_VT_DWORD),$(ProductOpSupport)} CloseRegKey $(KeyProduct) ; ; Change image path ; LibraryProcedure Result, $(!LIBHANDLE), SetupChangeServiceConfig, "LanmanServer", $(SERVICE_NO_CHANGE), $(SERVICE_NO_CHANGE), $(SERVICE_NO_CHANGE), "%SystemRoot%\System32\services.exe", "", "", "", "", "" ; ; Remove Otherdependencies "Srv" ; OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\LanmanServer\Linkage" $(MAXIMUM_ALLOWED) KeyLinkage ; If OtherDependencies does not exist, create it ; else remove srv from the list set NewList = {} GetRegValue $(KeyLinkage) "OtherDependencies" Dependencies ifint $(RegLastError) == 0 set OldList = *($(Dependencies),4) Debug-Output "Old value for OtherDependencies = "$(OldList) ForListDo $(OldList) ifstr(i) $($) != "Srv" set NewList = >($(NewList), $($)) Endif EndForListDo endif SetRegValue $(KeyLinkage) {OtherDependencies, 0, $(!REG_VT_MULTI_SZ), $(NewList)} Debug-Output "New value for OtherDependencies = "$(NewList) CloseRegKey $(KeyLinkage) ; ; Add NullSessionShares and NullSessionPipes ; OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\LanmanServer\Parameters" $(MAXIMUM_ALLOWED) KeyParameters GetRegValue $(KeyParameters), "NullSessionPipes", PipesInfo GetRegValue $(KeyParameters), "NullSessionShares", SharesInfo set Pipes = *($(PipesInfo),4) set Shares = *($(SharesInfo),4) ForListDo {"COMNAP","COMNODE","SQL\QUERY","SPOOLSS","LLSRPC","EPMAPPER","LOCATOR"} Ifcontains(i) $($) NOT-IN $(Pipes) ifstr(i) $(Pipes) == "" set Pipes = $($) else set Pipes = >($(Pipes),$($)) endif endif EndForListDo ForListDo {"COMCFG"} Ifcontains(i) $($) NOT-IN $(Shares) ifstr(i) $(Shares) == "" set Shares = {$($)} else set Shares = >($(Shares),$($)) endif endif EndForListDo set NewValueList = {{NullSessionPipes,$(NoTitle),$(!REG_VT_MULTI_SZ), $(Pipes)},+ {NullSessionShares,$(NoTitle),$(!REG_VT_MULTI_SZ),$(Shares)} } Shell $(UtilityInf), AddValueList, $(KeyParameters), $(NewValueList) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "ShellCode error." goto ShellCodeError endif ; ; Remove Disc and Comment value ; GetRegValue $(KeyParameters), "Disc", DiscInfo Debug-Output "GetRegValue returned "$(RegLastError) ifint $(RegLastError) == $(!REG_ERROR_SUCCESS) GetRegValue $(KeyParameters), "AutoDisconnect", DisconnectInfo Debug-Output "GetRegValue returned "$(RegLastError) ifint $(RegLastError) != $(!REG_ERROR_SUCCESS) SetRegValue $(KeyParameters) {AutoDisconnect,$(NoTitle),$(!REG_VT_SZ),*($(DiscInfo),4)} endif DeleteRegValue $(KeyParameters) "Disc" endif GetRegValue $(KeyParameters), "Comment", CommentInfo Debug-Output "GetRegValue returned "$(RegLastError) ifint $(RegLastError) == $(!REG_ERROR_SUCCESS) GetRegValue $(KeyParameters), "SrvComment", SrvCommentInfo Debug-Output "GetRegValue returned "$(RegLastError) ifint $(RegLastError) != $(!REG_ERROR_SUCCESS) SetRegValue $(KeyParameters) {SrvComment,$(NoTitle),$(!REG_VT_SZ),*($(CommentInfo),4)} endif DeleteRegValue $(KeyParameters) "Comment" endif GetRegValue $(KeyParameters), "Open", OpenInfo Debug-Output "GetRegValue returned "$(RegLastError) ifint $(RegLastError) == $(!REG_ERROR_SUCCESS) ifint *($(OpenInfo),4) == 10 DeleteRegValue $(KeyParameters) "Open" endif endif CloseRegKey $(KeyParameters) else ; ; Cannot Open software key, goto ERROR ; goto fatalregistry endif goto end ; ; End of Upgrade Software ; ; ; Escape hatches ; successful = + goto end ; ; warning display ; warning = + Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "WARNING", $(Error) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif ifstr(i) $($R1) == "OK" goto $(to) else-ifstr(i) $($R1) == "CANCEL" goto $(from) else ; Debug-Msg "Error Error Bad DLGEVENT" goto "end" endif ; ; non fatal error display ; nonfatal = + ifstr(i) $(Error) == "" Shell $(UtilityInf) RegistryErrorString "SETUP_FAIL" ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif set Error = $($R0) endif Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "NONFATAL", $(Error) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif ifstr(i) $($R1) == "OK" goto $(from) else goto "end" endif ; ; Registry is broken ; fatalregistry = + Shell $(UtilityInf) RegistryErrorString $(RegistryErrorIndex) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif set Error = $($R0) goto fatal ; ; fatal error display ; fatal = + ifstr(i) $(Error) == "" Shell $(UtilityInf) RegistryErrorString "SETUP_FAIL" ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif set Error = $($R0) endif Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $(Error) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif goto setfailed ; ; Shelling error ; ShellCodeError = + set DlgType = "MessageBox" set STF_MB_TITLE = $(ShellCodeErrorTitle) set STF_MB_TEXT = $(ShellCodeErrorText) set STF_MB_TYPE = 1 set STF_MB_ICON = 3 set STF_MB_DEF = 1 ui start "Error Message" goto setfailed setfailed = + set CommonStatus = STATUS_FAILED Ifint $(RegistryErrorIndex) == CANT_REMOVE_SERVER_NTAS set CommonStatus = STATUS_USERCANCEL endif ; ; If OEM_ABANDON_ON, we need to clean up the registry ; ifstr(i) $(OEM_ABANDON_ON) == TRUE set OEM_ABANDON_ON = FALSE goto removeadapter endif goto end end = + goto term term = + Return $(CommonStatus) ;*************************************************************** ; INSTALL SECTIONS ;*************************************************************** [Install-Option] set STF_VITAL = "" ifstr(i) $(AddCopy) == "YES" ; ; Add the files to the copy list ; ; BUGBUG: eliminate the "nt2" in the next line when Sunil fixes ; the other INF files ; AddSectionFilesToCopyList Files-$(Option) $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers endif ifstr(i) $(DoCopy) == "YES" ; ; Copy files in the copy list ; set !STF_NCPA_FLUSH_COPYLIST = TRUE CopyFilesInCopyList endif ifstr(i) $(DoConfig) == "YES" ; ; Add product to registry ; ; ; Finish up endif Exit [Install-Update] set STF_VITAL = "" set STF_OVERWRITE = "VERIFYSOURCEOLDER" ;set STF_VERSION = "YES" AddSectionFilesToCopyList Files-$(Option) $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers exit