2
0

Compiler.ScriptFunc.pas 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. unit Compiler.ScriptFunc;
  2. {
  3. Inno Setup
  4. Copyright (C) 1997-2025 Jordan Russell
  5. Portions by Martijn Laan
  6. For conditions of distribution and use, see LICENSE.TXT.
  7. Script support functions (compile time - used by ISCmplr)
  8. }
  9. interface
  10. uses
  11. Generics.Collections, uPSCompiler, uPSUtils;
  12. procedure ScriptFuncLibraryRegister_C(const ScriptCompiler: TPSPascalCompiler;
  13. const ObsoleteFunctionWarnings: TDictionary<String, String>);
  14. implementation
  15. uses
  16. Windows, SysUtils, TypInfo,
  17. Shared.CommonFunc, Shared.SetupMessageIDs, Shared.Struct,
  18. Shared.SetupTypes, Shared.SetupSteps, Shared.ScriptFunc, Compiler.Messages, Shared.DotNetVersion;
  19. { This type copied from CmnFunc.pas. We don't actually 'use' CmnFunc since
  20. it would cause VCL units to be linked in. }
  21. type
  22. TMsgBoxType = (mbInformation, mbConfirmation, mbError, mbCriticalError);
  23. procedure ScriptFuncLibraryRegister_C(const ScriptCompiler: TPSPascalCompiler;
  24. const ObsoleteFunctionWarnings: TDictionary<String, String>);
  25. procedure RegisterType(const Name, Value: tbtstring);
  26. begin
  27. ScriptCompiler.AddTypeS(Name, Value);
  28. end;
  29. procedure RegisterFunctionTable(const FunctionTable: array of tbtstring);
  30. begin
  31. for var Func in FunctionTable do
  32. ScriptCompiler.AddFunction(Func);
  33. end;
  34. procedure RegisterDelphiFunctionTable(const FunctionTable: array of tbtstring);
  35. begin
  36. for var I := Low(FunctionTable) to High(FunctionTable) do
  37. ScriptCompiler.AddDelphiFunction(FunctionTable[I]);
  38. end;
  39. procedure RegisterConst(const Name: tbtstring; const Value: Integer);
  40. var
  41. C: TPSConstant;
  42. begin
  43. C := ScriptCompiler.AddConstant(Name, ScriptCompiler.FindType('Integer'));
  44. C.Value.tS32 := Value;
  45. end;
  46. procedure RegisterRealEnum(const Name: tbtstring; const TypeInfo: PTypeInfo);
  47. var
  48. TypeData: PTypeData;
  49. S: tbtstring;
  50. I: Integer;
  51. begin
  52. TypeData := GetTypeData(TypeInfo);
  53. if (TypeInfo.Kind <> tkEnumeration) or (TypeData.MinValue <> 0) then
  54. raise Exception.Create('Internal error: RegisterRealEnum not passed a valid enum type');
  55. S := '(';
  56. for I := 0 to TypeData.MaxValue do begin
  57. if I > 0 then
  58. S := S + ',';
  59. S := S + tbtstring(GetEnumName(TypeInfo, I));
  60. end;
  61. S := S + ')';
  62. ScriptCompiler.AddTypeS(Name, S);
  63. end;
  64. begin
  65. RegisterType('TArrayOfString', 'array of String');
  66. RegisterType('TArrayOfChar', 'array of Char');
  67. RegisterType('TArrayOfBoolean', 'array of Boolean');
  68. RegisterType('TArrayOfInteger', 'array of Integer');
  69. RegisterType('TArrayOfGraphic', 'array of TGraphic');
  70. RegisterType('DWORD', 'Cardinal');
  71. RegisterType('UINT', 'Cardinal');
  72. RegisterType('BOOL', 'LongBool');
  73. RegisterType('INT_PTR', 'NativeInt');
  74. RegisterType('DWORD_PTR', 'NativeUInt');
  75. RegisterType('UINT_PTR', 'NativeUInt');
  76. RegisterType('LRESULT', 'NativeInt');
  77. RegisterType('HKEY', 'NativeUInt');
  78. RegisterType('HMODULE', 'NativeUInt');
  79. RegisterType('WPARAM', 'NativeUInt');
  80. RegisterType('LPARAM', 'NativeInt');
  81. RegisterType('TFileTime',
  82. 'record' +
  83. ' dwLowDateTime: DWORD;' +
  84. ' dwHighDateTime: DWORD;' +
  85. 'end');
  86. RegisterRealEnum('TMsgBoxType', TypeInfo(TMsgBoxType));
  87. RegisterRealEnum('TSetupMessageID', TypeInfo(TSetupMessageID));
  88. RegisterRealEnum('TSetupStep', TypeInfo(TSetupStep));
  89. RegisterRealEnum('TUninstallStep', TypeInfo(TUninstallStep));
  90. RegisterRealEnum('TSetupProcessorArchitecture', TypeInfo(TSetupProcessorArchitecture));
  91. RegisterRealEnum('TDotNetVersion', TypeInfo(TDotNetVersion));
  92. RegisterType('TSplitType', '(stAll, stExcludeEmpty, stExcludeLastEmpty)'); //must be compatible with System.SysUtils.TStringSplitOptions
  93. RegisterType('TExecWait', '(ewNoWait, ewWaitUntilTerminated, ewWaitUntilIdle)');
  94. RegisterType('TExecOutput',
  95. 'record' +
  96. ' StdOut: TArrayOfString;' +
  97. ' StdErr: TArrayOfString;' +
  98. ' Error: Boolean;' +
  99. 'end');
  100. RegisterType('TFindRec',
  101. 'record' +
  102. ' Name: String;' +
  103. ' Attributes: LongWord;' +
  104. ' SizeHigh: LongWord;' +
  105. ' SizeLow: LongWord;' +
  106. ' CreationTime: TFileTime;' +
  107. ' LastAccessTime: TFileTime;' +
  108. ' LastWriteTime: TFileTime;' +
  109. ' AlternateName: String;' +
  110. ' FindHandle: THandle;' +
  111. 'end');
  112. RegisterType('TWindowsVersion',
  113. 'record' +
  114. ' Major: Cardinal;' +
  115. ' Minor: Cardinal;' +
  116. ' Build: Cardinal;' +
  117. ' ServicePackMajor: Cardinal;' +
  118. ' ServicePackMinor: Cardinal;' +
  119. ' NTPlatform: Boolean;' +
  120. ' ProductType: Byte;' +
  121. ' SuiteMask: Word;' +
  122. 'end');
  123. RegisterType('TOnDownloadProgress', 'function(const Url, FileName: String; const Progress, ProgressMax: Int64): Boolean;');
  124. RegisterType('TOnExtractionProgress', 'function(const ArchiveName, FileName: String; const Progress, ProgressMax: Int64): Boolean;');
  125. RegisterType('TOnLog', 'procedure(const S: String; const Error, FirstLine: Boolean);');
  126. for var ScriptFuncTable in ScriptFuncTables do
  127. RegisterFunctionTable(ScriptFuncTable);
  128. RegisterDelphiFunctionTable(DelphiScriptFuncTable);
  129. ObsoleteFunctionWarnings.Add('IsAdminLoggedOn', Format(SCompilerCodeFunctionRenamedWithAlternative, ['IsAdminLoggedOn', 'IsAdmin', 'IsAdminInstallMode']));
  130. ObsoleteFunctionWarnings.Add('IsComponentSelected', Format(SCompilerCodeFunctionRenamed, ['IsComponentSelected', 'WizardIsComponentSelected']));
  131. ObsoleteFunctionWarnings.Add('IsTaskSelected', Format(SCompilerCodeFunctionRenamed, ['IsTaskSelected', 'WizardIsTaskSelected']));
  132. ObsoleteFunctionWarnings.Add('IsX64', Format(SCompilerCodeFunctionDeprecatedWithAlternativeAndDocs, ['IsX64', 'IsX64OS', 'IsX64Compatible', 'Architecture Identifiers']));
  133. ObsoleteFunctionWarnings.Add('FileCopy', Format(SCompilerCodeFunctionRenamed, ['FileCopy', 'CopyFile']));
  134. ObsoleteFunctionWarnings.Add('Extract7ZipArchive', Format(SCompilerCodeFunctionDeprecatedWithHint, ['Extract7ZipArchive', 'ExtractArchive', SCompilerCodeFunctionExtractArchiveHint]));
  135. RegisterConst('MaxInt', MaxInt);
  136. ScriptCompiler.AddConstantN('irInstall', 'Boolean').SetUInt(1);
  137. RegisterConst('wpWelcome', wpWelcome);
  138. RegisterConst('wpLicense', wpLicense);
  139. RegisterConst('wpPassword', wpPassword);
  140. RegisterConst('wpInfoBefore', wpInfoBefore);
  141. RegisterConst('wpUserInfo', wpUserInfo);
  142. RegisterConst('wpSelectDir', wpSelectDir);
  143. RegisterConst('wpSelectComponents', wpSelectComponents);
  144. RegisterConst('wpSelectProgramGroup', wpSelectProgramGroup);
  145. RegisterConst('wpSelectTasks', wpSelectTasks);
  146. RegisterConst('wpReady', wpReady);
  147. RegisterConst('wpPreparing', wpPreparing);
  148. RegisterConst('wpInstalling', wpInstalling);
  149. RegisterConst('wpInfoAfter', wpInfoAfter);
  150. RegisterConst('wpFinished', wpFinished);
  151. RegisterConst('MB_OK', MB_OK);
  152. RegisterConst('MB_OKCANCEL', MB_OKCANCEL);
  153. RegisterConst('MB_ABORTRETRYIGNORE', MB_ABORTRETRYIGNORE);
  154. RegisterConst('MB_YESNOCANCEL', MB_YESNOCANCEL);
  155. RegisterConst('MB_YESNO', MB_YESNO);
  156. RegisterConst('MB_RETRYCANCEL', MB_RETRYCANCEL);
  157. RegisterConst('MB_DEFBUTTON1', MB_DEFBUTTON1);
  158. RegisterConst('MB_DEFBUTTON2', MB_DEFBUTTON2);
  159. RegisterConst('MB_DEFBUTTON3', MB_DEFBUTTON3);
  160. RegisterConst('MB_SETFOREGROUND', MB_SETFOREGROUND);
  161. RegisterConst('IDOK', IDOK);
  162. RegisterConst('IDCANCEL', IDCANCEL);
  163. RegisterConst('IDABORT', IDABORT);
  164. RegisterConst('IDRETRY', IDRETRY);
  165. RegisterConst('IDIGNORE', IDIGNORE);
  166. RegisterConst('IDYES', IDYES);
  167. RegisterConst('IDNO', IDNO);
  168. RegisterConst('HWND_BROADCAST', HWND_BROADCAST);
  169. RegisterConst('HKEY_AUTO', Integer(HKEY_AUTO));
  170. RegisterConst('HKEY_AUTO_32', Integer(HKEY_AUTO or CodeRootKeyFlag32Bit));
  171. RegisterConst('HKEY_AUTO_64', Integer(HKEY_AUTO or CodeRootKeyFlag64Bit));
  172. RegisterConst('HKEY_CLASSES_ROOT', Integer(HKEY_CLASSES_ROOT));
  173. RegisterConst('HKEY_CLASSES_ROOT_32', Integer(HKEY_CLASSES_ROOT or CodeRootKeyFlag32Bit));
  174. RegisterConst('HKEY_CLASSES_ROOT_64', Integer(HKEY_CLASSES_ROOT or CodeRootKeyFlag64Bit));
  175. RegisterConst('HKEY_CURRENT_USER', Integer(HKEY_CURRENT_USER));
  176. RegisterConst('HKEY_CURRENT_USER_32', Integer(HKEY_CURRENT_USER or CodeRootKeyFlag32Bit));
  177. RegisterConst('HKEY_CURRENT_USER_64', Integer(HKEY_CURRENT_USER or CodeRootKeyFlag64Bit));
  178. RegisterConst('HKEY_LOCAL_MACHINE', Integer(HKEY_LOCAL_MACHINE));
  179. RegisterConst('HKEY_LOCAL_MACHINE_32', Integer(HKEY_LOCAL_MACHINE or CodeRootKeyFlag32Bit));
  180. RegisterConst('HKEY_LOCAL_MACHINE_64', Integer(HKEY_LOCAL_MACHINE or CodeRootKeyFlag64Bit));
  181. RegisterConst('HKEY_USERS', Integer(HKEY_USERS));
  182. RegisterConst('HKEY_USERS_32', Integer(HKEY_USERS or CodeRootKeyFlag32Bit));
  183. RegisterConst('HKEY_USERS_64', Integer(HKEY_USERS or CodeRootKeyFlag64Bit));
  184. RegisterConst('HKEY_PERFORMANCE_DATA', Integer(HKEY_PERFORMANCE_DATA));
  185. RegisterConst('HKEY_CURRENT_CONFIG', Integer(HKEY_CURRENT_CONFIG));
  186. RegisterConst('HKEY_CURRENT_CONFIG_32', Integer(HKEY_CURRENT_CONFIG or CodeRootKeyFlag32Bit));
  187. RegisterConst('HKEY_CURRENT_CONFIG_64', Integer(HKEY_CURRENT_CONFIG or CodeRootKeyFlag64Bit));
  188. RegisterConst('HKEY_DYN_DATA', Integer(HKEY_DYN_DATA));
  189. RegisterConst('HKA', Integer(HKEY_AUTO));
  190. RegisterConst('HKA32', Integer(HKEY_AUTO or CodeRootKeyFlag32Bit));
  191. RegisterConst('HKA64', Integer(HKEY_AUTO or CodeRootKeyFlag64Bit));
  192. RegisterConst('HKCR', Integer(HKEY_CLASSES_ROOT));
  193. RegisterConst('HKCR32', Integer(HKEY_CLASSES_ROOT or CodeRootKeyFlag32Bit));
  194. RegisterConst('HKCR64', Integer(HKEY_CLASSES_ROOT or CodeRootKeyFlag64Bit));
  195. RegisterConst('HKCU', Integer(HKEY_CURRENT_USER));
  196. RegisterConst('HKCU32', Integer(HKEY_CURRENT_USER or CodeRootKeyFlag32Bit));
  197. RegisterConst('HKCU64', Integer(HKEY_CURRENT_USER or CodeRootKeyFlag64Bit));
  198. RegisterConst('HKLM', Integer(HKEY_LOCAL_MACHINE));
  199. RegisterConst('HKLM32', Integer(HKEY_LOCAL_MACHINE or CodeRootKeyFlag32Bit));
  200. RegisterConst('HKLM64', Integer(HKEY_LOCAL_MACHINE or CodeRootKeyFlag64Bit));
  201. RegisterConst('HKU', Integer(HKEY_USERS));
  202. RegisterConst('HKU32', Integer(HKEY_USERS or CodeRootKeyFlag32Bit));
  203. RegisterConst('HKU64', Integer(HKEY_USERS or CodeRootKeyFlag64Bit));
  204. RegisterConst('HKCC', Integer(HKEY_CURRENT_CONFIG));
  205. RegisterConst('HKCC32', Integer(HKEY_CURRENT_CONFIG or CodeRootKeyFlag32Bit));
  206. RegisterConst('HKCC64', Integer(HKEY_CURRENT_CONFIG or CodeRootKeyFlag64Bit));
  207. RegisterConst('SW_HIDE', SW_HIDE);
  208. RegisterConst('SW_SHOWNORMAL', SW_SHOWNORMAL);
  209. RegisterConst('SW_SHOWMINIMIZED', SW_SHOWMINIMIZED);
  210. RegisterConst('SW_SHOWMAXIMIZED', SW_SHOWMAXIMIZED);
  211. RegisterConst('SW_SHOWMINNOACTIVE', SW_SHOWMINNOACTIVE);
  212. RegisterConst('SW_SHOW', SW_SHOW);
  213. RegisterConst('FILE_ATTRIBUTE_READONLY', FILE_ATTRIBUTE_READONLY);
  214. RegisterConst('FILE_ATTRIBUTE_HIDDEN', FILE_ATTRIBUTE_HIDDEN);
  215. RegisterConst('FILE_ATTRIBUTE_SYSTEM', FILE_ATTRIBUTE_SYSTEM);
  216. RegisterConst('FILE_ATTRIBUTE_DIRECTORY', FILE_ATTRIBUTE_DIRECTORY);
  217. RegisterConst('FILE_ATTRIBUTE_ARCHIVE', FILE_ATTRIBUTE_ARCHIVE);
  218. RegisterConst('FILE_ATTRIBUTE_DEVICE', $00000040);
  219. RegisterConst('FILE_ATTRIBUTE_NORMAL', FILE_ATTRIBUTE_NORMAL);
  220. RegisterConst('FILE_ATTRIBUTE_TEMPORARY', FILE_ATTRIBUTE_TEMPORARY);
  221. RegisterConst('FILE_ATTRIBUTE_SPARSE_FILE', $00000200);
  222. RegisterConst('FILE_ATTRIBUTE_REPARSE_POINT', $00000400);
  223. RegisterConst('FILE_ATTRIBUTE_COMPRESSED', $00000800);
  224. RegisterConst('FILE_ATTRIBUTE_OFFLINE', $00001000);
  225. RegisterConst('FILE_ATTRIBUTE_NOT_CONTENT_INDEXED', $00002000);
  226. RegisterConst('FILE_ATTRIBUTE_ENCRYPTED', $00004000);
  227. RegisterConst('VER_NT_WORKSTATION', $0000001);
  228. RegisterConst('VER_NT_DOMAIN_CONTROLLER', $0000002);
  229. RegisterConst('VER_NT_SERVER', $0000003);
  230. RegisterConst('VER_SUITE_SMALLBUSINESS', $00000001);
  231. RegisterConst('VER_SUITE_ENTERPRISE', $00000002);
  232. RegisterConst('VER_SUITE_BACKOFFICE', $00000004);
  233. RegisterConst('VER_SUITE_COMMUNICATIONS', $00000008);
  234. RegisterConst('VER_SUITE_TERMINAL', $00000010);
  235. RegisterConst('VER_SUITE_SMALLBUSINESS_RESTRICTED', $00000020);
  236. RegisterConst('VER_SUITE_EMBEDDEDNT', $00000040);
  237. RegisterConst('VER_SUITE_DATACENTER', $00000080);
  238. RegisterConst('VER_SUITE_SINGLEUSERTS', $00000100);
  239. RegisterConst('VER_SUITE_PERSONAL', $00000200);
  240. RegisterConst('VER_SUITE_BLADE', $00000400);
  241. RegisterConst('VER_SUITE_EMBEDDED_RESTRICTED', $00000800);
  242. RegisterConst('VER_SUITE_SECURITY_APPLIANCE', $00001000);
  243. RegisterConst('SIID_DOCNOASSOC', 0);
  244. RegisterConst('SIID_DOCASSOC', 1);
  245. RegisterConst('SIID_APPLICATION', 2);
  246. RegisterConst('SIID_FOLDER', 3);
  247. RegisterConst('SIID_FOLDEROPEN', 4);
  248. RegisterConst('SIID_DRIVE525', 5);
  249. RegisterConst('SIID_DRIVE35', 6);
  250. RegisterConst('SIID_DRIVEREMOVE', 7);
  251. RegisterConst('SIID_DRIVEFIXED', 8);
  252. RegisterConst('SIID_DRIVENET', 9);
  253. RegisterConst('SIID_DRIVENETDISABLED', 10);
  254. RegisterConst('SIID_DRIVECD', 11);
  255. RegisterConst('SIID_DRIVERAM', 12);
  256. RegisterConst('SIID_WORLD', 13);
  257. RegisterConst('SIID_SERVER', 15);
  258. RegisterConst('SIID_PRINTER', 16);
  259. RegisterConst('SIID_MYNETWORK', 17);
  260. RegisterConst('SIID_FIND', 22);
  261. RegisterConst('SIID_HELP', 23);
  262. RegisterConst('SIID_SHARE', 28);
  263. RegisterConst('SIID_LINK', 29);
  264. RegisterConst('SIID_SLOWFILE', 30);
  265. RegisterConst('SIID_RECYCLER', 31);
  266. RegisterConst('SIID_RECYCLERFULL', 32);
  267. RegisterConst('SIID_MEDIACDAUDIO', 40);
  268. RegisterConst('SIID_LOCK', 47);
  269. RegisterConst('SIID_AUTOLIST', 49);
  270. RegisterConst('SIID_PRINTERNET', 50);
  271. RegisterConst('SIID_SERVERSHARE', 51);
  272. RegisterConst('SIID_PRINTERFAX', 52);
  273. RegisterConst('SIID_PRINTERFAXNET', 53);
  274. RegisterConst('SIID_PRINTERFILE', 54);
  275. RegisterConst('SIID_STACK', 55);
  276. RegisterConst('SIID_MEDIASVCD', 56);
  277. RegisterConst('SIID_STUFFEDFOLDER', 57);
  278. RegisterConst('SIID_DRIVEUNKNOWN', 58);
  279. RegisterConst('SIID_DRIVEDVD', 59);
  280. RegisterConst('SIID_MEDIADVD', 60);
  281. RegisterConst('SIID_MEDIADVDRAM', 61);
  282. RegisterConst('SIID_MEDIADVDRW', 62);
  283. RegisterConst('SIID_MEDIADVDR', 63);
  284. RegisterConst('SIID_MEDIADVDROM', 64);
  285. RegisterConst('SIID_MEDIACDAUDIOPLUS', 65);
  286. RegisterConst('SIID_MEDIACDRW', 66);
  287. RegisterConst('SIID_MEDIACDR', 67);
  288. RegisterConst('SIID_MEDIACDBURN', 68);
  289. RegisterConst('SIID_MEDIABLANKCD', 69);
  290. RegisterConst('SIID_MEDIACDROM', 70);
  291. RegisterConst('SIID_AUDIOFILES', 71);
  292. RegisterConst('SIID_IMAGEFILES', 72);
  293. RegisterConst('SIID_VIDEOFILES', 73);
  294. RegisterConst('SIID_MIXEDFILES', 74);
  295. RegisterConst('SIID_FOLDERBACK', 75);
  296. RegisterConst('SIID_FOLDERFRONT', 76);
  297. RegisterConst('SIID_SHIELD', 77);
  298. RegisterConst('SIID_WARNING', 78);
  299. RegisterConst('SIID_INFO', 79);
  300. RegisterConst('SIID_ERROR', 80);
  301. RegisterConst('SIID_KEY', 81);
  302. RegisterConst('SIID_SOFTWARE', 82);
  303. RegisterConst('SIID_RENAME', 83);
  304. RegisterConst('SIID_DELETE', 84);
  305. RegisterConst('SIID_MEDIAAUDIODVD', 85);
  306. RegisterConst('SIID_MEDIAMOVIEDVD', 86);
  307. RegisterConst('SIID_MEDIAENHANCEDCD', 87);
  308. RegisterConst('SIID_MEDIAENHANCEDDVD', 88);
  309. RegisterConst('SIID_MEDIAHDDVD', 89);
  310. RegisterConst('SIID_MEDIABLURAY', 90);
  311. RegisterConst('SIID_MEDIAVCD', 91);
  312. RegisterConst('SIID_MEDIADVDPLUSR', 92);
  313. RegisterConst('SIID_MEDIADVDPLUSRW', 93);
  314. RegisterConst('SIID_DESKTOPPC', 94);
  315. RegisterConst('SIID_MOBILEPC', 95);
  316. RegisterConst('SIID_USERS', 96);
  317. RegisterConst('SIID_MEDIASMARTMEDIA', 97);
  318. RegisterConst('SIID_MEDIACOMPACTFLASH', 98);
  319. RegisterConst('SIID_DEVICECELLPHONE', 99);
  320. RegisterConst('SIID_DEVICECAMERA', 100);
  321. RegisterConst('SIID_DEVICEVIDEOCAMERA', 101);
  322. RegisterConst('SIID_DEVICEAUDIOPLAYER', 102);
  323. RegisterConst('SIID_NETWORKCONNECT', 103);
  324. RegisterConst('SIID_INTERNET', 104);
  325. RegisterConst('SIID_ZIPFILE', 105);
  326. RegisterConst('SIID_SETTINGS', 106);
  327. RegisterConst('SIID_DRIVEHDDVD', 132);
  328. RegisterConst('SIID_DRIVEBD', 133);
  329. RegisterConst('SIID_MEDIAHDDVDROM', 134);
  330. RegisterConst('SIID_MEDIAHDDVDR', 135);
  331. RegisterConst('SIID_MEDIAHDDVDRAM', 136);
  332. RegisterConst('SIID_MEDIABDROM', 137);
  333. RegisterConst('SIID_MEDIABDR', 138);
  334. RegisterConst('SIID_MEDIABDRE', 139);
  335. RegisterConst('SIID_CLUSTEREDDRIVE', 140);
  336. end;
  337. end.