|
|
1.1 root 1: ;*************************************************************************
2: ;
3: ; UTILITY.INF
4: ;
5: ; Network Installation utility functions. Each major piece of
6: ; functionality is coded as a [Section], and is invoked by name from
7: ; the outer level INF. See TEMPLATE.INF for example usage.
8: ;
9: ; CHANGES:
10: ; DavidHov 6/11/92 Added Service"Linkage" key return
11: ; value to [AddSoftwareComponent]
12: ;
13: ; DavidHov 8/24/92 Add WinSock support routines for
14: ; transports
15: ;
16: ;
17: ;
18: ;*************************************************************************
19:
20: ;
21: ;--------------------------------------------------------------------------
22: ; Header to be used at the front of all externally available INF sections.
23: ;--------------------------------------------------------------------------
24: ;
25: ;*************************************************************************
26: ;
27: ; SECTION: sectionname
28: ;
29: ; PURPOSE: <describe purpose of section>
30: ;
31: ; ARGUMENTS: $0
32: ; $1
33: ;
34: ; RETURNS: $R0
35: ; $R1
36: ;
37: ; REFERENCES: <list of global or parent variables referenced>
38: ;
39: ; MODIFIES: <list of global or parent variables modified>
40: ;
41: ;
42: ;*************************************************************************
43: ;*************************************************************************
44: ; end of section sectionname
45: ;*************************************************************************
46:
47: ;
48: ; Initialize general constants
49: ;
50: [InitBaseVars]
51:
52: KeyNull = ""
53: MAXIMUM_ALLOWED = 33554432
54: KeyInfo = {}
55: RegistryErrorIndex = NO_ERROR
56: NoTitle = 0
57:
58: CurrentControlSet = "SYSTEM\CurrentControlSet"
59: ServicesBaseName = $(CurrentControlSet)"\Services"
60: NetworkCardKeyName = $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards"
61:
62: !RegLastError = NO_ERROR
63:
64: [RegistryErrorSetup]
65: RegistryErrorIndex = ^(RegistryErrors$(!STF_LANGUAGE),1)
66: RegistryErrorList = ^(RegistryErrors$(!STF_LANGUAGE),2)
67:
68: ;*************************************************************************
69: ;
70: ; SECTION: RegistryErrorString
71: ;
72: ; PURPOSE: Translate a numeric registry error code into a string
73: ;
74: ; ARGUMENTS: $0 Registry error code
75: ;
76: ; RETURNS: $R0 String containing displayable text in language
77: ;
78: ; REFERENCES: !STF_LANGUAGE -- global "user's language" variable;
79: ; see [RegistryErrorSetup]
80: ;
81: ; MODIFIES: Nothing
82: ;
83: ;
84: ;*************************************************************************
85: [RegistryErrorString]
86:
87: read-syms RegistryErrorSetup
88: read-syms RegistryErrorUnknown$(!STF_LANGUAGE)
89:
90: set RE_String = *($(RegistryErrorList),~($(RegistryErrorIndex),$($0)))
91:
92: Ifstr $(RE_String) == ""
93: set RE_String = $(Error_Bogus)
94: endif
95:
96: return $(RE_String)
97:
98: ;*************************************************************************
99: ; end of section RegistryErrorString
100: ;*************************************************************************
101:
102: ;*************************************************************************
103: ;
104: ; SECTION: BaseServiceKey
105: ;
106: ; PURPOSE: Return an open key handle to the top of the services tree
107: ;
108: ; ARGUMENTS: none
109: ;
110: ; RETURNS: $R0 Registry error code
111: ; $R1 Registry key variable for SERVICES0
112: ;
113: ; REFERENCES: Nothing
114: ;
115: ; MODIFIES: Nothing
116: ;
117: ;*************************************************************************
118: [BaseServiceKey]
119: read-syms InitBaseVars
120: set BS_KeyServices = ""
121:
122: OpenRegKey $(!REG_H_LOCAL) "" $(ServicesBaseName) $(MAXIMUM_ALLOWED) BS_KeyServices
123:
124: Ifstr $(BS_KeyServices) == $(KeyNull)
125: Debug-Output "UTILITY.INF: could not open Services base key"
126: set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE
127: endif
128:
129: B_S_Return = +
130: return $(RegistryErrorIndex), $(BS_KeyServices)
131:
132: ;*************************************************************************
133: ;
134: ; SECTION: ReduceInfPath
135: ;
136: ; PURPOSE: Process the path\name string to an INF file. If
137: ; its path points to STF_WINDOWSSYSPATH, remove the path prefix.
138: ;
139: ; ARGUMENTS: $0 Path\name to INF file
140: ;
141: ; RETURNS: $R0 Resulting string
142: ;
143: ; REFERENCES: Nothing
144: ;
145: ; MODIFIES: Nothing
146: ;
147: ;*************************************************************************
148: [ReduceInfPath]
149: Set RIP_Result = $($0)
150:
151: Split-String $(RIP_Result) "\" InList
152: Set BasePath = $(!STF_WINDOWSSYSPATH)"\"
153: Split-String $(BasePath) "\" BaseList
154:
155: ;
156: ; See how many of the path elements match
157: ;
158:
159: Set Indx = 0
160: Set Matched = 0
161: QueryListSize InListSize, $(InList)
162: ForListDo $(BaseList)
163: Set-add Indx = $(Indx),1
164: Ifint $(Indx) <= $(InListSize)
165: Set Instr = *($(InList),$(Indx))
166: Ifstr(i) $($) == $(Instr)
167: Set-add Matched = $(Matched),1
168: Endif
169: Endif
170: EndForListDo
171:
172: ;
173: ; If all the path elements of the input path matched
174: ; those of STF_WINDOWSSYSPATH, strip them off of the result.
175: ;
176:
177: Ifint $(Indx) == $(Matched)
178: Set RIP_Result = ""
179: Set Indx2 = 0
180: ForListDo $(InList)
181: Set-add Indx2 = $(Indx2),1
182: Ifint $(Indx2) > $(Indx)
183: Set RIP_Result = $(RIP_Result)$($)
184: Endif
185: EndForListDo
186: Endif
187:
188: Return $(RIP_Result)
189:
190: ;*************************************************************************
191: ;
192: ; SECTION: InstallSoftwareProduct
193: ;
194: ; PURPOSE: Add a new component into the Registry
195: ;
196: ; ARGUMENTS: $0 name of Manufacturer
197: ; $1 name of Product
198: ; $2 full INF path and name
199: ;
200: ; RETURNS: $R0 error code or zero if no error
201: ; $R1 Registry key variable for
202: ; SOFTWARE\Manufacturer\Product\Version key
203: ; $R2 Registry key variable for
204: ; ...\NetRules
205: ;
206: ; REFERENCES: none
207: ;
208: ; MODIFIES: none
209: ;
210: ;*************************************************************************
211:
212: [InstallSoftwareProduct]
213: read-syms InitBaseVars
214:
215: set IS_MfgName = $($0)
216: set IS_ProdName = $($1)
217: set IS_Infname = $($2)
218: set IS_KeySoftware = ""
219: set IS_KeyMfg = ""
220: set IS_KeyProduct = ""
221: set IS_KeyVersion = ""
222: set IS_KeyNetRules = ""
223: set IS_MfgCreated = 1
224: set IS_ProductCreated = 1
225: ;
226: ; Validate the arguments passed in
227: ;
228: set RegistryErrorIndex = INVALID_DATA_PASSED
229:
230: Ifstr(i) $(IS_MfgName) == ""
231: goto I_S_Return
232: endif
233: Ifstr(i) $(IS_ProdName) == ""
234: goto I_S_Return
235: endif
236:
237: set RegistryErrorIndex = NO_ERROR
238: ;
239: ; Open the HKEY_LOCAL_MACHINE\SOFTWARE key
240: ;
241: OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_SoftwareBase) $(MAXIMUM_ALLOWED) IS_KeySoftware
242:
243: Ifstr $(IS_KeySoftware) == $(KeyNull)
244: set RegistryErrorIndex = UNABLE_ACCESS_SOFTWARE_REG
245: goto I_S_Return
246: endif
247: ;
248: ; Create the Manufacturer's key if necessary
249: ;
250: CreateRegKey $(IS_KeySoftware) {$(IS_MfgName),$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" IS_KeyMfg
251: Ifstr $(IS_KeyMfg) == $(KeyNull)
252: set IS_MfgCreated = 0
253: OpenRegKey $(IS_KeySoftware) "" $(IS_MfgName) $(MAXIMUM_ALLOWED) IS_KeyMfg
254: Ifstr $(IS_KeyMfg) == $(KeyNull)
255: set RegistryErrorIndex = UNABLE_OPEN_MICROSOFT_KEY
256: goto I_S_Return
257: endif
258: endif
259: ;
260: ; Create the Software Product key if necessary
261: ;
262: CreateRegKey $(IS_KeyMfg) {$(IS_ProdName),$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" IS_KeyProduct
263: Ifstr $(IS_KeyProduct) == $(KeyNull)
264: set IS_ProductCreated = 0
265: OpenRegKey $(IS_KeyMfg) "" $(IS_ProdName) $(MAXIMUM_ALLOWED) IS_KeyProduct
266: Ifstr $(IS_KeyProduct) == $(KeyNull)
267: set RegistryErrorIndex = UNABLE_CREATE_PRODUCT_KEY
268: goto I_S_Return
269: endif
270: endif
271: ;
272: ; Create the software product version key.
273: ;
274: CreateRegKey $(IS_KeyProduct) {"CurrentVersion",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" IS_KeyVersion
275: Ifstr $(IS_KeyVersion) == $(KeyNull)
276: OpenRegKey $(IS_KeyProduct) "" "CurrentVersion" $(MAXIMUM_ALLOWED) IS_KeyVersion
277: Ifstr $(IS_KeyVersion) == $(KeyNull)
278: set RegistryErrorIndex = UNABLE_CREATE_PRODUCT_VERSION
279: goto I_S_Return
280: endif
281: endif
282:
283: set RegistryErrorIndex = NO_ERROR
284: ;
285: ; Create the NetRules key
286: ;
287: CreateRegKey $(IS_KeyVersion) {NetRules,$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" IS_KeyNetRules
288: Ifstr $(IS_KeyNetRules) == $(KeyNull)
289: OpenRegKey $(IS_KeyVersion) "" NetRules $(MAXIMUM_ALLOWED) IS_KeyNetRules
290: Ifstr $(IS_KeyNetRules) == $(KeyNull)
291: set RegistryErrorIndex = UNABLE_CREATE_NETRULES_KEY
292: goto I_S_Return
293: endif
294: endif
295: ;
296: ; Set the "Infname" value if non-null; reduce it if it's in %SystemRoot%
297: ;
298: Ifstr $(IS_Infname) != ""
299: Shell "", ReduceInfPath, $(IS_Infname)
300: SetRegValue $(IS_KeyNetRules) {InfName,$(NoTitle),$(!REG_VT_SZ),$($R0)}
301: endif
302:
303: ;
304: ; Exit, leaving $(IS_KeyVersion) and $(IS_KeyNetRules) open for the caller...
305: ;
306: I_S_Return = +
307: Ifstr $(IS_KeyProduct) != ""
308: Ifint $(IS_ProductCreated) == 1
309: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
310: Debug-Output "UTILITY.INF: DeleteRegTree Product Key"
311: ;DeleteRegTree $(IS_KeyProduct) ""
312: set IS_KeyProduct = ""
313: endif
314: endif
315: Ifstr $(IS_KeyProduct) != ""
316: CloseRegKey $(IS_KeyProduct)
317: endif
318: endif
319: Ifstr $(IS_KeyMfg) != ""
320: Ifint $(IS_MfgCreated) == 1
321: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
322: ;DeleteRegTree $(IS_KeyMfg) ""
323: Debug-Output "UTILITY.INF: DeleteRegTree Manufacturer Key"
324: set IS_KeyMfg = ""
325: endif
326: endif
327: Ifstr $(IS_KeyMfg) != ""
328: CloseRegKey $(IS_KeyMfg)
329: endif
330: endif
331: Ifstr $(IS_KeySoftware) != ""
332: CloseRegKey $(IS_KeySoftware)
333: endif
334: return $(RegistryErrorIndex), $(IS_KeyVersion), $(IS_KeyNetRules)
335:
336: ;*************************************************************************
337: ; end of section InstallSoftwareProduct
338: ;*************************************************************************
339:
340: ;*************************************************************************
341: ;
342: ; SECTION: AddValueList
343: ;
344: ; PURPOSE: Given a nested list of value items, add each to the given
345: ; key. Key is left open.
346: ;
347: ; ARGUMENTS: $0 Registry key handle
348: ; $1 List of value items; for example:
349: ; { {ValueName1,0,$(!REG_VT_SZ),$(ValueData1)}, +
350: ; {ValueName2,0,$(!REG_VT_SZ),$(ValueData2)} }
351: ;
352: ; RETURNS: $R0 Registry error code.
353: ;
354: ;
355: ; REFERENCES: Nothing
356: ;
357: ; MODIFIES: Nothing
358: ;
359: ;*************************************************************************
360: [AddValueList]
361: set RegistryErrorIndex = NO_ERROR
362:
363: ForListDo $($1)
364: SetRegValue $($0) $($)
365: ifint $(RegLastError) != 0
366: Debug-Output "UTILITY.INF: Value write fail data: "$($)
367: Debug-Output "UTILITY.INF: Value write fail key: "$($0)
368: return UNABLE_WRITE_REGISTRY
369: endif
370: EndForListDo
371:
372: return $(RegistryErrorIndex)
373:
374: ;*************************************************************************
375: ; end of section AddValueList
376: ;*************************************************************************
377:
378: ;*************************************************************************
379: ;
380: ; SECTION: DeleteSoftwareProduct
381: ;
382: ; PURPOSE: Delete the given product from the Registry entirely
383: ;
384: ; ARGUMENTS: $0 Product Key Handle
385: ;
386: ; RETURNS: $R0 Registry error code
387: ; $R1
388: ;
389: ; REFERENCES: Nothing
390: ;
391: ; MODIFIES: Nothing
392: ;
393: ;*************************************************************************
394: [DeleteSoftwareProduct]
395:
396: set RegistryErrorIndex = NO_ERROR
397:
398: Debug-Output "UTILITY.INF: DeleteRegTree Software Product"
399: DeleteRegTree $($0) ""
400:
401: return $(RegistryErrorIndex)
402:
403: ;*************************************************************************
404: ; end of section DeleteSoftwareProduct
405: ;*************************************************************************
406:
407: ;*************************************************************************
408: ;
409: ; SECTION: VerExistedDlg
410: ;
411: ; PURPOSE: Popup a dialog and tell the user that the same ver of
412: ; the software already exists in the registery tree.
413: ; Ask the user whether he want to continue or not
414: ;
415: ; ARGUMENTS: $0 Product Name
416: ; $0 Product version
417: ;
418: ; RETURNS: $R0 Registry error code
419: ; $R1 either "continue" or "exit"
420: ;
421: ; REFERENCES: Nothing
422: ;
423: ; MODIFIES: Nothing
424: ;
425: ;*************************************************************************
426:
427: [VerExistedDlg]
428:
429: set RegistryErrorIndex = NO_ERROR
430:
431: set-subst LF = "\n"
432: read-syms VerExisted$(!STF_LANGUAGE)
433:
434: set DlgText = $($0)+
435: $(ver)+
436: $($1)+
437: $(Text)
438: Shell "Subroutn.Inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" $(DlgText)
439:
440: ifint $($ShellCode) != $(!SHELL_CODE_OK)
441: set RegistryErrorIndex = ERROR
442: endif
443:
444: return $(RegistryErrorIndex), $($R1)
445:
446: ;*************************************************************************
447: ; end of section VerExistedDialog
448: ;*************************************************************************
449:
450: ;*************************************************************************
451: ;
452: ; SECTION: CardExistedDlg
453: ;
454: ; PURPOSE: Popup a dialog and tell the user that the network card
455: ; is lready installed and ask them whether theyr want to
456: ; continue.
457: ;
458: ; ARGUMENTS: NONE
459: ;
460: ; RETURNS: $R0 Registry error code
461: ; $R1 either "continue" or "exit"
462: ;
463: ; REFERENCES: Nothing
464: ;
465: ; MODIFIES: Nothing
466: ;
467: ;*************************************************************************
468:
469: [CardExistedDlg]
470:
471: set RegistryErrorIndex = NO_ERROR
472:
473: set-subst LF = "\n"
474: read-syms CardExisted$(!STF_LANGUAGE)
475:
476: set DlgText = $(Text)
477:
478: Shell "Subroutn.Inf" SetupMessage $(!STF_LANGUAGE) "WARNING" $(DlgText)
479:
480: ifint $($ShellCode) != $(!SHELL_CODE_OK)
481: set RegistryErrorIndex = ERROR
482: endif
483:
484: return $(RegistryErrorIndex), $($R1)
485:
486: ;*************************************************************************
487: ; end of section CardExistedDialog
488: ;*************************************************************************
489:
490: ;*************************************************************************
491: ;
492: ; SECTION: CreateService
493: ;
494: ; PURPOSE: Create the Services area entry for a new product
495: ;
496: ; ARGUMENTS: $0 Name of the service (no imbedded blanks, etc.)
497: ; $1 Display Name of service
498: ; $2 image path string
499: ; $3 type of service:
500: ; system
501: ; adapter
502: ; driver
503: ; transport
504: ; service
505: ; serviceshare
506: ; $4 group, if any or ""
507: ; $5 dependency **list**, if any or {}
508: ; $6 ObjectName, usually ""
509: ; $7 EventMessageFile [Optional]
510: ; $8 TypeSupported [Optional]
511: ; $9 EventLog Location[Optional]
512: ; $10 Error control value [Optional]
513: ; $11 Event Source name [Optional]
514: ;
515: ;
516: ; RETURNS: $R0 Registry error code
517: ; $R1 Service area key handle
518: ; $R2 Parameters key handle
519: ; $R3 Linkage key handle
520: ;
521: ; REFERENCES: <list of global or parent variables referenced>
522: ;
523: ; MODIFIES: <list of global or parent variables modified>
524: ;
525: ; NOTES: If $(!NTN_ScUseRegistry) is != "", then direct Registry
526: ; access is used in lieu of the Service Controller API
527: ; wrapper. The Registry is automatically used if the
528: ; service type is "adapter".
529: ;
530: ; The image path format varies for drivers and other
531: ; services. For drivers of any kind, it's an NT name space
532: ; name. For services, it's a REG_EXPAND_SZ format Win32 name.
533: ;
534: ;
535: ; CHANGES: DavidHov: 6/11/92. "Groups" is REG_SZ, not REG_EXPAND_SZ
536: ; Adapters are type=4, start=4.
537: ; Only services get "ObjectName" value
538: ;
539: ;
540: ;
541: ;
542: ;*************************************************************************
543: [CreateService]
544: read-syms InitBaseVars
545:
546: set CS_NameOfService = $($0)
547: set CS_DisplayName = $($1)
548: set CS_ImagePath = $($2)
549: set CS_TypeOfService = $($3)
550: set CS_Group = $($4)
551: set CS_Dependencies = $($5)
552: set CS_ObjectName = $($6)
553: set CS_EventFile = $($7)
554: set CS_TypeSupported = $($8)
555: ifstr(i) $(CS_TypeSupported) == ""
556: set CS_TypeSupported = 7
557: endif
558: ; Set event log location
559: set CS_EventLogLocation = $($9)
560: ifstr(i) $(CS_EventLogLocation) == ""
561: set CS_EventLogLocation = "System"
562: endif
563: set CS_ErrorControl = $($10)
564: ifstr(i) $(CS_ErrorControl) == ""
565: set CS_ErrorControl = 1
566: endif
567: set CS_EventSourceName = $($11)
568: ifstr(i) $(CS_EventSourceName) == ""
569: set CS_EventSourceName = $(CS_NameOfService)
570: endif
571:
572: set CS_KeyServices = ""
573: set CS_KeyTempSvc = ""
574: set CS_KeySvcManager = ""
575: set CS_KeyParameters = ""
576: set CS_KeyLinkage = ""
577: set CS_UseRegistry = $(!NTN_ScUseRegistry)
578:
579: Debug-Output "UTILITY.INF: [CreateService] entered for "$(CS_NameOfService)
580:
581: Ifstr(i) $(CS_UseRegistry) != "YES"
582: Ifstr(i) $(CS_UseRegistry) != "NO"
583: Set CS_UseRegistry = "NO"
584: Endif
585: Endif
586:
587: Ifstr(i) $(CS_Dependencies) == ""
588: Set CS_Dependencies = {}
589: Endif
590:
591: ;
592: ; Get the base key handle for the services area
593: ;
594: Shell "", BaseServiceKey
595: set RegistryErrorIndex = $($R0)
596: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
597: set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE
598: goto C_S_Return
599: endif
600:
601: set CS_KeyServices = $($R1)
602:
603: ifstr(i) $(CS_TypeOfService) == "system"
604: set TypeValue = 2
605: set StartValue = 3
606: else-ifstr(i) $(CS_TypeOfService) == "systemstart"
607: set TypeValue = 2
608: set StartValue = 1
609: else-ifstr(i) $(CS_TypeOfService) == "systemauto"
610: set TypeValue = 2
611: set StartValue = 2
612: else-ifstr(i) $(CS_TypeOfService) == "adapter"
613: set TypeValue = 4
614: set StartValue = 3
615: Set CS_UseRegistry = "YES"
616: else-ifstr(i) $(CS_TypeOfService) == "kernelauto"
617: set TypeValue = 1
618: set StartValue = 1
619: else-ifstr(i) $(CS_TypeOfService) == "autoserviceshare"
620: set TypeValue = 32
621: set StartValue = 2
622: else-ifstr(i) $(CS_TypeOfService) == "transport"
623: set TypeValue = 2
624: set StartValue = 3
625: else-ifstr(i) $(CS_TypeOfService) == "kernel"
626: set TypeValue = 1
627: set StartValue = 3
628: else-ifstr(i) $(CS_TypeOfService) == "kernelautostart"
629: set TypeValue = 1
630: set StartValue = 2
631: else-ifstr(i) $(CS_TypeOfService) == "kerneldisable"
632: set TypeValue = 1
633: set StartValue = 4
634: else-ifstr(i) $(CS_TypeOfService) == "service"
635: set TypeValue = 16
636: set StartValue = 3
637: else-ifstr(i) $(CS_TypeOfService) == "serviceauto"
638: set TypeValue = 16
639: set StartValue = 2
640: else-ifstr(i) $(CS_TypeOfService) == "serviceshare"
641: set TypeValue = 32
642: set StartValue = 3
643: else
644: Set CS_UseRegistry = "YES"
645: Debug-Output "UTILITY.INF: [CreateService] Unrecognized TypeOfService parameter"
646: set TypeValue = 4
647: set StartValue = 3
648: endif
649:
650: Ifint $(TypeValue) > 4
651: Ifstr(i) $(CS_ObjectName) == ""
652: set CS_ObjectName = "LocalSystem"
653: Endif
654: Endif
655:
656: OpenRegKey $(CS_KeyServices) "" $(CS_NameOfService) $(MAXIMUM_ALLOWED) +
657: CS_KeyTempSvc
658: ifstr $(CS_KeyTempSvc) != $(KeyNull)
659: ; wait a minute.. somebody already installed the driver
660: ; go to open other keys
661:
662: ; check whether it is marked for deletion
663: GetRegValue $(CS_KeyTempSvc),"DeleteFlag", DeleteFlagInfo
664: set DeleteFlag = *($(DeleteFlagInfo), 4)
665: ifint $(DeleteFlag) == 1
666: Set RegistryErrorIndex = REBOOT_MACHINE_BEFORE_ADD_ADAPTER
667: goto C_S_Return
668: endif
669: ;
670: ; Device section of the registry already exist.
671: ; Let the code below to handle it. It will popup a dialog
672: ; and returns error code.
673: ;
674: endif
675:
676: ifstr(i) $(CS_UseRegistry) == "YES"
677: ;
678: Debug-Output "UTILITY.INF: [CreateService] "$(CS_NameOfService)" using Registry"
679: ;
680: ; Create our own service
681: ;
682: OpenRegKey $(CS_KeyServices) "" $(CS_NameOfService) $(MAXIMUM_ALLOWED) +
683: CS_KeyTempSvc
684: ifstr $(CS_KeyTempSvc) == $(KeyNull)
685: CreateRegKey $(CS_KeyServices) {$(CS_NameOfService),$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" CS_KeyTempSvc
686: else
687: Debug-Output "UTILITY.INF: service key "$(CS_NameOfService)" already existed"
688: Set RegistryErrorIndex = UNABLE_CREATE_CONFIGURE_SERVICE
689: CloseRegKey $(CS_KeyTempSvc)
690: CloseRegKey $(CS_KeyServices)
691: Goto C_S_Return
692: endif
693:
694: Ifstr(i) $(CS_KeyTempSvc) == $(KeyNull)
695:
696: Debug-Output "UTILITY.INF: could not create service key "$(CS_NameOfService)
697: Set RegistryErrorIndex = UNABLE_CREATE_CONFIGURE_SERVICE
698: CloseRegKey $(CS_KeyTempSvc)
699: CloseRegKey $(CS_KeyServices)
700: Goto C_S_Return
701:
702: else
703:
704: set NewValueList = {+
705: {Type,$(NoTitle),$(!REG_VT_DWORD),$(TypeValue)},+
706: {Start,$(NoTitle),$(!REG_VT_DWORD),$(StartValue)},+
707: {ErrorControl,$(NoTitle),$(!REG_VT_DWORD),$(CS_ErrorControl)}+
708: }
709:
710: Ifint $(TypeValue) > 4
711: Set NewValueList = >($(NewValueList), +
712: {ObjectName,$(NoTitle),$(!REG_VT_SZ),$(CS_ObjectName)})
713: Endif
714:
715: ifstr(i) $(CS_Group) != ""
716: set NewValueList = >($(NewValueList), +
717: {Group,$(NoTitle),$(!REG_VT_SZ),$(CS_Group)})
718: endif
719:
720: ifstr(i) $(CS_ImagePath) != ""
721: set NewValueList = >($(NewValueList), +
722: {ImagePath,$(NoTitle),$(!REG_VT_EXPAND_SZ),$(CS_ImagePath)})
723: endif
724:
725: ifstr(i) $(CS_Dependencies) != ""
726: ifstr(i) $(CS_Dependencies) != {}
727: set NewValueList = >($(NewValueList), +
728: {Dependencies,$(NoTitle),$(!REG_VT_MULTI_SZ),$(CS_Dependencies)})
729: endif
730: endif
731:
732: Shell "", AddValueList, $(CS_KeyTempSvc), $(NewValueList)
733:
734: set RegistryErrorIndex = $($R0)
735:
736: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
737: Debug-Output "Registry error: Add value list"
738: endif
739:
740: endif
741: else
742: Debug-Output "UTILITY.INF: [CreateService] "$(CS_NameOfService)" using CreateService() wrapper"
743: ;
744: ; Call NCPA to create service key.
745: ;
746: Set FLibraryErrCtl = 1
747: LibraryProcedure CS_CreateResult $(!NCPA_HANDLE), CPlSetup, $(!STF_HWND), CREATESVC,+
748: $(CS_NameOfService), $(CS_DisplayName), $(StartValue), $(TypeValue), $(CS_ErrorControl),+
749: $(CS_ImagePath), $(CS_Group),$(CS_Dependencies),$(CS_ObjectName)
750: Set FLibraryErrCtl = 0
751: ;
752: ; Check the return code
753: ;
754: Set CS_CreateError = *($(CS_CreateResult),1)
755: Ifint $(CS_CreateError) != 0
756: Debug-Output "UTILITY.INF: CreateService wrapper failed, error: "$(CS_CreateResult)
757: ;
758: ; See if the error is special
759: ;
760: Ifint $(CS_CreateResult) == 1073
761: Set RegistryErrorIndex = SERVICE_ALREADY_EXISTS
762: Else-ifint $(CS_CreateResult) == 1072
763: Set RegistryErrorIndex = SERVICE_MARKED_FOR_DELETE
764: Else
765: Set RegistryErrorIndex = UNABLE_CREATE_CONFIGURE_SERVICE
766: Endif
767: CloseRegKey $(CS_KeyTempSvc)
768: CloseRegKey $(CS_KeyServices)
769: Goto C_S_Return
770: Endif
771: ;
772: ; Now open the key which should have been created by the service controller
773: ;
774: OpenRegKey $(CS_KeyServices) "" $(CS_NameOfService) $(MAXIMUM_ALLOWED) CS_KeyTempSvc
775: ifstr $(CS_KeyTempSvc) == $(KeyNull)
776: Debug-Output "UTILITY.INF: unable to open new service key"
777: set RegistryErrorIndex = UNABLE_CREATE_CONFIGURE_SERVICE
778: CloseRegKey $(CS_KeyTempSvc)
779: CloseRegKey $(CS_KeyServices)
780: Goto C_S_Return
781: endif
782: endif
783:
784: ;
785: ; Open or Create the Parameters subkey
786: ;
787: OpenRegKey $(CS_KeyTempSvc) "" "Parameters" $(MAXIMUM_ALLOWED) +
788: CS_KeyParameters
789: ifstr $(CS_KeyParameters) == $(KeyNull)
790: CreateRegKey $(CS_KeyTempSvc) {"Parameters",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" CS_KeyParameters
791: endif
792:
793: Ifstr $(CS_KeyParameters) == $(KeyNull)
794: set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
795: CloseRegKey $(CS_KeyTempSvc)
796: CloseRegKey $(CS_KeyServices)
797: goto C_S_Return
798: endif
799:
800: set RegistryErrorIndex = NO_ERROR
801: ;
802: ; Open or Create the Linkage subkey
803: ;
804: OpenRegKey $(CS_KeyTempSvc) "" "Linkage" $(MAXIMUM_ALLOWED) CS_KeyLinkage
805: Ifstr $(CS_KeyLinkage) == $(KeyNull)
806: CreateRegKey $(CS_KeyTempSvc) {"Linkage",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" CS_KeyLinkage
807: Endif
808:
809: Ifstr $(CS_KeyLinkage) == $(KeyNull)
810: set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
811: CloseRegKey $(CS_KeyTempSvc)
812: CloseRegKey $(CS_KeyServices)
813: goto C_S_Return
814: endif
815: ;
816: ; Open or Create the Linkage\Disabled subkey
817: ;
818: OpenRegKey $(CS_KeyLinkage) "" "Disabled" $(MAXIMUM_ALLOWED) CS_KeyDisabled
819: Ifstr $(CS_KeyDisabled) == $(KeyNull)
820: CreateRegKey $(CS_KeyLinkage) {"Disabled",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" CS_KeyDisabled
821: Endif
822:
823: Ifstr $(CS_KeyDisabled) == $(KeyNull)
824: set RegistryErrorIndex = UNABLE_CREATE_SERVICE_SUBKEY
825: CloseRegKey $(CS_KeyTempSvc)
826: CloseRegKey $(CS_KeyServices)
827: CloseRegKey $(CS_KeyLinkage)
828: goto C_S_Return
829: endif
830: CloseRegKey $(CS_KeyDisabled)
831:
832:
833: ;
834: ; Create Eventlog information
835: ;
836: ifstr(i) $(CS_EventFile) != ""
837: OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services\EventLog\"$(CS_EventLogLocation) $(MAXIMUM_ALLOWED) CS_KeyEventLog
838: Ifstr $(CS_KeyEventLog) == $(KeyNull)
839: ; cannot open eventlog
840: debug-output "Cannot open eventlog key"
841: set RegistryErrorIndex = UNABLE_OPEN_EVENTLOG_SUBKEY
842: CloseRegKey $(CS_KeyTempSvc)
843: CloseRegKey $(CS_KeyServices)
844: CloseRegKey $(CS_KeyParameters)
845: CloseRegKey $(CS_KeyLinkage)
846: goto C_S_Return
847: else
848: ; set up the service key
849: OpenRegKey $(CS_KeyEventLog) "" $(CS_EventSourceName) $(MAXIMUM_ALLOWED) CS_KeyService
850: ifstr(i) $(CS_KeyService) == ""
851: CreateRegKey $(CS_KeyEventLog) {$(CS_EventSourceName),$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" CS_KeyService
852: endif
853:
854: Ifstr $(CS_KeyService) != $(KeyNull)
855: ; create the EventMessageFile and TypeSupported fields
856: SetRegValue $(CS_KeyService) {EventMessageFile,$(NoTitle),$(!REG_VT_EXPAND_SZ),$(CS_EventFile)}
857: SetRegValue $(CS_KeyService) {TypesSupported,$(NoTitle),$(!REG_VT_DWORD),$(CS_TypeSupported)}
858: CloseRegKey $(CS_KeyService)
859: endif
860: Endif
861: endif
862:
863: ;
864: ; Return the keys and error codes
865: ;
866: C_S_Return = +
867: Ifstr $(CS_KeyServices) != $(KeyNull)
868: CloseRegKey $(CS_KeyServices)
869: endif
870: return $(RegistryErrorIndex), $(CS_KeyTempSvc), $(CS_KeyParameters), $(CS_KeyLinkage)
871:
872: ;*************************************************************************
873: ; end of section CreateService
874: ;*************************************************************************
875:
876:
877: ;*************************************************************************
878: ;
879: ; SECTION: AssignAdapterNumber
880: ;
881: ; PURPOSE: Enumerate the netcards, and return a numeric value which
882: ; is unused.
883: ;
884: ; ARGUMENTS: None.
885: ;
886: ; RETURNS: $R0 Regisitry Error Code
887: ; $R1 Numeric value to be use for new adapter;
888: ; (1,2,3..)
889: ;
890: ; REFERENCES: Nothing
891: ;
892: ; MODIFIES: Nothing
893: ;
894: ;
895: ;*************************************************************************
896: [AssignAdapterNumber]
897: read-syms InitBaseVars
898:
899: set AA_AdapterNumber = 1
900: set AA_KeyNetcards = ""
901: set AA_KeyTemp = ""
902: set RegistryErrorIndex = NO_ERROR
903:
904: OpenRegKey $(!REG_H_LOCAL) "" $(NetworkCardKeyName) $(MAXIMUM_ALLOWED) AA_KeyNetcards
905:
906: Ifstr $(AA_KeyNetcards) == $(KeyNull)
907: set RegistryErrorIndex = UNABLE_OPEN_NETWORKCARD_SECTION
908: goto A_A_Return
909: endif
910: ;
911: ; Loop to find an unused adapter number
912: ;
913: A_A_TryAgain = +
914: Ifint $(AA_AdapterNumber) > 100
915: Set AA_AdapterNumber = 0
916: Set RegistryErrorIndex = UNABLE_OPEN_NETWORKCARD_SECTION
917: Goto A_A_Found
918: Endif
919:
920: ifint $(AA_AdapterNumber) < 10
921: set Tmp_AA_AdapterNumber = "0"$(AA_AdapterNumber)
922: else
923: set Tmp_AA_AdapterNumber = $(AA_AdapterNumber)
924: endif
925:
926: OpenRegKey $(AA_KeyNetcards) "" $(Tmp_AA_AdapterNumber) $(MAXIMUM_ALLOWED) AA_KeyTemp
927:
928: Ifstr $(AA_KeyTemp) == $(KeyNull)
929: Goto A_A_Found
930: Endif
931:
932: CloseRegKey $(AA_KeyTemp)
933: Set AA_KeyTemp = $(KeyNull)
934: Set-add AA_AdapterNumber = $(AA_AdapterNumber),1
935: Goto A_A_TryAgain
936:
937: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
938: ;;BUGBUG: The code below should work
939: ;;
940: ; EnumRegKey $(AA_KeyNetcards) AA_KeyNameList
941: ;
942: ; ForListDo $(AA_KeyNameList)
943: ; set AA_KeyName = *($($),1)
944: ; Ifint $(AA_AdapterNumber) != $(AA_KeyName)
945: ; goto A_A_Found
946: ; endif
947: ; set-add AA_AdapterNumber = $(AA_AdapterNumber),1
948: ; EndForListDo
949: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
950:
951: A_A_Found =+
952: IfInt $(AA_AdapterNumber) <= 9
953: set AA_AdapterNumber = "0"$(AA_AdapterNumber)
954: endif
955: CloseRegKey $(AA_KeyNetcards)
956:
957: A_A_Return = +
958: return $(RegistryErrorIndex) $(AA_AdapterNumber)
959:
960: ;*************************************************************************
961: ; end of section AssignAdapterNumber
962: ;*************************************************************************
963:
964: ;*************************************************************************
965: ;
966: ; SECTION: InstallNetcard
967: ;
968: ; PURPOSE: Create a new HARDWARE\Netcard\(n) area in the Registry
969: ;
970: ; ARGUMENTS: $0 Name if the INF file
971: ;
972: ; RETURNS: $R0 Registry error code
973: ; $R1 Netcard\(n) key handle
974: ; $R2 numeric index of netcard (n)
975: ; $R3 NetRules key handle
976: ;
977: ; REFERENCES: Nothing
978: ;
979: ; MODIFIES: Nothing
980: ;
981: ;
982: ;*************************************************************************
983: [InstallNetcard]
984: read-syms InitBaseVars
985:
986: set IN_Infname = $($0)
987: set IN_CardNumber = 0
988: set IN_KeyNetcard = ""
989: set IN_KeyNetRules = ""
990: ;
991: ; Assign a number to this network card and create its key
992: ;
993: Shell "" AssignAdapterNumber
994:
995: set RegistryErrorIndex = $($R0)
996: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
997: goto I_N_Return
998: endif
999:
1000: set IN_CardNumber = $($R1)
1001:
1002: CreateRegKey $(!REG_H_LOCAL) {$(NetworkCardKeyName)\$(IN_CardNumber),$(NoTitle),GenericClass} +
1003: "" $(MAXIMUM_ALLOWED) "" IN_KeyNetcard
1004:
1005: Ifstr $(IN_KeyNetcard) == $(KeyNull)
1006: set RegistryErrorIndex = UNABLE_CREATE_NETCARD_CONFIGURATION
1007: goto I_N_Return
1008: endif
1009: ;
1010: ; Create the NetRules key
1011: ;
1012: CreateRegKey $(IN_KeyNetcard) {NetRules,$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" IN_KeyNetRules
1013: Ifstr $(IN_KeyNetRules) == $(KeyNull)
1014: set RegistryErrorIndex = UNABLE_CREATE_NETRULES_KEY
1015: goto I_N_Return
1016: endif
1017: ;
1018: ; Set the "Infname" value if non-null; reduce it if it's in %SystemRoot%
1019: ;
1020: Ifstr $(IN_Infname) != ""
1021: Shell "", ReduceInfPath, $(IN_Infname)
1022: SetRegValue $(IN_KeyNetRules) {InfName,$(NoTitle),$(!REG_VT_SZ),$($R0)}
1023: endif
1024:
1025: set RegistryErrorIndex = NO_ERROR
1026:
1027: I_N_Return = +
1028: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
1029: Debug-Output "UTILITY.INF: [InstallNetcard]: "$(RegistryErrorIndex)
1030: Ifstr $(IN_KeyNetRules) != $(KeyNull)
1031: CloseRegKey $(IN_KeyNetRules)
1032: set IN_KeyNetrules = ''
1033: endif
1034: ;BUGBUG DeleteRegTree $(IN_KeyNetcard)
1035: set IN_KeyNetcard = ""
1036: endif
1037: return $(RegistryErrorIndex), $(IN_KeyNetcard), $(IN_CardNumber), $(IN_KeyNetRules)
1038:
1039: ;*************************************************************************
1040: ; end of section InstallNetcard
1041: ;*************************************************************************
1042:
1043: ;*************************************************************************
1044: ;
1045: ; SECTION: LinkToService
1046: ;
1047: ; PURPOSE: Link a software or hardware component to its
1048: ; corresponding service area entry
1049: ;
1050: ; ARGUMENTS: $0 Registry key handle to primary component key
1051: ; $1 Name of service (no imbedded blanks, etc.)
1052: ;
1053: ; RETURNS: $R0 Registry error code
1054: ;
1055: ; REFERENCES: Nothing
1056: ;
1057: ; MODIFIES: Nothing
1058: ;
1059: ;
1060: ;*************************************************************************
1061: [LinkToService]
1062:
1063: read-syms InitBaseVars
1064:
1065: SetRegValue $($0) {ServiceName,$(NoTitle),$(!REG_VT_SZ),$($1)}
1066:
1067: L_S_Return = +
1068: return $(RegistryErrorIndex)
1069:
1070: ;*************************************************************************
1071: ; end of section LinkToService
1072: ;*************************************************************************
1073:
1074: ;*************************************************************************
1075: ;
1076: ; SECTION: IncrementRefCount
1077: ;
1078: ; PURPOSE: Increment the reference counter in the registry
1079: ;
1080: ; ARGUMENTS: $0 Registry key name
1081: ;
1082: ; RETURNS: $R0 Registry error code
1083: ;
1084: ; REFERENCES: Nothing
1085: ;
1086: ; MODIFIES: Nothing
1087: ;
1088: ;
1089: ;*************************************************************************
1090: [IncrementRefCount]
1091: read-syms InitBaseVars
1092:
1093: OpenRegKey $(!REG_H_LOCAL) "" $($0) $(MAXIMUM_ALLOWED) SoftwareKey
1094:
1095: Ifstr $(SoftwareKey) == $(KeyNull)
1096: Debug-Output "UTILITY.INF: could not open Software base key"
1097: set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE
1098: goto IncrementRefCount_Return
1099: endif
1100:
1101: GetRegValue $(SoftwareKey),"RefCount", RefCountInfo
1102: set RefCount = *($(RefCountInfo), 4)
1103: Set-add RefCount = $(RefCount),1
1104: SetRegValue $(SoftwareKey) {RefCount,$(NoTitle),$(!REG_VT_DWORD),$(RefCount)}
1105: CloseRegKey $(SoftwareKey)
1106:
1107: IncrementRefCount_Return = +
1108: return $(RegistryErrorIndex)
1109:
1110: ;*************************************************************************
1111: ; end of section IncrementRefCount
1112: ;*************************************************************************
1113:
1114: ;*************************************************************************
1115: ;
1116: ; SECTION: DecrementRefCount
1117: ;
1118: ; PURPOSE: Decrement the reference counter in the registry
1119: ;
1120: ; ARGUMENTS: $0 Registry key name
1121: ;
1122: ; RETURNS: $R0 Registry error code
1123: ;
1124: ; REFERENCES: Nothing
1125: ;
1126: ; MODIFIES: Nothing
1127: ;
1128: ;
1129: ;*************************************************************************
1130: [DecrementRefCount]
1131: read-syms InitBaseVars
1132:
1133: OpenRegKey $(!REG_H_LOCAL) "" $($0) $(MAXIMUM_ALLOWED) SoftwareKey
1134:
1135: Ifstr $(SoftwareKey) == $(KeyNull)
1136: Debug-Output "UTILITY.INF: could not open Software base key"
1137: set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE
1138: goto DecrementRefCount_Return
1139: endif
1140:
1141: GetRegValue $(SoftwareKey),"RefCount", RefCountInfo
1142: set RefCount = *($(RefCountInfo), 4)
1143: ifint $(RefCount) == 0
1144: ; something wrong
1145: goto DecrementRefCount_Return
1146: endif
1147: Set-sub RefCount = $(RefCount),1
1148: SetRegValue $(SoftwareKey) {RefCount,$(NoTitle),$(!REG_VT_DWORD),$(RefCount)}
1149: CloseRegKey $(SoftwareKey)
1150:
1151: DecrementRefCount_Return = +
1152: return $(RegistryErrorIndex)
1153:
1154: ;*************************************************************************
1155: ; end of section DecrementRefCount
1156: ;*************************************************************************
1157:
1158: ;*************************************************************************
1159: ;
1160: ; SECTION: IsRefCountEqual0
1161: ;
1162: ; PURPOSE: check the reference counter in the registry is equal to 0 or
1163: ; not
1164: ;
1165: ; ARGUMENTS: $0 Registry key name
1166: ;
1167: ; RETURNS: $R0 Registry error code
1168: ; $R1 0 - if ref count != 0
1169: ; 1 - if ref count = 0
1170: ;
1171: ; REFERENCES: Nothing
1172: ;
1173: ; MODIFIES: Nothing
1174: ;
1175: ;
1176: ;*************************************************************************
1177: [IsRefCountEqualZero]
1178: read-syms InitBaseVars
1179:
1180: OpenRegKey $(!REG_H_LOCAL) "" $($0) $(MAXIMUM_ALLOWED) SoftwareKey
1181:
1182: Ifstr $(SoftwareKey) == $(KeyNull)
1183: Debug-Output "UTILITY.INF: could not open Software base key"
1184: set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE
1185: goto IsRefCountEqualZero_Return
1186: endif
1187:
1188: GetRegValue $(SoftwareKey),"RefCount", RefCountInfo
1189: set RefCount = *($(RefCountInfo), 4)
1190: Ifint $(RefCount) == 0
1191: set RefCountEqualZero = 1
1192: else
1193: set RefCountEqualZero = 0
1194: endif
1195: CloseRegKey $(SoftwareKey)
1196:
1197: IsRefCountEqualZero_Return = +
1198: return $(RegistryErrorIndex) $(RefCountEqualZero)
1199:
1200:
1201: ;*************************************************************************
1202: ;
1203: ; SECTION: FindService
1204: ;
1205: ; PURPOSE: Given a hardware or software component key handle,
1206: ; return a key handle to the corresponding Service entry
1207: ;
1208: ; ARGUMENTS: $0 Registry key handle to primary component
1209: ; $1 type of component (adapter, etc.)
1210: ;
1211: ; RETURNS: $R0 Registry error code
1212: ; $R1 Registry key handle for Service area
1213: ; $R2 Registry key handle for Parameters subkey
1214: ;
1215: ; REFERENCES: Nothing
1216: ;
1217: ; MODIFIES: Nothing
1218: ;
1219: ;
1220: ;*************************************************************************
1221: [FindService]
1222: read-syms InitBaseVars
1223:
1224: set FS_KeyThisService = ""
1225: set FS_KeyParameters = ""
1226: set FS_KeyComponent = $($0)
1227: set FS_TypeComponent = $($1)
1228:
1229: Shell "", BaseServiceKey
1230:
1231: set FS_KeyServices = $($R1)
1232: set RegistryErrorIndex = $($R0)
1233:
1234: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
1235: goto F_S_Return
1236: endif
1237: ;
1238: ; Obtain the all the values for the component key.
1239: ;
1240: EnumRegValue $(FS_KeyComponent) FS_ValueList
1241:
1242: ; BUGBUG: Check RegLastError
1243:
1244: set FS_SvcName = ""
1245:
1246: ForListDo $(FS_ValueList)
1247: set FS_ValueName = *($($),1)
1248: Ifstr(i) $(FS_ValueName) == ServiceName
1249: set FS_SvcName = *($($),4)
1250: goto F_S_Break1
1251: endif
1252: EndForListDo
1253: F_S_Break1 = +
1254:
1255: Ifstr $(FS_SvcName) == $(KeyNull)
1256: set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
1257: goto F_S_Return
1258: endif
1259:
1260: OpenRegKey $(FS_KeyServices) "" $(FS_SvcName) $(MAXIMUM_ALLOWED) FS_KeyThisService
1261: Ifstr $(FS_KeyThisService) == $(KeyNull)
1262: set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
1263: goto F_S_Return
1264: endif
1265:
1266: OpenRegKey $(FS_KeyThisService) "" "Parameters" $(MAXIMUM_ALLOWED) FS_KeyParameters
1267: Ifstr $(FS_KeyParameters) == $(KeyNull)
1268: set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
1269: goto F_S_Return
1270: endif
1271:
1272: F_S_Return = +
1273: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
1274: Ifstr $(FS_KeyParameters) != $(KeyNull)
1275: CloseRegKey $(FS_KeyParameters)
1276: endif
1277: Ifstr $(FS_KeyThisService) != $(KeyNull)
1278: CloseRegKey $(FS_KeyThisService)
1279: endif
1280: endif
1281: return $(RegistryErrorIndex), $(FS_KeyThisService) $(FS_KeyParameters)
1282:
1283: ;*************************************************************************
1284: ; end of section FindService
1285: ;*************************************************************************
1286: ;*************************************************************************
1287: ;
1288: ; SECTION: GetServiceParameters
1289: ;
1290: ; PURPOSE: Given a component key and type, return a list of
1291: ; all its current parameters
1292: ;
1293: ; ARGUMENTS: $0 Registry key handle to primary component
1294: ; $1 type of component (adapter, etc.)
1295: ;
1296: ; RETURNS: $R0 Registry error code
1297: ; $R1 Registry key handle for Service area
1298: ; $R2 Registry key handle for Parameters subkey
1299: ; $R3 Value list of all values under Parameters subkey
1300: ;
1301: ; REFERENCES: Nothing
1302: ;
1303: ; MODIFIES: Nothing
1304: ;
1305: ;*************************************************************************
1306: [GetServiceParameters]
1307: read-syms InitBaseVars
1308: set GP_KeyComponent = $($0)
1309: set GP_KeyService = ""
1310: set GP_KeyParameters = ""
1311: set GP_ValueList = {}
1312:
1313: FindService $(GP_KeyComponent) $($1)
1314: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
1315: goto G_P_Return
1316: endif
1317:
1318: set GP_KeyService = $($R1)
1319: set GP_KeyParameters = $($R2)
1320:
1321: EnumRegValue $(GP_KeyParameters) GP_ValueList
1322:
1323: G_P_Return = +
1324: return $(RegistryErrorIndex) $(GP_KeyService) $(GP_KeyParameters) $(GP_ValueList)
1325:
1326: ;*************************************************************************
1327: ; end of section sectionname
1328: ;*************************************************************************
1329:
1330: ;*************************************************************************
1331: ;
1332: ; SECTION: AddSoftwareComponent
1333: ;
1334: ; PURPOSE: Adds all the Registry information necessary for
1335: ; a new software component. This involves creating
1336: ; the SOFTWARE area and the SERVICE area.
1337: ;
1338: ; ARGUMENTS: $0 name of Manufacturer
1339: ; $1 name of Product
1340: ; $2 service name to use (no imbedded blanks, etc.)
1341: ; $3 Display Name for service
1342: ; $4 full path name to the INF file for configuration
1343: ; $5 ImagePath
1344: ; $6 type of the software,
1345: ; see [CreateService] for complete list
1346: ; $7 service order group, if any or ""
1347: ; $8 dependency **list**, if any or {}
1348: ; $9 ObjectName. if "", it will set to "LocalSystem"
1349: ; $10 EventMessageFile [optional]
1350: ; $11 TypeSupported [optional]
1351: ; $12 event log location [optional]
1352: ; $13 error control value [optional]
1353: ; $14 event log source [optional]
1354: ;
1355: ; RETURNS: $R0 error code or zero if no error
1356: ; $R1 Registry key variable for
1357: ; SOFTWARE\Manufacturer\Product\Version key
1358: ; $R2 Registry key variable for
1359: ; SOFTWARE\...\NetRules
1360: ; $R3 Registry key handle for Services key
1361: ; $R4 "Parameters" key handle for Services area
1362: ; $R5 "Linkage" key handle for Services area
1363: ;
1364: ; REFERENCES: Nothing
1365: ;
1366: ; MODIFIES: Nothing
1367: ;
1368: ;*************************************************************************
1369: [AddSoftwareComponent]
1370: read-syms InitBaseVars
1371:
1372: set AS_MfgName = $($0)
1373: set AS_ProdName = $($1)
1374: set AS_SvcName = $($2)
1375: set AS_DisplayName = $($3)
1376: set AS_Infname = $($4)
1377: set AS_ImagePath = $($5)
1378: set AS_ServiceType = $($6)
1379: set AS_Group = $($7)
1380: set AS_Dependencies = $($8)
1381: set AS_ObjectName = $($9)
1382: set AS_EventFile = $($10)
1383: set AS_TypeSupported = $($11)
1384: set AS_EventLocation = $($12)
1385: set AS_ErrorCtlValue = $($13)
1386: set AS_EventSource = $($14)
1387: set AS_KeyVersion = ""
1388: set AS_KeyNetRules = ""
1389: set AS_KeyService = ""
1390: set AS_KeyParameters = ""
1391: set AS_KeyLinkage = ""
1392:
1393: ;
1394: ; Create the Service entry for this product
1395: ;
1396: Shell "", CreateService,$(AS_SvcName),$(AS_DisplayName),$(AS_ImagePath),+
1397: $(AS_ServiceType),$(AS_Group),$(AS_Dependencies),$(AS_ObjectName),+
1398: $(AS_EventFile),$(AS_TypeSupported),+
1399: $(AS_EventLocation),$(AS_ErrorCtlValue),$(AS_EventSource)
1400:
1401: set RegistryErrorIndex = $($R0)
1402: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
1403: goto A_S_Return
1404: endif
1405:
1406: set AS_KeyService = $($R1)
1407: set AS_KeyParameters = $($R2)
1408: set AS_KeyLinkage = $($R3)
1409: ;
1410: ; Service area is created. Create the software area and link them
1411: ;
1412: Shell "", InstallSoftwareProduct, $(AS_MfgName), $(AS_ProdName), $(AS_Infname)
1413:
1414: set RegistryErrorIndex = $($R0)
1415: Ifstr(i) $(RegistryErrorIndex) == NO_ERROR
1416: set AS_KeyVersion = $($R1)
1417: set AS_KeyNetRules = $($R2)
1418: Shell "", LinkToService, $(AS_KeyVersion), $(AS_SvcName), service
1419:
1420: set RegistryErrorIndex = $($R0)
1421: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
1422: goto A_S_Return
1423: endif
1424:
1425: ;
1426: ; Add Reference Counter
1427: ;
1428: GetRegValue $(AS_KeyVersion),"RefCount", RefCountInfo
1429: Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
1430: ; no RefCount variable
1431: SetRegValue $(AS_KeyVersion) {RefCount,$(NoTitle),$(!REG_VT_DWORD),0}
1432: endif
1433:
1434: endif
1435:
1436: A_S_Return = +
1437: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
1438: Ifstr $(AS_KeyNetRules) != $(KeyNull)
1439: CloseRegKey $(AS_KeyNetRules)
1440: endif
1441: Ifstr $(AS_KeyParameters) != $(KeyNull)
1442: CloseRegKey $(AS_KeyParameters)
1443: endif
1444: Ifstr $(AS_KeyLinkage) != $(KeyNull)
1445: CloseRegKey $(AS_KeyLinkage)
1446: endif
1447: Ifstr $(AS_KeyVersion) != $(KeyNull)
1448: CloseRegKey $(AS_KeyVersion)
1449: Set AS_ProdKeyName = $(!NTN_SoftwareBase)"\"$(AS_MfgName)"\"$(AS_ProdName)
1450: OpenRegKey $(!REG_H_LOCAL) "" $(AS_ProdKeyName) $(MAXIMUM_ALLOWED) AS_KeyProduct
1451: Ifstr(i) $(AS_KeyProduct) != $(KeyNull)
1452: DeleteRegKey $(AS_KeyProduct) "CurrentVersion"
1453: CloseRegKey $(AS_KeyProduct)
1454: Endif
1455: Endif
1456: Ifstr $(AS_KeyService) != $(KeyNull)
1457: Debug-Output "UTILITY.INF: DeleteRegTree Service Key"
1458: ;DeleteRegTree $(AS_KeyService) ""
1459: endif
1460:
1461: set AS_KeyVersion = ""
1462: set AS_KeyNetRules = ""
1463: set AS_KeyService = ""
1464: set AS_KeyParameters = ""
1465: set AS_KeyLinkage = ""
1466:
1467: endif
1468: return $(RegistryErrorIndex), $(AS_KeyVersion), $(AS_KeyNetRules), $(AS_KeyService),+
1469: $(AS_KeyParameters), $(AS_KeyLinkage)
1470:
1471: ;*************************************************************************
1472: ; end of section AddSoftwareComponent
1473: ;*************************************************************************
1474:
1475: ;*************************************************************************
1476: ;
1477: ; SECTION: AddHardwareComponent
1478: ;
1479: ; PURPOSE: Adds all the Registry information necessary for
1480: ; a new network adapater card
1481: ;
1482: ; ARGUMENTS: $0 service name to use (no imbedded blanks, etc.).
1483: ; This name will have the numeric value from
1484: ; InstallNetCard appended to it for uniqueness.
1485: ; $1 INF name for this adapter
1486: ; $2 Driver name in software section
1487: ;
1488: ;
1489: ; RETURNS: $R0 Registry error code or zero if no error
1490: ; $R1 Registry key variable for HARDWARE\Netcard\(n)
1491: ; $R2 Registry key variable for HARDWARE\Netcard\(n)\\NetRules
1492: ; $R3 Registry key handle for <service>\Parameters key
1493: ; $R4 Adapter number assigned to adapter
1494: ; $R5 Service name generated by combining svc name with
1495: ; adapter number
1496: ;
1497: ; REFERENCES: Nothing
1498: ;
1499: ; MODIFIES: Nothing
1500: ;
1501: ;*************************************************************************
1502: [AddHardwareComponent]
1503:
1504: read-syms InitBaseVars
1505:
1506: set AH_SvcName = $($0)
1507: set AH_Infname = $($1)
1508: set AH_SoftwareName = $($2)
1509: set AH_KeyNetcard = ""
1510: set AH_KeyNetRules = ""
1511: set AH_KeyService = ""
1512: set AH_KeyParameters = ""
1513: set AH_AdapNum = -1
1514: ;
1515: ; Create the HARDWARE\Netcard entry for this adapter
1516: ;
1517: Shell "", InstallNetcard, $(AH_Infname)
1518:
1519: set RegistryErrorIndex = $($R0)
1520: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
1521: Debug-Output "UTILITY.INF: [AddHardwareComponent] InstallNetcard returned: "$(RegistryErrorIndex)
1522: goto A_H_Return
1523: endif
1524:
1525: set AH_KeyNetcard = $($R1)
1526: set AH_AdapNum = $($R2)
1527: set AH_SvcName = $(AH_SvcName)$(AH_AdapNum)
1528: set AH_KeyNetRules = $($R3)
1529: ;
1530: ; Create the SERVICES entry for this adapter; no binary path, no group,
1531: ; no dependencies.
1532: ;
1533: Shell "", CreateService, $(AH_SvcName), "", "", "adapter","",{}
1534:
1535: set RegistryErrorIndex = $($R0)
1536: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
1537: Debug-Output "UTILITY.INF: CreateService returned "$(RegistryErrorIndex)
1538: goto A_H_Return
1539: endif
1540:
1541: CloseRegKey $($R1)
1542: set AH_KeyParameters = $($R2)
1543: CloseRegKey $($R3)
1544:
1545: ;
1546: ; Link the Netcard entry to the Service created
1547: ;
1548: Shell "", LinkToService, $(AH_KeyNetcard), $(AH_SvcName)
1549: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
1550: Debug-Output "UTILITY.INF: [AddHardwareComponent] LinkToService returned "$(RegistryErrorIndex)
1551: goto A_H_Return
1552: endif
1553:
1554: ;
1555: ; Add the reference counter in the driver section
1556: ;
1557: Shell "", IncrementRefCount, $(AH_SoftwareName)
1558: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
1559: Debug-Output "UTILITY.INF: [AddHardwareComponent] IncrementRefCount returned "$(RegistryErrorIndex)
1560: goto A_H_Return
1561: endif
1562:
1563: A_H_Return = +
1564: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
1565: Debug-Output "UTILITY.INF: [AddHardwareComponent] returning error: "$(RegistryErrorIndex)
1566: Ifstr(i) $(AH_KeyNetRules) != $(KeyNull)
1567: CloseRegKey $(AH_KeyNetRules)
1568: Endif
1569: Ifstr(i) $(AH_KeyNetcard) != $(KeyNull)
1570: ; Let the RemoveHardware handle it
1571: ;DeleteRegTree $(AH_KeyNetcard) ""
1572: Endif
1573: set AH_KeyNetRules = ""
1574: set AH_KeyNetcard = ""
1575: endif
1576:
1577: return $(RegistryErrorIndex), $(AH_KeyNetcard), $(AH_KeyNetRules), $(AH_KeyParameters),+
1578: $(AH_AdapNum), $(AH_SvcName)
1579:
1580: ;*************************************************************************
1581: ; end of section AddHardwareComponent
1582: ;*************************************************************************
1583:
1584: ;*************************************************************************
1585: ;
1586: ; SECTION: MCAFindBus
1587: ;
1588: ; PURPOSE: Find adpater(s) location
1589: ;
1590: ; ARGUMENTS: $0 The least signifiance byte of the device ID
1591: ; $1 The most signifiance byte of the device ID
1592: ;
1593: ;
1594: ; RETURNS: $R0 Registry error code or zero if no error
1595: ; $R1 The list of adapter location
1596: ; {{bus0,slot0},{bus1,slot1},{bus2,slot2}...{busk,slotk}}
1597: ;
1598: ; REFERENCES: Nothing
1599: ;
1600: ; MODIFIES: Nothing
1601: ;
1602: ;*************************************************************************
1603:
1604: [MCAFindBus]
1605: read-syms InitBaseVars
1606: set RegistryErrorIndex = NO_ERROR
1607:
1608: set MultifunctionAdapter = "HARDWARE\Description\System\MultifunctionAdapter"
1609: set InfoList = {}
1610:
1611: OpenRegKey $(!REG_H_LOCAL) "" $(MultifunctionAdapter) $(MAXIMUM_ALLOWED) KeyMultiAdapter
1612:
1613: Ifstr $(KeyMultiAdapter) == $(KeyNull)
1614: goto MCAFindBus_return
1615: endif
1616:
1617: EnumRegKey $(KeyMultiAdapter) BusList
1618:
1619: Debug-Output "Buslist"
1620: Debug-Output $(BusList)
1621:
1622: ForListDo $(BusList)
1623: set BusNum = *($($),1)
1624: set RegName = $(MultifunctionAdapter)"\"$(BusNum)
1625: Debug-Output "BusNum"
1626: Debug-Output $(BusNum)
1627: OpenRegKey $(!REG_H_LOCAL) "" $(RegName) $(MAXIMUM_ALLOWED) KeyBus
1628:
1629: ifstr $(KeyBus) != $(KeyNull)
1630: GetRegValue $(KeyBus),"Configuration Data",ConfigData
1631: ifstr $(ConfigData) != $(KeyNull)
1632: set CardInfo = *($(ConfigData), 4 )
1633: ;
1634: ; Skip the header and jump to data position 33
1635: ;
1636: set Position = 33
1637: set SlotNum = 1
1638: QueryListSize ListSize $(CardInfo)
1639: Loop1 =+
1640: ifint $(Position) < $(ListSize)
1641: set-add NextByte = $(Position), 1
1642: ifint *($(CardInfo), $(Position)) == $($0)
1643: ifint *($(CardInfo), $(NextByte)) == $($1)
1644: ;
1645: ; Set up the hardware
1646: ;
1647: Debug-Output $(BusNum)
1648: Debug-Output $(SlotNum)
1649: set-mul mcaid = $($1), 256
1650: set-add mcaid = $(mcaid), $($0)
1651: set InfoList = >($(InfoList),{$(BusNum),$(SlotNum),$(mcaid)})
1652: endif
1653: endif
1654: set-add Position = $(Position), 6
1655: set-add SlotNum = $(SlotNum), 1
1656: goto Loop1
1657: endif
1658: endif
1659: CloseRegKey $(KeyBus)
1660: endif
1661: EndForListDo
1662:
1663: CloseRegKey $(KeyMultiAdapter)
1664:
1665: MCAFindBus_return = +
1666:
1667: return $(RegistryErrorIndex) $(InfoList)
1668:
1669: ;*************************************************************************
1670: ; end of section MCAFindBus
1671: ;*************************************************************************
1672:
1673: ;*************************************************************************
1674: ;
1675: ; SECTION: EISAFindBus
1676: ;
1677: ; PURPOSE: Find adpater(s) location
1678: ;
1679: ; ARGUMENTS: $0 The compress ID of the EISA card
1680: ; $1 EISA Compressed ID mask
1681: ;
1682: ;
1683: ; RETURNS: $R0 Registry error code or zero if no error
1684: ; $R1 The list of adapter location
1685: ; {{bus0,slot0},{bus1,slot1},{bus2,slot2}...{busk,slotk}}
1686: ;
1687: ; REFERENCES: Nothing
1688: ;
1689: ; MODIFIES: Nothing
1690: ;
1691: ;*************************************************************************
1692:
1693: [EISAFindBus]
1694: read-syms InitBaseVars
1695: set MaskNum = $($1)
1696: ifstr(i) $($1) == ""
1697: set MaskNum = 16777215 ; 0xffffff
1698: endif
1699:
1700: set RegistryErrorIndex = NO_ERROR
1701:
1702: set EISAAdapter = "HARDWARE\Description\System\EISAAdapter"
1703: set InfoList = {}
1704:
1705: OpenRegKey $(!REG_H_LOCAL) "" $(EISAAdapter) $(MAXIMUM_ALLOWED) KeyEISAAdapter
1706:
1707: Ifstr $(KeyEISAAdapter) == $(KeyNull)
1708: goto EISAFindBus_return
1709: endif
1710:
1711: EnumRegKey $(KeyEISAAdapter) BusList
1712:
1713: Debug-Output "Buslist"
1714: Debug-Output $(BusList)
1715:
1716: ForListDo $(BusList)
1717: set BusNum = *($($),1)
1718: OpenRegKey $(!REG_H_LOCAL) "" $(EISAAdapter)"\"$(BusNum) $(MAXIMUM_ALLOWED) KeyEISAAdapterBus
1719: LibraryProcedure SlotList, $(!LIBHANDLE), GetEisaSlotInformation, $(KeyEISAAdapterBus), "Configuration Data", $($0), $(MaskNum)
1720: ifstr(i) $(SlotList) != {}
1721: ForListDo $(SlotList)
1722: set SlotNum = $($)
1723: ifstr(i) $(SlotNum) != "ERROR"
1724: Debug-Output $(BusNum)
1725: Debug-Output $(SlotNum)
1726: set InfoList = >($(InfoList),{$(BusNum),$(SlotNum),$($0)})
1727: endif
1728: EndForListDo
1729: endif
1730: EndForListDo
1731:
1732: CloseRegKey $(KeyEISAAdapter)
1733:
1734: EISAFindBus_return = +
1735:
1736: return $(RegistryErrorIndex) $(InfoList)
1737:
1738: ;*************************************************************************
1739: ; end of section EISAFindBus
1740: ;*************************************************************************
1741:
1742: ;*************************************************************************
1743: ;
1744: ; SECTION: AddNetworkProvider
1745: ;
1746: ; PURPOSE: Add a network provider entry into the registry
1747: ;
1748: ; ARGUMENTS: $0 network provider id. i.e., lanmanredirector
1749: ; $1 network provder location. i.e, c:\nt\windows\system\ntlanman.dll
1750: ; $2 English name of the provider. i.e, NT Lan Manager
1751: ; $3 network provider device name, if different from network
1752: ; provider
1753: ;
1754: ;
1755: ; RETURNS: $R0 Registry error code or zero if no error
1756: ;
1757: ; REFERENCES: Nothing
1758: ;
1759: ; MODIFIES: Nothing
1760: ;
1761: ;*************************************************************************
1762:
1763: [AddNetworkProvider]
1764: read-syms InitBaseVars
1765:
1766: set RegistryErrorIndex = NO_ERROR
1767:
1768: set ProviderDeviceName = $($3)
1769: ifstr(i) $(ProviderDeviceName) == ""
1770: set ProviderDeviceName = $($0)
1771: endif
1772:
1773: ; OpenRegKey $(!REG_H_LOCAL) "" $(CurrentControlSet)"\control\NetworkProvider\Active\"$($0) $(MAXIMUM_ALLOWED) ActiveKey
1774: ; ifstr(i) $(OrderKey) == $(KeyNull)
1775: ; CreateRegKey $(!REG_H_LOCAL) {$(CurrentControlSet)"\control\NetworkProvider\Active\"$($0),$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" ActiveKey
1776: ; endif
1777:
1778: OpenRegKey $(!REG_H_LOCAL) "" $(CurrentControlSet)"\control\NetworkProvider\order" $(MAXIMUM_ALLOWED) OrderKey
1779: ifstr(i) $(OrderKey) == $(KeyNull)
1780: CreateRegKey $(!REG_H_LOCAL) {$(CurrentControlSet)"\control\NetworkProvider\order",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" OrderKey
1781: endif
1782:
1783: GetRegValue $(OrderKey) "ProviderOrder" OrderValue
1784: set Order = *($(OrderValue), 4 )
1785: ifstr(i) $(OrderValue) == $(KeyNull)
1786: goto AddFirstProvider
1787: else-ifstr(i) $(Order) == $(KeyNull)
1788: goto AddFirstProvider
1789: else
1790: goto AddProvider
1791: endif
1792:
1793: AddFirstProvider = +
1794: SetRegValue $(OrderKey) {ProviderOrder,$(NoTitle),$(!REG_VT_SZ),$($0)}
1795: goto WriteProviderInfo
1796:
1797: AddProvider = +
1798: Split-String $(Order) "," OrderList
1799: ifContains(i) $($0) in $(OrderList)
1800: ; Enable if we cannot have the same provider
1801: ;
1802: ;set RegistryErrorIndex = PROVIDER_ALREADY_EXISTED
1803: ;goto AddnetworkProvider_return
1804: else
1805: set Order = $(Order)","$($0)
1806: SetRegValue $(OrderKey) {ProviderOrder,$(NoTitle),$(!REG_VT_SZ),$(Order)}
1807: endif
1808:
1809: goto WriteProviderInfo
1810:
1811: WriteProviderInfo = +
1812:
1813: CloseRegKey $(OrderKey)
1814:
1815: OpenRegKey $(!REG_H_LOCAL) "" $(ServicesBaseName)"\"$($0)"\networkprovider" $(MAXIMUM_ALLOWED) ProviderKey
1816:
1817: Ifstr(i) $(ProviderKey) == $(KeyNull)
1818: CreateRegKey $(!REG_H_LOCAL) {$(ServicesBaseName)"\"$($0)"\networkprovider",$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" ProviderKey
1819: endif
1820:
1821: set NewValueList = {{Devicename,$(NoTitle),$(!REG_VT_SZ),"\device\"$(ProviderDeviceName)},+
1822: {ProviderPath, $(NoTitle), $(!REG_VT_EXPAND_SZ), $($1)},+
1823: {Name, $(NoTitle), $(!REG_VT_SZ), $($2)}}
1824:
1825: Shell "" AddValueList $(ProviderKey) $(NewValueList)
1826:
1827: CloseRegKey $(ProviderKey)
1828:
1829: AddNetworkProvider_return = +
1830:
1831: return $(RegistryErrorIndex)
1832:
1833: ;*************************************************************************
1834: ; end of section AddNetworkProvider
1835: ;*************************************************************************
1836:
1837: ;*************************************************************************
1838: ;
1839: ; SECTION: RemoveNetworkProvider
1840: ;
1841: ; PURPOSE: Remove network provider entry
1842: ;
1843: ; ARGUMENTS: $0 provider name
1844: ;
1845: ; RETURNS: $R0 Registry error code or zero if no error
1846: ;
1847: ; REFERENCES: Nothing
1848: ;
1849: ; MODIFIES: Nothing
1850: ;
1851: ;*************************************************************************
1852:
1853: [RemoveNetworkProvider]
1854: read-syms InitBaseVars
1855:
1856: set RegistryErrorIndex = NO_ERROR
1857:
1858: OpenRegKey $(!REG_H_LOCAL) "" $(CurrentControlSet)"\control\NetworkProvider\order" $(MAXIMUM_ALLOWED) OrderKey
1859: ifstr(i) $(OrderKey) == $(KeyNull)
1860: set RegistryErrorIndex = PROVIDER_ORDER_DOES_NOT_EXIST
1861: goto RemoveNetworkProvider_return
1862: endif
1863:
1864: GetRegValue $(OrderKey) "ProviderOrder" OrderValue
1865: set Order = *($(OrderValue), 4 )
1866:
1867: Split-String $(Order) "," OrderList
1868: set NewOrderList = {}
1869: set FirstTime = TRUE
1870: set Found = FALSE
1871: ForListDo $(OrderList)
1872: ifstr(i) $($) != ","
1873: ifstr(i) $($) != $($0)
1874: ifstr(i) $(FirstTime) == TRUE
1875: set FirstTime = FALSE
1876: set NewOrderList = $($)
1877: else
1878: set NewOrderList = $(NewOrderList)","$($)
1879: endif
1880: else
1881: set Found = TRUE
1882: endif
1883: endif
1884: EndForListDo
1885:
1886: ifstr(i) $(Found) == FALSE
1887: set RegistryErrorIndex = PROVIDER_ORDER_DOES_NOT_EXIST
1888: goto RemoveNetworkProvider_return
1889: else
1890: ifstr(i) $(NewOrderList) == {}
1891: set NewOrderList = ""
1892: endif
1893: SetRegValue $(OrderKey) {ProviderOrder,$(NoTitle),$(!REG_VT_SZ),$(NewOrderList)}
1894: endif
1895:
1896: OpenRegKey $(!REG_H_LOCAL) "" $(ServicesBaseName) $(MAXIMUM_ALLOWED) ProviderKey
1897:
1898: ifstr $(ProviderKey) != $(KeyNull)
1899: DeleteRegTree $(ProviderKey) $($0)
1900: endif
1901:
1902: RemoveNetworkProvider_return = +
1903: return $(RegistryErrorIndex)
1904:
1905: ;*************************************************************************
1906: ;
1907: ; SECTION: PrepareToCopy
1908: ;
1909: ; PURPOSE: Establish the variables required to perform
1910: ; "CopyFilesInCopyList"
1911: ;
1912: ; ARGUMENTS: none
1913: ;
1914: ; RETURNS: $R0 STATUS_SUCCESSFUL
1915: ;
1916: ; REFERENCES: nothing
1917: ;
1918: ; MODIFIES: see [ProgressCopyEng] above for list of variables
1919: ; modified/created in parent context.
1920: ;
1921: ; NOTES: Read NOTES commentary for section [DoAskSource]
1922: ;
1923: ;*************************************************************************
1924: [PrepareToCopy]
1925: ;
1926: ; Read the progress copy symbols.
1927: ;
1928: Read-syms ProgressCopy$(!STF_LANGUAGE)
1929:
1930: Return STATUS_SUCCESSFUL
1931:
1932: ;*************************************************************************
1933: ; end of section PrepareToCopy
1934: ;*************************************************************************
1935:
1936:
1937: ;*************************************************************************
1938: ;
1939: ; SECTION: DoAskSource
1940: ;
1941: ; PURPOSE: Determine or ask to location of the network binaries
1942: ;
1943: ; ARGUMENTS: $0 current value of STF_CWDDIR
1944: ; $1 current value of STF_SRCDIR
1945: ; $2 "YES" if part of NT base product (i.e., not OEM)
1946: ; "NO" otherwise.
1947: ;
1948: ; RETURNS: $R0: STATUS: STATUS_SUCCESSFUL |
1949: ; STATUS_USERCANCEL |
1950: ; STATUS_FAILED
1951: ; $R1 path to sources
1952: ;
1953: ; REFERENCES: Nothing
1954: ;
1955: ; MODIFIES: !STF_SRCDIR_USED changed to point to the user's
1956: ; keyed location
1957: ; !STF_SRCDIR_KEYED
1958: ;
1959: ; NOTES: The SETUP copy operations read the symbol table the old way;
1960: ; this means that they will only utilize local symbols for
1961: ; the necessary progress variables. This section/function assumes
1962: ; that it's being called by an INF at THE EXACT SAME CONTEXT LEVEL
1963: ; AT WHICH THE INSTALL FUNCTION WILL BE INVOKED! It stores the
1964: ; values specifically into the parent context so the progress dialog
1965: ; function can see them.
1966: ;
1967: ;*************************************************************************
1968: [DoAskSource]
1969: Set DAS_CWDDIR = $($0)
1970: Set DAS_SRCDIR = $($1)
1971: Set DAS_BUILTIN = $($2)
1972: Set DAS_Result = STATUS_FAILED
1973: ;
1974: ; If !STF_SRCDIR_OVERRIDE is not empty, use it instead.
1975: ;
1976: Ifstr(i) $(!STF_SRCDIR_OVERRIDE) != ""
1977: Set DAS_SRCDIR = $(!STF_SRCDIR_OVERRIDE)
1978: Set DAS_Result = STATUS_SUCCESSFUL
1979: Goto DAS_exit
1980: Endif
1981: ;
1982: ; If this is a built-in component during primary installation,
1983: ; use the given source path automatically unless !SFT_SRCDIR_WINNT
1984: ; is set. This is for the WINNT case, where Setup's SourcePath lies.
1985: ;
1986: Ifstr(i) $(DAS_BUILTIN) == YES
1987: Ifstr(i) $(!NTN_InstallPhase) == primary
1988: Ifstr(i) $(!STF_SRCDIR_WINNT) != ""
1989: Set DAS_SRCDIR = $(!STF_SRCDIR_WINNT)
1990: Endif
1991: Set DAS_Result = STATUS_SUCCESSFUL
1992: Goto DAS_exit
1993: Endif
1994: Endif
1995:
1996: Debug-Output "UTILITY.INF: [DoAskSource] STF_CWDDIR = "$(DAS_CWDDIR)" STF_SRCDIR = "$(DAS_SRCDIR)
1997: ;
1998: ; Set default to drive A: if necessary
1999: ;
2000: Ifstr(i) $(DAS_SRCDIR) == ""
2001: Set DAS_SRCDIR = "A:\"
2002: Endif
2003: ;
2004: ; If this is the same SRCDIR as last time, replace it with the string
2005: ; actually keyed by the user. This causes UNC names to reappear in their
2006: ; original form; the name of the automatically "used" remote drive should
2007: ; never be shown.
2008: ;
2009: Ifstr(i) $(DAS_SRCDIR) == $(!STF_SRCDIR_USED)
2010: Set DAS_SRCDIR = $(!STF_SRCDIR_KEYED)
2011: Endif
2012: ;
2013: ; Ask for the setup sources
2014: ;
2015: Shell "subroutn.inf" DoAskSource $(DAS_SRCDIR)
2016:
2017: ifint $($ShellCode) != $(!SHELL_CODE_OK)
2018: Debug-Output "UTILITY.INF: shelling SUBROUTN.INF [DoAskSource] failed"
2019: goto DAS_exit
2020: endif
2021:
2022: Set DAS_Result = $($R0)
2023:
2024: Ifstr(i) $(DAS_Result) == STATUS_USERCANCEL
2025: ;
2026: ; BUGBUG: All the INFs should change to handle this correctly.
2027: ;
2028: Set !p:CommonStatus = STATUS_USERCANCEL
2029: goto DAS_exit
2030: Endif
2031:
2032: Set DAS_SRCDIR = $($R1)
2033: ;
2034: ; Save the actual and converted SRCDIRs
2035: ;
2036: Set !STF_SRCDIR_USED = $($R1)
2037: Set !STF_SRCDIR_KEYED = $($R3)
2038:
2039: DAS_exit =+
2040: ;
2041: ; Read the progress copy symbols.
2042: ;
2043: Read-syms ProgressCopy$(!STF_LANGUAGE)
2044:
2045: Return $(DAS_Result) $(DAS_SRCDIR)
2046:
2047: ;*************************************************************************
2048: ; end of section DoAskSource
2049: ;*************************************************************************
2050:
2051: ;*************************************************************************
2052: ;
2053: ; SECTION: RemoveSoftwareComponent
2054: ;
2055: ; PURPOSE: Remove the specified software component from the
2056: ; registry. It will remove the entry in the software
2057: ; section of the registry first. Then it will remove
2058: ; the entry in the service section of the registry.
2059: ;
2060: ; ARGUMENTS: $0 Manufacturer Name
2061: ; $1 Product Name
2062: ; $2 Boolean flag for zero reference count checking
2063: ; ( optional. If it is defined, skip checking )
2064: ;
2065: ;
2066: ; RETURNS: $R0 Registry error code or zero if no error
2067: ;
2068: ; REFERENCES: Nothing
2069: ;
2070: ; MODIFIES: Nothing
2071: ;
2072: ;*************************************************************************
2073:
2074: [RemoveSoftwareComponent]
2075: Debug-Output "Remove Software Component..."
2076:
2077: read-syms InitBaseVars
2078:
2079: set RS_Manufacturer = $($0)
2080: set RS_ProductName = $($1)
2081: set RS_CheckRefCount = $($2)
2082: set RS_VersionNum = "CurrentVersion"
2083: set RS_ManufacturerKey = $(!NTN_SoftwareBase)"\"$(RS_Manufacturer)
2084: set RS_ProductKey = $(!NTN_SoftwareBase)"\"$(RS_Manufacturer)"\"$(RS_ProductName)
2085: set RS_ProductVerKey = $(!NTN_SoftwareBase)"\"$(RS_Manufacturer)"\"$(RS_ProductName)"\"$(RS_VersionNum)
2086:
2087: set RegistryErrorIndex = NO_ERROR
2088:
2089: ;
2090: ; Check the reference counter first
2091: ;
2092: ifstr(i) $(RS_CheckRefCount) != FALSE
2093:
2094: Shell "", IsRefCountEqualZero, $(RS_ProductVerKey)
2095:
2096: Ifstr(i) $($R0) != NO_ERROR
2097: Debug-Output "UTILITY.INF: [RemoveSoftwareComponent] IsRefCountEqualZero returned "$($R0)
2098: goto RemoveSoftwareComponent_Return
2099: endif
2100:
2101: Ifint $($R1) == 0
2102: set RegistryErrorIndex = REF_COUNT_NOT_ZERO
2103: goto RemoveSoftwareComponent_Return
2104: endif
2105:
2106: endif
2107:
2108: ;
2109: ; Remove the software first
2110: ;
2111:
2112: OpenRegKey $(!REG_H_LOCAL) "" $(RS_ManufacturerKey) $(MAXIMUM_ALLOWED) ProductKey
2113:
2114: Ifstr $(ProductKey) == $(KeyNull)
2115: Debug-Output "UTILITY.INF: could not open Software product key"
2116: set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE
2117: goto RemoveSoftwareComponent_Return
2118: endif
2119:
2120: DeleteRegTree $(ProductKey) $(RS_ProductName)
2121:
2122: CloseRegKey $(ProductKey)
2123:
2124: ;
2125: ; Remove the service
2126: ;
2127: Shell "" RemoveService, $(RS_ProductName), "YES"
2128:
2129: Set RS_RemoveError = $($R0)
2130: Ifint $(RS_RemoveError) != 0
2131: Debug-Output "UTILITY.INF: RemoveService wrapper failed, error: "$(RS_RemoveResult)
2132: Set RegistryErrorIndex = UNABLE_REMOVE_CONFIGURE_SERVICE
2133: Goto RemoveSoftwareComponent_Return
2134: Endif
2135:
2136: RemoveSoftwareComponent_Return = +
2137:
2138: Return $(RegistryErrorIndex)
2139:
2140: ;*************************************************************************
2141: ; end of section RemoveSoftwareComponent
2142: ;*************************************************************************
2143:
2144: ;*************************************************************************
2145: ;
2146: ; SECTION: RemoveHardwareComponent
2147: ;
2148: ; PURPOSE: Remove the adapter entry from the registry. First
2149: ; remove the adapter entry under Networkcards. Then it
2150: ; will remove the service entry under SYSTEM.
2151: ;
2152: ; ARGUMENTS: $0 Manufacturer Name (i.e., 3Com)
2153: ; $1 Product Name (i.e., Elnk)
2154: ; $2 Net Card Name (i.e., Elnkii05)
2155: ;
2156: ;
2157: ; RETURNS: $R0 Registry error code or zero if no error
2158: ;
2159: ; REFERENCES: Nothing
2160: ;
2161: ; MODIFIES: Nothing
2162: ;
2163: ;*************************************************************************
2164:
2165: [RemoveHardwareComponent]
2166: Debug-Output "Remove Hardware Component..."
2167: read-syms InitBaseVars
2168:
2169: set RH_Manufacturer = $($0)
2170: set RH_ProductName = $($1)
2171: set RH_VersionNum = "CurrentVersion"
2172: set RH_ProductKey = $(!NTN_SoftwareBase)"\"$($0)"\"$($1)"\"$(RH_VersionNum)
2173: set RH_NetCardName = $($2)
2174: Split-String $(RH_NetCardName), "\", CardInfo
2175: set RH_NetCardNum = *($(CardInfo),11)
2176: set RH_NetCardBase = *($(CardInfo),1)*($(CardInfo),2)*($(CardInfo),3)*($(CardInfo),4)*($(CardInfo),5)*($(CardInfo),6)*($(CardInfo),7)*($(CardInfo),8)*($(CardInfo),9)
2177:
2178: set RegistryErrorIndex = NO_ERROR
2179:
2180: ;
2181: ; decrement the reference counter first
2182: ;
2183:
2184: Shell "", DecrementRefCount, $(RH_ProductKey)
2185:
2186: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
2187: Debug-Output "UTILITY.INF: [AddHardwareComponent] IncrementRefCount returned "$(RegistryErrorIndex)
2188: goto RemoveHardwareComponent_Return
2189: endif
2190:
2191: ;
2192: ; Remove the Net card first
2193: ;
2194:
2195: OpenRegKey $(!REG_H_LOCAL) "" $(RH_NetCardBase) $(MAXIMUM_ALLOWED) NetCardKey
2196:
2197: Ifstr $(NetCardKey) == $(KeyNull)
2198: Debug-Output "UTILITY.INF: could not open NetworkCards key"
2199: set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE
2200: goto RemoveHardwareComponent_Return
2201: endif
2202:
2203: OpenRegKey $(NetCardKey) "" $(RH_NetCardNum) $(MAXIMUM_ALLOWED) NetCardNumKey
2204:
2205: Ifstr $(NetCardNumKey) == $(KeyNull)
2206: Debug-Output "UTILITY.INF: could not open NetworkCards Number key"
2207: set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE
2208: goto RemoveHardwareComponent_Return
2209: endif
2210:
2211: GetRegValue $(NetCardNumKey),"ServiceName", RH_ServiceNameInfo
2212: set RH_ServiceName = *($(RH_ServiceNameInfo), 4)
2213:
2214: ifstr(i) $(RH_ServiceName) == ""
2215: ; if we cannot get the service name, make a guess
2216: set RH_ServiceName = $(RH_ProductName)$(RH_NetCardNum)
2217: endif
2218:
2219: CloseRegKey $(NetCardNumKey)
2220:
2221: DeleteRegTree $(NetCardKey) $(RH_NetCardNum)
2222:
2223: CloseRegKey $(NetCardKey)
2224:
2225: Shell "", RemoveService, $(RH_ServiceName), "NO"
2226:
2227: Set RS_RemoveError = $($R0)
2228: Ifint $(RS_RemoveError) != 0
2229: Debug-Output "UTILITY.INF: RemoveService wrapper failed, error: "$(RS_RemoveResult)
2230: Set RegistryErrorIndex = UNABLE_REMOVE_CONFIGURE_SERVICE
2231: Goto RemoveHardwareComponent_Return
2232: Endif
2233:
2234:
2235: ;
2236: ; If driver reference count is equal to 0, remove it.
2237: ;
2238:
2239: Shell "", IsRefCountEqualZero, $(RH_ProductKey)
2240:
2241: Ifstr(i) $($R0) != NO_ERROR
2242: Debug-Output "UTILITY.INF: [RemoveHardwareComponent] IsRefCountEqualZero returned "$($R0)
2243: goto RemoveHardwareComponent_Return
2244: endif
2245:
2246: Ifint $($R1) == 1
2247: Debug-Output "Remove software component..."
2248: Shell "" RemoveSoftwareComponent, $(RH_Manufacturer), $(RH_ProductName)
2249: set RegistryErrorIndex = $($R0)
2250: endif
2251:
2252: debug-output "remove netbios information..."
2253: LibraryProcedure Result, $(!NCPA_HANDLE), RemoveRouteFromNETBIOS, $(RH_ServiceName)
2254:
2255: RemoveHardwareComponent_Return = +
2256:
2257: Return $(RegistryErrorIndex)
2258:
2259: ;*************************************************************************
2260: ; end of section RemoveHardwareComponent
2261: ;*************************************************************************
2262:
2263: ;*************************************************************************
2264: ;
2265: ; SECTION: RemoveService
2266: ;
2267: ; PURPOSE: Remove a specified service from the registry. It is
2268: ; called by RemoveSoftwareComponent and
2269: ; RemoveHardwareComponent. Or, if the service is
2270: ; created by calling "CreateService", we will
2271: ; need to use this subroutine to remove it.
2272: ;
2273: ; ARGUMENTS: $0 Service Name
2274: ; $1 "YES" - we use DeleteService to remove the service
2275: ; "NO" - we use DeleteRegTree to remove the
2276: ; registry tree
2277: ;
2278: ; RETURNS: $R0 Registry error code or zero if no error
2279: ;
2280: ; REFERENCES: Nothing
2281: ;
2282: ; MODIFIES: Nothing
2283: ;
2284: ;*************************************************************************
2285:
2286: [RemoveService]
2287: read-syms InitBaseVars
2288: Set RS_SvcName = $($0)
2289: Set RS_UseDelSvc = $($1)
2290:
2291: ; Make sure the service key exists first.
2292:
2293: OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services\"$(RS_SvcName) +
2294: $(MAXIMUM_ALLOWED) ServiceKey
2295:
2296: Ifstr $(ServiceKey) == $(KeyNull)
2297: Debug-Output "UTILITY.INF: could not open SYSTEM Service key "$(RS_SvcName)
2298: goto RemoveService_Return
2299: endif
2300:
2301: ; Remove the NbProvider value if it exists
2302:
2303: OpenRegKey $(ServiceKey) "" "Parameters" $(MAXIMUM_ALLOWED) ParameterKey
2304:
2305: Ifstr $(ParameterKey) != $(KeyNull)
2306: DeleteRegValue $(ParameterKey) "NbProvider"
2307: CloseRegKey $(ParameterKey)
2308: Endif
2309:
2310: CloseRegKey $(ServiceKey)
2311:
2312: ifstr(i) $(RS_UseDelSvc) == "YES"
2313:
2314: ; Remove the service
2315:
2316: Set FLibraryErrCtl = 1
2317: LibraryProcedure RS_RemoveResult $(!NCPA_HANDLE), CPlSetup, +
2318: $(!STF_HWND), DELETESVC, $(RS_SvcName)
2319: Set FLibraryErrCtl = 0
2320:
2321: ; Check the return code
2322:
2323: Set RS_RemoveError = *($(RS_RemoveResult),1)
2324: Ifint $(RS_RemoveError) != 0
2325: Debug-Output "UTILITY.INF: RemoveService wrapper failed, error: "$(RS_RemoveResult)
2326: Set RegistryErrorIndex = UNABLE_REMOVE_CONFIGURE_SERVICE
2327: Goto RemoveService_Return
2328: Endif
2329:
2330: else
2331:
2332: OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services" +
2333: $(MAXIMUM_ALLOWED) ServiceKey
2334:
2335: Ifstr $(ServiceKey) == $(KeyNull)
2336: Debug-Output "UTILITY.INF: could not open SYSTEM Service key "$(RS_SvcName)
2337: set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE
2338: goto RemoveService_Return
2339: endif
2340:
2341: DeleteRegTree $(ServiceKey) $(RS_SvcName)
2342:
2343: CloseRegKey $(ServiceKey)
2344:
2345: endif
2346:
2347: RemoveService_Return = +
2348: return $(RegistryErrorIndex)
2349:
2350: ;*************************************************************************
2351: ; end of section RemoveService
2352: ;*************************************************************************
2353:
2354: ;*************************************************************************
2355: ;
2356: ; SECTION: IsNetCardAlreadyInstalled
2357: ;
2358: ; PURPOSE: This subroutine is called by EISA and MCA net card
2359: ; setup. Given the bus number and slot number, it will
2360: ; return a boolean to idicate whether the card is
2361: ; already installed or not.
2362: ;
2363: ; ARGUMENTS: $0 Bus Number
2364: ; $1 Slot Number
2365: ; $2 Product Description
2366: ; $3 Product Name
2367: ;
2368: ; RETURNS: $R0 Registry error code or zero if no error
2369: ; $R1 "YES" - if the net card already installed
2370: ; "NO" - if the net card is not in the registry
2371: ;
2372: ; REFERENCES: Nothing
2373: ;
2374: ; MODIFIES: Nothing
2375: ;
2376: ;*************************************************************************
2377:
2378: [IsNetCardAlreadyInstalled]
2379: read-syms InitBaseVars
2380:
2381: set AlreadyExisted = "NO"
2382:
2383: set BusNum = $($0)
2384: set SlotNum = $($1)
2385: set Description = $($2)
2386: set Product = $($3)
2387:
2388: OpenRegKey $(!REG_H_LOCAL) "" $(NetworkCardKeyName) $(MAXIMUM_ALLOWED) IE_KeyNetcards
2389:
2390: Ifstr $(IE_KeyNetcards) == $(KeyNull)
2391: set RegistryErrorIndex = UNABLE_OPEN_NETWORKCARD_SECTION
2392: goto IE_Return
2393: endif
2394:
2395: EnumRegKey $(IE_KeyNetcards) IE_KeyNameList
2396:
2397: ;
2398: ; Compare all the NetworkCards entry and see whether they have the
2399: ; same title and productname.
2400: ;
2401: ForListDo $(IE_KeyNameList)
2402: set IE_KeyName = *($($),1)
2403: OpenRegKey $(IE_KeyNetcards) "" $(IE_KeyName) $(MAXIMUM_ALLOWED) IE_Card
2404:
2405: Ifstr $(IE_Card) == $(KeyNull)
2406: set RegistryErrorIndex = UNABLE_OPEN_NETWORKCARD_SECTION
2407: goto IE_Return
2408: endif
2409:
2410: GetRegValue $(IE_Card),"Description", DescriptionInfo
2411: GetRegValue $(IE_Card),"ProductName", ProductNameInfo
2412: set CardDescription = *($(DescriptionInfo), 4)
2413: set CardProductName = *($(ProductNameInfo), 4)
2414:
2415: ifstr(i) $(CardDescription) == $(Description)
2416: ifstr(i) $(CardProductName) == $(Product)
2417:
2418: ;
2419: ; We find the same product type. make sure that it
2420: ; does not have the same bus number and slot number
2421: ;
2422:
2423: GetRegValue $(IE_Card), "ServiceName", ServiceNameInfo
2424: set ServiceName = *($(ServiceNameInfo), 4)
2425:
2426: OpenRegKey $(!REG_H_LOCAL) "" +
2427: $(ServicesBaseName)"\"$(ServiceName)"\Parameters" +
2428: $(MAXIMUM_ALLOWED) IE_KeyService
2429:
2430: Ifstr $(IE_KeyService) == $(KeyNull)
2431: set RegistryErrorIndex = UNABLE_OPEN_NETWORKCARD_SECTION
2432: goto IE_Return
2433: endif
2434:
2435: GetRegValue $(IE_KeyService), "BusNumber", BusInfo
2436: GetRegValue $(IE_KeyService), "SlotNumber", SlotInfo
2437: set CardBusNum = *($(BusInfo), 4)
2438: set CardSlotNum = *($(SlotInfo), 4)
2439:
2440: ifint $(CardBusNum) == $(BusNum)
2441: ifint $(CardSlotNum) == $(SlotNum)
2442: ;
2443: ; Don't install this card. It is already installed
2444: ;
2445: set AlreadyExisted = "YES"
2446: endif
2447: endif
2448:
2449: endif
2450: endif
2451: EndForListDo
2452:
2453: IE_Return = +
2454: return $(RegistryErrorIndex) $(AlreadyExisted)
2455:
2456: ;*************************************************************************
2457: ; end of section IsNetCardAlreadyInstalled
2458: ;*************************************************************************
2459:
2460: ;*************************************************************************
2461: ;
2462: ; SECTION: UpdateWinsockService
2463: ;
2464: ; PURPOSE: This section creates, if necessary, the WinSock
2465: ; service data object. This Registry key is a placeholder
2466: ; for all WinSock mapping information. In particular,
2467: ; it contains a value called Transports, which contains
2468: ; a REG_MULTI_SZ listing the names of all transports
2469: ; which export a sockets interface (through a DLL).
2470: ;
2471: ; Then, we either add or remove the name of this transport
2472: ; from the list.
2473: ;
2474: ; ARGUMENTS: $0 Name of Transport Service supporting WinSock
2475: ; $1 TRUE if adding data; FALSE if removing data
2476: ;
2477: ; RETURNS: $R0 Registry error code or zero if no error
2478: ;
2479: ; REFERENCES: none
2480: ;
2481: ; MODIFIES: none
2482: ;
2483: ;
2484: ;*************************************************************************
2485: [UpdateWinsockService]
2486: read-syms InitBaseVars
2487: ;
2488: ; Get the base key handle for the services area
2489: ;
2490: Set UW_NameOfService = $($0)
2491: Set UW_Adding = $($1)
2492: Set UW_KeyServices = $(KeyNull)
2493: Set UW_KeyParameters = $(KeyNull)
2494:
2495: Shell "", BaseServiceKey
2496: Set RegistryErrorIndex = $($R0)
2497: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
2498: Set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE
2499: Goto U_W_Return
2500: endif
2501: Set UW_KeyServices = $($R1)
2502:
2503: OpenRegKey $(UW_KeyServices) "" "WinSock\Parameters" $(MAXIMUM_ALLOWED) UW_KeyParameters
2504:
2505: Ifstr(i) $(UW_KeyParameters) == $(KeyNull)
2506: Debug-Output "UTILITY.INF: Create WinSock Service"
2507: Shell "", CreateService, "WinSock", "", "", "adapter", "", {}
2508: Set RegistryErrorIndex = $($R0)
2509: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
2510: Debug-Output "UTILITY.INF: CreateService for WinSock returned "$(RegistryErrorIndex)
2511: Goto U_W_Return
2512: Endif
2513: CloseRegKey $($R1)
2514: Set UW_KeyParameters = $($R2)
2515: CloseRegKey $($R3)
2516: Else
2517: Debug-Output "UTILITY.INF: Open WinSock Service"
2518: Endif
2519:
2520: Ifstr(i) $(UW_KeyParameters) == $(KeyNull)
2521: Set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE
2522: Goto U_W_Return
2523: Endif
2524: ;
2525: ; Get the old REG_MULTI_SZ containing the list of supported transports;
2526: ; add the new transport service name to the list or remove it.
2527: ;
2528: GetRegValue $(UW_KeyParameters) "Transports" UW_TransportsValue
2529: Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
2530: Set UW_TransportsList = *($(UW_TransportsValue), 4)
2531: Else
2532: Set UW_TransportsList = {}
2533: Endif
2534:
2535: Ifstr(i) $(UW_TransportsList) == ""
2536: Set UW_TransportsList = {}
2537: Endif
2538: ;
2539: ; If we're removing the transport, do so; else, append it to the
2540: ; end of the list.
2541: ;
2542: Ifstr(i) $(UW_Adding) == "TRUE"
2543: Set UW_TransportsList = >($(UW_TransportsList), $(UW_NameOfService))
2544: Else
2545: Set UW_NewList = {}
2546: ForListDo $(UW_TransportsList)
2547: Ifstr(i) $($) != $(UW_NameOfService)
2548: Set UW_NewList = >($(UW_NewList), $($))
2549: Endif
2550: EndForListDo
2551: Set UW_TransportsList = $(UW_NewList)
2552: Endif
2553:
2554: SetRegValue $(UW_KeyParameters) {Transports, $(NoTitle), $(!REG_VT_MULTI_SZ), $(UW_TransportsList)}
2555:
2556: Debug-Output "UTILITY.INF: WinSock transport info added/deleted for "$(UW_NameOfService)
2557:
2558: U_W_Return = +
2559: Ifstr $(UW_KeyParameters) != $(KeyNull)
2560: CloseRegKey $(UW_KeyParameters)
2561: Endif
2562: Ifstr $(UW_KeyServices) != $(KeyNull)
2563: CloseRegKey $(UW_KeyServices)
2564: Endif
2565:
2566: Return $(RegistryErrorIndex)
2567:
2568: ;*************************************************************************
2569: ; end of section UpdateWinsockService
2570: ;*************************************************************************
2571:
2572: ;*************************************************************************
2573: ;
2574: ; SECTION: AddWinsockInfo
2575: ;
2576: ; PURPOSE: This function adds WinSock sockets provider info
2577: ; to a transport.
2578: ;
2579: ; ARGUMENTS: $0 Service name of transport driver
2580: ; $1 DLL name for WinSock interface to transport
2581: ; $2 integer value for MaxSockAddrLength
2582: ; $3 integer value for MinSockAddrLength
2583: ;
2584: ; RETURNS: $R0 Registry error code or zero if no error
2585: ; $R1 Key handle to <service>\Parameters\Winsock
2586: ;
2587: ; REFERENCES: none
2588: ;
2589: ; MODIFIES: none
2590: ;
2591: ;
2592: ; NOTES: This function/section calls the NCPA function CPlSetup
2593: ; to bind to the DLL in question and add the value of the
2594: ; export function WSHWinSockMapping() to the Registry under
2595: ; the "<service>\Parameters\Winsock:Mapping" value. To do
2596: ; this, the Registry key handle in SETUP form is passed
2597: ; to the NCPA export.
2598: ;
2599: ;
2600: ;*************************************************************************
2601: [AddWinsockInfo]
2602: read-syms InitBaseVars
2603: ;
2604: ; Get the base key handle for the services area
2605: ;
2606: Set AW_NameOfService = $($0)
2607: Set AW_DLLName = $($1)
2608: Set AW_MaxAddrLgt = $($2)
2609: Set AW_MinAddrLgt = $($3)
2610:
2611: Set AW_KeyServices = $(KeyNull)
2612: Set AW_KeyParameters = $(KeyNull)
2613: Set AW_KeySockets = $(KeyNull)
2614:
2615: Shell "", AddAFD
2616: Set RegistryErrorIndex = $($R0)
2617:
2618: Ifstr(i) $(RegistryErrorIndex) == NO_ERROR
2619: Shell "", BaseServiceKey
2620: Set RegistryErrorIndex = $($R0)
2621: Endif
2622:
2623: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
2624: Set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE
2625: Goto A_W_Return
2626: endif
2627: Set AW_KeyServices = $($R1)
2628:
2629: OpenRegKey $(AW_KeyServices) "" $(AW_NameOfService)"\Parameters" $(MAXIMUM_ALLOWED) AW_KeyParameters
2630: Ifstr(i) $(AW_KeyParameters) == $(KeyNull)
2631: Set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE
2632: Goto A_W_Return
2633: Endif
2634:
2635: OpenRegKey $(AW_KeyParameters) "" "Winsock" $(MAXIMUM_ALLOWED) AW_KeySockets
2636: Ifstr(i) $(AW_KeySockets) == $(KeyNull)
2637: CreateRegKey $(AW_KeyParameters) {Winsock,$(NoTitle),GenericClass} "" $(MAXIMUM_ALLOWED) "" AW_KeySockets
2638: Endif
2639:
2640: Ifstr(i) $(AW_KeySockets) == $(KeyNull)
2641: Set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE
2642: Goto A_W_Return
2643: Endif
2644:
2645: Set AW_ValueList = {{HelperDllName ,$(NoTitle),$(!REG_VT_EXPAND_SZ),$(AW_DLLName)},+
2646: {MaxSockAddrLength,$(NoTitle),$(!REG_VT_DWORD),$(AW_MaxAddrLgt)},+
2647: {MinSockAddrLength,$(NoTitle),$(!REG_VT_DWORD),$(AW_MinAddrLgt)}}
2648:
2649: Shell "", AddValueList, $(AW_KeySockets), $(AW_ValueList)
2650:
2651: Set RegistryErrorIndex = $($R0)
2652: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
2653: Debug-Output "UTILITY.INF: [AddWinsockInfo] Registry error: Add value list"
2654: Endif
2655: ;
2656: ; Extract the WinSock mapping information from the DLL
2657: ;
2658: Set FLibraryErrCtl = 1
2659: LibraryProcedure AW_MapResult $(!NCPA_HANDLE), CPlSetup, $(!STF_HWND), WINSOCKMAP, $(AW_DLLName), $(AW_KeySockets)
2660: Set FLibraryErrCtl = 0
2661:
2662: Set AW_MapError = *($(AW_MapResult),1)
2663: Ifint $(AW_MapError) != 0
2664: Debug-Output "UTILITY.INF: [AddWinsockInfo] WINSOCKMAP returned "$(AW_MapError)
2665: Set RegistryErrorIndex = UNABLE_ACCESS_WINSOCK_MAP_INFO
2666: Goto A_W_Return
2667: Endif
2668: ;
2669: ; Add this service to the WinSock transports list.
2670: ;
2671: Shell "" UpdateWinsockService $(AW_NameOfService) TRUE
2672: Set RegistryErrorIndex = $($R0)
2673:
2674: A_W_Return = +
2675: Ifstr $(AW_KeySockets) != $(KeyNull)
2676: CloseRegKey $(AW_KeySockets)
2677: Endif
2678: Ifstr $(AW_KeyParameters) != $(KeyNull)
2679: CloseRegKey $(AW_KeyParameters)
2680: Endif
2681: Ifstr $(AW_KeyServices) != $(KeyNull)
2682: CloseRegKey $(AW_KeyServices)
2683: Endif
2684:
2685: Return $(RegistryErrorIndex)
2686:
2687: ;*************************************************************************
2688: ; end of section AddWinsockInfo
2689: ;*************************************************************************
2690:
2691: ;*************************************************************************
2692: ;
2693: ; SECTION: RemoveWinsockInfo
2694: ;
2695: ; PURPOSE: This function removes WinSock sockets provider
2696: ; information from a transport
2697: ;
2698: ; ARGUMENTS: $0 Service name of transport driver
2699: ;
2700: ; RETURNS: $R0 Registry error code or zero if no error
2701: ;
2702: ; REFERENCES: none
2703: ;
2704: ; MODIFIES: none
2705: ;
2706: ;
2707: ;*************************************************************************
2708: [RemoveWinsockInfo]
2709: read-syms InitBaseVars
2710: ;
2711: ; Get the base key handle for the services area
2712: ;
2713: Set RW_NameOfService = $($0)
2714:
2715: Set RW_KeyServices = $(KeyNull)
2716: Set RW_KeySockets = $(KeyNull)
2717:
2718: Shell "", BaseServiceKey
2719: Set RegistryErrorIndex = $($R0)
2720:
2721: Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
2722: Set RegistryErrorIndex = UNABLE_ACCESS_CONFIGURE_SERVICE
2723: Goto R_W_Return
2724: endif
2725:
2726: Set RW_KeyServices = $($R1)
2727:
2728: OpenRegKey $(RW_KeyServices) "" $(RW_NameOfService)"\Parameters" $(MAXIMUM_ALLOWED) RW_KeySockets
2729: Ifstr(i) $(RW_KeySockets) == $(KeyNull)
2730: Set RegistryErrorIndex = NO_ERROR
2731: Goto R_W_Return
2732: Endif
2733: ;
2734: ; Delete the \Parameters\Winsock key. Ignore errors, since the service
2735: ; is almost certainly being deinstalled.
2736: ;
2737: DeleteRegTree $(RW_KeySockets) "Winsock"
2738: ;
2739: ; Remove this service from the WinSock transports list.
2740: ;
2741: Shell "" UpdateWinsockService $(RW_NameOfService) FALSE
2742: Set RegistryErrorIndex = $($R0)
2743:
2744: R_W_Return = +
2745: Ifstr $(RW_KeySockets) != $(KeyNull)
2746: CloseRegKey $(RW_KeySockets)
2747: Endif
2748: Ifstr $(RW_KeyServices) != $(KeyNull)
2749: CloseRegKey $(RW_KeyServices)
2750: Endif
2751:
2752: Return $(RegistryErrorIndex)
2753:
2754: ;*************************************************************************
2755: ; end of section RemoveWinsockInfo
2756: ;*************************************************************************
2757:
2758: ;*************************************************************************
2759: ;
2760: ; SECTION: GetBindingInfo
2761: ;
2762: ; PURPOSE: This function returns the bindable rules for the given
2763: ; manufacturer.
2764: ;
2765: ; ARGUMENTS: $0 manufacturer name
2766: ;
2767: ; RETURNS: $R0 Registry error code or zero if no error
2768: ; $R1 Bindable rule
2769: ;
2770: ; REFERENCES: none
2771: ;
2772: ; MODIFIES: none
2773: ;
2774: ;
2775: ;*************************************************************************
2776:
2777: [BindingInfo-DEC]
2778: BindingInfo = {+
2779: "lanceDriver dec100Adapter non exclusive 100",+
2780: "lanceDriver dec101Adapter non exclusive 100",+
2781: "lanceDriver decetherworksturboAdapter non exclusive 100",+
2782: "lanceDriver dec422Adapter non exclusive 100",+
2783: "lanceDriver decpcAdapter non exclusive 100",+
2784: "lanceDriver decstatAdapter non exclusive 100"+
2785: }
2786:
2787: [BindingInfo-WD]
2788: BindingInfo = {+
2789: "smc8000nDriver smcisaAdapter non exclusive 100",+
2790: "smc8000nDriver wd8003eaAdapter non exclusive 100",+
2791: "smc8000nDriver wd8003waAdapter non exclusive 100",+
2792: "smc8000nDriver wd8013epaAdapter non exclusive 100",+
2793: "smc8000nDriver wd8013wpaAdapter non exclusive 100"+
2794: }
2795: [BindingInfo-PROTEON]
2796: BindingInfo = {+
2797: "proteonDriver p1990Adapter non exclusive 100",+
2798: "proteonDriver p1390Adapter non exclusive 100"+
2799: }
2800:
2801: [BindingInfo-IBM]
2802: BindingInfo = {"ibmtokDriver ibmtokAdapter non exclusive 100",+
2803: "ibmtokDriver ibmtokmcAdapter non exclusive 100"}
2804:
2805: [GetBindingInfo]
2806: set BindingInfo = {}
2807: read-syms BindingInfo-$($0)
2808: return "NO_ERROR", $(BindingInfo)
2809:
2810: ;*************************************************************************
2811: ; end of section GetBindingInfo
2812: ;*************************************************************************
2813:
2814: ;*************************************************************************
2815: ;
2816: ; SECTION: AddStreams
2817: ;
2818: ; PURPOSE: Add Streams component
2819: ;
2820: ; ARGUMENTS: nothing
2821: ;
2822: ; RETURNS: $R0 error code
2823: ;
2824: ; MODIFIES: Nothing
2825: ;
2826: ;*************************************************************************
2827:
2828: [AddStreams]
2829: read-syms InitBaseVars
2830:
2831: OpenRegKey $(!REG_H_LOCAL) "" $(ServicesBaseName)"\streams" $(MAXIMUM_ALLOWED) BS_KeyServices
2832:
2833: Ifstr $(BS_KeyServices) == $(KeyNull)
2834:
2835: set OldOption = $(!NTN_InfOption)
2836: set !NTN_InfOption = STREAMS
2837: Shell "oemnxpst.inf" InstallOption $(!STF_LANGUAGE) "STREAMS" $(!STF_SRCDIR) $(!NtLmAddCopy) $(!NtLmDoCopy) $(!NtLmDoConfig)
2838: set !NTN_InfOption = $(OldOption)
2839: else
2840: CloseRegKey $(BS_KeyServices)
2841: Debug-Output "UTILITY.INF: streams already installed"
2842: endif
2843: ;
2844: ; Increase the reference counter
2845: ;
2846: Shell "", IncrementRefCount, "Software\Microsoft\streams\CurrentVersion"
2847:
2848: AddStreamsReturn = +
2849: return NO_ERROR
2850:
2851: ;*************************************************************************
2852: ;
2853: ; SECTION: RemoveStreams
2854: ;
2855: ; PURPOSE: Remove Streams component
2856: ;
2857: ; ARGUMENTS: nothing
2858: ;
2859: ; RETURNS: $R0 error code
2860: ;
2861: ; MODIFIES: Nothing
2862: ;
2863: ;*************************************************************************
2864:
2865: [RemoveStreams]
2866: read-syms InitBaseVars
2867:
2868: OpenRegKey $(!REG_H_LOCAL) "" $(ServicesBaseName)"\streams" $(MAXIMUM_ALLOWED) BS_KeyServices
2869:
2870: Ifstr $(BS_KeyServices) != $(KeyNull)
2871: CloseRegKey $(BS_KeyServices)
2872: Shell "", DecrementRefCount, "Software\Microsoft\streams\CurrentVersion"
2873: Shell "", IsRefCountEqualZero, "Software\Microsoft\streams\CurrentVersion"
2874: Ifstr(i) $($R0) != NO_ERROR
2875: Debug-Output "UTILITY.INF: [RemoveSoftwareComponent] IsRefCountEqualZero returned "$($R0)
2876: goto RemoveStreamsReturn
2877: endif
2878:
2879: Ifint $($R1) != 1
2880: ; if not zero, remove it next time
2881: goto RemoveStreamsReturn
2882: endif
2883:
2884: set OldOption = $(!NTN_InfOption)
2885: set OldInstallMode = $(!NTN_InstallMode)
2886: set !NTN_InfOption = STREAMS
2887: set !NTN_InstallMode = deinstall
2888: Shell "oemnxpst.inf" InstallOption $(!STF_LANGUAGE) "STREAMS" $(!STF_SRCDIR) $(!NtLmAddCopy) $(!NtLmDoCopy) $(!NtLmDoConfig)
2889: set !NTN_InfOption = $(OldOption)
2890: set !NTN_InstallMode = $(OldInstallMode)
2891: endif
2892:
2893: RemoveStreamsReturn = +
2894: return NO_ERROR
2895:
2896: ;*************************************************************************
2897: ;
2898: ; SECTION: AddAFD
2899: ;
2900: ; PURPOSE: Add AFD component
2901: ;
2902: ; ARGUMENTS: nothing
2903: ;
2904: ; RETURNS: $R0 error code
2905: ;
2906: ; MODIFIES: Nothing
2907: ;
2908: ;*************************************************************************
2909:
2910: [AFDVars]
2911: ;
2912: ; AFD Software data
2913: ;
2914: ProductAFDName = "Afd"
2915: ProductAFDTitle = "AFD Networking Support Environment"
2916: ProductAFDImagePath = "\SystemRoot\System32\drivers\afd.sys"
2917: ProductAFDSvcType = "kernelautostart"
2918:
2919: [AddAFD]
2920: read-syms InitBaseVars
2921: read-syms AFDVars
2922: Set Result = NO_ERROR
2923:
2924: OpenRegKey $(!REG_H_LOCAL) "" $(ServicesBaseName)"\AFD" $(MAXIMUM_ALLOWED) BS_KeyServices
2925:
2926: Ifstr $(BS_KeyServices) == $(KeyNull)
2927:
2928: Shell "", CreateService, $(ProductAFDName),+
2929: $(ProductAFDTitle),+
2930: $(ProductAFDImagePath),+
2931: $(ProductAFDSvcType), "", {"+TDI"}, "",+
2932: "%SystemRoot%\System32\IoLogMsg.dll"
2933: Set Result = $($R0)
2934: else
2935: CloseRegKey $(BS_KeyServices)
2936: endif
2937:
2938: AddAFDReturn = +
2939: return $(Result)
2940:
2941: ;*************************************************************************
2942: ;
2943: ; SECTION: GetBusTypeNum
2944: ;
2945: ; PURPOSE: return the Bus Type Number
2946: ;
2947: ; ARGUMENTS: nothing
2948: ;
2949: ; RETURNS: $R0 error code
2950: ; $R1 bus number
2951: ;
2952: ; MODIFIES: Nothing
2953: ;
2954: ;*************************************************************************
2955:
2956: [GetBusTypeNum]
2957: read-syms InitBaseVars
2958: set DetCard = $(!p:DetectedCard)
2959: ifstr(i) $(DetCard) == ""
2960: set DetCard = FALSE
2961: endif
2962: ifstr(i) $(DetCard) == FALSE
2963: ; Assume it is an ISA Bus
2964: set BusType = 1
2965: ifstr(i) $(!STF_BUSTYPE) == "ISA"
2966: set BusType = 1
2967: else-ifstr(i) $(!STF_BUSTYPE) == "EISA"
2968: set BusType = 2
2969: else-ifstr(i) $(!STF_BUSTYPE) == "Jazz-Internal Bus"
2970: set BusType = 0
2971: else-ifstr(i) $(!STF_BUSTYPE) == "MCA"
2972: set BusType = 3
2973: else-ifstr(i) $(!STF_BUSTYPE) == "TCChannel"
2974: set BusType = 4
2975: else
2976: debug-output "Utility.inf: Unknown bus type"
2977: endif
2978: else
2979: set BusType = *($(!STF_NCDETINFO),5)
2980: endif
2981: return NO_ERROR, $(BusType)
2982:
2983: ;*************************************************************************
2984: ;
2985: ; SECTION: AddRpcProtocol
2986: ;
2987: ; PURPOSE: Update the sections of the SOFTWARE\Microsoft\Rpc keys
2988: ; to reflect the presenceof a new protocol in the system.
2989: ;
2990: ; ARGUMENTS: $0 complete RPC protocol string; e.g., "ncacn_ip_tcp"
2991: ; $1 name of client DLL (no path); e.g., "rpcltc5.dll"
2992: ; $2 name of server DLL (no path); e.g., "rpclts5.dll"
2993: ;
2994: ; RETURNS: $R0 STATUS_SUCCESSFUL if ok; error otherwise.
2995: ;
2996: ; REFERENCES: Nothing
2997: ;
2998: ; MODIFIES: Nothing
2999: ;
3000: ;
3001: ;*************************************************************************
3002: [AddRpcProtocol]
3003: Set ARP_Protocol = $($0)
3004: Set ARP_ClientDll = $($1)
3005: Set ARP_ServerDll = $($2)
3006: read-syms InitBaseVars
3007: Set ARP_KeyRpc = $(KeyNull)
3008: Set ARP_KeyRpcServer = $(KeyNull)
3009: Set ARP_KeyRpcClient = $(KeyNull)
3010: Set RegistryErrorIndex = UNABLE_ACCESS_SOFTWARE_REG
3011:
3012: OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\Microsoft\Rpc" $(MAXIMUM_ALLOWED) ARP_KeyRpc
3013:
3014: Ifstr(i) $(ARP_KeyRpc) == $(KeyNull)
3015: Goto ARP_Return
3016: Endif
3017:
3018: OpenRegKey $(ARP_KeyRpc) "" "ClientProtocols" $(MAXIMUM_ALLOWED) ARP_KeyClient
3019: Ifstr(i) $(ARP_KeyClient) == $(KeyNull)
3020: Goto ARP_Return
3021: Endif
3022:
3023: OpenRegKey $(ARP_KeyRpc) "" "ServerProtocols" $(MAXIMUM_ALLOWED) ARP_KeyServer
3024: Ifstr(i) $(ARP_KeyServer) == $(KeyNull)
3025: Goto ARP_Return
3026: Endif
3027:
3028: SetRegValue $(ARP_KeyClient) {$(ARP_Protocol),$(NoTitle),$(!REG_VT_SZ),$(ARP_ClientDll)}
3029: Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
3030: Goto ARP_Return
3031: Endif
3032:
3033: SetRegValue $(ARP_KeyServer) {$(ARP_Protocol),$(NoTitle),$(!REG_VT_SZ),$(ARP_ServerDll)}
3034: Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
3035: Goto ARP_Return
3036: Endif
3037:
3038: Set RegistryErrorIndex = NO_ERROR
3039:
3040: ARP_Return = +
3041: Ifstr(i) $(ARP_KeyServer) != $(KeyNull)
3042: CloseRegKey $(ARP_KeyServer)
3043: Endif
3044: Ifstr(i) $(ARP_KeyClient) != $(KeyNull)
3045: CloseRegKey $(ARP_KeyClient)
3046: Endif
3047: Ifstr(i) $(ARP_KeyRpc) != $(KeyNull)
3048: CloseRegKey $(ARP_KeyRpc)
3049: Endif
3050: Return $(RegistryErrorIndex)
3051:
3052: ;*************************************************************************
3053: ; end of section AddRpcProtocol
3054: ;*************************************************************************
3055:
3056: ;*************************************************************************
3057: ;
3058: ; SECTION: RemoveRpcProtocol
3059: ;
3060: ; PURPOSE: Remove information about an installed RPC protocol.
3061: ;
3062: ; ARGUMENTS: $0 complete RPC protocol string (see [AddRpcProtocol]).
3063: ;
3064: ; RETURNS: $R0 STATUS_SUCCESSFUL if ok; error otherwise.
3065: ;
3066: ; REFERENCES: Nothing
3067: ;
3068: ; MODIFIES: Nothing
3069: ;
3070: ;
3071: ;*************************************************************************
3072: [RemoveRpcProtocol]
3073: Set RRP_Protocol = $($0)
3074: read-syms InitBaseVars
3075: Set RRP_KeyRpc = $(KeyNull)
3076: Set RRP_KeyRpcServer = $(KeyNull)
3077: Set RRP_KeyRpcClient = $(KeyNull)
3078: Set RegistryErrorIndex = UNABLE_ACCESS_SOFTWARE_REG
3079:
3080: OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\Microsoft\Rpc" $(MAXIMUM_ALLOWED) RRP_KeyRpc
3081:
3082: Ifstr(i) $(RRP_KeyRpc) == $(KeyNull)
3083: Goto RRP_Return
3084: Endif
3085:
3086: OpenRegKey $(RRP_KeyRpc) "" "ClientProtocols" $(MAXIMUM_ALLOWED) RRP_KeyClient
3087: Ifstr(i) $(RRP_KeyClient) == $(KeyNull)
3088: Goto RRP_Return
3089: Endif
3090:
3091: OpenRegKey $(RRP_KeyRpc) "" "ServerProtocols" $(MAXIMUM_ALLOWED) RRP_KeyServer
3092: Ifstr(i) $(RRP_KeyServer) == $(KeyNull)
3093: Goto RRP_Return
3094: Endif
3095:
3096: DeleteRegValue $(RRP_KeyClient) $(RRP_Protocol)
3097: Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
3098: Goto RRP_Return
3099: Endif
3100:
3101: DeleteRegValue $(RRP_KeyServer) $(RRP_Protocol)
3102: Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
3103: Goto RRP_Return
3104: Endif
3105:
3106: Set RegistryErrorIndex = NO_ERROR
3107:
3108: RRP_Return = +
3109: Ifstr(i) $(RRP_KeyServer) != $(KeyNull)
3110: CloseRegKey $(RRP_KeyServer)
3111: Endif
3112: Ifstr(i) $(RRP_KeyClient) != $(KeyNull)
3113: CloseRegKey $(RRP_KeyClient)
3114: Endif
3115: Ifstr(i) $(RRP_KeyRpc) != $(KeyNull)
3116: CloseRegKey $(RRP_KeyRpc)
3117: Endif
3118: Return $(RegistryErrorIndex)
3119:
3120: ;*************************************************************************
3121: ; end of section RemoveRpcProtocl
3122: ;*************************************************************************
3123:
3124: ;*************************************************************************
3125: ;
3126: ; SECTION: GetInfFileNameFromRegistry
3127: ;
3128: ; PURPOSE: get the inf file name from the product' NetRules section.
3129: ;
3130: ; ARGUMENTS: $0 product key handle
3131: ; (ie, system\software\Microsoft\Lance\CurrentVersion)
3132: ;
3133: ; RETURNS: $R0 Inf file name.
3134: ;
3135: ; REFERENCES: Nothing
3136: ;
3137: ; MODIFIES: Nothing
3138: ;
3139: ;
3140: ;*************************************************************************
3141:
3142: [GetInfFileNameFromRegistry]
3143: read-syms InitBaseVars
3144: set KeyProduct = $($0)
3145: set InfName = ""
3146:
3147: OpenRegKey $(KeyProduct) "" "NetRules" $(!REG_KEY_READ) NetRuleKey
3148: Ifstr(i) $(NetRuleKey) != $(KeyNull)
3149: GetRegValue $(NetRuleKey) "InfName" NetRuleInfNameList
3150: set NetRuleInfName = *($(NetRuleInfNameList), 4)
3151: Split-String $(NetRuleInfName), "\", FilenameList
3152: QueryListSize ListSize $(FilenameList)
3153: set InfName = *($(FilenameList), $(ListSize))
3154: CloseRegKey $(KeyProduct)
3155: endif
3156:
3157: return $(InfName)
3158:
3159: ;*************************************************************************
3160: ;
3161: ; SECTION: ToggleBinding
3162: ;
3163: ; PURPOSE: Take the named binding from the list of "Disabled"
3164: ; bindings and merge it with the active bindings.
3165: ;
3166: ; ARGUMENTS: $0 name of service
3167: ; $1 number of binding
3168: ; $2 "activate" or "disable"
3169: ;
3170: ; RETURNS: $R0 NO_ERROR if OK; RegistryError if not.
3171: ;
3172: ; REFERENCES: None
3173: ;
3174: ; MODIFIES: None
3175: ;
3176: ; NOTES: This routine takes either the given inactive binding
3177: ; and activates it or the given active binding and
3178: ; deactivates it.
3179: ;
3180: ;
3181: ;*************************************************************************
3182: [ToggleBinding]
3183: Set SvcName = $($0)
3184: Set BindNumber = $($1)
3185: Set Action = $($2)
3186: Set Status = UNABLE_ACCESS_CONFIGURE_SERVICE
3187: Set KeySvc = ""
3188: Set KeyFrom = ""
3189: Set KeyTo = ""
3190:
3191: read-syms InitBaseVars
3192:
3193: OpenRegKey $(!REG_H_LOCAL) "" $(ServicesBaseName)"\"$(SvcName) $(MAXIMUM_ALLOWED) KeySvc
3194: Ifstr(i) $(KeySvc) == $(KeyNull)
3195: Debug-Output "UTILITY.INF: ToggleBinding: service key open FAILED"
3196: Goto TB_Return
3197: Endif
3198:
3199: Ifstr(i) $(Action) == activate
3200: Set FromKeyName = "Linkage\Disabled"
3201: Set ToKeyName = "Linkage"
3202: Else
3203: Set FromKeyName = "Linkage"
3204: Set ToKeyName = "Linkage\Disabled"
3205: Endif
3206:
3207: ; Open the Linkage and Linkage\Disabled subkeys
3208:
3209: OpenRegKey $(KeySvc) "" $(FromKeyName) $(MAXIMUM_ALLOWED) KeyFrom
3210: Ifstr(i) $(KeyFrom) == $(KeyNull)
3211: Debug-Output "UTILITY.INF: ToggleBinding: from linkage key open FAILED"
3212: Goto TB_Return
3213: Endif
3214: OpenRegKey $(KeySvc) "" $(ToKeyName) $(MAXIMUM_ALLOWED) KeyTo
3215: Ifstr(i) $(KeyTo) == $(KeyNull)
3216: Debug-Output "UTILITY.INF: ToggleBinding: to linkage key open FAILED"
3217: Goto TB_Return
3218: Endif
3219:
3220: ; Fetch all their values, allowing for complete absence.
3221: ; First, from the "From" key
3222:
3223: Set FromBindList = {}
3224: Set FromExportList = {}
3225: Set FromRouteList = {}
3226: Set ToBindList = {}
3227: Set ToExportList = {}
3228: Set ToRouteList = {}
3229: Set ErrorTotal = 0
3230:
3231: Debug-Output "UTILITY.INF: ToggleBinding; fetch all linkage values"
3232:
3233: GetRegValue $(KeyFrom),"Bind",TempValue
3234: Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
3235: Set FromBindList = *($(TempValue),4)
3236: Set-add ErrorTotal = $(ErrorTotal),1
3237: Endif
3238:
3239: GetRegValue $(KeyFrom),"Export",TempValue
3240: Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
3241: Set FromExportList = *($(TempValue),4)
3242: Set-add ErrorTotal = $(ErrorTotal),1
3243: Endif
3244:
3245: GetRegValue $(KeyFrom),"Route",TempValue
3246: Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
3247: Set FromRouteList = *($(TempValue),4)
3248: Set-add ErrorTotal = $(ErrorTotal),1
3249: Endif
3250:
3251: ; Next, from the "To" key
3252:
3253: GetRegValue $(KeyTo),"Bind",TempValue
3254: Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
3255: Set ToBindList = *($(TempValue),4)
3256: Set-add ErrorTotal = $(ErrorTotal),1
3257: Endif
3258:
3259: GetRegValue $(KeyTo),"Export",TempValue
3260: Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
3261: Set ToExportList = *($(TempValue),4)
3262: Set-add ErrorTotal = $(ErrorTotal),1
3263: Endif
3264:
3265: GetRegValue $(KeyTo),"Route",TempValue
3266: Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
3267: Set ToRouteList = *($(TempValue),4)
3268: Set-add ErrorTotal = $(ErrorTotal),1
3269: Endif
3270:
3271: ; We have all the data. Do some sanity checking.
3272: ; Are the lists the same size?
3273:
3274: Ifint $(ErrorTotal) != 6
3275: Debug-Output "UTILITY.INF: ToggleBinding; Bind list retreival error, "$(ErrorTotal)
3276: Endif
3277:
3278: Debug-Output "UTILITY.INF: ToggleBinding; sanity check results"
3279:
3280: QueryListSize sz1 $(FromBindList)
3281: QueryListSize sz2 $(FromExportList)
3282: QueryListSize sz3 $(FromRouteList)
3283: Ifint $(sz1) != $(sz2)
3284: Goto TB_Return
3285: Endif
3286: Ifint $(sz1) != $(sz3)
3287: Goto TB_Return
3288: Endif
3289:
3290: QueryListSize sz2 $(ToBindList)
3291: QueryListSize sz3 $(ToExportList)
3292: QueryListSize sz4 $(ToRouteList)
3293: Ifint $(sz2) != $(sz3)
3294: Goto TB_Return
3295: Endif
3296: Ifint $(sz2) != $(sz4)
3297: Goto TB_Return
3298: Endif
3299:
3300: ; Does the requested element exist?
3301:
3302: Debug-Output "UTILITY.INF: ToggleBinding; prepare to move binding"
3303:
3304: Ifint $(BindNumber) > $(sz1)
3305: Debug-Output "UTILITY.INF: ToggleBinding; binding to move was invalid"
3306: Set Status = INVALID_DATA_PASSED
3307: Endif
3308:
3309: ; We're ready. Move the data around.
3310: ; Extract the element from the "From" lists, append it
3311: ; to the "To" lists...
3312:
3313: Set FromBindItem = *($(FromBindList),$(BindNumber))
3314: Set FromRouteItem = *($(FromRouteList),$(BindNumber))
3315: Set FromExportItem = *($(FromExportList),$(BindNumber))
3316:
3317: Set ToBindList = >($(ToBindList),$(FromBindItem))
3318: Set ToRouteList = >($(ToRouteList),$(FromRouteItem))
3319: Set ToExportList = >($(ToExportList),$(FromExportItem))
3320:
3321: ; Regenerate the "From" lists by iteration.
3322:
3323: Set NewBind = {}
3324: Set NewExport = {}
3325: Set NewRoute = {}
3326: Set Index = 0
3327: ForListDo $(FromBindList)
3328: Set-add Index = $(Index),1
3329: Ifint $(Index) != $(BindNumber)
3330: Set NewBind = >($(NewBind),$($))
3331: Set NewExport = >($(NewExport),*($(FromExportList),$(Index)))
3332: Set NewRoute = >($(NewRoute),*($(FromRouteList),$(Index)))
3333: Endif
3334: EndForListDo
3335:
3336: ; Replace the old values
3337:
3338: Set FromBindList = $(NewBind)
3339: Set FromExportList = $(NewExport)
3340: Set FromRouteList = $(NewRoute)
3341:
3342: ; Update the registry.
3343:
3344: Set ErrorTotal = 0
3345:
3346: SetRegValue $(KeyFrom) {Bind,$(NoTitle),$(!REG_VT_MULTI_SZ),$(FromBindList)}
3347: Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
3348: Set-add ErrorTotal = $(ErrorTotal),1
3349: Endif
3350: SetRegValue $(KeyFrom) {Export,$(NoTitle),$(!REG_VT_MULTI_SZ),$(FromExportList)}
3351: Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
3352: Set-add ErrorTotal = $(ErrorTotal),1
3353: Endif
3354: SetRegValue $(KeyFrom) {Route,$(NoTitle),$(!REG_VT_MULTI_SZ),$(FromRouteList)}
3355: Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
3356: Set-add ErrorTotal = $(ErrorTotal),1
3357: Endif
3358:
3359: SetRegValue $(KeyTo) {Bind,$(NoTitle),$(!REG_VT_MULTI_SZ),$(ToBindList)}
3360: Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
3361: Set-add ErrorTotal = $(ErrorTotal),1
3362: Endif
3363: SetRegValue $(KeyTo) {Export,$(NoTitle),$(!REG_VT_MULTI_SZ),$(ToExportList)}
3364: Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
3365: Set-add ErrorTotal = $(ErrorTotal),1
3366: Endif
3367: SetRegValue $(KeyTo) {Route,$(NoTitle),$(!REG_VT_MULTI_SZ),$(ToRouteList)}
3368: Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
3369: Set-add ErrorTotal = $(ErrorTotal),1
3370: Endif
3371:
3372: Debug-Output "UTILITY.INF: ToggleBinding; Registry update error total = "$(ErrorTotal)
3373:
3374: Ifint $(ErrorTotal) != 0
3375: Set Status = UNABLE_WRITE_REGISTRY
3376: Else
3377: Set Status = NO_ERROR
3378: Endif
3379:
3380: TB_Return = +
3381: Ifstr(i) $(KeyFrom) != $(KeyNull)
3382: CloseRegKey $(KeyFrom)
3383: Endif
3384: Ifstr(i) $(KeyTo) != $(KeyNull)
3385: CloseRegKey $(KeyTo)
3386: Endif
3387: Ifstr(i) $(KeySvc) != $(KeyNull)
3388: CloseRegKey $(KeySvc)
3389: Endif
3390: Return $(Status)
3391:
3392: ;*************************************************************************
3393: ; end of section ToggleBinding
3394: ;*************************************************************************
3395:
3396: ;-------------------------------------------------------------------------
3397: ;
3398: ; ROUTINE: SortListIndex
3399: ;
3400: ; DESCRIPTION: Sort a list into sequence, returning an "index" list, which
3401: ; indicates the sort position of each of the original list
3402: ; elements.
3403: ;
3404: ; INPUTS: $0: List to be sorted
3405: ; $1: TRUE for ascending sort (FALSE otherwise)
3406: ; $2: TRUE for case-insensitive sort (FALSE otherwise)
3407: ;
3408: ; OUTPUTS: $R0: Index list
3409: ;
3410: ; NOTES: Lists of displayable numeric values will automatically
3411: ; be sorted numerically if they are all decimal or hex
3412: ; and the sort is case-insensitive (param $2 FALSE).
3413: ;
3414: ;----------------------------------------------------------------------------
3415: [SortListIndex]
3416: Set List = $($0)
3417: Set BoolAscend = $($1)
3418: Set BoolCaseSens = $($2)
3419:
3420: LibraryProcedure IndexList, $(!LIBHANDLE), GenerateSortedIndexList, $(List), $(BoolAscend), $(BoolCaseSens)
3421:
3422: Return $(IndexList)
3423:
3424: ;-------------------------------------------------------------------------
3425: ;
3426: ; ROUTINE: SortByIndex
3427: ;
3428: ; DESCRIPTION: Sort a list into the sequence given by an "index list".
3429: ;
3430: ; INPUTS: $0: List to be sorted
3431: ; $1: Index list
3432: ;
3433: ; OUTPUTS: $R0: Index list
3434: ;
3435: ;----------------------------------------------------------------------------
3436: [SortByIndex]
3437: Set List = $($0)
3438: Set IndexList = $($1)
3439: Set NewList = {}
3440:
3441: ForListDo $(IndexList)
3442: Set Index = $($)
3443: Set Item = *($(List),$(Index))
3444: Set NewList = >($(NewList),$(Item))
3445: EndForListDo
3446:
3447: Return $(NewList)
3448:
3449: ;-------------------------------------------------------------------------
3450: ;
3451: ; ROUTINE: SortList
3452: ;
3453: ; DESCRIPTION: Sort a list into sequence, returning a sorted list.
3454: ;
3455: ; INPUTS: $0: List to be sorted
3456: ; $1: TRUE for ascending sort (FALSE otherwise)
3457: ; $2: TRUE for case-sensitive sort (FALSE for case-ins)
3458: ;
3459: ; OUTPUTS: $R0: Sorted list
3460: ;
3461: ; NOTES: Lists of displayable numeric values will automatically
3462: ; be sorted numerically if they are all decimal or hex
3463: ; and the sort is case-insensitive (param $2 FALSE).
3464: ;
3465: ;----------------------------------------------------------------------------
3466: [SortList]
3467: Set List = $($0)
3468: Shell "" SortListIndex $(List) $($1) $($2)
3469: Set IndexList = $($R0)
3470: Shell "" SortByIndex $(List) $(IndexList)
3471: Set ResultList = $($R0)
3472:
3473: return $(ResultList)
3474:
3475: ;*************************************************************************
3476: ; end of file UTILITY.INF
3477: ;*************************************************************************
3478:
3479: ;*************************************************************************
3480: ;
3481: ; SECTION: UpdateDetectionDllNames
3482: ;
3483: ; PURPOSE: Search for files of the name ???NCDET.DLL.
3484: ; Update the Registry accordingly.
3485: ;
3486: ;
3487: ; ARGUMENTS: None
3488: ;
3489: ; RETURNS: $R0 STATUS_SUCCESSFUL if Registry updated
3490: ; STATUS_USERCANCEL if no update was required
3491: ; STATUS_FAILED if failed
3492: ;
3493: ; NOTES: This routine searches for all DLLs named ???NCDET.DLL
3494: ; and adds them to a list containing the name of the
3495: ; "standard" detection DLL, MSNCDET.DLL.
3496: ;
3497: ; Netcard detection is stopped and restarted if the
3498: ; Registry is updated.
3499: ;
3500: ; REFERENCES:
3501: ;
3502: ; MODIFIES:
3503: ;
3504: ;*************************************************************************
3505: [DetectionDllFiles]
3506: DetectionDllsFound = {} ? $(!LIBHANDLE) FindFileInstances $(!STF_WINDOWSSYSPATH)"\???ncdet.dll"
3507:
3508: [UpdateDetectionDllNames]
3509: Set Status = STATUS_FAILED
3510: read-syms InitBaseVars
3511: Detect DetectionDllFiles
3512: Set DllValueName = "NetcardDlls"
3513:
3514: OpenRegKey $(!REG_H_LOCAL) "" "System\Setup" $(MAXIMUM_ALLOWED) KeySetup
3515: Ifstr(i) $(KeySetup) == $(KeyNull)
3516: Debug-Output "UTILITY.INF: [UpdateDetectionDllNames] cant open System\Setup key"
3517: Goto UDDN_Return
3518: Endif
3519:
3520: ; Prefix the list with MSNCDET.DLL
3521:
3522: Set NewDllList = {"MSNCDET.DLL"}
3523: ForListDo $(DetectionDllsFound)
3524: Set NewDllList = >($(NewDllList),$($))
3525: EndForListDo
3526:
3527: ; Get the old list
3528:
3529: Set UpdateRequired = 1
3530: GetRegValue $(KeySetup) $(DllValueName) DllNamesValue
3531: Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
3532: Set DllNames = *($(DllNamesValue),4)
3533: Debug-Output "UTILITY.INF: [UpdateDetectionDllNames] DllNames = "$(DllNames)
3534: Set UpdateRequired = 0
3535:
3536: ; See if all the names are already present
3537:
3538: ForListDo $(NewDllList)
3539: Set DllIndex = ~($(DllNames),$($))
3540: Ifint $(DllIndex) == 0
3541: Set UpdateRequired = 1
3542: Endif
3543: EndForListDo
3544: Endif
3545:
3546: Set Status = STATUS_SUCCESSFUL
3547:
3548: Ifint $(UpdateRequired) == 1
3549: Debug-Output "UTILITY.INF: [UpdateDetectionDllNames] new DLL names = "$(NewDllList)
3550: Set ValueInfo = {$(DllValueName), $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewDllList)}
3551: SetRegValue $(KeySetup) $(ValueInfo)
3552: Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
3553: Set Status = STATUS_FAILED
3554: Else
3555: Shell "NCPARAM.INF" Param_ControlDetection DTEND
3556: Shell "NCPARAM.INF" Param_ControlDetection DTSTART
3557: Endif
3558: Else
3559: Set Status = STATUS_USERCANCEL
3560: Endif
3561: CloseRegKey $(KeySetup)
3562:
3563: UDDN_Return = +
3564: Return $(Status)
3565:
3566: ;*************************************************************************
3567: ; end of section UpdateDetectionDllNames
3568: ;*************************************************************************
3569:
3570: ;*************************************************************************
3571: ;
3572: ; SECTION: CheckIfCopyNecessary
3573: ;
3574: ; PURPOSE: Check a set of files and see if all are present. Used
3575: ; to offer the user a "current files" versus "new files"
3576: ; choice.
3577: ;
3578: ; ARGUMENTS: $0 list of path names corresponding to names
3579: ; given in next parameter
3580: ; $1 nested list of file names; see NOTES below
3581: ;
3582: ; RETURNS: $R0 STATUS_SUCCESSFUL or
3583: ; STATUS_FAILED
3584: ;
3585: ; REFERENCES: nothing
3586: ;
3587: ; MODIFIES: nothing
3588: ;
3589: ; NOTES: Typical values (taken from OEMNSVWK.INF) might be:
3590: ;
3591: ; $0: {$(!STF_WINDOWSSYSPATH),$(!STF_WINDOWSSYSPATH)\drivers}
3592: ; $1: {{"BOWSVC.DLL","WKSSVC.DLL","LMREPL.EXE"},+
3593: ; {"SMBTRSUP.SYS","BROWSER.SYS","RDR.SYS"}}
3594: ;
3595: ;
3596: ;*************************************************************************
3597: [CheckIfCopyNecessary]
3598: Set Status = STATUS_SUCCESSFUL
3599: Set PathList = $($0)
3600: Set NamesList = $($1)
3601:
3602: Set Index = 0
3603: Set Found = 1
3604: ForListDo $(PathList)
3605: Set ThisPath = $($)
3606: Set-add Index = Index,1
3607: Set NameList = *($(NamesList),$(Index))
3608: ForListDo $(NameList)
3609: Set FileToCheck = $(ThisPath)\$($)
3610: LibraryProcedure FilePresent,$(!LIBHANDLE), CheckFileExistance $(FileToCheck)
3611: Ifstr(i) $(FilePresent) != "YES"
3612: Set Found = 0
3613: Endif
3614: EndForListDo
3615: EndForListDo
3616:
3617: Ifint $(Found) != 1
3618: Set Status = STATUS_FAILED
3619: Endif
3620:
3621: Return $(Status)
3622:
3623: ;*************************************************************************
3624: ; end of section CheckIfCopyNecessary
3625: ;*************************************************************************
3626:
3627: ;*************************************************************************
3628: ;
3629: ; SECTION: CetBusTypeDialog
3630: ;
3631: ; PURPOSE: Call the GetBusDialog function in ncpa.cpl and
3632: ; get the location of the network card.
3633: ;
3634: ; ARGUMENTS: $0 Card name description
3635: ; $1 Default bus type
3636: ; $2 Default bus number
3637: ;
3638: ; RETURNS: $R0 NO_ERROR
3639: ; $R1 BusType
3640: ; $R2 BusNumber
3641: ;
3642: ; REFERENCES: nothing
3643: ;
3644: ; MODIFIES: nothing
3645: ;
3646: ;*************************************************************************
3647:
3648: [GetBusTypeDialog]
3649: set CardName = $($0)
3650: set BusInterfaceType = $($1)
3651: set BusNumber = $($2)
3652:
3653: ifstr(i) $(BusInterfaceType) == ""
3654: set BusInterfaceType = 1 ; ISA
3655: endif
3656: ifstr(i) $(BusNumber) == ""
3657: set BusNumber = 0 ; Bus 0
3658: endif
3659: set FLibraryErrCtl = 1
3660: LibraryProcedure BusInfo $(!NCPA_HANDLE), GetBusTypeDialog, $(!STF_HWND), $(CardName), $(BusInterfaceType), $(BusNumber)
3661: set FLibraryErrCtl = 0
3662:
3663: ; return values
3664:
3665: ifint *($(BusInfo),1) == 0
3666: set ReturnValue = NO_ERROR
3667: set BusInterfaceType = *($(BusInfo),2)
3668: set BusNumber = *($(BusInfo),3)
3669: else
3670: set ReturnValue = ERROR
3671: endif
3672:
3673: Return $(ReturnValue), $(BusInterfaceType), $(BusNumber)
3674:
3675: ;*************************************************************************
3676: ; end of section GetBusTypeDialog
3677: ;*************************************************************************
3678:
3679:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.