;----------------------------------------------------------------------- ; OPTION TYPE ; ----------- ; This identifies the Option type we are dealing with. The different ; possible types are: ; ; COMPUTER, VIDEO, POINTER, KEYBOARD, LAYOUT, SCSI, TAPE, PRINTER, ... ;----------------------------------------------------------------------- [Identification] OptionType = SCSI ;----------------------------------------------------------------------- ; LANGUAGES SUPPORTED ; ------------------- ; ; The languages supported by the INF, For every language supported ; we need to have a separate text section for every displayable text ; section. ; ;----------------------------------------------------------------------- [LanguagesSupported] ENG ;----------------------------------------------------------------------- ; OPTION LIST ; ----------- ; This section lists the Option key names. These keys are locale ; independent and used to represent the option in a locale independent ; manner. ; ;----------------------------------------------------------------------- [Options] "QLA100" = ql10wnt "QLA10035" = ql10nt35 ;----------------------------------------------------------------------- ; OPTION TEXT SECTION ; ------------------- ; These are text strings used to identify the option to the user. There ; are separate sections for each language supported. The format of the ; section name is "OptionsText" concatenated with the Language represented ; by the section. ; ;----------------------------------------------------------------------- [OptionsTextENG] "QLA100" = "QLogic Fast!SCSI/QLA100 (Windows NT V3.1)" "QLA10035" = "QLogic Fast!SCSI/QLA100 (Windows NT V3.5)" ;----------------------------------------------------------------------------------------- ; SCSI MINIPORT DRIVERS: ; ; Order of the information: ; ; Class driver = Type, Group, ErrorControl, Tag, EventMessageFile, TypesSupported ; ;----------------------------------------------------------------------------------------- [MiniportDrivers] ql10wnt = !SERVICE_KERNEL_DRIVER, "SCSI Miniport", !SERVICE_ERROR_NORMAL, 31, %SystemRoot%\System32\IoLogMsg.dll , 7 ql10nt35 = !SERVICE_KERNEL_DRIVER, "SCSI Miniport", !SERVICE_ERROR_NORMAL, 31, %SystemRoot%\System32\IoLogMsg.dll , 7 ;--------------------------------------------------------------------------- ; 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, 0) set OptionTextList = ^(OptionsText$($0), 1) set Status = STATUS_SUCCESSFUL finish_ReturnOptions = + Return $(Status) $(OptionList) $(OptionTextList) ; ; 3. InstallOption: ; ; 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] ; ; Set default values for ; set Status = STATUS_FAILED set DrivesToFree = {} ; ; 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) in $(LanguageList) else set Status = STATUS_NOLANGUAGE goto finish_InstallOption endif read-syms Strings$($0) ; ; check to see if Option is supported. ; set OptionList = ^(Options, 0) ifcontains $(Option) in $(OptionList) else Debug-Output "SCSI.INF: SCSI option is not supported." goto finish_InstallOption endif set OptionList = "" ; ; Option has been defined already ; set MiniportDriver = #(Options, $(Option), 1) set Type = $(#(MiniportDrivers, $(MiniportDriver), 1)) set Group = #(MiniportDrivers, $(MiniportDriver), 2) set ErrorControl = $(#(MiniportDrivers, $(MiniportDriver), 3)) set Tag = #(MiniportDrivers, $(MiniportDriver), 4) set EventMessageFile = #(MiniportDrivers, $(MiniportDriver), 5) set TypesSupported = #(MiniportDrivers, $(MiniportDriver), 6) set Start = $(!SERVICE_BOOT_START) installtheoption = + ; ; Code to add files to copy list ; ifstr(i) $(AddCopy) == "YES" set DoActualCopy = NO set FileToCheck = #(Files-ScsiMiniportDrivers, $(MiniportDriver), 2) LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(!STF_WINDOWSSYSPATH)"\drivers\"$(FileToCheck) ifstr(i) $(STATUS) == NO set DoActualCopy = YES endif ifstr(i) $(DoActualCopy) == NO shell "subroutn.inf" DriversExist $($0) $(String1) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "SCSI.INF: shelling DriversExist failed" goto finish_InstallOption endif ifstr(i) $($R0) == STATUS_CURRENT else-ifstr(i) $($R0) == STATUS_NEW set DoActualCopy = YES else-ifstr(i) $($R0) == STATUS_USERCANCEL Debug-Output "SCSI.INF: User cancelled SCSI installation" goto finish_InstallOption else Debug-Output "SCSI.INF: Error reported in DriversExist routine in SUBROUTN.INF" goto finish_InstallOption endif endif ifstr(i) $(DoActualCopy) == YES shell "subroutn.inf" DoAskSourceEx $(SrcDir) $(String2) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "SCSI.INF: shelling DoAskSourceEx failed" goto finish_InstallOption endif ifstr(i) $($R0) == STATUS_SUCCESSFUL set SrcDir = $($R1) ifstr(i) $($R2) != "" set DrivesToFree = >($(DrivesToFree), $($R2)) endif else Debug-Output "SCSI.INF: User cancelled asking source." goto finish_InstallOption endif install Install-AddCopyOption ifstr(i) $(STF_INSTALL_OUTCOME) != "STF_SUCCESS" Debug-Output "Adding SCSI files to copy list failed" goto finish_InstallOption endif else set DoCopy = NO endif endif ifstr(i) $(DoCopy) == "YES" read-syms ProgressCopy$($0) install Install-DoCopyOption ifstr(i) $(STF_INSTALL_OUTCOME) == "STF_FAILURE" Debug-Output "Copying files failed" goto finish_InstallOption else-ifstr(i) $(STF_INSTALL_OUTCOME) == "STF_USERQUIT" set Status = STATUS_USERCANCEL goto finish_InstallOption endif endif ifstr(i) $(DoConfig) == "YES" ; ; first run a privilege check on modifying the setup node ; shell "registry.inf" CheckSetupModify ifint $($ShellCode) != $(!SHELL_CODE_OK) goto finish_InstallOption endif ifstr(i) $($R0) != STATUS_SUCCESSFUL goto finish_InstallOption endif ; ; then make a new SCSI entry, the entry is created automatically ; enabled ; set ServiceNode = $(MiniportDriver) set ServiceBinary = System32\drivers\#(Files-ScsiMiniportDrivers, $(MiniportDriver), 2) set ServicesValues = { + {Type, 0, $(!REG_VT_DWORD), $(Type) }, + {Start, 0, $(!REG_VT_DWORD), $(Start) }, + {Group, 0, $(!REG_VT_SZ), $(Group) }, + {ErrorControl, 0, $(!REG_VT_DWORD), $(ErrorControl) }, + {Tag, 0, $(!REG_VT_DWORD), $(Tag) }, + {BinaryPathName, 0, $(!REG_VT_EXPAND_SZ), $(ServiceBinary) } + } set ParametersValues = "" set DeviceValues = {} set EventLogValues = { + {EventMessageFile, 0, $(!REG_VT_EXPAND_SZ), $(EventMessageFile) }, + {TypesSupported, 0, $(!REG_VT_DWORD), $(TypesSupported) } + } shell "registry.inf" MakeServicesEntry $(ServiceNode) + $(ServicesValues) + $(ParametersValues) + $(DeviceValues) + $(EventLogValues) + Parameters ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "Couldn't execute MakeServicesEntry in registry.inf" goto finish_InstallOption endif ifstr(i) $($R0) != STATUS_SUCCESSFUL Debug-Output "MakeServicesEntry failed for SCSI" goto finish_InstallOption endif endif set Status = STATUS_SUCCESSFUL finish_InstallOption = + ForListDo $(DrivesToFree) LibraryProcedure STATUS,$(!LIBHANDLE), DeleteNetConnection $($) "TRUE" EndForListDo Return $(Status) [Install-AddCopyOption] ; ; Add the files to the copy list ; AddSectionKeyFileToCopyList Files-ScsiMiniportDrivers + $(MiniportDriver) + $(SrcDir) + $(!STF_WINDOWSSYSPATH)\drivers exit [Install-DoCopyOption] ; ; Copy files in the copy list ; CopyFilesInCopyList exit ;------------------------------------------------------------------------- ; 4. DeInstallOption: ; ; FUNCTION: To remove files representing Option ; To remove the registry entry corresponding to the Option ; ; INPUT: $($0): Language to use ; $($1): OptionID to install ; ; OUTPUT: $($R0): STATUS: STATUS_SUCCESSFUL | ; STATUS_NOLANGUAGE | ; STATUS_USERCANCEL | ; STATUS_FAILED ;------------------------------------------------------------------------- [DeInstallOption] ; ; Set default values for ; set Status = STATUS_FAILED ; ; extract parameters ; set Option = $($1) ; ; Check if the language requested is supported ; set LanguageList = ^(LanguagesSupported, 1) Ifcontains(i) $($0) in $(LanguageList) else set Status = STATUS_NOLANGUAGE goto finish_DeInstallOption endif read-syms Strings$($0) ; ; check to see if Option is supported. ; set OptionList = ^(Options, 0) ifcontains $(Option) in $(OptionList) else goto finish_DeInstallOption endif set OptionList = "" ; ; fetch details about option ; set MiniportDriver = #(Options, $(Option), 1) set MiniportFile = #(Files-ScsiMiniportDrivers, $(MiniportDriver), 2) set FilePath = $(!STF_WINDOWSSYSPATH)"\drivers\"$(MiniportFile) ; ; check to see if file is installed ; if not give success ; LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FilePath) ifstr(i) $(STATUS) == "NO" set Status = STATUS_SUCCESSFUL goto finish_DeInstallOption endif shell "registry.inf" GetServicesEntryStart $(MiniportDriver) ifstr(i) $($R0) != "STATUS_SUCCESSFUL" ; this could happen if there is no start value or there is no ; key, in which case the option is not installed set Status = STATUS_SUCCESSFUL goto finish_DeInstallOption endif ifstr(i) $($R1) == $(!SERVICE_BOOT_START) shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "WARNING" $(String3) ifstr(i) $($R0) != STATUS_SUCCESSFUL goto do_removal endif ifstr(i) $($R1) == "CANCEL" goto finish_DeInstallOption endif endif do_removal =+ ; ; disable the registry entry ; shell "registry.inf" RemoveServicesEntry $(MiniportDriver) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "SCSI.INF: Failed to shell RemoveServicesEntry" goto finish_DeInstallOption endif ifstr(i) $($R0) != STATUS_SUCCESSFUL Debug-Output "SCSI.INF: Failed to disable services entry" goto finish_DeInstallOption endif ; ; we won't remove the file because we can only do so during the next boot. ; if the user chooses to reinstall the same driver during this boot ; he will still end up deleting the driver on next boot. if the file ; should be deleted a warning should be put up saying that the user should ; not try to reinstall the driver during this boot ; ; AddFileToDeleteList $(FilePath) set Status = STATUS_SUCCESSFUL finish_DeInstallOption =+ return $(Status) ;------------------------------------------------------------------------- ; 5. GetInstalledOptions: ; ; FUNCTION: To find out the list of options which are installed ; ; INPUT: $($0): Language to Use ; ; OUTPUT: $($R0): STATUS: STATUS_SUCCESSFUL | ; STATUS_FAILED ; ; $($R1): List of options installed ; $($R2): Option installed Text List ;------------------------------------------------------------------------- [GetInstalledOptions] set Status = STATUS_FAILED set InstalledOptions = {} set InstalledOptionsText = {} ; ; Check if the language requested is supported ; set LanguageList = ^(LanguagesSupported, 1) Ifcontains(i) $($0) in $(LanguageList) else set Status = STATUS_NOLANGUAGE goto finish_GetInstalledOptions endif set OptionList = ^(Options, 0) ForListDo $(OptionList) set MiniportDriver = #(Options, $($), 1) set MiniportFile = #(Files-ScsiMiniportDrivers, $(MiniportDriver), 2) set FilePath = $(!STF_WINDOWSSYSPATH)"\drivers\"$(MiniportFile) LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FilePath) ifstr(i) $(STATUS) == "YES" shell "registry.inf" GetServicesEntryStart $(MiniportDriver) ifint $($ShellCode) == $(!SHELL_CODE_OK) ifstr(i) $($R0) == STATUS_SUCCESSFUL ifstr(i) $($R1) != $(!SERVICE_DISABLED) set OptionText = #(OptionsText$($0), $($), 1) set InstalledOptions = >($(InstalledOptions), $($)) set InstalledOptionsText = >($(InstalledOptionsText), $(OptionText)) endif endif endif endif EndForListDo set Status = STATUS_SUCCESSFUL finish_GetInstalledOptions =+ Return $(Status) $(InstalledOptions) $(InstalledOptionsText) ;************************************************************************** ; PROGRESS GUAGE VARIABLES ;************************************************************************** [ProgressCopyENG] ProCaption = "Windows NT Setup" ProCancel = "Cancel" ProCancelMsg = "Windows NT is not correcly installed. Are you sure you want "+ "to cancel copying files?" ProCancelCap = "Setup Message" ProText1 = "Copying:" ProText2 = "To:" [StringsENG] String1 = "SCSI Adapter" String2 = "Please enter the full path to the OEM SCSI "+ "Adapter files. Then choose Continue." String3 = "The SCSI Adapter has been marked as a boot device. Removing "+ "it may cause the system not to boot."$(!LF)$(!LF)"Are you sure "+ "you want to remove the Adapter." [Source Media Descriptions] 1 = "QLogic SCSI Software Diskette" , TAGFILE = qlscsi [Files-ScsiMiniportDrivers] ql10wnt = 1,ql10wnt.sys , SIZE=36864 ql10nt35 = 1,ql10nt35.sys , SIZE=36864