home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1996 February / VPR9602A.ISO / mpr / i386 / ntas / oemnxpip.inf < prev    next >
INI File  |  1995-10-27  |  51KB  |  1,136 lines

  1. [Identification]
  2.     OptionType = NetTransport
  3. [Options]
  4.     NWLNKIPX
  5. [FileConstants]
  6. Manufacturer            = "Microsoft"
  7. ProductMajorVersion     = "4"
  8. ProductMinorVersion     = "0"
  9. ProductVersion  = $(ProductMajorVersion)"."$(ProductMinorVersion)
  10. NWLNKIPXEventDLL   = "%SystemRoot%\System32\netevent.dll"
  11. ProductNWLNKIPXName        = "NwlnkIpx"
  12. ProductNWLNKIPXImagePath   = "\SystemRoot\System32\drivers\nwlnkipx.sys"
  13. ProductNWLNKIPXSvcType     = "kernel"
  14. ProviderImagePath          = "%SystemRoot%\System32\nwprovau.dll"
  15. ProductNWLNKIPXWshDllPath  = "%SystemRoot%\System32\wshisn.dll"
  16. NetRuleNWLNKIPXType        = "nwlnkIpx ipxTransport"
  17. NetRuleNWLNKIPXUse         = $(SoftwareType)" yes yes"
  18. NetRuleNWLNKIPXBindForm    = """NwlnkIpx"" yes yes simple"
  19. NetRuleNWLNKIPXBindable    = {"ipxnbTransport ipxTransport non non 100",+
  20.                               "ipxTransport ndisDriver non non 100",+
  21.                               "lmNetService ipxnbTransport non non 100",+
  22.                               "nwcWorkstation ipxTransport non non 100",+
  23.                               "lanmanServer ipxTransport non non 100"}
  24. NetRuleNWLNKIPXClass       = {"ipxnbTransport basic yes", "ipxTransport basic yes"}
  25. ProductNWLNKNBName         = "NwlnkNb"
  26. ProductNWLNKNBImagePath    = "\SystemRoot\System32\drivers\nwlnknb.sys"
  27. ProductNWLNKNBSvcType      = "kernel"
  28. NetRuleNWLNKNBType         = "nwlnkNb ipxnbTransport"
  29. NetRuleNWLNKNBUse          = "transport"
  30. NetRuleNWLNKNBBindForm     = """NwlnkNb"" yes yes container"
  31. ProductNWLNKSPXName         = "NwlnkSpx"
  32. ProductNWLNKSPXImagePath    = "\SystemRoot\System32\drivers\nwlnkspx.sys"
  33. ProductNWLNKSPXSvcType      = "kernel"
  34. NetRuleNWLNKSPXType         = "nwlnkSpx spxTransport"
  35. NetRuleNWLNKSPXBindable     = {"spxTransport ipxTransport non non 100"}
  36. NetRuleNWLNKSPXClass        = {"spxTransport basic yes"}
  37. NetRuleNWLNKSPXUse          = "transport"
  38. NetRuleNWLNKSPXBindForm     = """NwlnkSpx"" yes yes container"
  39. CompetitorServiceName = "IPXSPXII"
  40. CompetitorKeyName  = $(!NTN_ServiceBase)"\"$(CompetitorServiceName)
  41. ProductKeyName  = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(Product$(Option)Name)"\CurrentVersion"
  42. OldProductKeyName  = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"Nwlinkipx"\CurrentVersion"
  43. LinkageKeyName  = $(!NTN_ServiceBase)"\NwlnkIpx\Linkage"
  44. RipKeyName  = $(!NTN_ServiceBase)"\Nwlnkrip"
  45. ServiceNWLNKKeyName = $(!NTN_ServiceBase)"\NwlnkIpx"
  46. ServiceKeyName  = $(!NTN_ServiceBase)
  47. [GeneralConstants]
  48. UtilityInf       = "UTILITY.INF"
  49. subroutineinf    = "SUBROUTN.INF"
  50. SoftwareType     = "transport"
  51. Exit_Code        = 0
  52. BillboardVisible = 0
  53. from             = ""
  54. to               = ""
  55. ExitCodeOk       = 0
  56. ExitCodeCancel   = 1
  57. ExitCodeFatal    = 2
  58. KeyNull          = ""
  59. MAXIMUM_ALLOWED    = 33554432
  60. RegistryErrorIndex = NO_ERROR
  61. KeyProduct    = ""
  62. KeyParameters = ""
  63. TRUE          = 1
  64. FALSE         = 0
  65. NoTitle       = 0
  66. ExitState     = "Active"
  67. OldVersionExisted = $(FALSE)
  68. DriverPath   = $(!STF_NTPATH)\drivers
  69. [date]
  70.     Now = {} ? $(!LIBHANDLE) GetSystemDate
  71. [Identify]
  72.     read-syms Identification
  73.     set Status     = STATUS_SUCCESSFUL
  74.     set Identifier = $(OptionType)
  75.     set Media      = #("Source Media Descriptions", 1, 1)
  76.     Return $(Status) $(Identifier) $(Media)
  77. [ReturnOptions]
  78.     set Status         = STATUS_FAILED
  79.     set OptionList     = {}
  80.     set OptionTextList = {}
  81.     set LanguageList = ^(LanguagesSupported, 1)
  82.     Ifcontains(i) $($0) in $(LanguageList)
  83.         goto returnoptions
  84.     else
  85.         set Status = STATUS_NOLANGUAGE
  86.         goto finish_ReturnOptions
  87.     endif
  88. returnoptions = +
  89.     set OptionList     = ^(Options, 1)
  90.     set OptionTextList = ^(OptionsText$($0), 1)
  91.     set Status         = STATUS_SUCCESSFUL
  92. finish_ReturnOptions = +
  93.     Return $(Status) $(OptionList) $(OptionTextList)
  94. [InstallOption]
  95.     set Option   = $($1)
  96.     set SrcDir   = $($2)
  97.     set AddCopy  = $($3)
  98.     set DoCopy   = $($4)
  99.     set DoConfig = $($5)
  100.     set InstallFromRas = $($6)
  101.     Debug-Output "NWLNK.INF: At InstallOption"
  102.     set LanguageList = ^(LanguagesSupported, 1)
  103.     Ifcontains(i) $($0) NOT-IN $(LanguageList)
  104.         return STATUS_NOLANGUAGE
  105.     endif
  106.     Debug-Output "NWLNK.INF: STF_CWDIR is: "$(!STF_CWDIR)
  107.     Debug-Output "NWLNK.INF: STF_LANGUAGE is: "$(!STF_LANGUAGE)
  108.     set-subst LF = "\n"
  109.     read-syms GeneralConstants
  110.     read-syms FileConstants
  111.     read-syms DialogConstants$(!STF_LANGUAGE)
  112.     read-syms FileConstants$(!STF_LANGUAGE)
  113.     detect date
  114.     set-title  $(FunctionTitle)
  115.     set to   = Begin
  116.     set from = Begin
  117.     set CommonStatus = STATUS_SUCCESSFUL
  118.     EndWait
  119. Begin = +
  120.     Ifstr(i) $(!NTN_InstallMode) == deinstall
  121.         set StartLabel = removeadapter
  122.         set OEM_ABANDON_OPTIONS = {}
  123.         set OEM_ABANDON_SOFTWARE = {+
  124.             $(ProductNWLNKSPXName),+
  125.             $(ProductNWLNKNBName),+
  126.             $(ProductNWLNKIPXName)}
  127.     else-Ifstr(i) $(!NTN_InstallMode) == Update
  128.         set StartLabel = UpgradeSoftware
  129.     else-Ifstr(i) $(!NTN_InstallMode) == configure
  130.         set StartLabel = configureadapter
  131.     else-Ifstr(i) $(!NTN_InstallMode) == bind
  132.         set StartLabel = bindingadapter
  133.     else
  134.         set StartLabel = installadapter
  135.         set OEM_ABANDON_SOFTWARE = {}
  136.         set OEM_ABANDON_OPTIONS = {}
  137.     endif
  138.     set from = $(fatal)
  139.     set to   = $(fatal)
  140.     goto $(StartLabel)
  141. installadapter = +
  142.     Debug-Output "NWLNK.INF: At installadapter"
  143.     Debug-Output "NWLNK.INF: Opening key for the product"
  144.     OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct
  145.     Debug-Output "NWLNK.INF: Back from opening key for the product"
  146.     Ifstr $(KeyProduct) != $(KeyNull)
  147.         CloseRegKey $(KeyProduct)
  148.         Shell $(UtilityInf), VerExistedDlg, $(Product$(Option)Title),+
  149.             $(ProductVersion)
  150.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  151.             Debug-Output "NWLNK.INF: ShellCode error: cannot get an error string."
  152.             goto ShellCodeError
  153.         endif
  154.         goto end
  155.     endif
  156.     OpenRegKey $(!REG_H_LOCAL) "" $(CompetitorKeyName) $(!REG_KEY_READ) BadKey
  157.     Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
  158.         Debug-Output "OEMNXPI1.INF:  Service "$(CompetitorServiceName)" exists.  CANNOT INSTALL!"
  159.         GetRegValue $(BadKey) "DisplayName" DisplayList
  160.         Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
  161.             Set CompetitorDisplayName = *($(DisplayList),4)
  162.         Endif
  163.         CloseRegKey $(BadKey)
  164.         read-syms FatalError1$(!STF_LANGUAGE)
  165.         Goto fatal
  166.     Endif
  167.     Ifstr(i) $(!NTN_InstallMode) == "install"
  168.         Ifstr(i) $(DoCopy) == "YES"
  169.             Debug-Output "NWLNK.INF: Calling DoAskSource 1"
  170.             Shell $(UtilityInf), DoAskSource, $(!STF_CWDDIR), $(SrcDir) YES
  171.             Ifint $($ShellCode) != $(!SHELL_CODE_OK)
  172.                Goto ShellCodeError
  173.             Else-Ifstr(i) $($R0) == STATUS_FAILED
  174.                Shell $(UtilityInf) RegistryErrorString "ASK_SOURCE_FAIL"
  175.                ifint $($ShellCode) != $(!SHELL_CODE_OK)
  176.                   goto ShellCodeError
  177.                endif
  178.                set Error = $($R0)
  179.                Goto fatal
  180.             Else-Ifstr(i) $($R0) == STATUS_USERCANCEL
  181.                Goto successful
  182.             Endif
  183.             Set SrcDir = $($R1)
  184.         Endif
  185.         install "Install-Option"
  186.         ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS
  187.             Shell $(UtilityInf) RegistryErrorString "UNABLE_COPY_FILE"
  188.             ifint $($ShellCode) != $(!SHELL_CODE_OK)
  189.                 goto ShellCodeError
  190.             endif
  191.             set Error = $($R0)
  192.             goto fatal
  193.         endif
  194.     endif
  195.     Debug-Output "NWLNK.INF: Put up box that we are installing"
  196.     set OEM_ABANDON_ON  = TRUE
  197.     read-syms Billboard1$(!STF_LANGUAGE)
  198.     Shell "subroutn.inf" PushBillboard NETSTATUSDLG $(Status)
  199.     Set BillboardVisible = 1
  200.     Set DoNWLNKIPX   = FALSE
  201.     Set DoNWLNKNB    = FALSE
  202.     Set DoNWLNKSPX   = FALSE
  203.     Ifstr(i) $(Option) == NWLNKIPX
  204.         Set DoNWLNKIPX   = TRUE
  205.         Set DoNWLNKNB    = TRUE
  206.         Set DoNWLNKSPX   = TRUE
  207.     Else
  208.         Debug-Output "NWLNK.INF: Unrecognized option"
  209.     Endif
  210.     Debug-Output "NWLNK.INF: Start the install"
  211.     StartWait
  212.     ifstr(i) $(DoNWLNKIPX) == TRUE
  213.         Set ThisOption = NWLNKIPX
  214.         Set OEM_ABANDON_SOFTWARE = >($(OEM_ABANDON_SOFTWARE), $(Product$(ThisOption)Name))
  215.         Debug-Output "NWLNK.INF: installing NWLNKIPX."
  216.         Shell $(UtilityInf), AddSoftwareComponent,+
  217.             $(Manufacturer),+
  218.             $(Product$(ThisOption)Name),+
  219.             $(Product$(ThisOption)Name),+
  220.             $(Product$(ThisOption)DisplayName),+
  221.             $(STF_CONTEXTINFNAME),+
  222.             $(Product$(ThisOption)ImagePath),+
  223.             $(Product$(ThisOption)SvcType),+
  224.             "TDI",+
  225.             {},"",+
  226.             $(NWLNKIPXEventDLL)
  227.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  228.             Debug-Output "NWLNK.INF: ShellCode error, add software component"
  229.             goto ShellCodeError
  230.         endif
  231.         set RegistryErrorIndex = $($R0)
  232.         Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
  233.             EndWait
  234.             Debug-Output "NWLNK.INF: Registry error: add software components"
  235.             CloseRegKey $($R1)
  236.             CloseRegKey $($R2)
  237.             CloseRegKey $($R3)
  238.             CloseRegKey $($R4)
  239.             CloseRegKey $($R5)
  240.             goto fatalregistry
  241.         endif
  242.         Set NWLNKVersKeyHandle  = $($R1)
  243.         Set NWLNKRulesKeyHandle = $($R2)
  244.         Set NWLNKSvcKeyHandle   = $($R3)
  245.         Set NWLNKParmKeyHandle  = $($R4)
  246.         Set NWLNKLinkageHandle  = $($R5)
  247.         set NewValueList = {{SoftwareType,$(NoTitle),$(!REG_VT_SZ),$(SoftwareType)},+
  248.                            {MajorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMajorVersion)},+
  249.                            {MinorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMinorVersion)},+
  250.                            {Title,$(NoTitle),$(!REG_VT_SZ),$(Product$(ThisOption)Title)},+
  251.                            {Description,$(NoTitle),$(!REG_VT_SZ),$(Product$(ThisOption)Description)},+
  252.                            {ServiceName,$(NoTitle),$(!REG_VT_SZ),$(Product$(ThisOption)Name)},+
  253.                            {Review,$(NoTitle),$(!REG_VT_DWORD),1},+
  254.                            {STF_GUI_UNATTENDED,$(NoTitle),$(!REG_VT_SZ),$(!STF_GUI_UNATTENDED)},+
  255.                            {AUTONETIPXFRAMETYPE,$(NoTitle),$(!REG_VT_DWORD),$(!AUTONETIPXFRAMETYPE)},+
  256.                            {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}}
  257.         Shell  $(UtilityInf), AddValueList, $(NWLNKVersKeyHandle), $(NewValueList)
  258.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  259.             Debug-Output "NWLNK.INF: ShellCode error, add value list"
  260.             goto ShellCodeError
  261.         endif
  262.         set RegistryErrorIndex = $($R0)
  263.         Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
  264.             EndWait
  265.             Debug-Output "NWLNK.INF: Registry error: add value list."
  266.             CloseRegKey $(NWLNKVersKeyHandle)
  267.             CloseRegKey $(NWLNKRulesKeyHandle)
  268.             CloseRegKey $(NWLNKSvcKeyHandle)
  269.             CloseRegKey $(NWLNKParmKeyHandle)
  270.             CloseRegkey $(NWLNKLinkageHandle)
  271.             goto fatalregistry
  272.         Endif
  273.         set NewValueList = {{type,$(NoTitle),$(!REG_VT_SZ),$(NetRule$(ThisOption)Type)},+
  274.                             {use,$(NoTitle),$(!REG_VT_SZ),$(NetRule$(ThisOption)Use)},+
  275.                             {bindform,$(NoTitle),$(!REG_VT_SZ),$(NetRule$(ThisOption)BindForm)},+
  276.                             {bindable,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRule$(ThisOption)Bindable)},+
  277.                             {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRule$(ThisOption)Class)},+
  278.                             {InfOption,$(NoTitle),$(!REG_VT_SZ),$(ThisOption)} }
  279.         Shell  $(UtilityInf), AddValueList, $(NWLNKRulesKeyHandle), $(NewValueList)
  280.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  281.             Debug-Output "NWLNK.INF: ShellCode error."
  282.             goto ShellCodeError
  283.         endif
  284.         set RegistryErrorIndex = $($R0)
  285.         Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
  286.             CloseRegKey $(NWLNKVersKeyHandle)
  287.             CloseRegKey $(NWLNKRulesKeyHandle)
  288.             CloseRegKey $(NWLNKParmKeyHandle)
  289.             CloseRegKey $(NWLNKLinkageHandle)
  290.             CloseRegKey $(NWLNKSvcKeyHandle)
  291.             EndWait
  292.             Debug-Output "NWLNK.INF: Registry error: add value list."
  293.             goto fatalregistry
  294.         endif
  295.         ifstr(i) $(!STF_PRODUCT) != "WINNT"
  296.             set RipRoute = 1
  297.         else
  298.             set RipRoute = 0
  299.         endif
  300.         Shell $(UtilityInf) AddValueList, $(NWLNKParmKeyHandle),+
  301.             {{"DedicatedRouter", $(NoTitle), $(!REG_VT_DWORD), 0} +
  302.              {"InitDatagrams", $(NoTitle), $(!REG_VT_DWORD), 10} +
  303.              {"MaxDatagrams", $(NoTitle), $(!REG_VT_DWORD), 50} +
  304.              {"RipUsageTime", $(NoTitle), $(!REG_VT_DWORD), 15} +
  305.              {"SourceRouteUsageTime", $(NoTitle), $(!REG_VT_DWORD), 15} +
  306.              {"SocketUniqueness",   $(NoTitle), $(!REG_VT_DWORD), 8} +
  307.              {"SocketStart",   $(NoTitle), $(!REG_VT_DWORD), 16384} +
  308.              {"SocketEnd",   $(NoTitle), $(!REG_VT_DWORD), 24575} +
  309.              {"VirtualNetworkNumber",$(NoTitle), $(!REG_VT_DWORD), 0} +
  310.              {"RipRoute",       $(NoTitle), $(!REG_VT_DWORD), $(RipRoute)} +
  311.              {"RipTimeout",       $(NoTitle), $(!REG_VT_DWORD), 1} +
  312.              {"EnableWANRouter",  $(NoTitle), $(!REG_VT_DWORD), 0} +
  313.              {"ReplaceConfigDialog",  $(NoTitle), $(!REG_VT_DWORD), 0} +
  314.              {"RipCount",         $(NoTitle), $(!REG_VT_DWORD), 5}}
  315.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  316.             Debug-Output "NWLNK.INF: ShellCode error."
  317.             goto ShellCodeError
  318.         endif
  319.         set RegistryErrorIndex = $($R0)
  320.         CloseRegKey $(NWLNKVersKeyHandle)
  321.         CloseRegKey $(NWLNKRulesKeyHandle)
  322.         CloseRegKey $(NWLNKParmKeyHandle)
  323.         Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
  324.             CloseRegKey $(NWLNKLinkageHandle)
  325.             CloseRegKey $(NWLNKSvcKeyHandle)
  326.             EndWait
  327.             Debug-Output "NWLNK.INF: Registry error: add value list."
  328.             goto fatalregistry
  329.         endif
  330.         CreateRegKey $(NWLNKSvcKeyHandle) {"Performance",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyPerformance
  331.         ifstr(i) $(KeyPerformance) != ""
  332.             Set NewValueList = {+
  333.                 {Close,$(NoTitle),$(!REG_VT_SZ),"CloseIPXPerformanceData"},+
  334.                 {Collect,$(NoTitle),$(!REG_VT_SZ),"CollectIPXPerformanceData"},+
  335.                 {Library,$(NoTitle),$(!REG_VT_SZ),"perfctrs.dll"},+
  336.                 {Open,$(NoTitle),$(!REG_VT_SZ),"OpenIPXPerformanceData"},+
  337.                 }
  338.             Shell  $(UtilityInf), AddValueList, $(KeyPerformance), $(NewValueList)
  339.             CloseRegKey $(KeyPerformance)
  340.             ifint $($ShellCode) != $(!SHELL_CODE_OK)
  341.                 Debug-Output "NWLNK.INF: ShellCode error."
  342.                 goto ShellCodeError
  343.             endif
  344.         endif
  345.         Shell "" CreateNWLNKConfiguration $(NWLNKSvcKeyHandle)
  346.         CloseRegKey $(NWLNKSvcKeyHandle)
  347.         Set RegistryErrorIndex = $($R0)
  348.         Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
  349.             EndWait
  350.             Debug-Output "NWLNK.INF: Registry error: Create NWLNK configuration."
  351.             goto fatalregistry
  352.         endif
  353.         Shell $(UtilityInf), AddWinsockInfo, +
  354.              $(Product$(ThisOption)Name), +
  355.              $(Product$(ThisOption)WshDllPath), +
  356.              16,14
  357.         Shell $(UtilityInf) AddMixRpcProtocol "Netbios" "nwlnkipx" "ncacn_nb_ipx" "rpcltc5.dll" "rpclts5.dll"
  358.         OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\Browser\Parameters" $(MAXIMUM_ALLOWED) BrowserParamKey
  359.         ifstr(i) $(BrowserParamKey) != ""
  360.             SetRegValue $(BrowserParamKey) {DirectHostBinding,$(NoTitle),$(!REG_VT_MULTI_SZ),{"\Device\NwlnkIpx","\Device\NwlnkNb"}}
  361.             CloseRegKey $(BrowserParamKey)
  362.         Endif
  363.     Endif
  364.     Ifstr(i) $(DoNWLNKNB) == TRUE
  365.         Set ThisOption = NWLNKNB
  366.         Set OEM_ABANDON_SOFTWARE = >($(OEM_ABANDON_SOFTWARE), $(Product$(ThisOption)Name))
  367.         Debug-Output "NWLNK.INF: installing NWLNKNB..."
  368.         Shell $(UtilityInf), AddSoftwareComponent,+
  369.             $(Manufacturer),+
  370.             $(Product$(ThisOption)Name),+
  371.             $(Product$(ThisOption)Name),+
  372.             $(Product$(ThisOption)DisplayName),+
  373.             $(STF_CONTEXTINFNAME),+
  374.             $(Product$(ThisOption)ImagePath),+
  375.             $(Product$(ThisOption)SvcType),+
  376.             "TDI",+
  377.             {},+
  378.             "",+
  379.             $(NWLNKIPXEventDLL)
  380.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  381.             Debug-Output "NWLNK.INF: ShellCode error"
  382.             goto ShellCodeError
  383.         endif
  384.         set RegistryErrorIndex = $($R0)
  385.         Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
  386.             EndWait
  387.             Debug-Output "NWLNK.INF: Registry error: add software components"
  388.             CloseRegKey $($R1)
  389.             CloseRegKey $($R2)
  390.             CloseRegKey $($R3)
  391.             CloseRegKey $($R4)
  392.             CloseRegKey $($R5)
  393.             goto fatalregistry
  394.         endif
  395.         Set NWLNKNBProductKey      = $($R1)
  396.         Set NWLNKNBNetRuleKey      = $($R2)
  397.         Set NWLNKNBServiceKey      = $($R3)
  398.         Set NWLNKNBParameterKey    = $($R4)
  399.         Set NWLNKNBLinkageKey      = $($R5)
  400.         set NewValueList = {{SoftwareType,$(NoTitle),$(!REG_VT_SZ),$(SoftwareType)},+
  401.                            {MajorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMajorVersion)},+
  402.                            {MinorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMinorVersion)},+
  403.                            {Title,$(NoTitle),$(!REG_VT_SZ),$(Product$(ThisOption)Title)},+
  404.                            {Description,$(NoTitle),$(!REG_VT_SZ),$(Product$(ThisOption)Description)},+
  405.                            {ServiceName,$(NoTitle),$(!REG_VT_SZ),$(Product$(ThisOption)Name)},+
  406.                            {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}}
  407.         Shell  $(UtilityInf), AddValueList, $(NWLNKNBProductKey), $(NewValueList)
  408.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  409.             Debug-Output "NWLNK.INF: ShellCode error."
  410.             goto ShellCodeError
  411.         endif
  412.         set RegistryErrorIndex = $($R0)
  413.         Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
  414.             EndWait
  415.             Debug-Output "NWLNK.INF: Registry error: add value list."
  416.             CloseRegKey $(NWLNKNBProductKey)
  417.             CloseRegKey $(NWLNKNBNetRuleKey)
  418.             CloseRegKey $(NWLNKNBServiceKey)
  419.             CloseRegKey $(NWLNKNBParameterKey)
  420.             CloseRegKey $(NWLNKNBLinkageKey)
  421.             goto fatalregistry
  422.         endif
  423.         set NewValueList = {{OtherDependencies,$(NoTitle),$(!REG_VT_MULTI_SZ),{"NWLNKIPX"}}}
  424.         Shell  $(UtilityInf), AddValueList, $(NWLNKNBLinkageKey), $(NewValueList)
  425.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  426.             Debug-Output "NWLNK.INF: ShellCode error."
  427.             goto ShellCodeError
  428.         endif
  429.         set RegistryErrorIndex = $($R0)
  430.         Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
  431.             EndWait
  432.             Debug-Output "NWLNK.INF: Registry error: add value list."
  433.             CloseRegKey $(NWLNKNBProductKey)
  434.             CloseRegKey $(NWLNKNBNetRuleKey)
  435.             CloseRegKey $(NWLNKNBServiceKey)
  436.             CloseRegKey $(NWLNKNBParameterKey)
  437.             CloseRegKey $(NWLNKNBLinkageKey)
  438.             goto fatalregistry
  439.         endif
  440.         set NewValueList = {{type,$(NoTitle),$(!REG_VT_SZ),$(NetRule$(ThisOption)Type)},+
  441.                             {use,$(NoTitle),$(!REG_VT_SZ),$(NetRule$(ThisOption)Use)},+
  442.                             {bindform,$(NoTitle),$(!REG_VT_SZ),$(NetRule$(ThisOption)BindForm)},+
  443.                             {InfOption,$(NoTitle),$(!REG_VT_SZ),$(ThisOption)} }
  444.         Shell  $(UtilityInf), AddValueList, $(NWLNKNBNetRuleKey), $(NewValueList)
  445.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  446.             Debug-Output "NWLNK.INF: ShellCode error."
  447.             goto ShellCodeError
  448.         endif
  449.         set RegistryErrorIndex = $($R0)
  450.         Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
  451.             EndWait
  452.             Debug-Output "NWLNK.INF: Registry error: add value list."
  453.             CloseRegKey $(NWLNKNBProductKey)
  454.             CloseRegKey $(NWLNKNBNetRuleKey)
  455.             CloseRegKey $(NWLNKNBServiceKey)
  456.             CloseRegKey $(NWLNKNBParameterKey)
  457.             CloseRegKey $(NWLNKNBLinkageKey)
  458.             goto fatalregistry
  459.         endif
  460.         Set NewValueList = {{NbProvider,$(NoTitle),$(!REG_VT_SZ),"_ipx"},+
  461.                 {EndPoint,$(NoTitle),$(!REG_VT_DWORD),1}}
  462.         Shell  $(UtilityInf), AddValueList, $(NWLNKNBParameterKey), $(NewValueList)
  463.         Ifint $($ShellCode) != $(!SHELL_CODE_OK)
  464.             Debug-Output "NWLNK.INF: ShellCode error."
  465.             goto ShellCodeError
  466.         Endif
  467.         set RegistryErrorIndex = $($R0)
  468.         Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
  469.             EndWait
  470.             CloseRegKey $(NWLNKNBProductKey)
  471.             CloseRegKey $(NWLNKNBNetRuleKey)
  472.             CloseRegKey $(NWLNKNBServiceKey)
  473.             CloseRegKey $(NWLNKNBParameterKey)
  474.             CloseRegKey $(NWLNKNBLinkageKey)
  475.             Debug-Output "NWLNK.INF: Registry error: add value list."
  476.             goto fatalregistry
  477.         endif
  478.         Shell $(UtilityInf) AddValueList, $(NWLNKNBParameterKey),+
  479.             {{"KeepaliveTimeout", $(NoTitle), $(!REG_VT_DWORD), 60} +
  480.              {"KeepaliveCount",   $(NoTitle), $(!REG_VT_DWORD), 8} +
  481.              {"ConnectionTimeout",$(NoTitle), $(!REG_VT_DWORD), 2} +
  482.              {"ConnectionCount",  $(NoTitle), $(!REG_VT_DWORD), 5} +
  483.              {"BroadcastTimeout", $(NoTitle), $(!REG_VT_DWORD), 1} +
  484.              {"BroadcastCount",   $(NoTitle), $(!REG_VT_DWORD), 3} +
  485.              {"Internet",         $(NoTitle), $(!REG_VT_DWORD), 1}}
  486.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  487.             Debug-Output "NWLNK.INF: ShellCode error."
  488.             goto ShellCodeError
  489.         endif
  490.         set RegistryErrorIndex = $($R0)
  491.         Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
  492.             EndWait
  493.             CloseRegKey $(NWLNKNBProductKey)
  494.             CloseRegKey $(NWLNKNBNetRuleKey)
  495.             CloseRegKey $(NWLNKNBServiceKey)
  496.             CloseRegKey $(NWLNKNBParameterKey)
  497.             CloseRegKey $(NWLNKNBLinkageKey)
  498.             Debug-Output "NWLNK.INF: Registry error: add value list."
  499.             goto fatalregistry
  500.         endif
  501.         CreateRegKey $(NWLNKNBServiceKey) {"Performance",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyPerformance
  502.         ifstr(i) $(KeyPerformance) != ""
  503.             Set NewValueList = {+
  504.                 {Close,$(NoTitle),$(!REG_VT_SZ),"CloseNWNBPerformanceData"},+
  505.                 {Collect,$(NoTitle),$(!REG_VT_SZ),"CollectNWNBPerformanceData"},+
  506.                 {Library,$(NoTitle),$(!REG_VT_SZ),"perfctrs.dll"},+
  507.                 {Open,$(NoTitle),$(!REG_VT_SZ),"OpenNWNBPerformanceData"},+
  508.                 }
  509.             Shell  $(UtilityInf), AddValueList, $(KeyPerformance), $(NewValueList)
  510.             CloseRegKey $(KeyPerformance)
  511.             ifint $($ShellCode) != $(!SHELL_CODE_OK)
  512.                 Debug-Output "NWLNK.INF: ShellCode error."
  513.                 goto ShellCodeError
  514.             endif
  515.             set RegistryErrorIndex = $($R0)
  516.         endif
  517.         CloseRegKey $(NWLNKNBProductKey)
  518.         CloseRegKey $(NWLNKNBNetRuleKey)
  519.         CloseRegKey $(NWLNKNBServiceKey)
  520.         CloseRegKey $(NWLNKNBParameterKey)
  521.         CloseRegKey $(NWLNKNBLinkageKey)
  522.         Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
  523.             EndWait
  524.             Debug-Output "NWLNK.INF: Registry error: add value list."
  525.             goto fatalregistry
  526.         endif
  527.     Endif
  528.     Ifstr(i) $(DoNWLNKSPX) == TRUE
  529.         Set ThisOption = NWLNKSPX
  530.         Set OEM_ABANDON_SOFTWARE = >($(OEM_ABANDON_SOFTWARE), $(Product$(ThisOption)Name))
  531.         Debug-Output "NWLNK.INF: installing NWLNKSPX..."
  532.         Shell $(UtilityInf), AddSoftwareComponent,+
  533.             $(Manufacturer),+
  534.             $(Product$(ThisOption)Name),+
  535.             $(Product$(ThisOption)Name),+
  536.             $(Product$(ThisOption)DisplayName),+
  537.             $(STF_CONTEXTINFNAME),+
  538.             $(Product$(ThisOption)ImagePath),+
  539.             $(Product$(ThisOption)SvcType),+
  540.             "",+
  541.             {"+NDIS"},"",+
  542.             $(NWLNKIPXEventDLL)
  543.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  544.             Debug-Output "NWLNK.INF: ShellCode error"
  545.             goto ShellCodeError
  546.         endif
  547.         set RegistryErrorIndex = $($R0)
  548.         Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
  549.             EndWait
  550.             Debug-Output "NWLNK.INF: Registry error: add software components"
  551.             CloseRegKey $($R1)
  552.             CloseRegKey $($R2)
  553.             CloseRegKey $($R3)
  554.             CloseRegKey $($R4)
  555.             CloseRegKey $($R5)
  556.             goto fatalregistry
  557.         endif
  558.         Set NWLNKSPXProductKey      = $($R1)
  559.         Set NWLNKSPXNetRuleKey      = $($R2)
  560.         Set NWLNKSPXServiceKey      = $($R3)
  561.         Set NWLNKSPXParameterKey    = $($R4)
  562.         Set NWLNKSPXLinkageKey      = $($R5)
  563.         set NewValueList = {{SoftwareType,$(NoTitle),$(!REG_VT_SZ),$(SoftwareType)},+
  564.                            {MajorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMajorVersion)},+
  565.                            {MinorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMinorVersion)},+
  566.                            {Hidden,$(NoTitle),$(!REG_VT_DWORD),1},+
  567.                            {Title,$(NoTitle),$(!REG_VT_SZ),$(Product$(ThisOption)Title)},+
  568.                            {Description,$(NoTitle),$(!REG_VT_SZ),$(Product$(ThisOption)Description)},+
  569.                            {ServiceName,$(NoTitle),$(!REG_VT_SZ),$(Product$(ThisOption)Name)},+
  570.                            {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}}
  571.         Shell  $(UtilityInf), AddValueList, $(NWLNKSPXProductKey), $(NewValueList)
  572.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  573.             Debug-Output "NWLNK.INF: ShellCode error."
  574.             goto ShellCodeError
  575.         endif
  576.         set RegistryErrorIndex = $($R0)
  577.         Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
  578.             EndWait
  579.             Debug-Output "NWLNK.INF: Registry error: add value list."
  580.             CloseRegKey $(NWLNKSPXProductKey)
  581.             CloseRegKey $(NWLNKSPXNetRuleKey)
  582.             CloseRegKey $(NWLNKSPXServiceKey)
  583.             CloseRegKey $(NWLNKSPXParameterKey)
  584.             CloseRegKey $(NWLNKSPXLinkageKey)
  585.             goto fatalregistry
  586.         endif
  587.         set NewValueList = {{type,$(NoTitle),$(!REG_VT_SZ),$(NetRule$(ThisOption)Type)},+
  588.                             {use,$(NoTitle),$(!REG_VT_SZ),$(NetRule$(ThisOption)Use)},+
  589.                             {bindform,$(NoTitle),$(!REG_VT_SZ),$(NetRule$(ThisOption)BindForm)},+
  590.                             {bindable,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRule$(ThisOption)Bindable)},+
  591.                             {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRule$(ThisOption)Class)},+
  592.                             {InfOption,$(NoTitle),$(!REG_VT_SZ),$(ThisOption)} }
  593.         Shell  $(UtilityInf), AddValueList, $(NWLNKSPXNetRuleKey), $(NewValueList)
  594.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  595.             Debug-Output "NWLNK.INF: ShellCode error."
  596.             goto ShellCodeError
  597.         endif
  598.         set RegistryErrorIndex = $($R0)
  599.         Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
  600.             EndWait
  601.             Debug-Output "NWLNK.INF: Registry error: add value list."
  602.             CloseRegKey $(NWLNKSPXProductKey)
  603.             CloseRegKey $(NWLNKSPXNetRuleKey)
  604.             CloseRegKey $(NWLNKSPXServiceKey)
  605.             CloseRegKey $(NWLNKSPXParameterKey)
  606.             CloseRegKey $(NWLNKSPXLinkageKey)
  607.             goto fatalregistry
  608.         endif
  609.         Shell $(UtilityInf) AddValueList, $(NWLNKSPXParameterKey),+
  610.             {{"ConnectionCount", $(NoTitle), $(!REG_VT_DWORD), 5} +
  611.              {"ConnectionTimeout",   $(NoTitle), $(!REG_VT_DWORD), 2} +
  612.              {"InitPackets",$(NoTitle), $(!REG_VT_DWORD), 5} +
  613.              {"MaxPackets",  $(NoTitle), $(!REG_VT_DWORD), 48} +
  614.              {"InitialRetransmissionTime", $(NoTitle), $(!REG_VT_DWORD), 500} +
  615.              {"KeepAliveCount",   $(NoTitle), $(!REG_VT_DWORD), 8} +
  616.              {"WindowSize",   $(NoTitle), $(!REG_VT_DWORD), 4} +
  617.              {"SpxSocketRangeStart",   $(NoTitle), $(!REG_VT_DWORD), 24576} +
  618.              {"SpxSocketRangeEnd",   $(NoTitle), $(!REG_VT_DWORD), 32767} +
  619.              {"SpxSocketUniqueness",   $(NoTitle), $(!REG_VT_DWORD), 1} +
  620.              {"MaxPacketSize",   $(NoTitle), $(!REG_VT_DWORD), 4096} +
  621.              {"RetransmissionCount",   $(NoTitle), $(!REG_VT_DWORD), 8} +
  622.              {"KeepAliveTimeout",         $(NoTitle), $(!REG_VT_DWORD), 12}}
  623.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  624.             Debug-Output "NWLNK.INF: ShellCode error."
  625.             goto ShellCodeError
  626.         endif
  627.         set RegistryErrorIndex = $($R0)
  628.         Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
  629.             EndWait
  630.             CloseRegKey $(NWLNKSPXProductKey)
  631.             CloseRegKey $(NWLNKSPXNetRuleKey)
  632.             CloseRegKey $(NWLNKSPXServiceKey)
  633.             CloseRegKey $(NWLNKSPXParameterKey)
  634.             CloseRegKey $(NWLNKSPXLinkageKey)
  635.             Debug-Output "NWLNK.INF: Registry error: add value list."
  636.             goto fatalregistry
  637.         endif
  638.         CreateRegKey $(NWLNKSPXServiceKey) {"Performance",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyPerformance
  639.         ifstr(i) $(KeyPerformance) != ""
  640.             Set NewValueList = {+
  641.                 {Close,$(NoTitle),$(!REG_VT_SZ),"CloseSPXPerformanceData"},+
  642.                 {Collect,$(NoTitle),$(!REG_VT_SZ),"CollectSPXPerformanceData"},+
  643.                 {Library,$(NoTitle),$(!REG_VT_SZ),"perfctrs.dll"},+
  644.                 {Open,$(NoTitle),$(!REG_VT_SZ),"OpenSPXPerformanceData"},+
  645.                 }
  646.             Shell  $(UtilityInf), AddValueList, $(KeyPerformance), $(NewValueList)
  647.             CloseRegKey $(KeyPerformance)
  648.             ifint $($ShellCode) != $(!SHELL_CODE_OK)
  649.                 Debug-Output "NWLNK.INF: ShellCode error."
  650.                 goto ShellCodeError
  651.             endif
  652.             set RegistryErrorIndex = $($R0)
  653.         endif
  654.         CloseRegKey $(NWLNKSPXProductKey)
  655.         CloseRegKey $(NWLNKSPXNetRuleKey)
  656.         CloseRegKey $(NWLNKSPXServiceKey)
  657.         CloseRegKey $(NWLNKSPXParameterKey)
  658.         CloseRegKey $(NWLNKSPXLinkageKey)
  659.         Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
  660.             EndWait
  661.             Debug-Output "NWLNK.INF: Registry error: add value list."
  662.             goto fatalregistry
  663.         endif
  664.         Shell $(UtilityInf), AddWinsockInfo, +
  665.              $(Product$(ThisOption)Name), +
  666.              $(ProductNWLNKIPXWshDllPath), +
  667.              16,14
  668.     Shell $(UtilityInf), AddServiceProvider, $(ProductNWLNKIPXName), +
  669.         $(ProviderImagePath), $(ProductNWLNKIPXDisplayName), 8
  670.         Shell $(UtilityInf) AddClientRpcProtocol "ncadg_ipx" "rpcdgc6.dll"
  671.         Shell $(UtilityInf) AddClientRpcProtocol "ncacn_spx" "rpcltc6.dll"
  672.     Endif
  673.     ifstr(i) $(!STF_GUI_UNATTENDED) != YES
  674.         ifstr(i) $(InstallFromRas) != "YES"
  675.             OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\RASMan" $(MAXIMUM_ALLOWED) RASKey
  676.             ifstr(i) $(RASKey) != ""
  677.                 Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "WARNING", $(RASRebindError)
  678.                 ifint $($ShellCode) != $(!SHELL_CODE_OK)
  679.                     goto ShellCodeError
  680.                 endif
  681.                 CloseRegKey $(RASKey)
  682.                 ifstr(i) $($R1) == "OK"
  683.                     set SaveNTN_InstallMode = $(!NTN_InstallMode)
  684.                     set !NTN_InstallMode = configure
  685.                     Shell "oemnsvra.inf" InstallOption $(!STF_LANGUAGE) "RAS" $(SrcDir) $(AddCopy) $(DoCopy) $(DoConfig) 
  686.                     set !NTN_InstallMode = $(SaveNTN_InstallMode)
  687.                 endif
  688.             endif
  689.         endif
  690.     endif
  691.     LibraryProcedure DontCare $(!NCPA_HANDLE), CPlSetup $(!STF_HWND),+
  692.               SECURESVC, $(ProductNWLNKSPXName), 3
  693.     EndWait
  694.     OpenRegKey $(!REG_H_LOCAL) "" $(RipKeyName) $(!REG_KEY_READ) RipKey
  695.     ifstr(i) $(RipKey) == ""
  696.         ifstr(i) $(!STF_PRODUCT) != "WINNT"
  697.             read-syms RipDialog
  698.             ui start "rip"
  699.             ifstr(i) $(DLGEVENT) == "YES"
  700.                 Shell "oemnsvrr.inf" InstallOption $(!STF_LANGUAGE) NWLNKRIP $(SrcDir) $(AddCopy) $(DoCopy) $(DoConfig) 
  701.             endif
  702.         endif
  703.     endif
  704.     Ifint $(BillboardVisible) != 0
  705.         Shell "subroutn.inf" PopBillboard
  706.         Set BillboardVisible = 0
  707.     Endif
  708.     goto successful
  709. configureadapter = +
  710.     Debug-Output "NWLNK.INF: At ConfigureAdapter"
  711.     ifstr(i) $(Option) == "NWLNKIPX"
  712.         Set BindList = {}
  713.         OpenRegKey $(!REG_H_LOCAL) "" $(LinkageKeyName) $(MAXIMUM_ALLOWED) LinkageKey
  714.         ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
  715.             GetRegValue $(LinkageKey) "Bind" BindList
  716.             ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
  717.                set BindList = *($(BindList),4)
  718.             else
  719.                Set BindList = {}
  720.             endif
  721.             CloseRegKey $(LinkageKey)
  722.         endif
  723.         ifstr(i) $(BindList) == {}
  724.             debug-output "NWLNK.INF: no binding info; warning user"
  725.             read-syms InfoDlgCantConfigure
  726.             goto infomsg
  727.         endif
  728.         Debug-Output "NWLNK.INF: configureadapter, BindList = "$(BindList)
  729.         set OldVersionExisted = $(TRUE)
  730.         set CardList = ""
  731.         ForListDo $(BindList)
  732.             Split-String $($), "\", BindInfo
  733.             QueryListSize BindElem $(BindInfo)
  734.             Set BindName = *($(BindInfo),$(BindElem))
  735.             OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\"$(BindName) $(MAXIMUM_ALLOWED) CardServiceKey
  736.             ifstr(i) $(CardServiceKey) != ""
  737.                 CloseRegKey $(CardServiceKey)
  738.                 Set CardList = $(CardList)"@"$(BindName)
  739.             endif
  740.         EndForListDo
  741.         ifstr(i) $(CardList) != ""
  742.             Debug-Output "NWLNK.INF: configureadapter, CardList = "$(CardList)
  743.             LoadLibrary "x", $(!STF_WINDOWSSYSPATH)\ipxcfg.dll NWLNKLIB_HANDLE
  744.             set FLibraryErrCtl = 1
  745.             ifstr(i) $(!STF_GUI_UNATTENDED) == "YES"
  746.             LibraryProcedure ResultList, $(NWLNKLIB_HANDLE), RunIpxDlg, $(!STF_HWND) $(!STF_PRODUCT) "YES" $(!AUTONETIPXFRAMETYPE)
  747.             else
  748.                 LibraryProcedure ResultList, $(NWLNKLIB_HANDLE), RunIpxDlg, $(!STF_HWND) $(!STF_PRODUCT)
  749.             endif
  750.             FreeLibrary $(NWLNKLIB_HANDLE)
  751.             set FLibraryErrCtl = 0
  752.             Debug-Output "NWLNK.INF: configureadapter, ResultList = "$(ResultList)
  753.             Set Result = *($(ResultList),1)
  754.             Ifint $(Result) == 0
  755.                 set CommonStatus = STATUS_NO_EFFECT
  756.             Else
  757.                 set CommonStatus = STATUS_REBOOT
  758.             Endif
  759.         else
  760.             set CommonStatus = STATUS_USERCANCEL
  761.         endif
  762.     else
  763.         Shell $(UtilityInf),RegistryErrorString,CANNOT_CONFIGURE_SOFTWARE
  764.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  765.             Debug-Output "OEMNXPI1.INF: ShellCode error: cannot get an error string."
  766.             goto ShellCodeError
  767.         endif
  768.         set Error = $($R0)
  769.         set from = end
  770.         set to = end
  771.         set CommonStatus = STATUS_NO_EFFECT
  772.         goto nonfatal
  773.     endif
  774.     goto end
  775. bindingadapter =+
  776.     OpenRegKey $(!REG_H_LOCAL) "" $(LinkageKeyName) $(MAXIMUM_ALLOWED) KeyLinkage
  777.     ifstr(i) $(KeyLinkage) != ""
  778.         SetRegValue $(KeyLinkage) {Export,$(NoTitle),$(!REG_VT_MULTI_SZ),{"\Device\NwlnkIpx"}}
  779.         CloseRegKey $(KeyLinkage)
  780.     endif
  781.     Shell "nbinfo.inf" CheckMixRpcProtocol "NwlnkNb" 7 "nwlnkipx" "ncacn_nb_ipx" "rpcltc5.dll" "rpclts5.dll"
  782.     LoadLibrary "x", $(!STF_WINDOWSSYSPATH)\ipxcfg.dll NWLNKLIB_HANDLE
  783.     set FLibraryErrCtl = 1
  784.     LibraryProcedure ResultList, $(NWLNKLIB_HANDLE), IPXCfgChk
  785.     FreeLibrary $(NWLNKLIB_HANDLE)
  786.     set FLibraryErrCtl = 0
  787.     Set Result = *($(ResultList),1)
  788.     ifint $(Result) == 0
  789.         Debug-Output "OEMNXPI1.INF:  reconfiguration not required"
  790.         set CommonStatus = STATUS_USERCANCEL
  791.         goto successful
  792.     else
  793.         Debug-Output "OEMNXPI1.INF:  reconfiguration required"
  794.     endif
  795.     OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct
  796.     ifstr(i) $(KeyProduct) != ""
  797.         GetRegValue $(KeyProduct) "STF_GUI_UNATTENDED" UnattendedList
  798.     Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
  799.         set !STF_GUI_UNATTENDED = *($(UnattendedList),4)
  800.         DeleteRegValue $(KeyProduct) "STF_GUI_UNATTENDED"
  801.     endif
  802.         GetRegValue $(KeyProduct) "AUTONETIPXFRAMETYPE" FrameTypeList
  803.     Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
  804.         set !AUTONETIPXFRAMETYPE = *($(FrameTypeList),4)
  805.         DeleteRegValue $(KeyProduct) "AUTONETIPXFRAMETYPE"
  806.     endif
  807.     CloseRegKey $(KeyProduct)
  808.     endif
  809.     goto configureadapter
  810. removeadapter = +
  811.     Shell $(UtilityInf), IsRefCountEqualZero $(ProductKeyName)
  812.     ifint $($R1) == 0
  813.         read-syms InUse$(!STF_LANGUAGE)
  814.         goto infomsg
  815.     endif
  816.     Debug-Output "NWLNK.INF: At removeadapter"
  817.     Shell $(UtilityInf), RemoveWinsockInfo, $(ProductNWLNKIPXName)
  818.     Shell $(UtilityInf), RemoveWinsockInfo, $(ProductNWLNKSPXName)
  819.     Shell $(UtilityInf) RemoveRpcProtocol "ncacn_nb_ipx"
  820.     Shell $(UtilityInf) RemoveClientRpcProtocol "ncadg_ipx"
  821.     Shell $(UtilityInf) RemoveClientRpcProtocol "ncacn_spx"
  822.     ForListDo $(OEM_ABANDON_SOFTWARE)
  823.         DEBUG-OUTPUT "Remove component: "$($)
  824.         Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), $($)
  825.     EndForListDo
  826.     ForListDo  $(OEM_ABANDON_OPTIONS)
  827.         DEBUG-OUTPUT "Remove component: "$($)
  828.         Set UseSvcctrl = "YES"
  829.         Shell $(UtilityInf), RemoveService, $($), $(UseSvcctrl)
  830.     EndForListDo
  831.     Shell $(UtilityInf) RemoveServiceProvider $(ProductNWLNKIPXName)
  832.     OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\Browser\Parameters" $(MAXIMUM_ALLOWED) BrowserParamKey
  833.     ifstr(i) $(BrowserParamKey) != ""
  834.         DeleteRegValue $(BrowserParamKey) "DirectHostBinding"
  835.         CloseRegKey $(BrowserParamKey)
  836.     Endif
  837.     goto end
  838. UpgradeSoftware = +
  839.     OpenRegKey $(!REG_H_LOCAL) "" $(OldProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct
  840.     Ifstr $(KeyProduct) != $(KeyNull)
  841.         install "Install-Update"
  842.         ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS
  843.             goto fatal
  844.         endif
  845.         GetRegValue $(KeyProduct),"RefCount", RefCountInfo
  846.         CloseRegKey $(KeyProduct)
  847.         set OEM_ABANDON_OPTIONS = {+
  848.             "NWLINKSYS",+
  849.             "NWLINKSPX",+
  850.             "NWNBLINKSYS"}
  851.         set OEM_ABANDON_SOFTWARE = {+
  852.             "NWNBLINK",+
  853.             "NWLINKIPX",+
  854.             Streams}
  855.         Debug-Output "NWLINK.INF: At removeadapter"
  856.         Shell $(UtilityInf), RemoveWinsockInfo, "NWLINKIPX"
  857.         Shell $(UtilityInf) RemoveRpcProtocol "ncacn_nb_ipx"
  858.         Ifstr(i) $($0) != NO_ERROR
  859.             Debug-Output "OEMNXPIP.INF: ERROR deleting IPX RPC protocol data"
  860.         Endif
  861.         OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_SoftwareBase)"\Microsoft\NWCWorkstation" $(MAXIMUM_ALLOWED) NwcKey
  862.         ifstr(i) $(NwcKey) == ""
  863.             Shell $(UtilityInf) RemoveServerRpcProtocol "ncadg_ipx"
  864.             Ifstr(i) $($0) != NO_ERROR
  865.                 Debug-Output "OEMNXPIP.INF: ERROR deleting IPX RPC protocol data"
  866.             Endif
  867.             Shell $(UtilityInf) RemoveServerRpcProtocol "ncacn_spx"
  868.             Ifstr(i) $($0) != NO_ERROR
  869.                 Debug-Output "OEMNXPIP.INF: ERROR deleting SPX RPC protocol data"
  870.             Endif
  871.         else
  872.             CloseRegKey $(NwcKey)
  873.         endif
  874.         ForListDo $(OEM_ABANDON_SOFTWARE)
  875.             DEBUG-OUTPUT "Remove component: "$($)
  876.             ifstr(i) $($) == "Streams"
  877.                 Shell $(UtilityInf), RemoveStreams
  878.             else
  879.                 Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), $($), FALSE
  880.             endif
  881.         EndForListDo
  882.         ForListDo  $(OEM_ABANDON_OPTIONS)
  883.             DEBUG-OUTPUT "Remove component: "$($)
  884.             ifstr(i) $($) != "NWLINKSPX"
  885.                 Set UseSvcctrl = "YES"
  886.             else
  887.                 Set UseSvcctrl = "NO"
  888.             endif
  889.             Shell $(UtilityInf), RemoveService, $($), $(UseSvcctrl)
  890.         EndForListDo
  891.         set OldInstallMode = $(!NTN_InstallMode)
  892.         set !NTN_InstallMode = install
  893.         Shell "" "InstallOption" $(!STF_LANGUAGE) "NWLNKIPX" +
  894.            $(!STF_SRCDIR) "NO" "NO" $(DoConfig)
  895.         set !NTN_InstallMode = $(OldInstallMode)
  896.         OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct
  897.         ifstr(i) $(KeyProduct) != ""
  898.             SetRegValue $(KeyProduct), $(RefCountInfo)
  899.             CloseRegKey $(KeyProduct)
  900.         endif
  901.     else
  902.         install "Install-Update"
  903.         ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS
  904.             goto fatal
  905.         endif
  906.         CloseRegKey $(KeyProduct)
  907.         OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\NwlnkIpx\Parameters" $(MAXIMUM_ALLOWED) KeyParameters
  908.         ifstr(i) $(KeyParameters) != ""
  909.             GetRegValue $(KeyParameters), "ReplaceConfigDialog", ReplaceInfo
  910.             Debug-Output "GetRegValue returned "$(RegLastError)
  911.             ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  912.             SetRegValue $(KeyParameters) {ReplaceConfigDialog,$(NoTitle),$(!REG_VT_DWORD),0}
  913.             endif
  914.             CloseRegKey $(KeyParameters)
  915.         endif
  916.         OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_SoftwareBase)"\"$(Manufacturer)"\NwlnkSpx\CurrentVersion\NetRules" $(MAXIMUM_ALLOWED) KeyNetRules
  917.         ifstr(i) $(KeyNetRules) != ""
  918.             set NewValueList = {{type,$(NoTitle),$(!REG_VT_SZ),$(NetRuleNWLNKSPXType)},+
  919.                             {bindable,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleNWLNKSPXBindable)},+
  920.                             {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleNWLNKSPXClass)},+
  921.                             {use,$(NoTitle),$(!REG_VT_SZ),$(NetRuleNWLNKSPXUse)},+
  922.                             {bindform,$(NoTitle),$(!REG_VT_SZ),$(NetRuleNWLNKSPXBindForm)}}
  923.             Shell  $(UtilityInf), AddValueList, $(KeyNetRules), $(NewValueList)
  924.             CloseRegKey $(KeyNetRules)
  925.         endif
  926.     Shell $(UtilityInf), AddServiceProvider, $(ProductNWLNKIPXName), +
  927.         $(ProviderImagePath), 8
  928.         OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_SoftwareBase)"\Microsoft\NWCWorkstation" $(MAXIMUM_ALLOWED) NwcKey
  929.         ifstr(i) $(NwcKey) == ""
  930.             Shell $(UtilityInf) RemoveServerRpcProtocol "ncadg_ipx"
  931.             Shell $(UtilityInf) RemoveServerRpcProtocol "ncacn_spx"
  932.         else
  933.             CloseRegKey $(NwcKey)
  934.         endif
  935.         Shell $(UtilityInf) AddClientRpcProtocol "ncadg_ipx" "rpcdgc6.dll"
  936.         Shell $(UtilityInf) AddClientRpcProtocol "ncacn_spx" "rpcltc6.dll"
  937.     endif
  938.     LibraryProcedure DontCare $(!NCPA_HANDLE), CPlSetup $(!STF_HWND),+
  939.               SECURESVC, $(ProductNWLNKSPXName), 3
  940.     goto end
  941. successful = +
  942.     goto end
  943. infomsg =+
  944.    read-syms InfoDlg
  945.    ui start "Warning"
  946.    set CommonStatus = STATUS_USERCANCEL
  947.    goto end
  948. warning = +
  949.     Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "WARNING", $(Error)
  950.     ifint $($ShellCode) != $(!SHELL_CODE_OK)
  951.         goto ShellCodeError
  952.     endif
  953.     ifstr(i) $($R1) == "OK"
  954.         goto $(to)
  955.     else-ifstr(i) $($R1) == "CANCEL"
  956.         goto $(from)
  957.     else
  958.         goto "end"
  959.     endif
  960. nonfatal = +
  961.     ifstr(i) $(Error) == ""
  962.         Shell $(UtilityInf) RegistryErrorString "SETUP_FAIL"
  963.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  964.             goto ShellCodeError
  965.         endif
  966.         set Error = $($R0)
  967.     endif
  968.     Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "NONFATAL", $(Error)
  969.     ifint $($ShellCode) != $(!SHELL_CODE_OK)
  970.         goto ShellCodeError
  971.     endif
  972.     ifstr(i) $($R1) == "OK"
  973.         goto $(from)
  974.     else
  975.         goto "end"
  976.     endif
  977. fatalregistry = +
  978.     Shell $(UtilityInf) RegistryErrorString $(RegistryErrorIndex)
  979.     ifint $($ShellCode) != $(!SHELL_CODE_OK)
  980.         goto ShellCodeError
  981.     endif
  982.     set Error = $($R0)
  983.     goto fatal
  984. fatal = +
  985.     ifstr(i) $(Error) == ""
  986.         Shell $(UtilityInf) RegistryErrorString "SETUP_FAIL"
  987.         ifint $($ShellCode) != $(!SHELL_CODE_OK)
  988.             goto ShellCodeError
  989.         endif
  990.         set Error = $($R0)
  991.     endif
  992.     Ifint $(BillboardVisible) != 0
  993.         Shell "subroutn.inf" PopBillboard
  994.         Set BillboardVisible = 0
  995.     Endif
  996.     Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $(Error)
  997.     ifint $($ShellCode) != $(!SHELL_CODE_OK)
  998.         goto ShellCodeError
  999.     endif
  1000.    goto setfailed
  1001. ShellCodeError = +
  1002.     set DlgType      = "MessageBox"
  1003.     set STF_MB_TITLE = $(ShellCodeErrorTitle)
  1004.     set STF_MB_TEXT  = $(ShellCodeErrorText)
  1005.     set STF_MB_TYPE  = 1
  1006.     set STF_MB_ICON  = 3
  1007.     set STF_MB_DEF   = 1
  1008.     ui start "Error Message"
  1009.     goto setfailed
  1010. setfailed = +
  1011.     set CommonStatus = STATUS_FAILED
  1012.     ifstr(i) $(OEM_ABANDON_ON) == TRUE
  1013.         set OEM_ABANDON_ON = FALSE
  1014.         goto removeadapter
  1015.     endif
  1016.     goto end
  1017. end = +
  1018.     goto term
  1019. term = +
  1020.     Return $(CommonStatus)
  1021. [CreateNWLNKConfiguration]
  1022.     read-syms GeneralConstants
  1023.     Set NWLNKSvcKeyHandle = $($0)
  1024.     Debug-Output "NWLNK.INF: installing NWLNK configuration:"
  1025.     CreateRegKey $(NWLNKSvcKeyHandle) {"NetConfig",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyNetConfig
  1026.     CloseRegKey $(KeyNetConfig)
  1027. CreateNWLNKConfigDone = +
  1028.     Debug-Output "NWLNK.INF: installing NWLNK.....done."
  1029.     Return NO_ERROR
  1030. [Install-Option]
  1031.     set STF_VITAL = ""
  1032.     ifstr(i) $(AddCopy) == "YES"
  1033.         Debug-Output "NWLNK.INF: Adding files to copy list"
  1034.         AddSectionFilesToCopyList Files-$(Option) $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
  1035.         AddSectionFilesToCopyList Files-NWLNKEXE $(SrcDir) $(!STF_WINDOWSSYSPATH)
  1036.     endif
  1037.     ifstr(i) $(DoCopy) == "YES"
  1038.        Debug-Output "NWLNK.INF: Copying Files"
  1039.        set !STF_NCPA_FLUSH_COPYLIST = TRUE
  1040.        CopyFilesInCopyList
  1041.     endif
  1042.     ifstr(i) $(DoConfig) == "YES"
  1043.     endif
  1044.     Exit
  1045. [Install-Update]
  1046.    set STF_VITAL        = ""
  1047.    set STF_OVERWRITE    = "VERIFYSOURCEOLDER"
  1048.    AddSectionFilesToCopyList Files-$(Option) $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
  1049.    AddSectionFilesToCopyList Files-NWLNKEXE $(SrcDir) $(!STF_WINDOWSSYSPATH)
  1050.    Exit
  1051. [RipDialog]
  1052.     DlgType      = "MessageBox"
  1053.     STF_MB_TITLE = $(ProCaption)
  1054.     STF_MB_TEXT  = $(InstallRip)
  1055.     STF_MB_TYPE  = 3
  1056.     STF_MB_ICON  = 1
  1057.     STF_MB_DEF   = 1
  1058. [Source Media Descriptions]
  1059.     1 = "Windows NT Server CD-ROM", TAGFILE = cdrom.s
  1060. [Signature]
  1061.     FileType = MICROSOFT_FILE
  1062. [GetSignature]
  1063.     read-syms Signature
  1064.     return $(FileType)
  1065. [ProductType]
  1066. STF_PRODUCT  = LanmanNT
  1067. STF_PLATFORM = I386
  1068. [Files-Inf]
  1069. 2,    oemsetup.inf,     SIZE=1000,    RENAME=$(!UG_Filename)
  1070. [Files-NWLNKEXE]
  1071. 1,IPXCFG.DLL , SIZE=999
  1072. 1,IPXROUTE.EXE , SIZE=999
  1073. 1,NWPROVAU.DLL , SIZE=999
  1074. [Files-NWLNKIPX]
  1075. 1,NWLNKIPX.SYS , SIZE=999
  1076. 1,NWLNKNB.SYS , SIZE=999
  1077. 1,NWLNKSPX.SYS , SIZE=999
  1078. [LanguagesSupported]
  1079.     ENG
  1080. [OptionsTextENG]
  1081.     NWLNKIPX     = "NWLink IPX/SPX Compatible Transport"
  1082. [FileConstantsENG]
  1083. ProCaption   = "Windows NT Setup"
  1084. ProCancel    = "Cancel"
  1085. ProCancelMsg = "Windows NT Networking is not correctly installed.  "+
  1086.                "Are you sure you want to cancel copying files?"
  1087. ProCancelCap = "Network Setup Message"
  1088. ProText1     = "Copying:"
  1089. ProText2     = "To:"
  1090. FunctionTitle            = "NWLink IPX/SPX Compatible Transport Setup"
  1091. ProductNWLNKIPXDescription  = "NWLink IPX/SPX Compatible Transport Driver"
  1092. ProductNWLNKIPXDisplayName = "NWLink IPX/SPX Compatible Transport Protocol"
  1093. ProductNWLNKIPXTitle       = "NWLink IPX/SPX Compatible Transport"
  1094. ProductNWLNKNBDescription   = "NWLink NetBIOS Driver"
  1095. ProductNWLNKNBDisplayName  = "NWLink NetBIOS"
  1096. ProductNWLNKNBTitle        = "NWLink NetBIOS"
  1097. ProductNWLNKNBSYSDisplayName = "NWLinkNBsys"
  1098. ProductNWLNKNBSYSTitle     = "NWLINK NetBIOS Driver"
  1099. ProductNWLNKSPXDescription  = "NWLink SPX Protocol Driver"
  1100. ProductNWLNKSPXDisplayName = "NWLink SPX/SPXII Protocol"
  1101. ProductNWLNKSPXTitle       = "NWLink SPX Protocol"
  1102. CompetitorDisplayName = "NWLink IPX/SPX II Transport"
  1103. ShellCodeErrorTitle     = "Error: "$(FunctionTitle)
  1104. ShellCodeErrorText      = "Shell Code Error."
  1105. RASRebindError = "Setup has discovered that you have Remote Access Services installed. Do you want to configure RAS to support the NWLINK protocol?"
  1106. InstallRip     = "Do you want to install the IPX Rip Router?"
  1107. [DialogConstantsENG]
  1108. Help        = "&Help"
  1109. Exit        = "Cancel"
  1110. OK          = "OK"
  1111. HelpContext = ""
  1112. Continue    = "C&ontinue"
  1113. Cancel      = "C&ancel"
  1114. [FileDependentDlgENG]
  1115. [InfoDlg]
  1116. STF_MB_TITLE = "Information Message"
  1117. DlgType      = "MessageBox"
  1118. STF_MB_TEXT  = $(InfoMsgText)
  1119. STF_MB_TYPE  = 1
  1120. STF_MB_ICON  = 5
  1121. STF_MB_DEF   = 1
  1122. [InfoDlgCantConfigure]
  1123. InfoMsgText = "The IPX Protocol service is not currently configured to use any adapters."+
  1124.     "  If you have just installed it, return to the Networks dialog and "+
  1125.     "click  OK.  You will then have the opportunity to configure the adapters."
  1126. [InUseENG]
  1127. InfoMsgText = "The IPX Protocol service is being used by another service(s). "+
  1128.     "Please remove other related components before removing IPX Protocol."
  1129. [Billboard1ENG]
  1130. Status = "Installing IPX Protocol and related services..."
  1131. [FatalError1ENG]
  1132. Error = "Another IPX/SPX protocol driver is currently installed in this machine, "+
  1133.         "and the network interface cannot operate properly with both drivers installed. "+
  1134.         "If you still wish to install the NWLNK protocol driver, you must first "+
  1135.         "remove the "$(CompetitorDisplayName)" component and reboot your machine."
  1136.