;******************************************************************************* ;** ;** File Name: OEMSETUP.INF ;** ;** Author: Dan Updegraff, based on Sidewinder INF. ;** ;** Version: 1.0 ;** ;** Copyright 1999 by Eastman Kodak Company, Inc, all rights reserved. ;** ;** ;******************************************************************************* ;** D E S C R I P T I O N ;******************************************************************************* ;** ;** This INF program is written to facilitate adding the Kodak 8660/8650 port ;** monitor. This INF program will be called during the "Add Port" selection ;** of the Printer's properties dialog box. ;** ;******************************************************************************* ;** R E V I S I O N H I S T O R Y ;******************************************************************************* ;** ;** Date Author Description ;** -------- ------ --------------------------------------------- ;** 11/04/99 dju Original version ;** ;******************************************************************************* ;------------------------------------------------------------------------- ; Header format to be used at the front of all INF sections ; is as follows: ;------------------------------------------------------------------------- ;************************************************************************* ; ; SECTION: sectionname ; ; PURPOSE: <describe purpose of section> ; ;************************************************************************* ;[sectionname] ; <INF language statements used to support this section go here....> ; ;************************************************************************* ; end of section sectionname ;************************************************************************* ;************************************************************************* ; ; SECTION: DebugVars ; ; PURPOSE: This section controls the output of Debug Strings ; ;************************************************************************* [DebugVars] STF_DISPLAYDEBUGCONTROL = 0 ;************************************************************************* ; end of section DebugVars ;************************************************************************* ;************************************************************************* ; ; SECTION: InitBaseVars ; ; PURPOSE: This section Initializes general constants ; ;************************************************************************* [InitBaseVars] KeyNull = "" MAXIMUM_ALLOWED = 33554432 KeyInfo = {} RegistryErrorIndex = NO_ERROR NoTitle = 0 CurrentControlSet = "SYSTEM\CurrentControlSet" ServicesBaseName = $(CurrentControlSet)"\Services" !RegLastError = NO_ERROR [RegistryErrorSetup] RegistryErrorIndex = ^(RegistryErrors$(!STF_LANGUAGE),1) RegistryErrorList = ^(RegistryErrors$(!STF_LANGUAGE),2) ;************************************************************************* ; end of section InitBaseVars ;************************************************************************* ;************************************************************************* ; ; SECTION: Identification ; ; PURPOSE: This section defines which element is being installed ; ;************************************************************************* [Identification] OptionType = MONITOR ;************************************************************************* ; end of section Identification ;************************************************************************* ;************************************************************************* ; ; SECTION: Options ; ; PURPOSE: This section defines the string to be used ; ;************************************************************************* [Options] "Kodak SCSI Port" = EKPSCS2A ;************************************************************************* ; end of section Options ;************************************************************************* ;************************************************************************* ; ; SECTION: FileConstants ; ; PURPOSE: This section provides defined constants ; ;************************************************************************* [FileConstants] ; ; Utility INF file used to support added software services ; subroutineinf = "SUBROUTN.INF" Exit_Code = 0 ; ; ; Software services definitions ; ;;; ProductSoftwareName = "EKSWDR03" ;;; ProductSoftwareImagePath = "\SystemRoot\System32\EKSWDR03.sys" ;;; ProductErrorControl = 1 ;;; ProductStart = 2 ;;; ProductType = 1 ;;; ParmLPT1Value = 3 ;;; ParmLPT2Value = 3 ;;; ParmLPT3Value = "" ;;; SecurityValue = "" ; ; Registry Keys definitions ; ;;; ProductKeyName = $(!NTN_ServiceBase)"\"$(ProductSoftwareName)"\DisplayName" ;;; ParamKeyName = $(!NTN_ServiceBase)"\"$(ProductSoftwareName)"\Parameters" ;;; SecurityKeyName = $(!NTN_ServiceBase)"\"$(ProductSoftwareName)"\Security" ;************************************************************************* ; end of section FileConstants ;************************************************************************* ;************************************************************************* ; ; SECTION: GeneralConstants ; ; PURPOSE: This section defines additional constants used for ; comparisons ; ;************************************************************************* [GeneralConstants] KeyNull = "" MAXIMUM_ALLOWED = 33554432 RegistryErrorIndex = NO_ERROR KeyProduct = "" KeyParameters = "" TRUE = 1 FALSE = 0 NoTitle = 0 ;************************************************************************* ; end of section GeneralConstants ;************************************************************************* ;************************************************************************* ; ; SECTION: Identify ; ; PURPOSE: This section returns identification information used for ; identifying what elements are being installed ; ;************************************************************************* [Identify] read-syms Identification set Status = STATUS_SUCCESSFUL set Identifier = $(OptionType) set Media = #("Source Media Descriptions", 1, 1) Return $(Status) $(Identifier) $(Media) ;************************************************************************* ; end of section Identify ;************************************************************************* ;************************************************************************* ; ; SECTION: ReturnOptions ; ; PURPOSE: This section provides the return status of the installation ; ;************************************************************************* [ReturnOptions] set Status = STATUS_FAILED set OptionList = {} set OptionTextList = {} set LanguageList = ^(LanguagesSupported, 1) Ifcontains(i) $($0) in $(LanguageList) goto returnoptions else set Status = STATUS_NOLANGUAGE goto finish_ReturnOptions endif returnoptions = + set OptionList = ^(Options, 0) set OptionTextList = ^(OptionsText$($0), 1) set Status = STATUS_SUCCESSFUL finish_ReturnOptions = + Return $(Status) $(OptionList) $(OptionTextList) ;************************************************************************* ; end of section ReturnOptions ;************************************************************************* ;************************************************************************* ; ; SECTION: InstallOption ; ; PURPOSE: This section starts the installation process ; ;************************************************************************* [InstallOption] set Status = STATUS_FAILED set Option = $($1) set SrcDir = $($2) set AddCopy = $($3) set DoCopy = $($4) set DoConfig = $($5) set LanguageList = ^(LanguagesSupported, 1) Debug-Output "Install option" ;----------------------------- read-syms FileConstants read-syms GeneralConstants ; Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "NONFATAL", $(SrcDir) ;----------------------------- ; ; Make sure that the Language used is supported ; Ifcontains(i) $($0) in $(LanguageList) else ; ; Language is not supported - return to caller ; set Status = STATUS_NOLANGUAGE goto finish_InstallOption endif read-syms Strings$($0) set OptionList = ^(Options, 0) ; ; Make sure that the Option selected is supported ; ifcontains $(Option) in $(OptionList) else ; ; Option is not supported - return to caller ; goto finish_InstallOption endif set OptionList = "" set MonitorOption = #(Options, $(Option), 1) ; ; Now install the option selected ; installtheoption = + ifstr(i) $(AddCopy) == "YES" install Install-AddCopyOption ifstr(i) $(STF_INSTALL_OUTCOME) != "STF_SUCCESS" Debug-Output "Adding video files to copy list failed" goto finish_InstallOption 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" set MonitorPath = $(!STF_PRNMONITORPATH)"\"#(Files-PrinterMonitor, $(MonitorOption), 2) LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(MonitorPath) ifstr(i) $(STATUS) == NO set OptionText = #(OptionsText$($0), $(Option), 1) shell "subroutn.inf" SetupMessage $($0) "NONFATAL" $(String4)$(OptionText)$(String5) Debug-Output "Copying printer files failed" goto finish_InstallOption endif install Install-Configure ifstr(i) $(STF_INSTALL_OUTCOME) == "STF_FAILURE" Debug-Output "Installing printer monitor failed" goto finish_InstallOption else-ifstr(i) $(STF_INSTALL_OUTCOME) == "STF_USERQUIT" set Status = STATUS_USERCANCEL goto finish_InstallOption endif ifstr(i) $(STATUS) != "ADDED" set OptionText = #(OptionsText$($0), $(Option), 1) ifstr(i) $(STATUS) == "PRESENT" shell "subroutn.inf" SetupMessage $($0) "NONFATAL" $(String1)$(OptionText)$(String2) set Status = STATUS_SUCCESSFUL else-ifstr(i) $(STATUS) == "DENIED" shell "subroutn.inf" SetupMessage $($0) "NONFATAL" $(String6) else shell "subroutn.inf" SetupMessage $($0) "NONFATAL" $(String1)$(OptionText)$(String7) endif goto finish_InstallOption endif endif set Status = STATUS_SUCCESSFUL ; ; Setup Software Services Registry keys ; read-syms GeneralConstants read-syms FileConstants Shell "", AddSoftwareServices, + $(ProductSoftwareName), + $(ProductSoftwareName), + $(ProductSoftwareImagePath), + $(ProductErrorControl), + $(ProductStart), + $(ProductType), + $(ParmLPT1Value), + $(ParmLPT2Value), + $(ParmLPT3Value), + $(SecurityValue) ;;; Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "NONFATAL", $(String8) finish_InstallOption = + Return $(Status) ;************************************************************************* ; end of section InstallOption ;************************************************************************* ;************************************************************************* ; ; SECTION: Install-AddCopyOption ; ; PURPOSE: This section copies the Options Software to the ; Windows system32 sub-directory ; ;************************************************************************* [Install-AddCopyOption] set STF_VITAL = "" set STF_OVERWRITE = "ALWAYS" AddSectionKeyFileToCopyList Files-PrinterMonitor + $(MonitorOption) + $(SrcDir) + $(!STF_PRNMONITORPATH) set KeyList = ^( PrinterMonitorsWithHelp, 1 ) ifcontains(i) $(MonitorOption) in $(KeyList) AddSectionKeyFileToCopyList Files-PrinterMonitorHelp + $(MonitorOption) + $(SrcDir) + $(!STF_PRNMONITORPATH) endif ifstr(i) $(MonitorOption) == "lexmon" AddSectionFilesToCopyList Files-$(MonitorOption) $(SrcDir) $(!STF_PRNMONITORPATH) endif ifstr(i) $(MonitorOption) == "EKPSCS2A" AddSectionFilesToCopyList Files-$(MonitorOption) $(SrcDir) $(!STF_PRNMONITORPATH) endif ifstr(i) $(MonitorOption) == "lexlmpm" AddSectionFilesToCopyList Files-$(MonitorOption) $(SrcDir) $(!STF_PRNMONITORPATH) LoadLibrary "" $(SrcDir)mvntinst.dll !LIBMVINSTHANDLE LibraryProcedure Directory $(!LIBMVINSTHANDLE), GetMarkVisionDirectory set !MVDirectory = $(Directory) AddSectionFilesToCopyList Files-MarkVision $(SrcDir) $(!MVDirectory) endif exit ;************************************************************************* ; end of section Install-AddCopyOption ;************************************************************************* ;************************************************************************* ; ; SECTION: Install-DoCopyOption ; ; PURPOSE: This section calls copy files in copy list ; ;************************************************************************* [Install-DoCopyOption] CopyFilesInCopyList exit ;************************************************************************* ; end of section Install-DoCopyOption ;************************************************************************* ;************************************************************************* ; ; SECTION: Install-Configure ; ; PURPOSE: This section provides a call to configure the ; monitor port ; ;************************************************************************* [Install-Configure] ifstr(i) $(MonitorOption) == "lexmon" LoadLibrary "" $(!STF_CWDDIR)lexcfg.cpl !LIBCFGHANDLE LibraryProcedure STATUS $(!LIBCFGHANDLE), CreateInteractShortcut LibraryProcedure STATUS, $(!LIBCFGHANDLE), LexCfgInf FreeLibrary $(!LIBCFGHANDLE) endif set Model = $(Option) set Monitor = #(Files-PrinterMonitor, $(MonitorOption), 2) LibraryProcedure STATUS,$(!LIBHANDLE), SetupAddPrinterMonitor + $(Model) + $(!STF_PRNENVIRONM) + $(Monitor) + $(!STF_PRINTSERVER) ifstr(i) $(MonitorOption) == "lexlmpm" LibraryProcedure Result, $(!LIBMVINSTHANDLE), CreateMVRegistryEntries endif ifstr(i) $(MonitorOption) == "lexlmpm" LibraryProcedure Result, $(!LIBMVINSTHANDLE), CreateMVShortcut endif ifstr(i) $(MonitorOption) == "lexlmpm" FreeLibrary $(!LIBMVINSTHANDLE) endif exit ;************************************************************************* ; end of section Install-Configure ;************************************************************************* ;************************************************************************* ; ; SECTION: ExternalInstallOption ; ; PURPOSE: This section updates the Registry keys for control ; print environment ; ;************************************************************************* [ExternalInstallOption] Set !G:DebugOutputControl = 0 set Exit_Code = $(!SETUP_ERROR_GENERAL) set DrivesToFree = {} install LoadSetupLibrary ifstr(i) $(STF_LANGUAGE) == "" goto end else-ifstr(i) $(OPTION) == "" goto end else-ifstr(i) $(ADDCOPY) == "" goto end else-ifstr(i) $(DOCOPY) == "" goto end else-ifstr(i) $(DOCONFIG) == "" goto end endif read-syms PlatformID read-syms ProductType ifstr(i) $(STF_PLATFORM) == $(PlatformID_I386) set STF_PRNPLATFORM = "w32x86" set STF_PRNENVIRONM = "Windows NT x86" else-ifstr(i) $(STF_PLATFORM) == $(PlatformID_Mips) set STF_PRNPLATFORM = "w32mips" set STF_PRNENVIRONM = "Windows NT R4000" else-ifstr(i) $(STF_PLATFORM) == $(PlatformID_PPC) set STF_PRNPLATFORM = "w32ppc" set STF_PRNENVIRONM = "Windows NT PowerPC" else-ifstr(i) $(STF_PLATFORM) == $(PlatformID_Alpha) set STF_PRNPLATFORM = "w32alpha" set STF_PRNENVIRONM = "Windows NT Alpha_AXP" else goto end endif read-syms UiVars detect UiVars read-syms Strings$(STF_LANGUAGE) ifstr(i) $(STF_SRCDIR) != $(STF_CWDDIR) goto skip_asksource endif set STF_SRCDIR = A:\ shell "registry.inf" GetNTSource ifint $($ShellCode) != $(!SHELL_CODE_OK) else-ifstr(i) $($R0) != STATUS_SUCCESSFUL else set STF_SRCDIR = $($R1) endif read-syms LexmarkVars debug-output $(OPTION) Split-String $(STF_SRCDIR) "\" SrcDirList set TestItem = *( $(SrcDirList), 3 ) ifstr(i) $(TestItem) == $(STF_PLATFORM) set STF_SRCDIR = *( $(SrcDirList), 1 )"\" endif set TempSrcDir = $(STF_SRCDIR)"LexmarkBackSlashTest" Split-String $(TempSrcDir) "\" SrcDirList QueryListSize ListSize $(SrcDirList) set TestItem = *( $(SrcDirList), $(ListSize) ) ifstr(i) $(TestItem) != "LexmarkBackSlashTest" set STF_SRCDIR = $(STF_SRCDIR)"\" endif ifstr(i) $(OPTION) == $(LexDLCOption) ifstr(i) $(STF_PLATFORM) == $(PlatformID_I386) set STF_SRCDIR = $(STF_SRCDIR)$(LexSrcDir)"\x86\" else set STF_SRCDIR = $(STF_SRCDIR)$(LexSrcDir)"\"$(STF_PLATFORM)"\" endif set LexmarkFile = $(STF_SRCDIR)$(LexDLCFile) debug-output $(STF_SRCDIR) debug-output $(LexmarkFile) LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(LexmarkFile) ifstr(i) $(STATUS) == YES debug-output $(LexmarkFile)" exists" goto skip_asksource else debug-output $(LexmarkFile)" does not exist" endif else-ifstr(i) $(OPTION) == $(LexIPOption) ifstr(i) $(STF_PLATFORM) == $(PlatformID_I386) set STF_SRCDIR = $(STF_SRCDIR)$(LexSrcDir)"\x86\" else set STF_SRCDIR = $(STF_SRCDIR)$(LexSrcDir)"\"$(STF_PLATFORM)"\" endif set LexmarkFile = $(STF_SRCDIR)$(LexIPFile) debug-output $(STF_SRCDIR) debug-output $(LexmarkFile) LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(LexmarkFile) ifstr(i) $(STATUS) == YES debug-output $(LexmarkFile)" exists" goto skip_asksource else debug-output $(LexmarkFile)" does not exist" endif endif shell "subroutn.inf" DoAskSource $(STF_SRCDIR) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "shelling DoAskSource failed" goto end endif ifstr(i) $($R0) == STATUS_SUCCESSFUL set STF_SRCDIR = $($R1) ifstr(i) $($R2) != "" set DrivesToFree = >($(DrivesToFree), $($R2)) endif else goto end endif skip_asksource = + LibraryProcedure IsFullPath, $(!LIBHANDLE), CheckPathFullPathSpec $(STF_PRNMONITORPATH) ifstr(i) $(IsFullPath) == "NO" LibraryProcedure STATUS, $(!LIBHANDLE), ProcessForUNC $(STF_PRNMONITORPATH) ifstr(i) $(STATUS) == "ERROR" shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" $(String3) goto end else-ifstr(i) $(STATUS) == "NOT-UNC" shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" $(String3) goto end else-ifstr(i) $(STATUS) == "UNC-FAILCONNECT" shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" $(String3) goto end else set STF_PRNMONITORPATH = $(STATUS) endif endif shell "" InstallOption $(STF_LANGUAGE) $(OPTION) $(STF_SRCDIR) $(ADDCOPY) $(DOCOPY) $(DOCONFIG) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "Execing InstallOption failed" goto end endif ifstr(i) $($R0) == STATUS_SUCCESSFUL set Exit_Code = $(!SETUP_ERROR_SUCCESS) else-ifstr(i) $($R0) == STATUS_USERCANCEL set Exit_Code = $(!SETUP_ERROR_USERCANCEL) endif end =+ ForListDo $(DrivesToFree) LibraryProcedure STATUS,$(!LIBHANDLE), DeleteNetConnection $($) "TRUE" EndForListDo install FreeSetupLibrary exit ;************************************************************************* ; end of section ExternalInstallOption ;************************************************************************* ;************************************************************************* ; ; SECTION: LoadSetupLibrary ; ; PURPOSE: This section loads the setup library ; ;************************************************************************* [LoadSetupLibrary] LoadLibrary "x" $(!STF_CWDDIR)setupdll.dll !LIBHANDLE exit ;************************************************************************* ; end of section LoadSetupLibrary ;************************************************************************* ;************************************************************************* ; ; SECTION: FreeSetupLibrary ; ; PURPOSE: This section frees the setup library ; ;************************************************************************* [FreeSetupLibrary] FreeLibrary $(!LIBHANDLE) exit ;************************************************************************* ; end of section FreeSetupLibrary ;************************************************************************* ;************************************************************************* ; ; SECTION: PlatformID ; ; PURPOSE: This section provides the list of supported CPU ; chip sets ; ;************************************************************************* [PlatformID] PlatformID_PPC = ppc PlatformID_I386 = I386 PlatformID_Mips = Mips PlatformID_Alpha = Alpha ;************************************************************************* ; end of section PlatformID ;************************************************************************* ;************************************************************************* ; ; SECTION: UiVars ; ; PURPOSE: This section provides system environment based variables ; ;************************************************************************* [UiVars] STF_CONTROLSET = CurrentControlSet STF_WINDOWSPATH = "" ? $(!LIBHANDLE) GetWindowsNtDir STF_WINDOWSSYSPATH = "" ? $(!LIBHANDLE) GetWindowsNtSysDir STF_PRNMONITORPATH = "" ? $(!LIBHANDLE) GetWindowsNtSysDir ;************************************************************************* ; end of section UiVars ;************************************************************************* ;************************************************************************* ; ; SECTION: LexmarkVars ; ; PURPOSE: This section provides an example of how to setup ; product unique variables ; ;************************************************************************* [LexmarkVars] LexDLCOption = "Lexmark DLC Network Port" LexDLCFile = "lexmon.dll" LexIPOption = "Lexmark TCP/IP Network Port" LexIPFile = "lexlmpm.dll" LexSrcDir = "drvlib\print\lexmark" ;************************************************************************* ; end of section LexmarkVars ;************************************************************************* ;************************************************************************* ; ; SECTION: PrinterMonitorsWithHelp ; ; PURPOSE: This section provides an example of how to setup ; product that supplies help files ; ;************************************************************************* [PrinterMonitorsWithHelp] decpsmon lexmon ;************************************************************************* ; end of section PrinterMonitorsWithHelp ;************************************************************************* ;************************************************************************* ; ; SECTION: Source Media Descriptions ; ; PURPOSE: This section defines where to find source media software ; 1 is for the workstation CD-ROM ; 2 is for the Setup diskette ; ;************************************************************************* [Source Media Descriptions] 1 = "Windows NT Workstation CD-ROM" , TAGFILE = cdrom_w.40 2 = "Setup Diskette" , TAGFILE = \*.* ;************************************************************************* ; end of section Source Media Descriptions ;************************************************************************* ;************************************************************************* ; ; SECTION: Signature ; ; PURPOSE: This section provides file type ; ;************************************************************************* [Signature] FileType = MICROSOFT_FILE ;************************************************************************* ; end of section Signature ;************************************************************************* ;************************************************************************* ; ; SECTION: GetSignature ; ; PURPOSE: This section returns the file type to the caller ; ;************************************************************************* [GetSignature] read-syms Signature return $(FileType) ;************************************************************************* ; end of section GetSignature ;************************************************************************* ;************************************************************************* ; ; SECTION: ProductType ; ; PURPOSE: This section product type definitions ; ;************************************************************************* [ProductType] STF_PRODUCT = Winnt STF_PLATFORM = I386 ;************************************************************************* ; end of section ProductType ;************************************************************************* ;************************************************************************* ; ; SECTION: Files-EKPSCS2A ; ; PURPOSE: This section provides the definition for the Service ; software to be installed to support the printer monitor ; ;************************************************************************* [Files-EKPSCS2A] ;;;EKSWDR03 = 2,EKSWDR03.SYS , SIZE=999 ;************************************************************************* ; end of section Files-EKPSCS2A ;************************************************************************* ;************************************************************************* ; ; SECTION: Files-lexlmpm ; ; PURPOSE: This section provides an example of listing software ; located on the Windows NT workstation CD-ROM ; ;************************************************************************* [Files-lexlmpm] 1,LEXBCE.DLL , SIZE=999 1,LEXBCELM.DLL , SIZE=999 1,LEXIP32.DLL , SIZE=999 1,LEXLL32.DLL , SIZE=999 1,LEXNETUI.CNT , SIZE=999 1,LEXNETUI.DLL , SIZE=999 1,LEXNETUI.HLP , SIZE=999 1,LEXSTART.EXE , SIZE=999 1,MVFILES.LST , SIZE=999 1,MVNTINST.DLL , SIZE=999 1,MVUNINST.EXE , SIZE=999 ;************************************************************************* ; end of section Files-lexlmpm ;************************************************************************* ;************************************************************************* ; ; SECTION: Files-lexmon ; ; PURPOSE: This section provides an additional example of listing ; software located on the Windows NT workstation CD-ROM ; ;************************************************************************* [Files-lexmon] 1,INTERACT.DLL , SIZE=999 1,INTERACT.EXE , SIZE=999 1,INTERACT.HLP , SIZE=999 1,LEXCFG.CPL , SIZE=999 1,LEXCFG.HLP , SIZE=999 1,LEXLANG.DLL , SIZE=999 ;************************************************************************* ; end of section Files-lexmon ;************************************************************************* ;************************************************************************* ; ; SECTION: Files-MarkVision ; ; PURPOSE: This section provides an additional example of listing ; software located on the Windows NT workstation CD-ROM ; ;************************************************************************* [Files-MarkVision] 1,AGGUIDLL.DLL , SIZE=999 1,AGPRTGUI.DLL , SIZE=999 1,CDCF.WAV , SIZE=999 1,COMMON.DLL , SIZE=999 1,CPEF.WAV , SIZE=999 1,CPF.WAV , SIZE=999 1,CPJF.WAV , SIZE=999 1,DEFAULTS.PSF , SIZE=999 1,DFF.WAV , SIZE=999 1,FFF.WAV , SIZE=999 1,LEXMV95.HLP , SIZE=999 1,LPEF.WAV , SIZE=999 1,MARKVIS.CNT , SIZE=999 1,MARKVIS.EXE , SIZE=999 1,MARKVIS.HLP , SIZE=999 1,MFF.WAV , SIZE=999 1,MVGUIDLL.DLL , SIZE=999 1,MVPO_SUN.DLL , SIZE=999 1,MVPO_WRI.DLL , SIZE=999 1,MVPRM.DLL , SIZE=999 1,MVPRTGUI.DLL , SIZE=999 1,MVPRTMGR.DLL , SIZE=999 1,MVPRTOBJ.DLL , SIZE=999 1,MVRESDLL.DLL , SIZE=999 1,OBFF.WAV , SIZE=999 1,OPTRADEF.PSF , SIZE=999 1,OPTRAE.HLP , SIZE=999 1,OPTRCDEF.PSF , SIZE=999 1,OPTRPDEF.PSF , SIZE=999 1,PNUIF.WAV , SIZE=999 1,PRINTREE.DLL , SIZE=999 1,RESOURCE.HLP , SIZE=999 1,RPSF.WAV , SIZE=999 1,RTCF.WAV , SIZE=999 1,SFGUIDLL.DLL , SIZE=999 1,SFPRTGUI.DLL , SIZE=999 1,SPF.WAV , SIZE=999 1,TCOF.WAV , SIZE=999 1,TYF.WAV , SIZE=999 1,VERIFY.TXT , SIZE=999 ;************************************************************************* ; end of section Files-MarkVision ;************************************************************************* ;************************************************************************* ; ; SECTION: Files-PrinterMonitor ; ; PURPOSE: This section describes where to find the printer monitor ; software which will be installed ; ;************************************************************************* [Files-PrinterMonitor] decpsmon = 1,DECPSMON.DLL , SIZE=999 hpmon = 1,HPMON.DLL , SIZE=999 lexlmpm = 1,LEXLMPM.DLL , SIZE=999 lexmon = 1,LEXMON.DLL , SIZE=999 localmon = 1,LOCALMON.DLL , SIZE=999 scsimon = 1,SCSIMON.DLL , SIZE=999 bitmon = 1,BITMON.DLL , SIZE=999 EKPSCS2A = 2,EKPSCS2A.DLL , SIZE=999 ;************************************************************************* ; end of section Files-PrinterMonitor ;************************************************************************* ;************************************************************************* ; ; SECTION: Files-PrinterMonitorHelp ; ; PURPOSE: This section describes where to find monitor help files ; to be installed ; ;************************************************************************* [Files-PrinterMonitorHelp] decpsmon = 1,DECPSMON.HLP , SIZE=441716 hpmon = 1,HPMON.HLP , SIZE=999 lexmon = 1,LEXMON.HLP , SIZE=999 ;************************************************************************* ; end of section Files-PrinterMonitorHelp ;************************************************************************* ;************************************************************************* ; ; SECTION: LanguagesSupported ; ; PURPOSE: This section lists the languages supported by the monitor ; which is being installed ; ;************************************************************************* [LanguagesSupported] ENG ;************************************************************************* ; end of section LanguagesSupported ;************************************************************************* ;************************************************************************* ; ; SECTION: OptionsTextENG ; ; PURPOSE: This section provides the strings used for english ; translations. Each language supported must provide ; an OptionText<language> ; ; Comment: This section maybe localized ; ;************************************************************************* [OptionsTextENG] "Local Port" = "Local Port" "Digital Network Port" = "Digital Network Port" "Lexmark DLC Network Port" = "Lexmark DLC Network Port" "Lexmark TCP/IP Network Port" = "Lexmark TCP/IP Network Port" "SCSI Port" = "SCSI Port" "Kodak ECP1 Port" = "Kodak ECP1 Port" "BitBucket Port" = "Bitbucket Port" ;************************************************************************* ; end of section OptionsTextENG ;************************************************************************* ;************************************************************************* ; ; SECTION: StringsENG ; ; PURPOSE: This section provides the strings used for english ; based dialog boxes. Each language supported must provide ; a Strings<language> ; ; Comment: This section maybe localized ; ;************************************************************************* [StringsENG] String1 = "The monitor " String2 = " is already installed." String3 = "Failed to connect to the print server." String4 = "The monitor files for the selected monitor " String5 = " couldn't be copied. Failed to install the monitor." String6 = "Access is denied. You must be logged on as a member of the Administrators "+ "group to carry out this operation." String7 = " could not be installed." ;************************************************************************* ; end of section StringsENG ;************************************************************************* ;************************************************************************* ; ; SECTION: ProgressCopyENG ; ; PURPOSE: This section provides the strings used for english ; based dialog boxes. Each language supported must provide ; a ProgressCopy<language> ; ; Comment: This section maybe localized ; ;************************************************************************* [ProgressCopyENG] ProCaption = "Windows NT Setup" ProCancel = "Cancel" ProCancelMsg = "Windows NT is not correctly installed. "+ "Are you sure you want to cancel copying files?" ProCancelCap = "Setup Message" ProText1 = "Copying:" ProText2 = "To:" ;************************************************************************* ; end of section ProgressCopyENG ;************************************************************************* ;************************************************************************* ; ; SECTION: RegistryErrorString ; ; PURPOSE: Translate a numeric registry error code into a string ; <unchanged from Microsoft's NDIS.INF example> ; ; ARGUMENTS: $0 Registry error code ; ; RETURNS: $R0 String containing displayable text in language ; ; REFERENCES: !STF_LANGUAGE -- global "user's language" variable; ; see [RegistryErrorSetup] ; ; MODIFIES: Nothing ; ; ;************************************************************************* [RegistryErrorString] read-syms RegistryErrorSetup read-syms RegistryErrorUnknown$(!STF_LANGUAGE) set RE_String = *($(RegistryErrorList),~($(RegistryErrorIndex),$($0))) Ifstr $(RE_String) == "" set RE_String = $(Error_Bogus) endif return $(RE_String) ;************************************************************************* ; end of section RegistryErrorString ;************************************************************************* ;************************************************************************* ; ; SECTION: BaseServiceKey ; ; PURPOSE: Return an open key handle to the top of the services tree ; <unchanged from Microsoft's NDIS.INF example> ; ; ARGUMENTS: none ; ; RETURNS: $R0 Registry error code ; $R1 Registry key variable for SERVICES0 ; ; REFERENCES: Nothing ; ; MODIFIES: Nothing ; ;************************************************************************* [BaseServiceKey] read-syms InitBaseVars set BS_KeyServices = "" OpenRegKey $(!REG_H_LOCAL) "" $(ServicesBaseName) $(MAXIMUM_ALLOWED) BS_KeyServices Ifstr $(BS_KeyServices) == $(KeyNull) Debug-Output " could not open Services base key" set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE endif B_S_Return = + return $(RegistryErrorIndex), $(BS_KeyServices) ;************************************************************************* ; ; SECTION: ReduceInfPath ; ; PURPOSE: Process the path\name string to an INF file. If ; its path points to STF_WINDOWSSYSPATH, remove the path prefix. ; <unchanged from Microsoft's NDIS.INF example> ; ; ARGUMENTS: $0 Path\name to INF file ; ; RETURNS: $R0 Resulting string ; ; REFERENCES: Nothing ; ; MODIFIES: Nothing ; ;************************************************************************* [ReduceInfPath] Set RIP_Result = $($0) Split-String $(RIP_Result) "\" InList Set BasePath = $(!STF_WINDOWSSYSPATH)"\" Split-String $(BasePath) "\" BaseList ; ; See how many of the path elements match ; Set Indx = 0 Set Matched = 0 QueryListSize InListSize, $(InList) ForListDo $(BaseList) Set-add Indx = $(Indx),1 Ifint $(Indx) <= $(InListSize) Set Instr = *($(InList),$(Indx)) Ifstr(i) $($) == $(Instr) Set-add Matched = $(Matched),1 Endif Endif EndForListDo ; ; If all the path elements of the input path matched ; those of STF_WINDOWSSYSPATH, strip them off of the result. ; Ifint $(Indx) == $(Matched) Set RIP_Result = "" Set Indx2 = 0 ForListDo $(InList) Set-add Indx2 = $(Indx2),1 Ifint $(Indx2) > $(Indx) Set RIP_Result = $(RIP_Result)$($) Endif EndForListDo Endif Return $(RIP_Result) ;************************************************************************* ; end of section ReduceInfPath ;************************************************************************* ;************************************************************************* ; ; SECTION: InstallSoftwareProduct ; ; PURPOSE: Add a new component into the Registry ; <unchanged from Microsoft's NDIS.INF example> ; ; ARGUMENTS: $0 name of Manufacturer ; $1 name of Product ; $2 full INF path and name ; ; RETURNS: $R0 error code or zero if no error ; $R1 Registry key variable for ; SOFTWARE\Manufacturer\Product\Version key ; $R2 Registry key variable for ; ...\NetRules ; ; REFERENCES: none ; ; MODIFIES: none ; ;************************************************************************* [InstallSoftwareProduct] read-syms InitBaseVars set IS_MfgName = $($0) set IS_ProdName = $($1) set IS_Infname = $($2) set IS_KeySoftware = "" set IS_KeyMfg = "" set IS_KeyProduct = "" set IS_KeyVersion = "" set IS_KeyNetRules = "" set IS_MfgCreated = 1 set IS_ProductCreated = 1 ; ; Validate the arguments passed in ; set RegistryErrorIndex = INVALID_DATA_PASSED Ifstr(i) $(IS_MfgName) == "" goto I_S_Return endif Ifstr(i) $(IS_ProdName) == "" goto I_S_Return endif set RegistryErrorIndex = NO_ERROR ; ; Open the HKEY_LOCAL_MACHINE\SOFTWARE key ; OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_SoftwareBase) $(MAXIMUM_ALLOWED) IS_KeySoftware Ifstr $(IS_KeySoftware) == $(KeyNull) set RegistryErrorIndex = UNABLE_ACCESS_SOFTWARE_REG goto I_S_Return endif ; ; Create the Manufacturer's key if necessary ; CreateRegKey $(IS_KeySoftware) {$(IS_MfgName),$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" IS_KeyMfg Ifstr $(IS_KeyMfg) == $(KeyNull) set IS_MfgCreated = 0 OpenRegKey $(IS_KeySoftware) "" $(IS_MfgName) $(MAXIMUM_ALLOWED) IS_KeyMfg Ifstr $(IS_KeyMfg) == $(KeyNull) set RegistryErrorIndex = UNABLE_OPEN_MICROSOFT_KEY goto I_S_Return endif endif ; ; Create the Software Product key if necessary ; CreateRegKey $(IS_KeyMfg) {$(IS_ProdName),$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" IS_KeyProduct Ifstr $(IS_KeyProduct) == $(KeyNull) set IS_ProductCreated = 0 OpenRegKey $(IS_KeyMfg) "" $(IS_ProdName) $(MAXIMUM_ALLOWED) IS_KeyProduct Ifstr $(IS_KeyProduct) == $(KeyNull) set RegistryErrorIndex = UNABLE_CREATE_PRODUCT_KEY goto I_S_Return endif endif ; ; Create the software product version key. ; CreateRegKey $(IS_KeyProduct) {"CurrentVersion",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" IS_KeyVersion Ifstr $(IS_KeyVersion) == $(KeyNull) OpenRegKey $(IS_KeyProduct) "" "CurrentVersion" $(MAXIMUM_ALLOWED) IS_KeyVersion Ifstr $(IS_KeyVersion) == $(KeyNull) set RegistryErrorIndex = UNABLE_CREATE_PRODUCT_VERSION goto I_S_Return endif endif set RegistryErrorIndex = NO_ERROR ; ; Create the NetRules key ; CreateRegKey $(IS_KeyVersion) {NetRules,$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" IS_KeyNetRules Ifstr $(IS_KeyNetRules) == $(KeyNull) OpenRegKey $(IS_KeyVersion) "" NetRules $(MAXIMUM_ALLOWED) IS_KeyNetRules Ifstr $(IS_KeyNetRules) == $(KeyNull) set RegistryErrorIndex = UNABLE_CREATE_NETRULES_KEY goto I_S_Return endif endif ; ; Set the "Infname" value if non-null; reduce it if it's in %SystemRoot% ; Ifstr $(IS_Infname) != "" Shell "", ReduceInfPath, $(IS_Infname) SetRegValue $(IS_KeyNetRules) {InfName,$(NoTitle),$(!REG_VT_SZ),$($R0)} endif ; ; Exit, leaving $(IS_KeyVersion) and $(IS_KeyNetRules) open for the caller... ; I_S_Return = + Ifstr $(IS_KeyProduct) != "" Ifint $(IS_ProductCreated) == 1 Ifstr(i) $(RegistryErrorIndex) != NO_ERROR Debug-Output " DeleteRegTree Product Key" ;DeleteRegTree $(IS_KeyProduct) "" set IS_KeyProduct = "" endif endif Ifstr $(IS_KeyProduct) != "" CloseRegKey $(IS_KeyProduct) endif endif Ifstr $(IS_KeyMfg) != "" Ifint $(IS_MfgCreated) == 1 Ifstr(i) $(RegistryErrorIndex) != NO_ERROR ;DeleteRegTree $(IS_KeyMfg) "" Debug-Output " DeleteRegTree Manufacturer Key" set IS_KeyMfg = "" endif endif Ifstr $(IS_KeyMfg) != "" CloseRegKey $(IS_KeyMfg) endif endif Ifstr $(IS_KeySoftware) != "" CloseRegKey $(IS_KeySoftware) endif return $(RegistryErrorIndex), $(IS_KeyVersion), $(IS_KeyNetRules) ;************************************************************************* ; end of section InstallSoftwareProduct ;************************************************************************* ;************************************************************************* ; ; SECTION: AddValueList ; ; PURPOSE: Given a nested list of value items, add each to the given ; key. Key is left open. ; <unchanged from Microsoft's NDIS.INF example> ; ; ARGUMENTS: $0 Registry key handle ; $1 List of value items; for example: ; { {ValueName1,0,$(!REG_VT_SZ),$(ValueData1)}, + ; {ValueName2,0,$(!REG_VT_SZ),$(ValueData2)} } ; ; RETURNS: $R0 Registry error code. ; ; ; REFERENCES: Nothing ; ; MODIFIES: Nothing ; ;************************************************************************* [AddValueList] set RegistryErrorIndex = NO_ERROR ForListDo $($1) SetRegValue $($0) $($) ifint $(RegLastError) != 0 Debug-Output " Value write fail data: "$($) Debug-Output " Value write fail key: "$($0) return UNABLE_WRITE_REGISTRY endif EndForListDo return $(RegistryErrorIndex) ;************************************************************************* ; end of section AddValueList ;************************************************************************* ;************************************************************************* ; ; SECTION: DeleteSoftwareProduct ; ; PURPOSE: Delete the given product from the Registry entirely ; <unchanged from Microsoft's NDIS.INF example> ; ; ARGUMENTS: $0 Product Key Handle ; ; RETURNS: $R0 Registry error code ; $R1 ; ; REFERENCES: Nothing ; ; MODIFIES: Nothing ; ;************************************************************************* [DeleteSoftwareProduct] set RegistryErrorIndex = NO_ERROR Debug-Output " DeleteRegTree Software Product" DeleteRegTree $($0) "" return $(RegistryErrorIndex) ;************************************************************************* ; end of section DeleteSoftwareProduct ;************************************************************************* ;************************************************************************* ; ; SECTION: CreatePrinterService ; ; PURPOSE: Create the Printer Services area entry for ; a new printer interface ; ; ARGUMENTS: $0 Name of the service (no imbedded blanks, etc.) ; $1 Display Name of service ; $2 image path string ; $3 error control [Optional] ; $4 start value [Optional] ; $5 product type [Optional] ; $6 LPT1 DMA Value [Optional] ; $7 LPT2 DMA Value [Optional] ; $8 LPT3 DMA Value [Optional] ; $9 Security Parameters [Optional] ; ; ; RETURNS: $R0 Registry error code ; $R1 Service area key handle ; $R2 Parameters key handle ; $R2 Security key handle ; ; REFERENCES: None ; ; MODIFIES: None ; ; NOTES: The Registry is automatically used. ; ; The image path format varies for drivers and other ; services. For drivers of any kind, it's an NT name space ; name. For services, it's a REG_EXPAND_SZ format Win32 name. ; ;************************************************************************* [CreatePrinterService] read-syms InitBaseVars set CS_NameOfService = $($0) set CS_DisplayName = $($1) set CS_ImagePath = $($2) set CS_ErrorControl = $($3) ifstr(i) $(CS_ErrorControl) == "" set CS_ErrorControl = 1 endif set CS_StartValue = $($4) ifstr(i) $(CS_StartValue) == "" set CS_StartValue = 2 endif set CS_TypeOfProduct = $($5) ifstr(i) $(CS_TypeOfProduct) == "" set CS_TypeOfProduct = 1 endif set CS_LPT1Value = $($6) ifstr(i) $(CS_LPT1Value) == "" set CS_LPT1Value = 3 endif set CS_LPT2Value = $($7) ifstr(i) $(CS_LPT2Value) == "" set CS_LPT1Value = 3 endif set CS_LPT3Value = $($8) ifstr(i) $(CS_LPT3Value) == "" set CS_LPT1Value = 3 endif set CS_SecurityParameters = $($9) set CS_KeyServices = "" set CS_KeyService = "" set CS_KeyTempSvc = "" set CS_KeySvcManager = "" set CS_KeyParameters = "" set CS_KeySecurity = "" set CS_UseRegistry = "YES" ; Always use the Registry for Printer Services Debug-Output " [CreatePrinterService] entered for "$(CS_NameOfService) Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "NONFATAL", "CreatePrinterService" ; ; Get the base key handle for the services area if not passed in ; Ifstr(i) $(CS_KeyServices) == "" Shell "", BaseServiceKey set RegistryErrorIndex = $($R0) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE goto C_S_Return endif set CS_KeyServices = $($R1) set CS_KeyServicesOpened = $($R1) Endif ; ; Try to open the Printer service ; OpenRegKey $(CS_KeyServices) "" $(CS_NameOfService) $(MAXIMUM_ALLOWED) + CS_KeyTempSvc ifstr(i) $(CS_UseRegistry) == "YES" ; ; We take this path when we use the Registry for Service support ; Debug-Output " [CreatePrinterService] "$(CS_NameOfService)" using Registry" ; ; Create our own service ; ifstr(i) $(CS_KeyTempSvc) == $(KeyNull) CreateRegKey $(CS_KeyServices) {$(CS_NameOfService),$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" CS_KeyTempSvc else Debug-Output " service key "$(CS_NameOfService)" already existed" Set RegistryErrorIndex = UNABLE_CREATE_CONFIGURE_SERVICE CloseRegKey $(CS_KeyTempSvc) Goto C_S_Return endif Ifstr(i) $(CS_KeyTempSvc) == $(KeyNull) Debug-Output " could not create service key "$(CS_NameOfService) Set RegistryErrorIndex = UNABLE_CREATE_CONFIGURE_SERVICE CloseRegKey $(CS_KeyTempSvc) Goto C_S_Return else set NewValueList = {+ {DisplayName,$(NoTitle),$(!REG_VT_SZ),$(CS_DisplayName)},+ {ErrorControl,$(NoTitle),$(!REG_VT_DWORD),$(CS_ErrorControl)},+ {ImagePath,$(NoTitle),$(!REG_VT_EXPAND_SZ),$(CS_ImagePath)},+ {Start,$(NoTitle),$(!REG_VT_DWORD),$(CS_StartValue)},+ {Type,$(NoTitle),$(!REG_VT_DWORD),$(CS_TypeOfProduct)},+ } Shell "", AddValueList, $(CS_KeyTempSvc), $(NewValueList) Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "NONFATAL", "AddValueList" endif else ; ; We take this path if we are not using the Registry for Service support ; This branch is left for future use ; Debug-Output " [CreatePrinterService] "$(CS_NameOfService)" using CreatePrinterService() wrapper" endif ; ; Open or Create the Parameters subkey ; CreateRegKey $(CS_KeyTempSvc) {"Parameters",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" CS_KeyParameters ifstr $(CS_KeyParameters) == $(KeyNull) ; ;Parameters already exist - So open it instead ; OpenRegKey $(CS_KeyTempSvc) "" "Parameters" $(MAXIMUM_ALLOWED) + CS_KeyParameters endif Ifstr $(CS_KeyParameters) == $(KeyNull) ; ; Failed to open or create Parameters ; set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY CloseRegKey $(CS_KeyTempSvc) goto C_S_Return else ; ; Created or Opened Parameters ; Ifstr(i) $(CS_LPT1Value) != "" ; ;Process LPT1 DMA value which was supplied ; ; Open or Create the LPT1 subkey ; CreateRegKey $(CS_KeyParameters) {"LPT1",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" CS_KeyService ifstr $(CS_KeyService) == $(KeyNull) OpenRegKey $(CS_KeyTempSvc) "" "LPT1" $(MAXIMUM_ALLOWED) "" CS_KeyService endif Ifstr $(CS_KeyService) == $(KeyNull) set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY CloseRegKey $(CS_KeyParameters) CloseRegKey $(CS_KeyTempSvc) goto C_S_Return else ; ; Store DMA value ; SetRegValue $(CS_KeyService) {DMA,$(NoTitle),$(!REG_VT_DWORD),$(CS_LPT1Value)} endif endif Ifstr(i) $(CS_LPT2Value) != "" ; ;Process LPT2 DMA value which was supplied ; ; Open or Create the LPT2 subkey ; CreateRegKey $(CS_KeyParameters) {"LPT2",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" CS_KeyService ifstr $(CS_KeyService) == $(KeyNull) OpenRegKey $(CS_KeyTempSvc) "" "LPT2" $(MAXIMUM_ALLOWED) "" CS_KeyService endif Ifstr $(CS_KeyService) == $(KeyNull) set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY CloseRegKey $(CS_KeyParameters) CloseRegKey $(CS_KeyTempSvc) goto C_S_Return else ; ; Store DMA value ; SetRegValue $(CS_KeyService) {DMA,$(NoTitle),$(!REG_VT_DWORD),$(CS_LPT2Value)} endif endif Ifstr(i) $(CS_LPT3Value) != "" ; ;Process LPT3 DMA value which was supplied ; ; Open or Create the LPT3 subkey ; CreateRegKey $(CS_KeyParameters) {"LPT3",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" CS_KeyService ifstr $(CS_KeyService) == $(KeyNull) OpenRegKey $(CS_KeyTempSvc) "" "LPT3" $(MAXIMUM_ALLOWED) "" CS_KeyService endif Ifstr $(CS_KeyService) == $(KeyNull) set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY CloseRegKey $(CS_KeyParameters) CloseRegKey $(CS_KeyTempSvc) goto C_S_Return else ; ; Store DMA value ; SetRegValue $(CS_KeyService) {DMA,$(NoTitle),$(!REG_VT_DWORD),$(CS_LPT3Value)} endif endif endif ; ; Open or Create the Security subkey ; CreateRegKey $(CS_KeyTempSvc) {"Security",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" CS_KeySecurity Ifstr $(CS_KeySecurity) == $(KeyNull) ; ;Security already exist - So open it instead ; OpenRegKey $(CS_KeyTempSvc) "" "Security" $(MAXIMUM_ALLOWED) CS_KeySecurity Endif Ifstr $(CS_KeySecurity) == $(KeyNull) ; ; Failed to open or create Security key ; set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY CloseRegKey $(CS_KeyTempSvc) goto C_S_Return else Ifstr(i) $(CS_SecurityParameters) != "" ; ;Process Security Parameter values which was supplied ; SetRegValue $(CS_KeySecurity) {Security,$(NoTitle),$(!REG_VT_BIN),$(CS_SecurityParameters)} endif endif set RegistryErrorIndex = NO_ERROR ; ; Return the keys and error codes ; C_S_Return = + ; Only close the services key if it was opened in this routine. Ifstr $(CS_KeyServicesOpened) != $(KeyNull) CloseRegKey $(CS_KeyServices) endif return $(RegistryErrorIndex), $(CS_KeyTempSvc), $(CS_KeyParameters), $(CS_KeySecurity) ;************************************************************************* ; end of section CreatePrinterService ;************************************************************************* ;************************************************************************* ; ; SECTION: FindService ; ; PURPOSE: Given a hardware or software component key handle, ; return a key handle to the corresponding Service entry ; <unchanged from Microsoft's NDIS.INF example> ; ; ARGUMENTS: $0 Registry key handle to primary component ; $1 type of component (adapter, etc.) ; ; RETURNS: $R0 Registry error code ; $R1 Registry key handle for Service area ; $R2 Registry key handle for Parameters subkey ; ; REFERENCES: Nothing ; ; MODIFIES: Nothing ; ; ;************************************************************************* [FindService] read-syms InitBaseVars set FS_KeyThisService = "" set FS_KeyParameters = "" set FS_KeyComponent = $($0) set FS_TypeComponent = $($1) Shell "", BaseServiceKey set FS_KeyServices = $($R1) set RegistryErrorIndex = $($R0) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR goto F_S_Return endif ; ; Obtain the all the values for the component key. ; EnumRegValue $(FS_KeyComponent) FS_ValueList ; BUGBUG: Check RegLastError set FS_SvcName = "" ForListDo $(FS_ValueList) set FS_ValueName = *($($),1) Ifstr(i) $(FS_ValueName) == ServiceName set FS_SvcName = *($($),4) goto F_S_Break1 endif EndForListDo F_S_Break1 = + Ifstr $(FS_SvcName) == $(KeyNull) set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE goto F_S_Return endif OpenRegKey $(FS_KeyServices) "" $(FS_SvcName) $(MAXIMUM_ALLOWED) FS_KeyThisService Ifstr $(FS_KeyThisService) == $(KeyNull) set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE goto F_S_Return endif OpenRegKey $(FS_KeyThisService) "" "Parameters" $(MAXIMUM_ALLOWED) FS_KeyParameters Ifstr $(FS_KeyParameters) == $(KeyNull) set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE goto F_S_Return endif F_S_Return = + Ifstr(i) $(RegistryErrorIndex) != NO_ERROR Ifstr $(FS_KeyParameters) != $(KeyNull) CloseRegKey $(FS_KeyParameters) endif Ifstr $(FS_KeyThisService) != $(KeyNull) CloseRegKey $(FS_KeyThisService) endif endif return $(RegistryErrorIndex), $(FS_KeyThisService) $(FS_KeyParameters) ;************************************************************************* ; end of section FindService ;************************************************************************* ;************************************************************************* ; ; SECTION: GetServiceParameters ; ; PURPOSE: Given a component key and type, return a list of ; all its current parameters ; <unchanged from Microsoft's NDIS.INF example> ; ; ARGUMENTS: $0 Registry key handle to primary component ; $1 type of component (adapter, etc.) ; ; RETURNS: $R0 Registry error code ; $R1 Registry key handle for Service area ; $R2 Registry key handle for Parameters subkey ; $R3 Value list of all values under Parameters subkey ; ; REFERENCES: Nothing ; ; MODIFIES: Nothing ; ;************************************************************************* [GetServiceParameters] read-syms InitBaseVars set GP_KeyComponent = $($0) set GP_KeyService = "" set GP_KeyParameters = "" set GP_ValueList = {} FindService $(GP_KeyComponent) $($1) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR goto G_P_Return endif set GP_KeyService = $($R1) set GP_KeyParameters = $($R2) EnumRegValue $(GP_KeyParameters) GP_ValueList G_P_Return = + return $(RegistryErrorIndex) $(GP_KeyService) $(GP_KeyParameters) $(GP_ValueList) ;************************************************************************* ; end of section sectionname ;************************************************************************* ;************************************************************************* ; ; SECTION: AddSoftwareServices ; ; PURPOSE: Adds all the Registry information necessary for ; a new software component. This involves creating ; the SERVICE area. ; ; ARGUMENTS: $0 service name to use (no imbedded blanks, etc.) ; $1 Display Name for service ; $2 ImagePath ; $3 error control value ; $4 start value ; $5 product type ; $6 LPT1 DMA value ; $7 LPT2 DMA value ; $8 LPT3 DMA value ; $9 Security parameter list ; ; RETURNS: $R0 error code or zero if no error ; $R1 Registry key handle for Services key ; $R2 "Parameters" key handle for Services area ; ; REFERENCES: Nothing ; ; MODIFIES: Nothing ; ;************************************************************************* [AddSoftwareServices] read-syms InitBaseVars set AS_SvcName = $($0) set AS_DisplayName = $($1) set AS_ImagePath = $($2) set AS_ErrorControl = $($3) set AS_StartValue = $($4) set AS_ProductType = $($5) set AS_LPT1Value = $($6) set AS_LPT2Value = $($7) set AS_LPT3Value = $($8) set AS_SecurityParameters = $($9) set AS_KeyVersion = "" set AS_KeyNetRules = "" set AS_KeyService = "" set AS_KeyParameters = "" set AS_KeyLinkage = "" Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "NONFATAL", "AddSoftwareServices" ; ; Create the Service entry for this product ; Shell "", CreatePrinterService,$(AS_SvcName),$(AS_DisplayName),$(AS_ImagePath),+ $(AS_ErrorControl),$(AS_StartValue),$(AS_ProductType),$(AS_LPT1Value),+ $(AS_LPT2Value),$(AS_LPT3Value),$(AS_SecurityParameters) set RegistryErrorIndex = $($R0) Ifstr(i) $(RegistryErrorIndex) != NO_ERROR goto A_S_Return endif set AS_KeyService = $($R1) set AS_KeyParameters = $($R2) set AS_KeySecurity = $($R3) A_S_Return = + Ifstr(i) $(RegistryErrorIndex) != NO_ERROR Ifstr $(AS_KeyParameters) != $(KeyNull) CloseRegKey $(AS_KeyParameters) endif Ifstr $(AS_KeySecurity) != $(KeyNull) CloseRegKey $(AS_KeySecurity) endif Ifstr $(AS_KeyService) != $(KeyNull) CloseRegKey $(AS_KeyService) endif set AS_KeyVersion = "" set AS_KeyNetRules = "" set AS_KeyService = "" set AS_KeyParameters = "" set AS_KeyLinkage = "" endif return $(RegistryErrorIndex), $(AS_KeyService), $(AS_KeyParameters), $(AS_KeySecurity) ;************************************************************************* ; end of section AddSoftwareServices ;************************************************************************* ;************************************************************************* ; ; SECTION: AddServiceProvider ; ; PURPOSE: Add a Service provider entry into the registry ; <unchanged from Microsoft's NDIS.INF example> ; ; ARGUMENTS: $0 Service provider id. i.e., tcpip ; $1 Service provder location. i.e, c:\nt\windows\system\ntlanman.dll ; $2 English name of the provider. i.e, NT Lan Manager ; $3 Class number ; ; ; RETURNS: $R0 Registry error code or zero if no error ; ; REFERENCES: Nothing ; ; MODIFIES: Nothing ; ;************************************************************************* [AddServiceProvider] read-syms InitBaseVars set RegistryErrorIndex = NO_ERROR set ClassNum = $($3) ifstr(i) $(ClassNum) == "" set ClassNum = 8 endif OpenRegKey $(!REG_H_LOCAL) "" $(CurrentControlSet)"\control\ServiceProvider\order" $(MAXIMUM_ALLOWED) OrderKey ifstr(i) $(OrderKey) == $(KeyNull) CreateRegKey $(!REG_H_LOCAL) {$(CurrentControlSet)"\control\ServiceProvider\Order",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" OrderKey SetRegValue $(OrderKey) {ExcludedProviders,$(NoTitle),$(!REG_VT_MULTI_SZ),{}} endif GetRegValue $(OrderKey) "ProviderOrder" OrderValue set Order = *($(OrderValue), 4 ) ifstr(i) $(OrderValue) == $(KeyNull) goto AddFirstProvider else-ifstr(i) $(Order) == $(KeyNull) goto AddFirstProvider else goto AddProvider endif AddFirstProvider = + SetRegValue $(OrderKey) {ProviderOrder,$(NoTitle),$(!REG_VT_MULTI_SZ),{$($0)}} goto WriteProviderInfo AddProvider = + ifContains(i) $($0) in $(Order) ; Enable if we cannot have the same provider ; ;set RegistryErrorIndex = PROVIDER_ALREADY_EXISTED ;goto AddProvider_return else set Order = >($(Order),$($0)) SetRegValue $(OrderKey) {ProviderOrder,$(NoTitle),$(!REG_VT_MULTI_SZ),$(Order)} endif goto WriteProviderInfo WriteProviderInfo = + CloseRegKey $(OrderKey) OpenRegKey $(!REG_H_LOCAL) "" $(ServicesBaseName)"\"$($0)"\Serviceprovider" $(MAXIMUM_ALLOWED) ProviderKey Ifstr(i) $(ProviderKey) == $(KeyNull) CreateRegKey $(!REG_H_LOCAL) {$(ServicesBaseName)"\"$($0)"\Serviceprovider",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" ProviderKey endif set NewValueList = {{Class,$(NoTitle),$(!REG_VT_DWORD),$(ClassNum)},+ {ProviderPath, $(NoTitle), $(!REG_VT_EXPAND_SZ), $($1)},+ {Name, $(NoTitle), $(!REG_VT_SZ), $($2)}} Shell "" AddValueList $(ProviderKey) $(NewValueList) CloseRegKey $(ProviderKey) AddProvider_return = + return $(RegistryErrorIndex) ;************************************************************************* ; end of section AddServiceProvider ;************************************************************************* ;************************************************************************* ; ; SECTION: RemoveServiceProvider ; ; PURPOSE: Remove Service provider entry ; <unchanged from Microsoft's NDIS.INF example> ; ; ARGUMENTS: $0 provider name ; ; RETURNS: $R0 Registry error code or zero if no error ; ; REFERENCES: Nothing ; ; MODIFIES: Nothing ; ;************************************************************************* [RemoveServiceProvider] read-syms InitBaseVars set RegistryErrorIndex = NO_ERROR OpenRegKey $(!REG_H_LOCAL) "" $(CurrentControlSet)"\control\ServiceProvider\order" $(MAXIMUM_ALLOWED) OrderKey ifstr(i) $(OrderKey) == $(KeyNull) set RegistryErrorIndex = PROVIDER_ORDER_DOES_NOT_EXIST goto RemoveProvider_return endif GetRegValue $(OrderKey) "ProviderOrder" OrderValue set Order = *($(OrderValue), 4 ) set NewOrderList = {} set FirstTime = TRUE set Found = FALSE ForListDo $(Order) ifstr(i) $($) != $($0) ifstr(i) $(FirstTime) == TRUE set FirstTime = FALSE set NewOrderList = {$($)} else set NewOrderList = >($(NewOrderList),$($)) endif else set Found = TRUE endif EndForListDo ifstr(i) $(Found) == FALSE ; set RegistryErrorIndex = PROVIDER_ORDER_DOES_NOT_EXIST ; goto RemoveProvider_return else ifstr(i) $(NewOrderList) == {} set NewOrderList = "" endif SetRegValue $(OrderKey) {ProviderOrder,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NewOrderList)} endif OpenRegKey $(!REG_H_LOCAL) "" $(ServicesBaseName)\$($0) $(MAXIMUM_ALLOWED) ProviderKey ifstr $(ProviderKey) != $(KeyNull) DeleteRegTree $(ProviderKey) "ServiceProvider" endif RemoveProvider_return = + return $(RegistryErrorIndex) ;************************************************************************* ; ; SECTION: PrepareToCopy ; ; PURPOSE: Establish the variables required to perform ; "CopyFilesInCopyList" ; <unchanged from Microsoft's NDIS.INF example> ; ; ARGUMENTS: none ; ; RETURNS: $R0 STATUS_SUCCESSFUL ; ; REFERENCES: nothing ; ; MODIFIES: see [ProgressCopyEng] above for list of variables ; modified/created in parent context. ; ; NOTES: Read NOTES commentary for section [DoAskSource] ; ;************************************************************************* [PrepareToCopy] ; ; Read the progress copy symbols. ; Read-syms ProgressCopy$(!STF_LANGUAGE) Return STATUS_SUCCESSFUL ;************************************************************************* ; end of section PrepareToCopy ;************************************************************************* ;************************************************************************* ; ; SECTION: RemoveSoftwareComponent ; ; PURPOSE: Remove the specified software component from the ; registry. It will remove the entry in the software ; section of the registry first. Then it will remove ; the entry in the service section of the registry. ; <unchanged from Microsoft's NDIS.INF example> ; ; ARGUMENTS: $0 Manufacturer Name ; $1 Product Name ; $2 Boolean flag for zero reference count checking ; ( optional. If it is defined, skip checking ) ; ; ; RETURNS: $R0 Registry error code or zero if no error ; ; REFERENCES: Nothing ; ; MODIFIES: Nothing ; ;************************************************************************* [RemoveSoftwareComponent] Debug-Output "Remove Software Component..." read-syms InitBaseVars set RS_Manufacturer = $($0) set RS_ProductName = $($1) set RS_CheckRefCount = $($2) set RS_VersionNum = "CurrentVersion" set RS_ManufacturerKey = $(!NTN_SoftwareBase)"\"$(RS_Manufacturer) set RS_ProductKey = $(!NTN_SoftwareBase)"\"$(RS_Manufacturer)"\"$(RS_ProductName) set RS_ProductVerKey = $(!NTN_SoftwareBase)"\"$(RS_Manufacturer)"\"$(RS_ProductName)"\"$(RS_VersionNum) set RegistryErrorIndex = NO_ERROR ; ; Check the reference counter first ; ifstr(i) $(RS_CheckRefCount) != FALSE Shell "", IsRefCountEqualZero, $(RS_ProductVerKey) Ifstr(i) $($R0) != NO_ERROR Debug-Output " [RemoveSoftwareComponent] IsRefCountEqualZero returned "$($R0) goto RemoveSoftwareComponent_Return endif Ifint $($R1) == 0 set RegistryErrorIndex = REF_COUNT_NOT_ZERO goto RemoveSoftwareComponent_Return endif endif ; ; Remove the software first ; OpenRegKey $(!REG_H_LOCAL) "" $(RS_ManufacturerKey) $(MAXIMUM_ALLOWED) ProductKey Ifstr $(ProductKey) == $(KeyNull) Debug-Output " could not open Software product key" set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE goto RemoveSoftwareComponent_Return endif DeleteRegTree $(ProductKey) $(RS_ProductName) CloseRegKey $(ProductKey) ; ; Remove the service ; Shell "" RemoveService, $(RS_ProductName), "YES" Set RS_RemoveError = $($R0) Ifint $(RS_RemoveError) != 0 Debug-Output " RemoveService wrapper failed, error: "$(RS_RemoveResult) Set RegistryErrorIndex = UNABLE_REMOVE_CONFIGURE_SERVICE Goto RemoveSoftwareComponent_Return Endif RemoveSoftwareComponent_Return = + Return $(RegistryErrorIndex) ;************************************************************************* ; end of section RemoveSoftwareComponent ;************************************************************************* ;************************************************************************* ; ; SECTION: RemoveService ; ; PURPOSE: Remove a specified service from the registry. It is ; called by RemoveSoftwareComponent and ; RemoveHardwareComponent. Or, if the service is ; created by calling "CreateService", we will ; need to use this subroutine to remove it. ; <unchanged from Microsoft's NDIS.INF example> ; ; ARGUMENTS: $0 Service Name ; $1 "YES" - we use DeleteService to remove the service ; "NO" - we use DeleteRegTree to remove the ; registry tree ; ; RETURNS: $R0 Registry error code or zero if no error ; ; REFERENCES: Nothing ; ; MODIFIES: Nothing ; ;************************************************************************* [RemoveService] read-syms InitBaseVars Set RS_SvcName = $($0) Set RS_UseDelSvc = $($1) ; Make sure the service key exists first. OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services\"$(RS_SvcName) + $(MAXIMUM_ALLOWED) ServiceKey Ifstr $(ServiceKey) == $(KeyNull) Debug-Output " could not open SYSTEM Service key "$(RS_SvcName) goto RemoveService_Return endif ; Remove the NbProvider value if it exists OpenRegKey $(ServiceKey) "" "Parameters" $(MAXIMUM_ALLOWED) ParameterKey Ifstr $(ParameterKey) != $(KeyNull) DeleteRegValue $(ParameterKey) "NbProvider" CloseRegKey $(ParameterKey) Endif CloseRegKey $(ServiceKey) ifstr(i) $(RS_UseDelSvc) == "YES" ; Remove the service Set FLibraryErrCtl = 1 LibraryProcedure RS_RemoveResult $(!NCPA_HANDLE), CPlSetup, + $(!STF_HWND), DELETESVC, $(RS_SvcName) Set FLibraryErrCtl = 0 ; Check the return code Set RS_RemoveError = *($(RS_RemoveResult),1) Ifint $(RS_RemoveError) != 0 Debug-Output " RemoveService wrapper failed, error: "$(RS_RemoveResult) Set RegistryErrorIndex = UNABLE_REMOVE_CONFIGURE_SERVICE Goto RemoveService_Return Endif else OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services" + $(MAXIMUM_ALLOWED) ServiceKey Ifstr $(ServiceKey) == $(KeyNull) Debug-Output " could not open SYSTEM Service key "$(RS_SvcName) set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE goto RemoveService_Return endif DeleteRegTree $(ServiceKey) $(RS_SvcName) CloseRegKey $(ServiceKey) endif RemoveService_Return = + return $(RegistryErrorIndex) ;************************************************************************* ; end of section RemoveService ;************************************************************************* ;------------------------------------------------------------------------- ; ; ROUTINE: SortListIndex ; ; DESCRIPTION: Sort a list into sequence, returning an "index" list, which ; indicates the sort position of each of the original list ; elements. ; <unchanged from Microsoft's NDIS.INF example> ; ; INPUTS: $0: List to be sorted ; $1: TRUE for ascending sort (FALSE otherwise) ; $2: TRUE for case-insensitive sort (FALSE otherwise) ; ; OUTPUTS: $R0: Index list ; ; NOTES: Lists of displayable numeric values will automatically ; be sorted numerically if they are all decimal or hex ; and the sort is case-insensitive (param $2 FALSE). ; ;---------------------------------------------------------------------------- [SortListIndex] Set List = $($0) Set BoolAscend = $($1) Set BoolCaseSens = $($2) LibraryProcedure IndexList, $(!LIBHANDLE), GenerateSortedIndexList, $(List), $(BoolAscend), $(BoolCaseSens) Return $(IndexList) ;------------------------------------------------------------------------- ; ; ROUTINE: SortByIndex ; ; DESCRIPTION: Sort a list into the sequence given by an "index list". ; <unchanged from Microsoft's NDIS.INF example> ; ; INPUTS: $0: List to be sorted ; $1: Index list ; ; OUTPUTS: $R0: Index list ; ;---------------------------------------------------------------------------- [SortByIndex] Set List = $($0) Set IndexList = $($1) Set NewList = {} ForListDo $(IndexList) Set Index = $($) Set Item = *($(List),$(Index)) Set NewList = >($(NewList),$(Item)) EndForListDo Return $(NewList) ;------------------------------------------------------------------------- ; ; ROUTINE: SortList ; ; DESCRIPTION: Sort a list into sequence, returning a sorted list. ; <unchanged from Microsoft's NDIS.INF example> ; ; INPUTS: $0: List to be sorted ; $1: TRUE for ascending sort (FALSE otherwise) ; $2: TRUE for case-sensitive sort (FALSE for case-ins) ; ; OUTPUTS: $R0: Sorted list ; ; NOTES: Lists of displayable numeric values will automatically ; be sorted numerically if they are all decimal or hex ; and the sort is case-insensitive (param $2 FALSE). ; ;---------------------------------------------------------------------------- [SortList] Set List = $($0) Shell "" SortListIndex $(List) $($1) $($2) Set IndexList = $($R0) Shell "" SortByIndex $(List) $(IndexList) Set ResultList = $($R0) return $(ResultList) ;************************************************************************* ; end of file MONITOR.INF ;*************************************************************************Download Driver Pack
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.