Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

685 lines
20 KiB

  1. ;========================================
  2. ; REGISTRY MANIPULATION
  3. ;========================================
  4. [RegistryConstants]
  5. MaskAllAccess = 33554432
  6. NoTitle = 0
  7. RegLastError = $(!REG_ERROR_SUCCESS)
  8. ;-----------------------------------------------------------------------
  9. ; ROUTINE: GetNTSource
  10. ;
  11. ; DESCRIPTION: Reads the software entry to find out where the installation
  12. ; medium was.
  13. ;
  14. ; INPUTS: $0: None
  15. ;
  16. ; OUTPUTS: $R0: Status: STATUS_SUCCESSFUL
  17. ; STATUS_FAILED
  18. ;
  19. ; $R1: NTSource
  20. ;
  21. ;------------------------------------------------------------------------
  22. [GetNTSource]
  23. set Status = STATUS_SUCCESSFUL
  24. read-syms RegistryConstants
  25. set NTSource = A:\
  26. ;
  27. ; Open the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
  28. ; key
  29. set KeyName = "Software\Microsoft\Windows NT\CurrentVersion"
  30. OpenRegKey $(!REG_H_LOCAL) "" $(KeyName) $(!REG_KEY_READ) KeyHandle
  31. ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  32. Debug-Output "REGISTRY.INF: Couldn't open windows nt software key for read access"
  33. goto end_getntsource
  34. endif
  35. ;
  36. ; read the sourcepath entry
  37. ;
  38. GetRegValue $(KeyHandle) "SourcePath" SourcePathValue
  39. ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  40. CloseRegKey $(KeyHandle)
  41. goto end_getntsource
  42. endif
  43. set NTSource = *($(SourcePathValue), 4)
  44. CloseRegKey $(KeyHandle)
  45. end_getntsource = +
  46. Return $(Status) $(NTSource)
  47. ;-----------------------------------------------------------------------
  48. ; ROUTINE: MakeServicesEntry
  49. ;
  50. ; DESCRIPTION: Creates an entry for a services node
  51. ;
  52. ; INPUTS: $0: Services node
  53. ; $1: Services Value Entries
  54. ; $2: Parameters Value Entries( "" if no parameters key is to be
  55. ; created. )
  56. ; $3: List of Devicen specific Value Entries:
  57. ; {{Value List For Device0}, {Value List For Device1}...}
  58. ; $4: Eventlog Value Entries
  59. ; $5: Name of first-level subkey (ie, Device0 | Parameters )
  60. ; $6: Full path to service binary
  61. ;
  62. ;
  63. ; OUTPUTS: $R0: Status: STATUS_SUCCESSFUL
  64. ; STATUS_FAILED
  65. ;
  66. ;
  67. ;------------------------------------------------------------------------
  68. [MakeServicesEntry]
  69. set Status = STATUS_FAILED
  70. read-syms RegistryConstants
  71. Debug-Output "REGISTRY.INF: Creating Services node: "$($0)
  72. ;
  73. ; Make the entry corresponding to the option
  74. ;
  75. ; Open the services key
  76. ;
  77. OpenRegKey $(!REG_H_LOCAL) "" "system\"$(!STF_CONTROLSET)"\services" $(MaskAllAccess) ServicesKey
  78. ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  79. Debug-Output "REGISTRY.INF: Failed to open services key"
  80. goto finish_MakeServicesEntry
  81. endif
  82. ;
  83. ; Examine the values passed in. If the values are not out of a standard
  84. ; set then we need to go ahead and make the entries ourselves. The
  85. ; standard set values will be established by the service controller.
  86. ;
  87. set StandardSet = { Type, +
  88. Start, +
  89. ErrorControl, +
  90. Group, +
  91. Dependencies, +
  92. StartName, +
  93. Password, +
  94. BinaryPathName, +
  95. DisplayName +
  96. }
  97. ForListDo $(StandardSet)
  98. set $($) = ""
  99. EndForListDo
  100. set KeyValues = {}
  101. ForListDo $($1)
  102. set Var = *($($), 1)
  103. set Value = *($($), 4)
  104. ifcontains(i) $(Var) in $(StandardSet)
  105. set $(Var) = $(Value)
  106. else
  107. set KeyValues = >($(KeyValues), $($))
  108. endif
  109. EndForListDo
  110. set Error = NO
  111. ForListDo { Type, Start, ErrorControl, BinaryPathName }
  112. ifstr(i) $($($)) == ""
  113. set Error = YES
  114. endif
  115. EndForListDo
  116. ifstr(i) $(Error) == YES
  117. Debug-Output "REGISTRY.INF: MakeServicesEntry was not passed in one of the three values: Type, Start, ErrorControl"
  118. CloseRegKey $(ServicesKey)
  119. goto finish_MakeServicesEntry
  120. endif
  121. ;
  122. ; call the service controller to make a services entry
  123. ;
  124. set ServiceName = $($0)
  125. LibraryProcedure STATUS, $(!LIBHANDLE), SetupCreateService $(ServiceName) +
  126. $(DisplayName) +
  127. $(Type) +
  128. $(Start) +
  129. $(ErrorControl) +
  130. $(BinaryPathName) +
  131. $(Group) +
  132. $(Dependencies) +
  133. $(StartName) +
  134. $(Password)
  135. ifstr(i) $(STATUS) != "SUCCESS"
  136. Debug-Output "REGISTRY.INF: MakeServicesEntry: SetupCreateService function failed"
  137. CloseRegKey $(ServicesKey)
  138. goto finish_MakeServicesEntry
  139. endif
  140. ;
  141. ; Create a key for the service mentioned ( this is so that the values
  142. ; other than the standard set get updated - for example if the caller
  143. ; wants to put his own tag field.
  144. set KeyPath = {{$($0), $(NoTitle), $(MaskAllAccess)}}
  145. shell "" CreateKey $(ServicesKey) $(KeyPath) $(KeyValues)
  146. ifint $($ShellCode) != $(!SHELL_CODE_OK)
  147. Debug-Output "REGISTRY.INF: Failed to shell CreateKey."
  148. CloseRegKey $(ServicesKey)
  149. goto error_MakeServicesEntry
  150. endif
  151. ifstr(i) $($R0) != STATUS_SUCCESSFUL
  152. Debug-Output "REGISTRY.INF: Failed to create services node."
  153. CloseRegKey $(ServicesKey)
  154. goto error_MakeServicesEntry
  155. endif
  156. set MiniportKey = $($R1)
  157. ;
  158. ; Create the parameters for the miniport mentioned
  159. ;
  160. ifstr(i) $($2) != ""
  161. set KeyPath = {{$($5), $(NoTitle), $(MaskAllAccess)}}
  162. set KeyValues = $($2)
  163. shell "" CreateKey $(MiniportKey) $(KeyPath) $(KeyValues)
  164. ifint $($ShellCode) != $(!SHELL_CODE_OK)
  165. CloseRegKey $(ServicesKey)
  166. CloseRegKey $(MiniportKey)
  167. goto error_MakeServicesEntry
  168. endif
  169. ifstr(i) $($R0) != STATUS_SUCCESSFUL
  170. CloseRegKey $(ServicesKey)
  171. CloseRegKey $(MiniportKey)
  172. goto error_MakeServicesEntry
  173. endif
  174. set ParametersKey = $($R1)
  175. ForListDo $($3)
  176. set-sub DeviceNum = $(#) 1
  177. set EntryName = "Device"$(DeviceNum)
  178. set KeyPath = {{$(EntryName), $(NoTitle), $(MaskAllAccess)}}
  179. set KeyValues = $($3)
  180. shell "" CreateKey $(ParametersKey) $(KeyPath) $(KeyValues)
  181. ifint $($ShellCode) != $(!SHELL_CODE_OK)
  182. CloseRegKey $(ServicesKey)
  183. CloseRegKey $(MiniportKey)
  184. CloseRegKey $(ParametersKey)
  185. goto error_MakeServicesEntry
  186. endif
  187. ifstr(i) $($R0) != STATUS_SUCCESSFUL
  188. CloseRegKey $(ServicesKey)
  189. CloseRegKey $(MiniportKey)
  190. CloseRegKey $(ParametersKey)
  191. goto error_MakeServicesEntry
  192. endif
  193. CloseRegKey $($R1)
  194. EndForListDo
  195. CloseRegKey $(ParametersKey)
  196. endif
  197. CloseRegKey $(MiniportKey)
  198. ;
  199. ; see if we need to make an event log entry for this
  200. ;
  201. ifstr(i) $($4) != {}
  202. ;
  203. ; Open the eventlog\system key in the services area.
  204. ;
  205. OpenRegKey $(ServicesKey) "" "eventlog\system" $(MaskAllAccess) EventLogKey
  206. ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  207. Debug-Output "REGISTRY.INF: Failed to open eventlog key"
  208. CloseRegKey $(ServicesKey)
  209. goto error_MakeServicesEntry
  210. endif
  211. ;
  212. ; create the key for the current service
  213. ;
  214. set KeyPath = {{$($0), $(NoTitle), $(MaskAllAccess)}}
  215. set KeyValues = $($4)
  216. shell "" CreateKey $(EventLogKey) $(KeyPath) $(KeyValues)
  217. ifint $($ShellCode) != $(!SHELL_CODE_OK)
  218. CloseRegKey $(ServicesKey)
  219. CloseRegKey $(EventLogKey)
  220. goto error_MakeServicesEntry
  221. endif
  222. ifstr(i) $($R0) != STATUS_SUCCESSFUL
  223. CloseRegKey $(ServicesKey)
  224. CloseRegKey $(EventLogKey)
  225. goto error_MakeServicesEntry
  226. endif
  227. CloseRegKey $($R1)
  228. CloseRegKey $(EventLogKey)
  229. endif
  230. CloseRegKey $(ServicesKey)
  231. set Status = STATUS_SUCCESSFUL
  232. goto finish_MakeServicesEntry
  233. error_MakeServicesEntry = +
  234. shell "" ModifyServicesEntry $($0) $(!SERVICE_DISABLED)
  235. finish_MakeServicesEntry = +
  236. Return $(Status)
  237. ;-----------------------------------------------------------------------
  238. ; ROUTINE: GetServicesEntryStart
  239. ;
  240. ; DESCRIPTION: Finds out about the Start value of the Service Entry
  241. ;
  242. ; INPUTS: $0: Services node
  243. ;
  244. ; OUTPUTS: $R0: Status: STATUS_SUCCESSFUL
  245. ; STATUS_FAILED
  246. ;
  247. ; $R1: Start value: $(!SERVICE_BOOT_START) | $(!SERVICE_SYSTEM_START) |
  248. ; $(!SERVICE_AUTO_START) | $(!SERVICE_DEMAND_START) |
  249. ; $(!SERVICE_DISABLED)
  250. ;
  251. ;------------------------------------------------------------------------
  252. [GetServicesEntryStart]
  253. set Status = STATUS_FAILED
  254. set StartValue = ""
  255. read-syms RegistryConstants
  256. Debug-Output "REGISTRY.INF: Get Services node Start value: "$($0)
  257. ;
  258. ; Open the HKEY_LOCAL_MACHINE\System\$(!STF_CONTROLSET)\Services\ServicesEntry key
  259. ; key
  260. set KeyName = "system\"$(!STF_CONTROLSET)"\services\"$($0)
  261. OpenRegKey $(!REG_H_LOCAL) "" $(KeyName) $(!REG_KEY_READ) KeyHandle
  262. ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  263. Debug-Output "REGISTRY.INF: Couldn't open services node for read access"
  264. goto finish_GetServicesEntryStart
  265. endif
  266. ;
  267. ; read the Start entry
  268. ;
  269. GetRegValue $(KeyHandle) "Start" StartValueList
  270. ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  271. Debug-Output "REGISTRY.INF: Couldn't read Start value"
  272. CloseRegKey $(KeyHandle)
  273. goto finish_GetServicesEntryStart
  274. endif
  275. CloseRegKey $(KeyHandle)
  276. set StartValue = *($(StartValueList), 4)
  277. set Status = STATUS_SUCCESSFUL
  278. finish_GetServicesEntryStart = +
  279. Return $(Status) $(StartValue)
  280. ;-----------------------------------------------------------------------
  281. ; ROUTINE: RemoveServicesEntry
  282. ;
  283. ; DESCRIPTION: Removes an entry for a services node. Currently just
  284. ; disables it
  285. ;
  286. ; INPUTS: $0: Services node
  287. ;
  288. ; OUTPUTS: $R0: Status: STATUS_SUCCESSFUL
  289. ; STATUS_FAILED
  290. ;
  291. ;
  292. ;------------------------------------------------------------------------
  293. [RemoveServicesEntry]
  294. set Status = STATUS_FAILED
  295. read-syms RegistryConstants
  296. Debug-Output "REGISTRY.INF: Removing Services node: "$($0)
  297. shell "" ModifyServicesEntry $($0) $(!SERVICE_DISABLED)
  298. Return $($R0)
  299. ;-----------------------------------------------------------------------
  300. ; ROUTINE: MakeSetupKey
  301. ;
  302. ; DESCRIPTION: Creates the setup key under the current control
  303. ; set\control. This key is created with admin all access.
  304. ; Whenever setup has to do an operation which should be
  305. ; restricted to admin.
  306. ;
  307. ; INPUTS: None
  308. ;
  309. ;
  310. ; OUTPUTS: $R0: Status: STATUS_SUCCESSFUL
  311. ; STATUS_FAILED
  312. ;
  313. ;
  314. ;------------------------------------------------------------------------
  315. [MakeSetupKey]
  316. set Status = STATUS_FAILED
  317. read-syms RegistryConstants
  318. ;
  319. ; Open the control key
  320. ;
  321. OpenRegKey $(!REG_H_LOCAL) "" "system\"$(!STF_CONTROLSET)"\control" $(MaskAllAccess) ControlKey
  322. ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  323. Debug-Output "REGISTRY.INF: Failed to open services key"
  324. goto finish_MakeSetupKey
  325. endif
  326. ;
  327. ; Create a key for setup
  328. ;
  329. set KeyPath = { +
  330. {"Setup", $(NoTitle), $(MaskAllAccess)} +
  331. }
  332. ;
  333. ; Form the value info structures for the setup entry
  334. ;
  335. set KeyValues = {}
  336. shell "" CreateKey $(ControlKey) $(KeyPath) $(KeyValues)
  337. ifint $($ShellCode) != $(!SHELL_CODE_OK)
  338. CloseRegKey $(ControlKey)
  339. goto finish_MakeSetupKey
  340. endif
  341. ifstr(i) $($R0) != STATUS_SUCCESSFUL
  342. CloseRegKey $(ControlKey)
  343. goto finish_MakeSetupKey
  344. endif
  345. CloseRegKey $($R1)
  346. CloseRegKey $(ControlKey)
  347. set Status = STATUS_SUCCESSFUL
  348. finish_MakeSetupKey = +
  349. Return $(Status)
  350. ;-----------------------------------------------------------------------
  351. ; ROUTINE: CheckSetupModify
  352. ;
  353. ; DESCRIPTION: Checks to see if setup has admin privileges
  354. ;
  355. ; INPUTS: None
  356. ;
  357. ;
  358. ; OUTPUTS: $R0: Status: STATUS_SUCCESSFUL
  359. ; STATUS_FAILED
  360. ;
  361. ;
  362. ;------------------------------------------------------------------------
  363. [CheckSetupModify]
  364. set Status = STATUS_FAILED
  365. read-syms RegistryConstants
  366. ;
  367. ; Call the library function to see if we have admin privileges
  368. ;
  369. LibraryProcedure STATUS, $(!LIBHANDLE), TestAdmin
  370. ifstr(i) $(STATUS) == "YES"
  371. set Status = STATUS_SUCCESSFUL
  372. endif
  373. Return $(Status)
  374. ;-----------------------------------------------------------------------
  375. ; ROUTINE: MakeSetupOptionEntry
  376. ;
  377. ; DESCRIPTION: Creates an entry for a miniport driver and also enters the
  378. ; miniport driver group entry into the service group order
  379. ;
  380. ; INPUTS: $0: OptionType [ Video ]
  381. ; $1: OptionID
  382. ;
  383. ; OUTPUTS: $R0: Status: STATUS_SUCCESSFUL
  384. ; STATUS_FAILED
  385. ;
  386. ;
  387. ;------------------------------------------------------------------------
  388. [MakeSetupOptionEntry]
  389. set Status = STATUS_FAILED
  390. read-syms RegistryConstants
  391. ;
  392. ; Make the entry corresponding to the option
  393. ;
  394. ; Open the control key
  395. ;
  396. OpenRegKey $(!REG_H_LOCAL) "" "system\"$(!STF_CONTROLSET)"\control" $(MaskAllAccess) ControlKey
  397. ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  398. Debug-Output "REGISTRY.INF: Failed to open services key"
  399. goto finish_MakeSetupOptionEntry
  400. endif
  401. ;
  402. ; Create a key for the miniport mentioned
  403. ;
  404. ;
  405. ; Make the parameters
  406. ;
  407. set KeyPath = { +
  408. {"Setup", $(NoTitle), $(MaskAllAccess)} +
  409. }
  410. ;
  411. ; Form the value info structures for the WinNT entry
  412. ;
  413. set KeyValues = { +
  414. {$($0), $(NoTitle), $(!REG_VT_SZ), $($1)} +
  415. }
  416. shell "" CreateKey $(ControlKey) $(KeyPath) $(KeyValues)
  417. ifint $($ShellCode) != $(!SHELL_CODE_OK)
  418. CloseRegKey $(ControlKey)
  419. goto finish_MakeSetupOptionEntry
  420. endif
  421. ifstr(i) $($R0) != STATUS_SUCCESSFUL
  422. CloseRegKey $(ControlKey)
  423. goto finish_MakeSetupOptionEntry
  424. endif
  425. CloseRegKey $($R1)
  426. CloseRegKey $(ControlKey)
  427. set Status = STATUS_SUCCESSFUL
  428. finish_MakeSetupOptionEntry = +
  429. Return $(Status)
  430. ;-----------------------------------------------------------------------
  431. ; ROUTINE: ModifyServicesEntry
  432. ;
  433. ; DESCRIPTION: Changes the "Start" value entry on a services key.
  434. ;
  435. ; INPUTS: $0: Services entry
  436. ; $1: Start Type $(!SERVICE_BOOT_START) | $(!SERVICE_SYSTEM_START) |
  437. ; $(!SERVICE_AUTO_START) | $(!SERVICE_DEMAND_START) |
  438. ; $(!SERVICE_DISABLED)
  439. ;
  440. ; OUTPUTS: $R0: Status: STATUS_SUCCESSFUL
  441. ; STATUS_FAILED
  442. ;
  443. ;------------------------------------------------------------------------
  444. [ModifyServicesEntry]
  445. read-syms RegistryConstants
  446. set Status = STATUS_FAILED
  447. set StartValue = $($1)
  448. LibraryProcedure STATUS, $(!LIBHANDLE), SetupChangeServiceStart $($0) $(StartValue)
  449. ifstr(i) $(STATUS) != "SUCCESS"
  450. Debug-Output "REGISTRY.INF: ModifyServicesEntry: SetupChangeServiceStart function failed"
  451. goto finish_ModifyServicesEntry
  452. endif
  453. set Status = STATUS_SUCCESSFUL
  454. finish_ModifyServicesEntry = +
  455. Return $(Status)
  456. ;-----------------------------------------------------------------------
  457. ; ROUTINE: CreateKey
  458. ;
  459. ; DESCRIPTION: Creates a key and fixes the values indicated.
  460. ; Key is Handle\Key1\Key2\...\Keyn. Value list
  461. ; is for Valuen.
  462. ;
  463. ; INPUTS: $0: Handle into registry
  464. ; $1: KeyTreeComponents {Key1Info, Key2Info..}
  465. ; $2: ValueList {Value1Info, Value2Info, Value3Info}
  466. ;
  467. ; OUTPUTS: $R0: Status: STATUS_SUCCESSFUL
  468. ; STATUS_FAILED
  469. ; STATUS_ERROR_CREATEKEY
  470. ; STATUS_ERROR_CREATEVALUE
  471. ;
  472. ; $R1: Handle to created key
  473. ;
  474. ;------------------------------------------------------------------------
  475. [CreateKey]
  476. ;
  477. ; Initialize
  478. ;
  479. set Status = STATUS_FAILED
  480. read-syms RegistryConstants
  481. ;
  482. ; traverse down the keytreecomponents and open/create components as
  483. ; you go along
  484. ;
  485. set BaseHandle = $($0)
  486. set KeyHandle = $(BaseHandle)
  487. ForListDo $($1)
  488. set KeyInfo = $($)
  489. set KeyName = *($(KeyInfo), 1)
  490. ;
  491. ; Try opening the key first
  492. OpenRegKey $(BaseHandle) "" $(KeyName) $(MaskAllAccess) KeyHandle
  493. ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  494. ;
  495. ; Key doesn't exist
  496. ;
  497. Debug-Output "REGISTRY.INF: Key"$(KeyName)"doesn't exist. Will create key"
  498. set RegLastError = 0
  499. CreateRegKey $(BaseHandle) $(KeyInfo) "" $(MaskAllAccess) "" KeyHandle
  500. ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  501. set Status = STATUS_ERROR_CREATEKEY
  502. Debug-Output "REGISTRY.INF: Error in creating key"
  503. goto endcreate
  504. endif
  505. endif
  506. ifstr(i) $(BaseHandle) != $($0)
  507. CloseRegKey $(BaseHandle)
  508. ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  509. set Status = STATUS_ERROR_CREATEKEY
  510. Debug-Output "REGISTRY.INF: Error in closing base handle"
  511. goto endcreate
  512. endif
  513. endif
  514. set BaseHandle = $(KeyHandle)
  515. EndForListDo
  516. ifstr(i) $($2) != {}
  517. shell "" AddValueList $(KeyHandle) $($2)
  518. ifstr(i) $($R0) != STATUS_SUCCESSFUL
  519. set Status = STATUS_ERROR_CREATEVALUE
  520. goto endcreate
  521. endif
  522. endif
  523. set Status = STATUS_SUCCESSFUL
  524. endcreate = +
  525. ifstr(i) $(Status) != STATUS_SUCCESSFUL
  526. Debug-Output "REGISTRY.INF: CreateKey Error:"$(Status)
  527. endif
  528. Return $(Status) $(KeyHandle)
  529. ;*************************************************************************
  530. ;
  531. ; SECTION: AddValueList
  532. ;
  533. ; PURPOSE: Given a nested list of value items, add each to the given
  534. ; key. Key is left open.
  535. ;
  536. ; ARGUMENTS: $0 Registry key handle
  537. ; $1 List of value items; for example:
  538. ; { {ValueName1,0,$(!REG_VT_SZ),$(ValueData1)}, +
  539. ; {ValueName2,0,$(!REG_VT_SZ),$(ValueData2)} }
  540. ;
  541. ; RETURNS: $R0 Status
  542. ;
  543. ;
  544. ;*************************************************************************
  545. [AddValueList]
  546. set Status = STATUS_FAILED
  547. read-syms RegistryConstants
  548. ForListDo $($1)
  549. SetRegValue $($0) $($)
  550. ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
  551. Debug-Output "REGISTRY.INF: CreateValue failed:"$($)
  552. goto end_addvaluelist
  553. endif
  554. EndForListDo
  555. set Status = STATUS_SUCCESSFUL
  556. end_addvaluelist = +
  557. return $(Status)
  558. [EnableCrashDump]
  559. OpenRegKey $(!REG_H_LOCAL) "" system\currentcontrolset\control\CrashControl $(!REG_KEY_SET_VALUE) CrashControlKey
  560. ifstr $(CrashControlKey) != ""
  561. shell "" AddValueList $(CrashControlKey) {{LogEvent ,0,$(!REG_VT_DWORD),1},+
  562. {SendAlert ,0,$(!REG_VT_DWORD),1},+
  563. {CrashDumpEnabled,0,$(!REG_VT_DWORD),1},+
  564. {AutoReboot ,0,$(!REG_VT_DWORD),1}}
  565. CloseRegKey $(CrashControlKey)
  566. endif
  567. return