OEMSETUP.INF Driver File Contents (2100n402.exe)

;-----------------------------------------------------------------------
; 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]
    "Csa64xx"    = Csa64xx

;-----------------------------------------------------------------------
; 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]
    "Csa64xx"    = "CMD 64xx 32-Bit IDE Adapter"


;-----------------------------------------------------------------------------------------
; SCSI MINIPORT DRIVERS:
;
; Order of the information:
;
; Class driver = Type, Group, ErrorControl, Tag, EventMessageFile, TypesSupported
;
;-----------------------------------------------------------------------------------------

[MiniportDrivers]
    Csa64xx  = !SERVICE_KERNEL_DRIVER, "SCSI Miniport", !SERVICE_ERROR_NORMAL,  257, %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
;

	;
	; Enable debug print.
	;

	set !G:DebugOutputControl = 1

	debug-output "OEMSETUP.INF: Debug print enabled"


[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_SYSTEM_START)
;    shell "registry.inf" GetServicesEntryStart $(MiniportDriver)
;    ifint $($ShellCode) == $(!SHELL_CODE_OK)
;        ifstr(i) $($R0) == "STATUS_SUCCESSFUL"
;            ifstr(i) $($R1) == $(!SERVICE_BOOT_START)
;                set Start = $(!SERVICE_BOOT_START)
;            endif
;        endif
;    endif

    set Start            =   $(!SERVICE_BOOT_START)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;
    ; Code to check if the SCSI disk class drivers are enabled. Curtesy of
	;   Steve Dziok from Microsoft with Microsoft Partnership Network.
    ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    debug-output "OEMSETUP.INF: checking for class drivers"

    set ScsiDisk40  = "Disk"
    set ScsiDisk351 = "Scsidisk"

    set ClassDriverToUse = $(ScsiDisk40)

    set MsgNoScsiClass = "Setup could not find a SCSI disk class driver in "+
			 "the system drivers directory.  This installation "+ 
						 "requires that the SCSI disk class driver be installed "+
			 "and enabled.  Driver installation terminated."

    set MsgClassStartFailed = "Unable to modify the start value of the installed "+
				  "SCSI class driver.  Driver installation terminated."

    set MsgGetStartFailed = "Unable to determine the current Start value of the SCSI "+
			    "disk class driver in the registry.  A likely cause of this "+
			    "error is that the key (DISK or SCSIDISK) does not exist.  "+
			    "Driver installation terminated."

    ;
    ; Check for NT 4.0 class driver.
    ;

    LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(!STF_WINDOWSSYSPATH)"\drivers\"$(ClassDriverToUse)".sys"
    ifstr(i) $(STATUS) == NO

	;
	; NT 4.0 class driver not found, check for NT 3.51 class driver.
	;

	set ClassDriverToUse = $(ScsiDisk351)
	LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(!STF_WINDOWSSYSPATH)"\drivers\"$(ClassDriverToUse)".sys"
	ifstr(i) $(STATUS) == NO

	    ;
	    ; No class drivers found, exit installation.
	    ;

	    set ClassDriverToUse = NONE
	    debug-output "OEMSETUP.INF: No SCSI disk class drivers found"

	    shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "FATAL" $(MsgNoScsiClass)

	    goto finish_InstallOption

	endif
    endif

    debug-output "OEMSETUP.INF: Found "$(ClassDriverToUse)

    ;
    ; 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

    ;
    ; Class driver binary exists, make sure driver is set to start.
    ;

    ;
    ; Get the current class driver start value.  If not set to start at boot, update it.
    ; This check is here to prevent an installation error that can occur if the driver
    ; exists in the drivers directory but the registry driver key does not exist.
    ; We don't care what the current start value is, because we are going to set it to
    ; boot -- the GetServiceEntryStart just ensures that the driver key exists.
    ;

    shell "registry.inf" GetServicesEntryStart $(ClassDriverToUse)

    ifint $($ShellCode) != $(!SHELL_CODE_OK)
	Debug-Output "OEMSETUP.INF: Couldn't execute GetServicesEntryStart in registry.inf"
	goto finish_InstallOption
    endif

    ifstr(i) $($R0) != STATUS_SUCCESSFUL
	Debug-Output "OEMSETUP.INF: GetServicesEntryStart failed "
	shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "FATAL" $(MsgGetStartFailed)
	goto finish_InstallOption
    endif

    shell "registry.inf" ModifyServicesEntry $(ClassDriverToUse) $(!SERVICE_BOOT_START)

    ifint $($ShellCode) != $(!SHELL_CODE_OK)
	Debug-Output "OEMSETUP.INF: Couldn't execute ModifyServicesEntry in registry.inf"
	goto finish_InstallOption
    endif

    ifstr(i) $($R0) != STATUS_SUCCESSFUL
	Debug-Output "OEMSETUP.INF: ModifyServiceEntry for SCSI class driver failed"
	shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "FATAL" $(MsgClassStartFailed)
	goto finish_InstallOption
    endif


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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


;; get Atapi's tag so we can copy it
;;        shell "" GetServicesEntryTag "Atapi"
;;        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_InstallOption
;;        endif
;;
;;       set AtapiTag = $($R1)


		;
		; then make a new SCSI entry, the entry is created automatically
		; enabled
		;

		set ServiceNode   = $(MiniportDriver)
		set ServiceBinary = %SystemRoot%\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 preload configuration here.  For example, to preset the bus speed
;    to 33 MHz, change the LocalBusSpeed line to:
;    {LocalBusSpeed, 0, &(!REG_VT_DWORD), 33} +
;  To preset DMA enabled change the DmaEnabled line to:
;    {DmaEnabled, 0, &(!REG_VT_DWORD), 1} +

		set ParametersValues = { +
				{LocalBusSpeed, 0, $(!REG_VT_DWORD), 0} +
		{DmaEnabled, 0, $(!REG_VT_DWORD), 0x21} +
				}

		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


;;  Turn off the Atdisk Driver

;		shell "registry.inf" RemoveServicesEntry "Atdisk"
;		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


;;  Turn off the Atapi Driver

;		shell "registry.inf" RemoveServicesEntry "Atapi"
;		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

;;  Set the ErrorControl value of ATAPI
		OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services\atapi" $(!REG_KEY_SET_VALUE) NtAtapiHandle
		ifstr(i) $(NtAtapiHandle) != ""
			SetRegValue $(NtAtapiHandle) {"ErrorControl",0,$(!REG_VT_DWORD),$(!SERVICE_ERROR_IGNORE)}
			CloseRegKey $(NtAtapiHandle)
		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
    AddSectionKeyFileToCopyList   Files-ScsiMiniportDrivers         +
						  ConfigNT                 +
						  $(SrcDir)                      +
						  $(!STF_WINDOWSSYSPATH)

    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 = "CMD 64xx 32-Bit IDE Adapter"
    String2 = "Please enter the full path to the CMD 64xx 32-Bit IDE "+
		      "Adapter files.  Then choose Continue."
    String3 = "The CMD 64xx 32-Bit IDE 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  = "CMD 64xx 32-Bit IDE Distribution Disk"  , TAGFILE = disk1

[Files-ScsiMiniportDrivers]
Csa64xx = 1,csa64xx.sys , SIZE=48960
ConfigNT = 1,cmdcfgNT.exe , SIZE=48128
Download Driver Pack

How To Update Drivers Manually

After your driver has been downloaded, follow these simple steps to install it.

  • Expand the archive file (if the download file is in zip or rar format).

  • If the expanded file has an .exe extension, double click it and follow the installation instructions.

  • Otherwise, open Device Manager by right-clicking the Start menu and selecting Device Manager.

  • Find the device and model you want to update in the device list.

  • Double-click on it to open the Properties dialog box.

  • From the Properties dialog box, select the Driver tab.

  • Click the Update Driver button, then follow the instructions.

Very important: You must reboot your system to ensure that any driver updates have taken effect.

For more help, visit our Driver Support section for step-by-step videos on how to install drivers for every file type.

server: web1, load: 1.12