;*********************************************************************** ; ; 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 {} ; 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 and EnumExport ; 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 = " ; 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($(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