windows-nt/Source/XPSP1/NT/base/ntsetup/inf/beta/nbinfo.inf
2020-09-26 16:20:57 +08:00

903 lines
28 KiB
INI
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;***********************************************************************
;
; NBINFO.INF
;
; NETBIOS LANA number and provider management inf file.
;
; History:
;
;***********************************************************************
;-----------------------------------------------------------------------
; OPTION TYPE
; -----------
; This identifies the Option type we are dealing with. The different
; possible types are:
;
; COMPUTER, DISPLAY, MOUSE, KEYBOARD, LAYOUT, SCSI, PRINTER, ...
;
; Types specific to networking:
;
; NetAdapter, a netcard / adapter combination or just a netcard
; NetDriver, just a netcard driver
; NetTransport, a complete NDIS-compliant TDI transport stack
; NetService, an NT networking service
; NetWork, a complete network ensemble.
; NetProvider a complete network which supports NT MPR protocol
;-----------------------------------------------------------------------
[Identification]
OptionType = NetProvider
;-----------------------------------------------------------------------
; OPTION LIST
; -----------
; This section lists the OEM Option key names. These keys are locale
; independent and used to represent the option in a locale independent
; manner.
;
;-----------------------------------------------------------------------
[Options]
NETBIOS
;***********************************************************************
; CONSTANTS FOR USING DIALOGS
;***********************************************************************
[FileConstants]
;
; File names, etc.
;
UtilityInf = "UTILITY.INF"
subroutineinf = "SUBROUTN.INF"
SoftwareType = "driver"
Exit_Code = 0
;ShellCode = 0
;
; EventLog Message File
;
NetEventDLL = "%SystemRoot%\System32\netevent.dll"
IoLogMsgDLL = "%SystemRoot%\System32\IoLogMsg.dll"
;
; Product Info
;
Manufacturer = "Microsoft"
ProductMajorVersion = "4"
ProductMinorVersion = "0"
ProductVersion = $(ProductMajorVersion)"."$(ProductMinorVersion)
;
; Registry Key
;
ProductKeyName = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(ProductSoftwareName)"\CurrentVersion"
ParamKeyName = $(!NTN_ServiceBase)$(ProductHardwareName)"\Parameters"
;
; Misc
;
NbProviderField = "NbProvider"
EndPointField = "EndPoint"
RouteField = "Route"
ExportField = "Export"
[GeneralConstants]
;
; Program flow control variables.
;
from = ""
to = ""
;
; Return codes; Exit_Code is set to one of these
;
ExitCodeOk = 0
ExitCodeCancel = 1
ExitCodeFatal = 2
KeyNull = ""
MAXIMUM_ALLOWED = 33554432
RegistryErrorIndex = NO_ERROR
KeyProduct = ""
KeyParameters = ""
TRUE = 1
FALSE = 0
NoTitle = 0
ExitState = "Active"
OldVersionExisted = $(FALSE)
DriverPath = $(!STF_NTPATH)\drivers
[date]
; Now is a list which contains { Sec from 1-1-1970, Year, Month, Day, Hour,
; Minute, Second }
Now = {} ? $(!LIBHANDLE) GetSystemDate
;---------------------------------------------------------------------------
; 1. Identify
;
; DESCRIPTION: To verify that this INF deals with the same type of options
; as we are choosing currently.
;
; INPUT: None
;
; OUTPUT: $($R0): STATUS: STATUS_SUCCESSFUL
; $($R1): Option Type (COMPUTER ...)
; $($R2): Diskette description
;---------------------------------------------------------------------------
[Identify]
;
;
read-syms Identification
set Status = STATUS_SUCCESSFUL
set Identifier = $(OptionType)
set Media = #("Source Media Descriptions", 1, 1)
Return $(Status) $(Identifier) $(Media)
;------------------------------------------------------------------------
; 2. ReturnOptions:
;
; DESCRIPTION: To return the option list supported by this INF and the
; localised text list representing the options.
;
;
; INPUT: $($0): Language used. ( ENG | FRN | ... )
;
; OUTPUT: $($R0): STATUS: STATUS_SUCCESSFUL |
; STATUS_NOLANGUAGE
; STATUS_FAILED
;
; $($R1): Option List
; $($R2): Option Text List
;------------------------------------------------------------------------
[ReturnOptions]
;
;
set Status = STATUS_FAILED
set OptionList = {}
set OptionTextList = {}
;
; Check if the language requested is supported
;
set LanguageList = ^(LanguagesSupported, 1)
Ifcontains(i) $($0) in $(LanguageList)
goto returnoptions
else
set Status = STATUS_NOLANGUAGE
goto finish_ReturnOptions
endif
;
; form a list of all the options and another of the text representing
;
returnoptions = +
set OptionList = ^(Options, 1)
set OptionTextList = ^(OptionsText$($0), 1)
set Status = STATUS_SUCCESSFUL
finish_ReturnOptions = +
Return $(Status) $(OptionList) $(OptionTextList)
;***********************************************************************
; SETUP (NTLANMAN) INVOCATION SECTION
;***********************************************************************
;------------------------------------------------------------------------
;
; InstallOption:
;
; This section is shelled to by main installation processing.
;
;
; 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
;
; extract parameters
;
set Option = $($1)
set SrcDir = $($2)
set AddCopy = $($3)
set DoCopy = $($4)
set DoConfig = $($5)
;
; Check if the language requested is supported
;
set LanguageList = ^(LanguagesSupported, 1)
Ifcontains(i) $($0) NOT-IN $(LanguageList)
Return STATUS_NOLANGUAGE
endif
;
; Call the CommonSection
;
Shell "" CommonSection $(Option) $(SrcDir) $(AddCopy) $(DoCopy) $(DoConfig)
set Status = $($R0)
Return $(Status)
[BindingsReview]
;
; extract parameters
;
set Option = $($1)
set SrcDir = $($2)
set AddCopy = $($3)
set DoCopy = $($4)
set DoConfig = $($5)
Shell "" CommonSection $(Option) $(SrcDir) $(AddCopy) $(DoCopy) $(DoConfig)
set Status = $($R0)
Return $(Status)
;***********************************************************************
; COMMON SECTION
;***********************************************************************
;------------------------------------------------------------------------
;
; CommonSection:
;
; This section is shelled to from above by this INF.
;
;
; FUNCTION: To copy files representing Options
; To configure the installed option
; To update the registry for the installed option
;
; INPUT: $($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
;
;------------------------------------------------------------------------
[CommonSection]
StartWait
;
; extract parameters
;
set Option = $($1)
set SrcDir = $($2)
set AddCopy = $($3)
set DoCopy = $($4)
set DoConfig = $($5)
; define all the constants
set-subst LF = "\n"
read-syms GeneralConstants
read-syms FileConstants
read-syms DialogConstants$(!STF_LANGUAGE)
read-syms FileConstants$(!STF_LANGUAGE)
detect date
set-title $(FunctionTitle)
set to = Begin
set from = Begin
;
; Assume all is well.
;
set CommonStatus = STATUS_SUCCESSFUL
;
; Set up the operation-mode-based variables and gaily welcome
; the user. If the "install mode" variable is improperly set,
; assume this is a new installation.
;
Begin = +
;
; Open Service key
;
OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase) $(MAXIMUM_ALLOWED) ServiceKey
Ifstr $(ServiceKey) == $(KeyNull)
set RegistryErrorIndex = $($R0)
goto fatalregistry
endif
;
; Set the result values to {empty}
;
; List of Route strings from NetBIOS; element form {<NetBIOS linkage route string>}
;
Set RouteInformationList = {}
;
; Get the Linkage information from the NetBIOS service. If the NetBIOS key doesn't
; exist, then assume we're not wanted and exit quietly.
;
OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\NetBIOS\Linkage" $(MAXIMUM_ALLOWED) NbKey
Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
;
; NetBIOS service isn't present. Bail out.
;
Debug-Output "NBINFO.INF: could not open CurrentControlSet\Services\NetBIOS\Linkage key"
goto successful
Endif
;
; First the active bindings Route data.
;
GetRegValue $(NbKey) Route RouteListValue
Ifint $(RegLastError) != 0
Debug-Output "NBINFO.INF: Error reading NetBIOS\Linkage:Route value: "$(RegLastError)
Set RouteList = {}
Else
Set RouteList = *($(RouteListValue),4)
Endif
set ActiveRouteList = $(RouteList)
ForListDo $(RouteList)
Debug-Output "NBINFO.INF: Adding NetBIOS route value: "$($)
Set RouteInformationList = >($(RouteInformationList),$($))
EndForListDo
;
; Read the disabled binding route information; add it to the list
;
OpenRegKey $(NbKey) "" "Disabled" $(MAXIMUM_ALLOWED) NbDisKey
Ifstr(i) $(NbDisKey) != $(KeyNull)
Set RouteList = {}
GetRegValue $(NbDisKey) Route RouteListValue
Ifint $(RegLastError) == 0
Set RouteList = *($(RouteListValue),4)
Endif
ForListDo $(RouteList)
Debug-Output "NBINFO.INF: Adding DISABLED NetBIOS route value: "$($)
Set RouteInformationList = >($(RouteInformationList),$($))
EndForListDo
CloseRegKey $(NbDisKey)
Endif
CloseRegKey $(NbKey)
Debug-Output "NBINFO.INF: open N/B info service"
;
; Open the service key in registry.
; If key isn't there, perform [CreateService].
;
; Leave the Parameters key open for later use.
;
OpenRegKey $(ServiceKey) "" "NetBIOSInformation" $(MAXIMUM_ALLOWED) NetBIOSKey
Ifstr(i) $(NetBIOSKey) == ""
Shell $(UtilityInf), CreateService, "NetBIOSInformation", "NetBIOSInformation", "", "adapter", "", {}, ""
ifint $($ShellCode) != $(!SHELL_CODE_OK)
Debug-Output "NBINFO.INF: Shell error creating service"
goto ShellCodeError
endif
set RegistryErrorIndex = $($R0)
Set ParameterKey = $($R2)
CloseRegKey $($R1)
CloseRegKey $($R3)
Else
;
; Create the Linkage and Parameters keys.
;
OpenRegKey $(NetBIOSKey) "" "Linkage" $(MAXIMUM_ALLOWED) LinkageKey
Ifstr(i) $(LinkageKey) == $(KeyNull)
CreateRegKey $(NetBIOSKey) { "Linkage", $(NoTitle), GenericClass } "" $(MAXIMUM_ALLOWED) "" LinkageKey
Endif
CloseRegKey $(LinkageKey)
OpenRegKey $(NetBIOSKey) "" "Parameters" $(MAXIMUM_ALLOWED) ParameterKey
Ifstr(i) $(ParameterKey) == $(KeyNull)
CreateRegKey $(NetBIOSKey) { "Parameters", $(NoTitle), GenericClass } "" $(MAXIMUM_ALLOWED) "" ParameterKey
Endif
CloseRegKey $(NetBIOSKey)
Endif
Ifstr(i) $(ParameterKey) == $(KeyNull)
read-syms FatalError1$(!STF_LANGUAGE)
goto fatal
Endif
;
; Prune old information from NetBIOSInformation\Parameters key.
;
; Iterate the Route list. Any routes found which are not currently associated
; with the NetBIOS service are removed, along with their LanaNum<n> and EnumExport<n>
; values.
;
GetRegValue $(ParameterKey) "Route" OrigRouteValue
Ifint $(RegLastError) == 0
Set OrigRouteList = *($(OrigRouteValue), 4)
ifstr(i) $(OrigRouteList) == ""
set OrigRouteList = {}
Endif
Set OrigIndex = 0
Set NewIndex = 0
Set AnyChanges = 0
Set CurrentRouteList = {}
Set NewValueList = {}
ForListDo $(OrigRouteList)
Set-add OrigIndex = $(OrigIndex),1
Set ThisOrigRoute = $($)
ifContains(i) $(ThisOrigRoute) NOT-IN $(RouteInformationList)
;
; A route value has disappeared from the NetBIOS service.
; Remove the corresponding LanaNum and EnumExport values.
;
Debug-Output "NBINFO.INF: Removing info for old route: "$(ThisOrigRoute)", index "$(OrigIndex)
DeleteRegValue $(ParameterKey) LanaNum$(OrigIndex)
DeleteRegValue $(ParameterKey) EnumExport$(OrigIndex)
Set AnyChanges = 1
Else
Set CurrentRouteList = >($(CurrentRouteList),$(ThisOrigRoute))
Set-add NewIndex = $(NewIndex),1
GetRegValue $(ParameterKey) LanaNum$(OrigIndex) OrigLanaValue
Set OrigLanaNum = *($(OrigLanaValue),4)
GetRegValue $(ParameterKey) EnumExport$(OrigIndex) OrigExportValue
Set OrigExport = *($(OrigExportValue),4)
set NewValueList = >($(NewValueList),{LanaNum$(NewIndex), $(NoTitle), $(!REG_VT_DWORD), $(OrigLanaNum) })
set NewValueList = >($(NewValueList),{EnumExport$(NewIndex), $(NoTitle), $(!REG_VT_DWORD), $(OrigExport)})
Endif
EndForListDo
Ifint $(AnyChanges) != 0
DeleteNextOldLana = +
Ifint $(NewIndex) <= $(OrigIndex)
Debug-Output "NBINFO.INF: pruning old lana info for index = "$(NewIndex)
DeleteRegValue $(ParameterKey) LanaNum$(NewIndex)
DeleteRegValue $(ParameterKey) EnumExport$(NewIndex)
Set-add NewIndex = $(NewIndex),1
Goto DeleteNextOldLana
Endif
Debug-Output "NBINFO.INF: updating Route, LanaNumX and EnumExportX after pruning"
Set NewValueList = >($(NewValueList),{Route, $(NoTitle), $(!REG_VT_MULTI_SZ), $(CurrentRouteList)})
Shell $(UtilityInf), AddValueList, $(ParameterKey), $(NewValueList)
Endif
Endif
;
; Get the registry values; algorithm:
;
; Read the existing information into a list.
;
Debug-Output "NBINFO.INF: Access N/B info route data"
GetRegValue $(ParameterKey) "Route" OldRouteValue
set OldRouteList = *($(OldRouteValue), 4)
ifstr(i) $(OldRouteList) == ""
set OldRouteList = {}
Endif
Debug-Output "NBINFO.INF: Enumerate N/B info lananums"
EnumRegValue $(ParameterKey) ParameterValue
Set HighLana = 0
set UsedLanaNum = {}
ForListDo $(ParameterValue)
set LanaNumName = *($($), 1)
Set LanaNumNum = *($($), 4)
LibraryProcedure Result $(!LIBHANDLE) SetupStrncmp $(LanaNumName) "LanaNum" 7
ifint $(Result) == 0
Ifint $(HighLana) < $(LanaNumNum)
Set HighLana = $(LanaNumNum)
Endif
set UsedLanaNum = >($(UsedLanaNum),$(LanaNumNum))
;
; remember the zero position
;
ifint $(LanaNumNum) == 0
set LanaZeroNum = $(LanaNumName)
endif
;
; declare a variable for RPC support: "RpcLanaNum<n> = <n>"
;
Set Rpc$(LanaNumName) = $(LanaNumNum)
endif
EndForListDo
Set NewValueList = {}
Set RpcLanaList = {}
Set RpcProtoList = {}
QueryListSize Position $(OldRouteList)
Set LanaNum = 0
Set AnyChanges = 0
Set LanaXnsNum = ""
ForListDo $(RouteInformationList)
Set ThisRoute = $($)
ifContains(i) $(ThisRoute) NOT-IN $(OldRouteList)
;
; New route; add it to the old list.
; Then find first unused LanaNum.
;
Debug-Output "NBINFO.INF: New route to be added: "$(ThisRoute)
Set-add Position = $(Position), 1
Set OldRouteList = >($(OldRouteList), $(ThisRoute))
Set AnyChanges = 1
TryAgain = +
ifContains(i) $(LanaNum) IN $(UsedLanaNum)
set-add LanaNum = $(LanaNum), 1
goto TryAgain
else
ifint $(LanaNum) == 0
set LanaZeroNum = "LanaNum"$(Position)
endif
Debug-Output "NBINFO.INF: LanaNum "$(LanaNum)" assigned to "$(ThisRoute)
set NewValueList = >($(NewValueList),{LanaNum$(Position), $(NoTitle), $(!REG_VT_DWORD), $(LanaNum) })
set NewValueList = >($(NewValueList),{EnumExport$(Position), $(NoTitle), $(!REG_VT_DWORD), 1})
set UsedLanaNum = >($(UsedLanaNum), $(LanaNum))
Set RpcLanaNum$(Position) = $(LanaNum)
Ifint $(HighLana) < $(LanaNum)
Set HighLana = $(LanaNum)
Endif
set-add LanaNum = $(LanaNum), 1
endif
;
; hack: always set xns lananum to 0
; BUGBUG: this should be based upon an "MS Campus" flag!
;
set FLibraryErrCtl = 1
LibraryProcedure Result $(!NCPA_HANDLE) EqualToXnsRoute $(ThisRoute)
ifstr(i) $(Result) == "1"
set LanaXnsNum = "LanaNum"$(Position)
endif
endif
;
; Locate the position of this route in the newly-updated OldRouteList.
; Build lists containing RPC lanas and protocol suffix strings.
;
Set RouteIndex = ~($(OldRouteList),$(ThisRoute))
Set ThisLana = $(RpcLanaNum$(RouteIndex))
;
; Locate the provider for this route. Strip the name of the first service from
; the route, open its "Parameters" key, get its "NbProvider" value.
;
LibraryProcedure CEPSTemp $(!NCPA_HANDLE) CPlSetup $(!STF_HWND), ROUTETOLIST, $(ThisRoute)
Set ThisProto = ""
Set ThisService = *($(CEPSTemp),2)
Debug-Output "NBINFO.INF: CEPS: "$(ThisRoute)" = "$(CEPSTemp)", ThisService = "$(ThisService)
OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\"$(ThisService)"\Parameters" $(!REG_KEY_READ) SrvParmKey
Ifint $(RegLastError) == 0
GetRegValue $(SrvParmKey) $(NbProviderField) NbProviderData
Ifint $(RegLastError) == 0
Set ThisProto = *($(NbProviderData),4)
Debug-Output "NBINFO.INF: Service "$(ThisService)" is a NetBIOS provider: "$(ThisProto)
Set RpcSuffixCount$(ThisProto) = 0
Set RpcLanaList = >($(RpcLanaList),$(ThisLana))
Set RpcProtoList = >($(RpcProtoList),$(ThisProto))
Else
Debug-Output "NBINFO.INF: "$(ThisService)"\Parameters has no NbProvider value"
Endif
CloseRegKey $(SrvParmKey)
Else
Debug-Output "NBINFO.INF: open of key "$(ThisService)"\Parameters FAILED; no provider info"
Endif
Debug-Output "NBINFO.INF: RPC string for route "$(ThisRoute)" is "$(ThisProto)" = "$(ThisLana)
EndForListDo
Ifint $(AnyChanges) != 0
Debug-Output "NBINFO.INF: Update Parameters..."
Set NewValueList = >($(NewValueList),{Route, $(NoTitle), $(!REG_VT_MULTI_SZ), $(OldRouteList)})
Shell $(UtilityInf), AddValueList, $(ParameterKey), $(NewValueList)
Endif
set ExportNum = 1
ForListDo $(OldRouteList)
Set ThisRoute = *($($),1)
Set ThisProto = *($($),2)
; setup the EnumExport value
LibraryProcedure "" $(!NCPA_HANDLE) SetEnumExport $(ExportNum) $(ThisRoute)
set-add ExportNum = $(ExportNum), 1
EndForListDo
;
; hack: always set xns lananum to 0
; BUGBUG: this should be based upon an "MS Campus" flag!
;
ifstr(i) $(LanaXnsNum) != ""
GetRegValue $(ParameterKey) $(LanaXnsNum) LanaXnsInfo
GetRegValue $(ParameterKey) $(LanaZeroNum) LanaZeroInfo
set XnsNum = *($(LanaXnsInfo), 4)
set ZeroNum = *($(LanaZeroInfo), 4)
SetRegValue $(ParameterKey) {$(LanaXnsNum),$(NoTitle),$(!REG_VT_DWORD),$(ZeroNum)}
SetRegValue $(ParameterKey) {$(LanaZeroNum),$(NoTitle),$(!REG_VT_DWORD),$(XnsNum)}
Endif
CloseRegKey $(ParameterKey)
set FLibraryErrCtl = 1
LibraryProcedure "" $(!NCPA_HANDLE), CPlSetupLanaMap
EndWait
;
; Using the lists build above, update the RPC NetBIOS information in the
; SOFTWARE hive.
;
; This starts by deleting the NetBios key to reset all values, then the key is
; recreated and the new values are added. Uses the lists $(RpcLanaList)
; and $(RpcProtoList). The values $(RpcSuffixCount<suffix)) have already been
; set to zero.
;
; This bizarro logic is necessary because RPC wants to have its protocol strings
; sorted into LANA order. There can be no gaps in the numbering of protocol strings,
; but there may be gaps in the numbering of LANAs.
;
OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\Microsoft\Rpc" $(MAXIMUM_ALLOWED) KeyRpc
Ifstr(i) $(KeyRpc) == ""
Debug-Output "NBINFO.INF: Unable to open RPC software key"
goto successful
Endif
Set RpcValueList = {}
Set NextLana = 0
OpenRegKey $(!REG_H_LOCAL) "" "System\CurrentControlSet\Services\NetBIOS\Linkage" $(MAXIMUM_ALLOWED) NetBiosLinkage
ifstr(i) $(NetBiosLinkage) != ""
GetRegValue $(NetBiosLinkage) "LanaMap" LanaMapInfo
set BindedLana = {}
set Odd = 1
ForListDo *($(LanaMapInfo),4)
ifint $(Odd) == 1
set Odd = 0
else
set Odd = 1
ifstr $(BindedLana) == {}
set BindedLana = $($)
else
set BindedLana = >($(BindedLana),$($))
endif
endif
EndForListDo
CloseRegKey $(NetBiosLinkage)
endif
;
; Increment through all the possible LANAs. If one is used for RPC, generate
; the appropriate protocol string and LANA number value; then update the
; suffix for that protocol.
;
trynextlana = +
Debug-Output "Binded Lana:"$(BindedLana)
Debug-Output "NBINFO.INF: HighLana = "$(HighLana)", LanaXnsNum = "$(LanaXnsNum)", XnsNum = "$(XnsNum)", ZeroNum = "$(ZeroNum)
Ifint $(NextLana) > $(HighLana)
goto updaterpc
Endif
Ifcontains(i) $(NextLana) in $(RpcLanaList)
Set Index = ~($(RpcLanaList),$(NextLana))
Set ThisProto = *($(RpcProtoList),$(Index))
Set NextSuffix = $(RpcSuffixCount$(ThisProto))
Set-add RpcSuffixCount$(ThisProto) = $(NextSuffix),1
Set ThisString = "ncacn_nb"$(ThisProto)$(NextSuffix)
Set UseLana = $(NextLana)
Ifstr(i) $(LanaXnsNum) != ""
Ifint $(NextLana) == $(XnsNum)
Set UseLana = $(ZeroNum)
Else-ifint $(NextLana) == $(ZeroNum)
Set UseLana = $(XnsNum)
Endif
Endif
Debug-Output "NBINFO.INF: RPC string = "$(ThisString)", lana = "$(UseLana)
ifcontains(i) $(UseLana) in $(BindedLana)
Set RpcValueList = >($(RpcValueList),{$(ThisString),$(NoTitle),$(!REG_VT_DWORD),$(UseLana)})
endif
Endif
Set-add NextLana = $(NextLana),1
Goto trynextlana
updaterpc = +
;
; Delete the Rpc\NetBios key, recreate it, append the generated values.
; The result of the deletion operation is not checked, since recreation will
; fail if the key already exists.
;
Set KeyNameNetBios = "NetBios"
DeleteRegKey $(KeyRpc) $(KeyNameNetBios)
CreateRegKey $(KeyRpc) { $(KeyNameNetBios), $(NoTitle), GenericClass } "" $(MAXIMUM_ALLOWED) "" KeyNetBios
Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
Debug-Output "NBINFO.INF: RpcValueList = "$(RpcValueList)
Shell $(UtilityInf), AddValueList, $(KeyNetBios), $(RpcValueList)
CloseRegKey $(KeyNetBios)
Else
Debug-Output "NBINFO.INF: Rpc\Netbios key recreation failed"
Endif
CloseRegKey $(KeyRpc)
goto successful
; Escape hatches
;
successful = +
;
goto end
;
; warning display
;
warning = +
Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "WARNING", $(Error)
ifint $($ShellCode) != $(!SHELL_CODE_OK)
goto ShellCodeError
endif
ifstr(i) $($R1) == "OK"
goto $(to)
else-ifstr(i) $($R1) == "CANCEL"
goto $(from)
else
; Debug-Msg "Error Error Bad DLGEVENT"
goto "end"
endif
;
; non fatal error display
;
nonfatal = +
Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "NONFATAL", $(Error)
ifint $($ShellCode) != $(!SHELL_CODE_OK)
goto ShellCodeError
endif
ifstr(i) $($R1) == "OK"
goto $(from)
else
goto "end"
endif
;
; Registry is broken
;
fatalregistry = +
Shell $(UtilityInf) RegistryErrorString $(RegistryErrorIndex)
ifint $($ShellCode) != $(!SHELL_CODE_OK)
goto ShellCodeError
endif
set Error = $($R0)
goto fatal
;
; fatal error display
;
fatal = +
Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $(Error)
ifint $($ShellCode) != $(!SHELL_CODE_OK)
goto ShellCodeError
endif
goto setfailed
;
; Shelling error
;
ShellCodeError = +
set DlgType = "MessageBox"
set STF_MB_TITLE = $(ShellCodeErrorTitle)
set STF_MB_TEXT = $(ShellCodeErrorText)
set STF_MB_TYPE = 1
set STF_MB_ICON = 3
set STF_MB_DEF = 1
ui start "Error Message"
goto setfailed
setfailed = +
set CommonStatus = STATUS_FAILED
goto end
end = +
goto term
term = +
Return $(CommonStatus)
;------------------------------------------------------------------------
;
; CheckMixRpcProtocol
;
; During review binding, this function will be called by other
; inf file. The function will check whether the binding is
; disabled or not. If it is disabled, it will remove the RPC client
; and server protocol
;
;
; FUNCTION: Check active binding for netbios
; remove or add the rpc client or server protocol
;
; INPUT: $($0): Netbios Related protocol name (eg, NetBT)
; $($1): Length of $($0)
; $($2): actual protocol name (eg, tcpip)
; $($3): rpc tag (eg, ncacn_nb_tcp)
; $($4): rpc client dll
; $($5): rpc server dll
;
;------------------------------------------------------------------------
[CheckMixRpcProtocol]
read-syms GeneralConstants
read-syms FileConstants
OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\NetBIOS\Linkage" $(MAXIMUM_ALLOWED) NbKey
Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
goto CheckMixRpcProtocolReturn
endif
;
; First get the active bindings Route data.
;
GetRegValue $(NbKey) Route RouteListValue
Ifint $(RegLastError) != 0
Debug-Output "NBINFO.INF: Error reading NetBIOS\Linkage:Route value: "$(RegLastError)
Set RouteList = {}
Else
Set RouteList = *($(RouteListValue),4)
Endif
set ActiveRouteList = $(RouteList)
set CheckedProtocol = """"$($0)""""
set-add Length = $($1),2
set AddedProtocol = $($2)
set AddedRpcString = $($3)
set AddedClientDLL = $($4)
set AddedServerDLL = $($5)
set Find = 0
ForListDo $(ActiveRouteList)
;
; see whether we have the related binding
;
LibraryProcedure Result $(!LIBHANDLE) SetupStrncmp $($) $(CheckedProtocol) $(Length)
ifint $(Result) == 0
set Find = 1
goto FindIt
endif
EndForListDo
FindIt = +
ifint $(Find) == 1
;
; Add the rpc stuff if we have active binding
;
Shell $(UtilityInf) AddMixRpcProtocol "Netbios" $(AddedProtocol) $(AddedRpcString) $(AddedClientDLL) $(AddedServerDLL)
else
;
; remove the rpc stuff if we don't have the active binding
;
Shell $(UtilityInf) RemoveRpcProtocol $(AddedRpcString)
endif
CheckMixRpcProtocolReturn = +
return