JwaWinReg.pas
上传用户:davidchvip
上传日期:2009-07-28
资源大小:1749k
文件大小:65k
源码类别:

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { Windows Registry API interface Unit for Object Pascal                        }
  4. {                                                                       }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft          }
  6. { Corporation. All Rights Reserved.                                            }
  7. {                 }
  8. { The original file is: winreg.h, released June 2000. The original Pascal      }
  9. { code is: WinReg.pas, released December 2000. The initial developer of the    }
  10. { Pascal code is Marcel van Brakel (brakelm@chello.nl).                        }
  11. {                                                                              }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001            }
  13. { Marcel van Brakel. All Rights Reserved.                                      }
  14. {                 }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  16. {                }
  17. { You may retrieve the latest version of this file at the Project JEDI home    }
  18. { page, located at http://delphi-jedi.org or my personal homepage located at   }
  19. { http://members.chello.nl/m.vanbrakel2                                        }
  20. {                }
  21. { The contents of this file are used with permission, subject to the Mozilla   }
  22. { Public License Version 1.1 (the "License"); you may not use this file except }
  23. { in compliance with the License. You may obtain a copy of the License at      }
  24. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  25. {                                                                              }
  26. { Software distributed under the License is distributed on an "AS IS" basis,   }
  27. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  28. { the specific language governing rights and limitations under the License.    }
  29. {                                                                              }
  30. { Alternatively, the contents of this file may be used under the terms of the  }
  31. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  32. { provisions of the LGPL License are applicable instead of those above.        }
  33. { If you wish to allow use of your version of this file only under the terms   }
  34. { of the LGPL License and not to allow others to use your version of this file }
  35. { under the MPL, indicate your decision by deleting  the provisions above and  }
  36. { replace  them with the notice and other provisions required by the LGPL      }
  37. { License.  If you do not delete the provisions above, a recipient may use     }
  38. { your version of this file under either the MPL or the LGPL License.          }
  39. {                 }
  40. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  41. {                 }
  42. {******************************************************************************}
  43. unit JwaWinReg;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "WinReg.h"'}
  47. {$HPPEMIT ''}
  48. {$I WINDEFINES.INC}
  49. interface
  50. uses
  51.   JwaReason, JwaWinBase, JwaWinNT, JwaWinType;
  52. //
  53. // Requested Key access mask type.
  54. //
  55. type
  56.   REGSAM = ACCESS_MASK;
  57.   {$EXTERNALSYM REGSAM}
  58. //
  59. // Reserved Key Handles.
  60. //
  61. const
  62.   HKEY_CLASSES_ROOT     = HKEY(ULONG_PTR(LONG($80000000)));
  63.   {$EXTERNALSYM HKEY_CLASSES_ROOT}
  64.   HKEY_CURRENT_USER     = HKEY(ULONG_PTR(LONG($80000001)));
  65.   {$EXTERNALSYM HKEY_CURRENT_USER}
  66.   HKEY_LOCAL_MACHINE    = HKEY(ULONG_PTR(LONG($80000002)));
  67.   {$EXTERNALSYM HKEY_LOCAL_MACHINE}
  68.   HKEY_USERS            = HKEY(ULONG_PTR(LONG($80000003)));
  69.   {$EXTERNALSYM HKEY_USERS}
  70.   HKEY_PERFORMANCE_DATA = HKEY(ULONG_PTR(LONG($80000004)));
  71.   {$EXTERNALSYM HKEY_PERFORMANCE_DATA}
  72.   HKEY_PERFORMANCE_TEXT    = HKEY(ULONG_PTR(LONG($80000050)));
  73.   {$EXTERNALSYM HKEY_PERFORMANCE_TEXT}
  74.   HKEY_PERFORMANCE_NLSTEXT = HKEY(ULONG_PTR(LONG($80000060)));
  75.   {$EXTERNALSYM HKEY_PERFORMANCE_NLSTEXT}
  76.   HKEY_CURRENT_CONFIG   = HKEY(ULONG_PTR(LONG($80000005)));
  77.   {$EXTERNALSYM HKEY_CURRENT_CONFIG}
  78.   HKEY_DYN_DATA         = HKEY(ULONG_PTR(LONG($80000006)));
  79.   {$EXTERNALSYM HKEY_DYN_DATA}
  80.   PROVIDER_KEEPS_VALUE_LENGTH = $1;
  81.   {$EXTERNALSYM PROVIDER_KEEPS_VALUE_LENGTH}
  82. type
  83.   val_context = record
  84.     valuelen: Integer;       // the total length of this value
  85.     value_context: LPVOID;   // provider's context
  86.     val_buff_ptr: LPVOID;    // where in the ouput buffer the value is.
  87.   end;
  88.   {$EXTERNALSYM val_context}
  89.   PVALCONTEXT = ^val_context;
  90.   {$EXTERNALSYM PVALCONTEXT}
  91.   TValContext = val_context;
  92.   PVALUEA = record           // Provider supplied value/context.
  93.     pv_valuename: LPSTR;     // The value name pointer
  94.     pv_valuelen: Integer;
  95.     pv_value_context: LPVOID;
  96.     pv_type: DWORD;
  97.   end;
  98.   {$EXTERNALSYM PVALUEA}
  99.   PPVALUEA = ^PVALUEA;
  100.   {$EXTERNALSYM PPVALUEA}
  101.   TPValueA = PVALUEA;
  102.   PVALUEW = record           // Provider supplied value/context.
  103.     pv_valuename: LPWSTR;    // The value name pointer
  104.     pv_valuelen: Integer;
  105.     pv_value_context: LPVOID;
  106.     pv_type: DWORD;
  107.   end;
  108.   {$EXTERNALSYM PVALUEW}
  109.   PPVALUEW = ^PVALUEW;
  110.   {$EXTERNALSYM PPVALUEW}
  111.   TPValueW = PVALUEW;
  112. {$IFDEF UNICODE}
  113.   PVALUE = PVALUEW;
  114.   {$EXTERNALSYM PVALUE}
  115.   PPVALUE = PPVALUEW;
  116.   {$EXTERNALSYM PPVALUE}
  117.   TPValue = TPValueW;
  118. {$ELSE}
  119.   PVALUE = PVALUEA;
  120.   {$EXTERNALSYM PVALUE}
  121.   PPVALUE = PPVALUEA;
  122.   {$EXTERNALSYM PPVALUE}
  123.   TPValue = TPValueA;
  124. {$ENDIF}
  125.   QUERYHANDLER = function (keycontext: LPVOID; val_list: PVALCONTEXT;
  126.     num_vals: DWORD; outputbuffer: LPVOID; total_outlen: LPDWORD;
  127.     input_blen: DWORD): DWORD; cdecl;
  128.   {$EXTERNALSYM QUERYHANDLER}
  129.   PQUERYHANDLER = ^QUERYHANDLER;
  130.   {$EXTERNALSYM PQUERYHANDLER}
  131.   TQueryHandler = QUERYHANDLER;
  132.   provider_info = record
  133.     pi_R0_1val: PQUERYHANDLER;
  134.     pi_R0_allvals: PQUERYHANDLER;
  135.     pi_R3_1val: PQUERYHANDLER;
  136.     pi_R3_allvals: PQUERYHANDLER;
  137.     pi_flags: DWORD;    // capability flags (none defined yet).
  138.     pi_key_context: LPVOID;
  139.   end;
  140.   {$EXTERNALSYM provider_info}
  141.   REG_PROVIDER = provider_info;
  142.   {$EXTERNALSYM REG_PROVIDER}
  143.   PPROVIDER = ^provider_info;
  144.   {$EXTERNALSYM PPROVIDER}
  145.   TProviderInfo = provider_info;
  146.   PProviderInfo = ^provider_info;
  147.   value_entA = record
  148.     ve_valuename: LPSTR;
  149.     ve_valuelen: DWORD;
  150.     ve_valueptr: DWORD_PTR;
  151.     ve_type: DWORD;
  152.   end;
  153.   {$EXTERNALSYM value_entA}
  154.   VALENTA = value_entA;
  155.   {$EXTERNALSYM VALENTA}
  156.   PVALENTA = ^VALENTA;
  157.   {$EXTERNALSYM PVALENTA}
  158.   TValueEntA = value_entA;
  159.   PValueEntA = ^value_entA;
  160.   value_entW = record
  161.     ve_valuename: LPWSTR;
  162.     ve_valuelen: DWORD;
  163.     ve_valueptr: DWORD_PTR;
  164.     ve_type: DWORD;
  165.   end;
  166.   {$EXTERNALSYM value_entW}
  167.   VALENTW = value_entW;
  168.   {$EXTERNALSYM VALENTW}
  169.   PVALENTW = ^VALENTW;
  170.   {$EXTERNALSYM PVALENTW}
  171.   TValueEntW = value_entW;
  172.   PValueEntW = ^value_entW;
  173. {$IFDEF UNICODE}
  174.   VALENT = VALENTW;
  175.   {$EXTERNALSYM VALENT}
  176.   PVALENT = PVALENTW;
  177.   {$EXTERNALSYM PVALENT}
  178.   TValueEnt = TValueEntW;
  179.   PValueEnt = PValueEntW;
  180. {$ELSE}
  181.   VALENT = VALENTA;
  182.   {$EXTERNALSYM VALENT}
  183.   PVALENT = PVALENTA;
  184.   {$EXTERNALSYM PVALENT}
  185.   TValueEnt = TValueEntA;
  186.   PValueEnt = PValueEntA;
  187. {$ENDIF}
  188. //
  189. // Default values for parameters that do not exist in the Win 3.1
  190. // compatible APIs.
  191. //
  192. const
  193.   WIN31_CLASS = nil;
  194.   {$EXTERNALSYM WIN31_CLASS}
  195. //
  196. // API Prototypes.
  197. //
  198. function RegCloseKey(hKey: HKEY): LONG; stdcall;
  199. {$EXTERNALSYM RegCloseKey}
  200. function RegOverridePredefKey(hKey: HKEY; hNewHKey: HKEY): LONG; stdcall;
  201. {$EXTERNALSYM RegOverridePredefKey}
  202. function RegOpenUserClassesRoot(hToken: HANDLE; dwOptions: DWORD;
  203.   samDesired: REGSAM; var phkResult: HKEY): LONG; stdcall;
  204. {$EXTERNALSYM RegOpenUserClassesRoot}
  205. function RegOpenCurrentUser(samDesired: REGSAM; var phkResult: HKEY): LONG; stdcall;
  206. {$EXTERNALSYM RegOpenCurrentUser}
  207. function RegDisablePredefinedCache: LONG; stdcall;
  208. {$EXTERNALSYM RegDisablePredefinedCache}
  209. function RegConnectRegistryA(lpMachineName: LPCSTR; hKey: HKEY;
  210.   var phkResult: HKEY): LONG; stdcall;
  211. {$EXTERNALSYM RegConnectRegistryA}
  212. function RegConnectRegistryW(lpMachineName: LPCWSTR; hKey: HKEY;
  213.   var phkResult: HKEY): LONG; stdcall;
  214. {$EXTERNALSYM RegConnectRegistryW}
  215. {$IFDEF UNICODE}
  216. function RegConnectRegistry(lpMachineName: LPCWSTR; hKey: HKEY;
  217.   var phkResult: HKEY): LONG; stdcall;
  218. {$EXTERNALSYM RegConnectRegistry}
  219. {$ELSE}
  220. function RegConnectRegistry(lpMachineName: LPCSTR; hKey: HKEY;
  221.   var phkResult: HKEY): LONG; stdcall;
  222. {$EXTERNALSYM RegConnectRegistry}
  223. {$ENDIF}
  224. function RegCreateKeyA(hKey: HKEY; lpSubKey: LPCSTR; var phkResult: HKEY): LONG; stdcall;
  225. {$EXTERNALSYM RegCreateKeyA}
  226. function RegCreateKeyW(hKey: HKEY; lpSubKey: LPCWSTR; var phkResult: HKEY): LONG; stdcall;
  227. {$EXTERNALSYM RegCreateKeyW}
  228. {$IFDEF UNICODE}
  229. function RegCreateKey(hKey: HKEY; lpSubKey: LPCWSTR; var phkResult: HKEY): LONG; stdcall;
  230. {$EXTERNALSYM RegCreateKey}
  231. {$ELSE}
  232. function RegCreateKey(hKey: HKEY; lpSubKey: LPCSTR; var phkResult: HKEY): LONG; stdcall;
  233. {$EXTERNALSYM RegCreateKey}
  234. {$ENDIF}
  235. function RegCreateKeyExA(hKey: HKEY; lpSubKey: LPCSTR; Reserved: DWORD;
  236.   lpClass: LPSTR; dwOptions: DWORD; samDesired: REGSAM;
  237.   lpSecurityAttributes: LPSECURITY_ATTRIBUTES; var phkResult: HKEY;
  238.   lpdwDisposition: LPDWORD): LONG; stdcall;
  239. {$EXTERNALSYM RegCreateKeyExA}
  240. function RegCreateKeyExW(hKey: HKEY; lpSubKey: LPCWSTR; Reserved: DWORD;
  241.   lpClass: LPWSTR; dwOptions: DWORD; samDesired: REGSAM;
  242.   lpSecurityAttributes: LPSECURITY_ATTRIBUTES; var phkResult: HKEY;
  243.   lpdwDisposition: LPDWORD): LONG; stdcall;
  244. {$EXTERNALSYM RegCreateKeyExW}
  245. {$IFDEF UNICODE}
  246. function RegCreateKeyEx(hKey: HKEY; lpSubKey: LPCWSTR; Reserved: DWORD;
  247.   lpClass: LPWSTR; dwOptions: DWORD; samDesired: REGSAM;
  248.   lpSecurityAttributes: LPSECURITY_ATTRIBUTES; var phkResult: HKEY;
  249.   lpdwDisposition: LPDWORD): LONG; stdcall;
  250. {$EXTERNALSYM RegCreateKeyEx}
  251. {$ELSE}
  252. function RegCreateKeyEx(hKey: HKEY; lpSubKey: LPCSTR; Reserved: DWORD;
  253.   lpClass: LPSTR; dwOptions: DWORD; samDesired: REGSAM;
  254.   lpSecurityAttributes: LPSECURITY_ATTRIBUTES; var phkResult: HKEY;
  255.   lpdwDisposition: LPDWORD): LONG; stdcall;
  256. {$EXTERNALSYM RegCreateKeyEx}
  257. {$ENDIF}
  258. function RegDeleteKeyA(hKey: HKEY; lpSubKey: LPCSTR): LONG; stdcall;
  259. {$EXTERNALSYM RegDeleteKeyA}
  260. function RegDeleteKeyW(hKey: HKEY; lpSubKey: LPCWSTR): LONG; stdcall;
  261. {$EXTERNALSYM RegDeleteKeyW}
  262. {$IFDEF UNICODE}
  263. function RegDeleteKey(hKey: HKEY; lpSubKey: LPCWSTR): LONG; stdcall;
  264. {$EXTERNALSYM RegDeleteKey}
  265. {$ELSE}
  266. function RegDeleteKey(hKey: HKEY; lpSubKey: LPCSTR): LONG; stdcall;
  267. {$EXTERNALSYM RegDeleteKey}
  268. {$ENDIF}
  269. function RegDeleteValueA(hKey: HKEY; lpValueName: LPCSTR): LONG; stdcall;
  270. {$EXTERNALSYM RegDeleteValueA}
  271. function RegDeleteValueW(hKey: HKEY; lpValueName: LPCWSTR): LONG; stdcall;
  272. {$EXTERNALSYM RegDeleteValueW}
  273. {$IFDEF UNICODE}
  274. function RegDeleteValue(hKey: HKEY; lpValueName: LPCWSTR): LONG; stdcall;
  275. {$EXTERNALSYM RegDeleteValue}
  276. {$ELSE}
  277. function RegDeleteValue(hKey: HKEY; lpValueName: LPCSTR): LONG; stdcall;
  278. {$EXTERNALSYM RegDeleteValue}
  279. {$ENDIF}
  280. function RegEnumKeyA(hKey: HKEY; dwIndex: DWORD; lpName: LPSTR; cbName: DWORD): LONG; stdcall;
  281. {$EXTERNALSYM RegEnumKeyA}
  282. function RegEnumKeyW(hKey: HKEY; dwIndex: DWORD; lpName: LPWSTR; cbName: DWORD): LONG; stdcall;
  283. {$EXTERNALSYM RegEnumKeyW}
  284. {$IFDEF UNICODE}
  285. function RegEnumKey(hKey: HKEY; dwIndex: DWORD; lpName: LPWSTR; cbName: DWORD): LONG; stdcall;
  286. {$EXTERNALSYM RegEnumKey}
  287. {$ELSE}
  288. function RegEnumKey(hKey: HKEY; dwIndex: DWORD; lpName: LPSTR; cbName: DWORD): LONG; stdcall;
  289. {$EXTERNALSYM RegEnumKey}
  290. {$ENDIF}
  291. function RegEnumKeyExA(hKey: HKEY; dwIndex: DWORD; lpName: LPSTR;
  292.   var lpcbName: DWORD; lpReserved: LPDWORD; lpClass: LPSTR; lpcbClass: LPDWORD;
  293.   lpftLastWriteTime: PFILETIME): LONG; stdcall;
  294. {$EXTERNALSYM RegEnumKeyExA}
  295. function RegEnumKeyExW(hKey: HKEY; dwIndex: DWORD; lpName: LPWSTR;
  296.   var lpcbName: DWORD; lpReserved: LPDWORD; lpClass: LPWSTR; lpcbClass: LPDWORD;
  297.   lpftLastWriteTime: PFILETIME): LONG; stdcall;
  298. {$EXTERNALSYM RegEnumKeyExW}
  299. {$IFDEF UNICODE}
  300. function RegEnumKeyEx(hKey: HKEY; dwIndex: DWORD; lpName: LPWSTR;
  301.   var lpcbName: LPDWORD; lpReserved: LPDWORD; lpClass: LPWSTR; lpcbClass: LPDWORD;
  302.   lpftLastWriteTime: PFILETIME): LONG; stdcall;
  303. {$EXTERNALSYM RegEnumKeyEx}
  304. {$ELSE}
  305. function RegEnumKeyEx(hKey: HKEY; dwIndex: DWORD; lpName: LPSTR;
  306.   var lpcbName: DWORD; lpReserved: LPDWORD; lpClass: LPSTR; lpcbClass: LPDWORD;
  307.   lpftLastWriteTime: PFILETIME): LONG; stdcall;
  308. {$EXTERNALSYM RegEnumKeyEx}
  309. {$ENDIF}
  310. function RegEnumValueA(hKey: HKEY; dwIndex: DWORD; lpValueName: LPSTR;
  311.   var lpcbValueName: DWORD; lpReserved, lpType: LPDWORD; lpData: LPBYTE;
  312.   lpcbData: LPDWORD): LONG; stdcall;
  313. {$EXTERNALSYM RegEnumValueA}
  314. function RegEnumValueW(hKey: HKEY; dwIndex: DWORD; lpValueName: LPWSTR;
  315.   var lpcbValueName: DWORD; lpReserved, lpType: LPDWORD; lpData: LPBYTE;
  316.   lpcbData: LPDWORD): LONG; stdcall;
  317. {$EXTERNALSYM RegEnumValueW}
  318. {$IFDEF UNICODE}
  319. function RegEnumValue(hKey: HKEY; dwIndex: DWORD; lpValueName: LPWSTR;
  320.   var lpcbValueName: DWORD; lpReserved, lpType: LPDWORD; lpData: LPBYTE;
  321.   lpcbData: LPDWORD): LONG; stdcall;
  322. {$EXTERNALSYM RegEnumValue}
  323. {$ELSE}
  324. function RegEnumValue(hKey: HKEY; dwIndex: DWORD; lpValueName: LPSTR;
  325.   var lpcbValueName: DWORD; lpReserved, lpType: LPDWORD; lpData: LPBYTE;
  326.   lpcbData: LPDWORD): LONG; stdcall;
  327. {$EXTERNALSYM RegEnumValue}
  328. {$ENDIF}
  329. function RegFlushKey(hKey: HKEY): LONG; stdcall;
  330. {$EXTERNALSYM RegFlushKey}
  331. function RegGetKeySecurity(hKey: HKEY; SecurityInformation: SECURITY_INFORMATION;
  332.   pSecurityDescriptor: PSECURITY_DESCRIPTOR; var lpcbSecurityDescriptor: DWORD): LONG; stdcall;
  333. {$EXTERNALSYM RegGetKeySecurity}
  334. function RegLoadKeyA(hKey: HKEY; lpSubKey: LPCSTR; lpFile: LPCSTR): LONG; stdcall;
  335. {$EXTERNALSYM RegLoadKeyA}
  336. function RegLoadKeyW(hKey: HKEY; lpSubKey: LPCWSTR; lpFile: LPCWSTR): LONG; stdcall;
  337. {$EXTERNALSYM RegLoadKeyW}
  338. {$IFDEF UNICODE}
  339. function RegLoadKey(hKey: HKEY; lpSubKey: LPCWSTR; lpFile: LPCWSTR): LONG; stdcall;
  340. {$EXTERNALSYM RegLoadKey}
  341. {$ELSE}
  342. function RegLoadKey(hKey: HKEY; lpSubKey: LPCSTR; lpFile: LPCSTR): LONG; stdcall;
  343. {$EXTERNALSYM RegLoadKey}
  344. {$ENDIF}
  345. function RegNotifyChangeKeyValue(hKey: HKEY; bWatchSubtree: BOOL;
  346.   dwNotifyFilter: DWORD; hEvent: HANDLE; fAsynchronus: BOOL): LONG;
  347. {$EXTERNALSYM RegNotifyChangeKeyValue}
  348. function RegOpenKeyA(hKey: HKEY; lpSubKey: LPCSTR; var phkResult: HKEY): LONG; stdcall;
  349. {$EXTERNALSYM RegOpenKeyA}
  350. function RegOpenKeyW(hKey: HKEY; lpSubKey: LPCWSTR; var phkResult: HKEY): LONG; stdcall;
  351. {$EXTERNALSYM RegOpenKeyW}
  352. {$IFDEF UNICODE}
  353. function RegOpenKey(hKey: HKEY; lpSubKey: LPCWSTR; var phkResult: HKEY): LONG; stdcall;
  354. {$EXTERNALSYM RegOpenKey}
  355. {$ELSE}
  356. function RegOpenKey(hKey: HKEY; lpSubKey: LPCSTR; var phkResult: HKEY): LONG; stdcall;
  357. {$EXTERNALSYM RegOpenKey}
  358. {$ENDIF}
  359. function RegOpenKeyExA(hKey: HKEY; lpSubKey: LPCSTR; ulOptions: DWORD;
  360.   samDesired: REGSAM; var phkResult: HKEY): LONG; stdcall;
  361. {$EXTERNALSYM RegOpenKeyExA}
  362. function RegOpenKeyExW(hKey: HKEY; lpSubKey: LPCWSTR; ulOptions: DWORD;
  363.   samDesired: REGSAM; var phkResult: HKEY): LONG; stdcall;
  364. {$EXTERNALSYM RegOpenKeyExW}
  365. {$IFDEF UNICODE}
  366. function RegOpenKeyEx(hKey: HKEY; lpSubKey: LPCWSTR; ulOptions: DWORD;
  367.   samDesired: REGSAM; var phkResult: HKEY): LONG; stdcall;
  368. {$EXTERNALSYM RegOpenKeyEx}
  369. {$ELSE}
  370. function RegOpenKeyEx(hKey: HKEY; lpSubKey: LPCSTR; ulOptions: DWORD;
  371.   samDesired: REGSAM; var phkResult: HKEY): LONG; stdcall;
  372. {$EXTERNALSYM RegOpenKeyEx}
  373. {$ENDIF}
  374. function RegQueryInfoKeyA(hKey: HKEY; lpClass: LPSTR; lpcbClass, lpReserved,
  375.   lpcSubKeys, lpcbMaxSubKeyLen, lpcbMaxClassLen, lpcValues, lpcbMaxValueNameLen,
  376.   lpcbMaxValueLen, lpcbSecurityDescriptor: LPDWORD; lpftLastWriteTime: PFILETIME): LONG; stdcall;
  377. {$EXTERNALSYM RegQueryInfoKeyA}
  378. function RegQueryInfoKeyW(hKey: HKEY; lpClass: LPWSTR; lpcbClass, lpReserved,
  379.   lpcSubKeys, lpcbMaxSubKeyLen, lpcbMaxClassLen, lpcValues, lpcbMaxValueNameLen,
  380.   lpcbMaxValueLen, lpcbSecurityDescriptor: LPDWORD; lpftLastWriteTime: PFILETIME): LONG; stdcall;
  381. {$EXTERNALSYM RegQueryInfoKeyW}
  382. {$IFDEF UNICODE}
  383. function RegQueryInfoKey(hKey: HKEY; lpClass: LPWSTR; lpcbClass, lpReserved,
  384.   lpcSubKeys, lpcbMaxSubKeyLen, lpcbMaxClassLen, lpcValues, lpcbMaxValueNameLen,
  385.   lpcbMaxValueLen, lpcbSecurityDescriptor: LPDWORD; lpftLastWriteTime: PFILETIME): LONG; stdcall;
  386. {$EXTERNALSYM RegQueryInfoKey}
  387. {$ELSE}
  388. function RegQueryInfoKey(hKey: HKEY; lpClass: LPSTR; lpcbClass, lpReserved,
  389.   lpcSubKeys, lpcbMaxSubKeyLen, lpcbMaxClassLen, lpcValues, lpcbMaxValueNameLen,
  390.   lpcbMaxValueLen, lpcbSecurityDescriptor: LPDWORD; lpftLastWriteTime: PFILETIME): LONG; stdcall;
  391. {$EXTERNALSYM RegQueryInfoKey}
  392. {$ENDIF}
  393. function RegQueryValueA(hKey: HKEY; lpSubKey: LPCSTR; lpValue: LPSTR;
  394.   var lpcbValue: LONG): LONG; stdcall;
  395. {$EXTERNALSYM RegQueryValueA}
  396. function RegQueryValueW(hKey: HKEY; lpSubKey: LPCWSTR; lpValue: LPWSTR;
  397.   var lpcbValue: LONG): LONG; stdcall;
  398. {$EXTERNALSYM RegQueryValueW}
  399. {$IFDEF UNICODE}
  400. function RegQueryValue(hKey: HKEY; lpSubKey: LPCWSTR; lpValue: LPWSTR;
  401.   var lpcbValue: LONG): LONG; stdcall;
  402. {$EXTERNALSYM RegQueryValue}
  403. {$ELSE}
  404. function RegQueryValue(hKey: HKEY; lpSubKey: LPCSTR; lpValue: LPSTR;
  405.   var lpcbValue: LONG): LONG; stdcall;
  406. {$EXTERNALSYM RegQueryValue}
  407. {$ENDIF}
  408. function RegQueryMultipleValuesA(hKey: HKEY; val_list: PVALENTA; num_vals: DWORD;
  409.   lpValueBuf: LPSTR; var ldwTotsize: DWORD): LONG; stdcall;
  410. {$EXTERNALSYM RegQueryMultipleValuesA}
  411. function RegQueryMultipleValuesW(hKey: HKEY; val_list: PVALENTW; num_vals: DWORD;
  412.   lpValueBuf: LPWSTR; var ldwTotsize: DWORD): LONG; stdcall;
  413. {$EXTERNALSYM RegQueryMultipleValuesW}
  414. {$IFDEF UNICODE}
  415. function RegQueryMultipleValues(hKey: HKEY; val_list: PVALENTW; num_vals: DWORD;
  416.   lpValueBuf: LPWSTR; var ldwTotsize: DWORD): LONG; stdcall;
  417. {$EXTERNALSYM RegQueryMultipleValues}
  418. {$ELSE}
  419. function RegQueryMultipleValues(hKey: HKEY; val_list: PVALENTA; num_vals: DWORD;
  420.   lpValueBuf: LPSTR; var ldwTotsize: DWORD): LONG; stdcall;
  421. {$EXTERNALSYM RegQueryMultipleValues}
  422. {$ENDIF}
  423. function RegQueryValueExA(hKey: HKEY; lpValueName: LPCSTR; lpReserved: LPDWORD;
  424.   lpType: LPDWORD; lpData: LPBYTE; lpcbData: LPDWORD): LONG; stdcall;
  425. {$EXTERNALSYM RegQueryValueExA}
  426. function RegQueryValueExW(hKey: HKEY; lpValueName: LPCWSTR; lpReserved: LPDWORD;
  427.   lpType: LPDWORD; lpData: LPBYTE; lpcbData: LPDWORD): LONG; stdcall;
  428. {$EXTERNALSYM RegQueryValueExW}
  429. {$IFDEF UNICODE}
  430. function RegQueryValueEx(hKey: HKEY; lpValueName: LPCWSTR; lpReserved: LPDWORD;
  431.   lpType: LPDWORD; lpData: LPBYTE; lpcbData: LPDWORD): LONG; stdcall;
  432. {$EXTERNALSYM RegQueryValueEx}
  433. {$ELSE}
  434. function RegQueryValueEx(hKey: HKEY; lpValueName: LPCSTR; lpReserved: LPDWORD;
  435.   lpType: LPDWORD; lpData: LPBYTE; lpcbData: LPDWORD): LONG; stdcall;
  436. {$EXTERNALSYM RegQueryValueEx}
  437. {$ENDIF}
  438. function RegReplaceKeyA(hKey: HKEY; lpSubKey: LPCSTR; lpNewFile: LPCSTR;
  439.   lpOldFile: LPCSTR): LONG; stdcall;
  440. {$EXTERNALSYM RegReplaceKeyA}
  441. function RegReplaceKeyW(hKey: HKEY; lpSubKey: LPCWSTR; lpNewFile: LPCWSTR;
  442.   lpOldFile: LPCWSTR): LONG; stdcall;
  443. {$EXTERNALSYM RegReplaceKeyW}
  444. {$IFDEF UNICODE}
  445. function RegReplaceKey(hKey: HKEY; lpSubKey: LPCWSTR; lpNewFile: LPCWSTR;
  446.   lpOldFile: LPCWSTR): LONG; stdcall;
  447. {$EXTERNALSYM RegReplaceKey}
  448. {$ELSE}
  449. function RegReplaceKey(hKey: HKEY; lpSubKey: LPCSTR; lpNewFile: LPCSTR;
  450.   lpOldFile: LPCSTR): LONG; stdcall;
  451. {$EXTERNALSYM RegReplaceKey}
  452. {$ENDIF}
  453. function RegRestoreKeyA(hKey: HKEY; lpFile: LPCSTR; dwFlags: DWORD): LONG; stdcall;
  454. {$EXTERNALSYM RegRestoreKeyA}
  455. function RegRestoreKeyW(hKey: HKEY; lpFile: LPCWSTR; dwFlags: DWORD): LONG; stdcall;
  456. {$EXTERNALSYM RegRestoreKeyW}
  457. {$IFDEF UNICODE}
  458. function RegRestoreKey(hKey: HKEY; lpFile: LPCWSTR; dwFlags: DWORD): LONG; stdcall;
  459. {$EXTERNALSYM RegRestoreKey}
  460. {$ELSE}
  461. function RegRestoreKey(hKey: HKEY; lpFile: LPCSTR; dwFlags: DWORD): LONG; stdcall;
  462. {$EXTERNALSYM RegRestoreKey}
  463. {$ENDIF}
  464. function RegSaveKeyA(hKey: HKEY; lpFile: LPCSTR;
  465.   lpSecurityAttributes: LPSECURITY_ATTRIBUTES): LONG; stdcall;
  466. {$EXTERNALSYM RegSaveKeyA}
  467. function RegSaveKeyW(hKey: HKEY; lpFile: LPCWSTR;
  468.   lpSecurityAttributes: LPSECURITY_ATTRIBUTES): LONG; stdcall;
  469. {$EXTERNALSYM RegSaveKeyW}
  470. {$IFDEF UNICODE}
  471. function RegSaveKey(hKey: HKEY; lpFile: LPCWSTR;
  472.   lpSecurityAttributes: LPSECURITY_ATTRIBUTES): LONG; stdcall;
  473. {$EXTERNALSYM RegSaveKey}
  474. {$ELSE}
  475. function RegSaveKey(hKey: HKEY; lpFile: LPCSTR;
  476.   lpSecurityAttributes: LPSECURITY_ATTRIBUTES): LONG; stdcall;
  477. {$EXTERNALSYM RegSaveKey}
  478. {$ENDIF}
  479. function RegSetKeySecurity(hKey: HKEY; SecurityInformation: SECURITY_INFORMATION;
  480.   pSecurityDescriptor: PSECURITY_DESCRIPTOR): LONG; stdcall;
  481. {$EXTERNALSYM RegSetKeySecurity}
  482. function RegSetValueA(hKey: HKEY; lpSubKey: LPCSTR; dwType: DWORD;
  483.   lpData: LPCSTR; cbData: DWORD): LONG; stdcall;
  484. {$EXTERNALSYM RegSetValueA}
  485. function RegSetValueW(hKey: HKEY; lpSubKey: LPCWSTR; dwType: DWORD;
  486.   lpData: LPCWSTR; cbData: DWORD): LONG; stdcall;
  487. {$EXTERNALSYM RegSetValueW}
  488. {$IFDEF UNICODE}
  489. function RegSetValue(hKey: HKEY; lpSubKey: LPCWSTR; dwType: DWORD;
  490.   lpData: LPCWSTR; cbData: DWORD): LONG; stdcall;
  491. {$EXTERNALSYM RegSetValue}
  492. {$ELSE}
  493. function RegSetValue(hKey: HKEY; lpSubKey: LPCSTR; dwType: DWORD;
  494.   lpData: LPCSTR; cbData: DWORD): LONG; stdcall;
  495. {$EXTERNALSYM RegSetValue}
  496. {$ENDIF}
  497. function RegSetValueExA(hKey: HKEY; lpValueName: LPCSTR; Reserved: DWORD;
  498.   dwType: DWORD; lpData: LPBYTE; cbData: DWORD): LONG; stdcall;
  499. {$EXTERNALSYM RegSetValueExA}
  500. function RegSetValueExW(hKey: HKEY; lpValueName: LPCWSTR; Reserved: DWORD;
  501.   dwType: DWORD; lpData: LPBYTE; cbData: DWORD): LONG; stdcall;
  502. {$EXTERNALSYM RegSetValueExW}
  503. {$IFDEF UNICODE}
  504. function RegSetValueEx(hKey: HKEY; lpValueName: LPCWSTR; Reserved: DWORD;
  505.   dwType: DWORD; lpData: LPBYTE; cbData: DWORD): LONG; stdcall;
  506. {$EXTERNALSYM RegSetValueEx}
  507. {$ELSE}
  508. function RegSetValueEx(hKey: HKEY; lpValueName: LPCSTR; Reserved: DWORD;
  509.   dwType: DWORD; lpData: LPBYTE; cbData: DWORD): LONG; stdcall;
  510. {$EXTERNALSYM RegSetValueEx}
  511. {$ENDIF}
  512. function RegUnLoadKeyA(hKey: HKEY; lpSubKey: LPCSTR): LONG; stdcall;
  513. {$EXTERNALSYM RegUnLoadKeyA}
  514. function RegUnLoadKeyW(hKey: HKEY; lpSubKey: LPCWSTR): LONG; stdcall;
  515. {$EXTERNALSYM RegUnLoadKeyW}
  516. {$IFDEF UNICODE}
  517. function RegUnLoadKey(hKey: HKEY; lpSubKey: LPCWSTR): LONG; stdcall;
  518. {$EXTERNALSYM RegUnLoadKey}
  519. {$ELSE}
  520. function RegUnLoadKey(hKey: HKEY; lpSubKey: LPCSTR): LONG; stdcall;
  521. {$EXTERNALSYM RegUnLoadKey}
  522. {$ENDIF}
  523. //
  524. // Remoteable System Shutdown APIs
  525. //
  526. function InitiateSystemShutdownA(lpMachineName: LPSTR; lpMessage: LPSTR;
  527.   dwTimeout: DWORD; bForceAppsClosed, bRebootAfterShutdown: BOOL): BOOL; stdcall;
  528. {$EXTERNALSYM InitiateSystemShutdownA}
  529. function InitiateSystemShutdownW(lpMachineName: LPWSTR; lpMessage: LPWSTR;
  530.   dwTimeout: DWORD; bForceAppsClosed, bRebootAfterShutdown: BOOL): BOOL; stdcall;
  531. {$EXTERNALSYM InitiateSystemShutdownW}
  532. {$IFDEF UNICODE}
  533. function InitiateSystemShutdown(lpMachineName: LPWSTR; lpMessage: LPWSTR;
  534.   dwTimeout: DWORD; bForceAppsClosed, bRebootAfterShutdown: BOOL): BOOL; stdcall;
  535. {$EXTERNALSYM InitiateSystemShutdown}
  536. {$ELSE}
  537. function InitiateSystemShutdown(lpMachineName: LPSTR; lpMessage: LPSTR;
  538.   dwTimeout: DWORD; bForceAppsClosed, bRebootAfterShutdown: BOOL): BOOL; stdcall;
  539. {$EXTERNALSYM InitiateSystemShutdown}
  540. {$ENDIF}
  541. function AbortSystemShutdownA(lpMachineName: LPSTR): BOOL; stdcall;
  542. {$EXTERNALSYM AbortSystemShutdownA}
  543. function AbortSystemShutdownW(lpMachineName: LPWSTR): BOOL; stdcall;
  544. {$EXTERNALSYM AbortSystemShutdownW}
  545. {$IFDEF UNICODE}
  546. function AbortSystemShutdown(lpMachineName: LPWSTR): BOOL; stdcall;
  547. {$EXTERNALSYM AbortSystemShutdown}
  548. {$ELSE}
  549. function AbortSystemShutdown(lpMachineName: LPSTR): BOOL; stdcall;
  550. {$EXTERNALSYM AbortSystemShutdown}
  551. {$ENDIF}
  552. //
  553. // defines for InitiateSystemShutdownEx reason codes
  554. //
  555. const
  556.   REASON_SWINSTALL    = SHTDN_REASON_MAJOR_SOFTWARE or SHTDN_REASON_MINOR_INSTALLATION;
  557.   {$EXTERNALSYM REASON_SWINSTALL}
  558.   REASON_HWINSTALL    = SHTDN_REASON_MAJOR_HARDWARE or SHTDN_REASON_MINOR_INSTALLATION;
  559.   {$EXTERNALSYM REASON_HWINSTALL}
  560.   REASON_SERVICEHANG  = SHTDN_REASON_MAJOR_SOFTWARE or SHTDN_REASON_MINOR_HUNG;
  561.   {$EXTERNALSYM REASON_SERVICEHANG}
  562.   REASON_UNSTABLE     = SHTDN_REASON_MAJOR_SYSTEM or SHTDN_REASON_MINOR_UNSTABLE;
  563.   {$EXTERNALSYM REASON_UNSTABLE}
  564.   REASON_SWHWRECONF   = SHTDN_REASON_MAJOR_SOFTWARE or SHTDN_REASON_MINOR_RECONFIG;
  565.   {$EXTERNALSYM REASON_SWHWRECONF}
  566.   REASON_OTHER        = SHTDN_REASON_MAJOR_OTHER or SHTDN_REASON_MINOR_OTHER;
  567.   {$EXTERNALSYM REASON_OTHER}
  568.   REASON_UNKNOWN      = SHTDN_REASON_UNKNOWN;
  569.   {$EXTERNALSYM REASON_UNKNOWN}
  570.   REASON_LEGACY_API   = SHTDN_REASON_LEGACY_API;
  571.   {$EXTERNALSYM REASON_LEGACY_API}
  572.   REASON_PLANNED_FLAG = SHTDN_REASON_FLAG_PLANNED;
  573.   {$EXTERNALSYM REASON_PLANNED_FLAG}
  574. //
  575. // MAX Shutdown TimeOut == 10 Years in seconds
  576. //
  577.   MAX_SHUTDOWN_TIMEOUT = (10*365*24*60*60);
  578.   {$EXTERNALSYM MAX_SHUTDOWN_TIMEOUT}
  579. function InitiateSystemShutdownExA(lpMachineName: LPSTR; lpMessage: LPSTR;
  580.   dwTimeout: DWORD; bForceAppsClosed, bRebootAfterShutdown: BOOL; dwReason: DWORD): BOOL; stdcall;
  581. {$EXTERNALSYM InitiateSystemShutdownExA}
  582. function InitiateSystemShutdownExW(lpMachineName: LPWSTR; lpMessage: LPWSTR;
  583.   dwTimeout: DWORD; bForceAppsClosed, bRebootAfterShutdown: BOOL; dwReason: DWORD): BOOL; stdcall;
  584. {$EXTERNALSYM InitiateSystemShutdownExW}
  585. {$IFDEF UNICODE}
  586. function InitiateSystemShutdownEx(lpMachineName: LPWSTR; lpMessage: LPWSTR;
  587.   dwTimeout: DWORD; bForceAppsClosed, bRebootAfterShutdown: BOOL; dwReason: DWORD): BOOL; stdcall;
  588. {$EXTERNALSYM InitiateSystemShutdownEx}
  589. {$ELSE}
  590. function InitiateSystemShutdownEx(lpMachineName: LPSTR; lpMessage: LPSTR;
  591.   dwTimeout: DWORD; bForceAppsClosed, bRebootAfterShutdown: BOOL; dwReason: DWORD): BOOL; stdcall;
  592. {$EXTERNALSYM InitiateSystemShutdownEx}
  593. {$ENDIF}
  594. function RegSaveKeyExA(hKey: HKEY; lpFile: LPCSTR;
  595.   lpSecurityAttributes: LPSECURITY_ATTRIBUTES; Flags: DWORD): LONG; stdcall;
  596. {$EXTERNALSYM RegSaveKeyExA}
  597. function RegSaveKeyExW(hKey: HKEY; lpFile: LPCWSTR;
  598.   lpSecurityAttributes: LPSECURITY_ATTRIBUTES; Flags: DWORD): LONG; stdcall;
  599. {$EXTERNALSYM RegSaveKeyExW}
  600. {$IFDEF UNICODE}
  601. function RegSaveKeyEx(hKey: HKEY; lpFile: LPCWSTR;
  602.   lpSecurityAttributes: LPSECURITY_ATTRIBUTES; Flags: DWORD): LONG; stdcall;
  603. {$EXTERNALSYM RegSaveKeyEx}
  604. {$ELSE}
  605. function RegSaveKeyEx(hKey: HKEY; lpFile: LPCSTR;
  606.   lpSecurityAttributes: LPSECURITY_ATTRIBUTES; Flags: DWORD): LONG; stdcall;
  607. {$EXTERNALSYM RegSaveKeyEx}
  608. {$ENDIF}
  609. function Wow64Win32ApiEntry(dwFuncNumber, dwFlag, dwRes: DWORD): LONG; stdcall;
  610. {$EXTERNALSYM Wow64Win32ApiEntry}
  611. implementation
  612. const
  613.   advapi32 = 'advapi32.dll';
  614. {$IFDEF DYNAMIC_LINK}
  615. var
  616.   _RegCloseKey: Pointer;
  617. function RegCloseKey;
  618. begin
  619.   GetProcedureAddress(_RegCloseKey, advapi32, 'RegCloseKey');
  620.   asm
  621.     mov esp, ebp
  622.     pop ebp
  623.     jmp [_RegCloseKey]
  624.   end;
  625. end;
  626. {$ELSE}
  627. function RegCloseKey; external advapi32 name 'RegCloseKey';
  628. {$ENDIF DYNAMIC_LINK}
  629. {$IFDEF DYNAMIC_LINK}
  630. var
  631.   _RegOverridePredefKey: Pointer;
  632. function RegOverridePredefKey;
  633. begin
  634.   GetProcedureAddress(_RegOverridePredefKey, advapi32, 'RegOverridePredefKey');
  635.   asm
  636.     mov esp, ebp
  637.     pop ebp
  638.     jmp [_RegOverridePredefKey]
  639.   end;
  640. end;
  641. {$ELSE}
  642. function RegOverridePredefKey; external advapi32 name 'RegOverridePredefKey';
  643. {$ENDIF DYNAMIC_LINK}
  644. {$IFDEF DYNAMIC_LINK}
  645. var
  646.   _RegOpenUserClassesRoot: Pointer;
  647. function RegOpenUserClassesRoot;
  648. begin
  649.   GetProcedureAddress(_RegOpenUserClassesRoot, advapi32, 'RegOpenUserClassesRoot');
  650.   asm
  651.     mov esp, ebp
  652.     pop ebp
  653.     jmp [_RegOpenUserClassesRoot]
  654.   end;
  655. end;
  656. {$ELSE}
  657. function RegOpenUserClassesRoot; external advapi32 name 'RegOpenUserClassesRoot';
  658. {$ENDIF DYNAMIC_LINK}
  659. {$IFDEF DYNAMIC_LINK}
  660. var
  661.   _RegOpenCurrentUser: Pointer;
  662. function RegOpenCurrentUser;
  663. begin
  664.   GetProcedureAddress(_RegOpenCurrentUser, advapi32, 'RegOpenCurrentUser');
  665.   asm
  666.     mov esp, ebp
  667.     pop ebp
  668.     jmp [_RegOpenCurrentUser]
  669.   end;
  670. end;
  671. {$ELSE}
  672. function RegOpenCurrentUser; external advapi32 name 'RegOpenCurrentUser';
  673. {$ENDIF DYNAMIC_LINK}
  674. {$IFDEF DYNAMIC_LINK}
  675. var
  676.   _RegDisablePredefinedCache: Pointer;
  677. function RegDisablePredefinedCache;
  678. begin
  679.   GetProcedureAddress(_RegDisablePredefinedCache, advapi32, 'RegDisablePredefinedCache');
  680.   asm
  681.     mov esp, ebp
  682.     pop ebp
  683.     jmp [_RegDisablePredefinedCache]
  684.   end;
  685. end;
  686. {$ELSE}
  687. function RegDisablePredefinedCache; external advapi32 name 'RegDisablePredefinedCache';
  688. {$ENDIF DYNAMIC_LINK}
  689. {$IFDEF DYNAMIC_LINK}
  690. var
  691.   _RegConnectRegistryA: Pointer;
  692. function RegConnectRegistryA;
  693. begin
  694.   GetProcedureAddress(_RegConnectRegistryA, advapi32, 'RegConnectRegistryA');
  695.   asm
  696.     mov esp, ebp
  697.     pop ebp
  698.     jmp [_RegConnectRegistryA]
  699.   end;
  700. end;
  701. {$ELSE}
  702. function RegConnectRegistryA; external advapi32 name 'RegConnectRegistryA';
  703. {$ENDIF DYNAMIC_LINK}
  704. {$IFDEF DYNAMIC_LINK}
  705. var
  706.   _RegConnectRegistryW: Pointer;
  707. function RegConnectRegistryW;
  708. begin
  709.   GetProcedureAddress(_RegConnectRegistryW, advapi32, 'RegConnectRegistryW');
  710.   asm
  711.     mov esp, ebp
  712.     pop ebp
  713.     jmp [_RegConnectRegistryW]
  714.   end;
  715. end;
  716. {$ELSE}
  717. function RegConnectRegistryW; external advapi32 name 'RegConnectRegistryW';
  718. {$ENDIF DYNAMIC_LINK}
  719. {$IFDEF UNICODE}
  720. {$IFDEF DYNAMIC_LINK}
  721. var
  722.   _RegConnectRegistry: Pointer;
  723. function RegConnectRegistry;
  724. begin
  725.   GetProcedureAddress(_RegConnectRegistry, advapi32, 'RegConnectRegistryW');
  726.   asm
  727.     mov esp, ebp
  728.     pop ebp
  729.     jmp [_RegConnectRegistry]
  730.   end;
  731. end;
  732. {$ELSE}
  733. function RegConnectRegistry; external advapi32 name 'RegConnectRegistryW';
  734. {$ENDIF DYNAMIC_LINK}
  735. {$ELSE}
  736. {$IFDEF DYNAMIC_LINK}
  737. var
  738.   _RegConnectRegistry: Pointer;
  739. function RegConnectRegistry;
  740. begin
  741.   GetProcedureAddress(_RegConnectRegistry, advapi32, 'RegConnectRegistryA');
  742.   asm
  743.     mov esp, ebp
  744.     pop ebp
  745.     jmp [_RegConnectRegistry]
  746.   end;
  747. end;
  748. {$ELSE}
  749. function RegConnectRegistry; external advapi32 name 'RegConnectRegistryA';
  750. {$ENDIF DYNAMIC_LINK}
  751. {$ENDIF}
  752. {$IFDEF DYNAMIC_LINK}
  753. var
  754.   _RegCreateKeyA: Pointer;
  755. function RegCreateKeyA;
  756. begin
  757.   GetProcedureAddress(_RegCreateKeyA, advapi32, 'RegCreateKeyA');
  758.   asm
  759.     mov esp, ebp
  760.     pop ebp
  761.     jmp [_RegCreateKeyA]
  762.   end;
  763. end;
  764. {$ELSE}
  765. function RegCreateKeyA; external advapi32 name 'RegCreateKeyA';
  766. {$ENDIF DYNAMIC_LINK}
  767. {$IFDEF DYNAMIC_LINK}
  768. var
  769.   _RegCreateKeyW: Pointer;
  770. function RegCreateKeyW;
  771. begin
  772.   GetProcedureAddress(_RegCreateKeyW, advapi32, 'RegCreateKeyW');
  773.   asm
  774.     mov esp, ebp
  775.     pop ebp
  776.     jmp [_RegCreateKeyW]
  777.   end;
  778. end;
  779. {$ELSE}
  780. function RegCreateKeyW; external advapi32 name 'RegCreateKeyW';
  781. {$ENDIF DYNAMIC_LINK}
  782. {$IFDEF UNICODE}
  783. {$IFDEF DYNAMIC_LINK}
  784. var
  785.   _RegCreateKey: Pointer;
  786. function RegCreateKey;
  787. begin
  788.   GetProcedureAddress(_RegCreateKey, advapi32, 'RegCreateKeyW');
  789.   asm
  790.     mov esp, ebp
  791.     pop ebp
  792.     jmp [_RegCreateKey]
  793.   end;
  794. end;
  795. {$ELSE}
  796. function RegCreateKey; external advapi32 name 'RegCreateKeyW';
  797. {$ENDIF DYNAMIC_LINK}
  798. {$ELSE}
  799. {$IFDEF DYNAMIC_LINK}
  800. var
  801.   _RegCreateKey: Pointer;
  802. function RegCreateKey;
  803. begin
  804.   GetProcedureAddress(_RegCreateKey, advapi32, 'RegCreateKeyA');
  805.   asm
  806.     mov esp, ebp
  807.     pop ebp
  808.     jmp [_RegCreateKey]
  809.   end;
  810. end;
  811. {$ELSE}
  812. function RegCreateKey; external advapi32 name 'RegCreateKeyA';
  813. {$ENDIF DYNAMIC_LINK}
  814. {$ENDIF}
  815. {$IFDEF DYNAMIC_LINK}
  816. var
  817.   _RegCreateKeyExA: Pointer;
  818. function RegCreateKeyExA;
  819. begin
  820.   GetProcedureAddress(_RegCreateKeyExA, advapi32, 'RegCreateKeyExA');
  821.   asm
  822.     mov esp, ebp
  823.     pop ebp
  824.     jmp [_RegCreateKeyExA]
  825.   end;
  826. end;
  827. {$ELSE}
  828. function RegCreateKeyExA; external advapi32 name 'RegCreateKeyExA';
  829. {$ENDIF DYNAMIC_LINK}
  830. {$IFDEF DYNAMIC_LINK}
  831. var
  832.   _RegCreateKeyExW: Pointer;
  833. function RegCreateKeyExW;
  834. begin
  835.   GetProcedureAddress(_RegCreateKeyExW, advapi32, 'RegCreateKeyExW');
  836.   asm
  837.     mov esp, ebp
  838.     pop ebp
  839.     jmp [_RegCreateKeyExW]
  840.   end;
  841. end;
  842. {$ELSE}
  843. function RegCreateKeyExW; external advapi32 name 'RegCreateKeyExW';
  844. {$ENDIF DYNAMIC_LINK}
  845. {$IFDEF UNICODE}
  846. {$IFDEF DYNAMIC_LINK}
  847. var
  848.   _RegCreateKeyEx: Pointer;
  849. function RegCreateKeyEx;
  850. begin
  851.   GetProcedureAddress(_RegCreateKeyEx, advapi32, 'RegCreateKeyExW');
  852.   asm
  853.     mov esp, ebp
  854.     pop ebp
  855.     jmp [_RegCreateKeyEx]
  856.   end;
  857. end;
  858. {$ELSE}
  859. function RegCreateKeyEx; external advapi32 name 'RegCreateKeyExW';
  860. {$ENDIF DYNAMIC_LINK}
  861. {$ELSE}
  862. {$IFDEF DYNAMIC_LINK}
  863. var
  864.   _RegCreateKeyEx: Pointer;
  865. function RegCreateKeyEx;
  866. begin
  867.   GetProcedureAddress(_RegCreateKeyEx, advapi32, 'RegCreateKeyExA');
  868.   asm
  869.     mov esp, ebp
  870.     pop ebp
  871.     jmp [_RegCreateKeyEx]
  872.   end;
  873. end;
  874. {$ELSE}
  875. function RegCreateKeyEx; external advapi32 name 'RegCreateKeyExA';
  876. {$ENDIF DYNAMIC_LINK}
  877. {$ENDIF}
  878. {$IFDEF DYNAMIC_LINK}
  879. var
  880.   _RegDeleteKeyA: Pointer;
  881. function RegDeleteKeyA;
  882. begin
  883.   GetProcedureAddress(_RegDeleteKeyA, advapi32, 'RegDeleteKeyA');
  884.   asm
  885.     mov esp, ebp
  886.     pop ebp
  887.     jmp [_RegDeleteKeyA]
  888.   end;
  889. end;
  890. {$ELSE}
  891. function RegDeleteKeyA; external advapi32 name 'RegDeleteKeyA';
  892. {$ENDIF DYNAMIC_LINK}
  893. {$IFDEF DYNAMIC_LINK}
  894. var
  895.   _RegDeleteKeyW: Pointer;
  896. function RegDeleteKeyW;
  897. begin
  898.   GetProcedureAddress(_RegDeleteKeyW, advapi32, 'RegDeleteKeyW');
  899.   asm
  900.     mov esp, ebp
  901.     pop ebp
  902.     jmp [_RegDeleteKeyW]
  903.   end;
  904. end;
  905. {$ELSE}
  906. function RegDeleteKeyW; external advapi32 name 'RegDeleteKeyW';
  907. {$ENDIF DYNAMIC_LINK}
  908. {$IFDEF UNICODE}
  909. {$IFDEF DYNAMIC_LINK}
  910. var
  911.   _RegDeleteKey: Pointer;
  912. function RegDeleteKey;
  913. begin
  914.   GetProcedureAddress(_RegDeleteKey, advapi32, 'RegDeleteKeyW');
  915.   asm
  916.     mov esp, ebp
  917.     pop ebp
  918.     jmp [_RegDeleteKey]
  919.   end;
  920. end;
  921. {$ELSE}
  922. function RegDeleteKey; external advapi32 name 'RegDeleteKeyW';
  923. {$ENDIF DYNAMIC_LINK}
  924. {$ELSE}
  925. {$IFDEF DYNAMIC_LINK}
  926. var
  927.   _RegDeleteKey: Pointer;
  928. function RegDeleteKey;
  929. begin
  930.   GetProcedureAddress(_RegDeleteKey, advapi32, 'RegDeleteKeyA');
  931.   asm
  932.     mov esp, ebp
  933.     pop ebp
  934.     jmp [_RegDeleteKey]
  935.   end;
  936. end;
  937. {$ELSE}
  938. function RegDeleteKey; external advapi32 name 'RegDeleteKeyA';
  939. {$ENDIF DYNAMIC_LINK}
  940. {$ENDIF}
  941. {$IFDEF DYNAMIC_LINK}
  942. var
  943.   _RegDeleteValueA: Pointer;
  944. function RegDeleteValueA;
  945. begin
  946.   GetProcedureAddress(_RegDeleteValueA, advapi32, 'RegDeleteValueA');
  947.   asm
  948.     mov esp, ebp
  949.     pop ebp
  950.     jmp [_RegDeleteValueA]
  951.   end;
  952. end;
  953. {$ELSE}
  954. function RegDeleteValueA; external advapi32 name 'RegDeleteValueA';
  955. {$ENDIF DYNAMIC_LINK}
  956. {$IFDEF DYNAMIC_LINK}
  957. var
  958.   _RegDeleteValueW: Pointer;
  959. function RegDeleteValueW;
  960. begin
  961.   GetProcedureAddress(_RegDeleteValueW, advapi32, 'RegDeleteValueW');
  962.   asm
  963.     mov esp, ebp
  964.     pop ebp
  965.     jmp [_RegDeleteValueW]
  966.   end;
  967. end;
  968. {$ELSE}
  969. function RegDeleteValueW; external advapi32 name 'RegDeleteValueW';
  970. {$ENDIF DYNAMIC_LINK}
  971. {$IFDEF UNICODE}
  972. {$IFDEF DYNAMIC_LINK}
  973. var
  974.   _RegDeleteValue: Pointer;
  975. function RegDeleteValue;
  976. begin
  977.   GetProcedureAddress(_RegDeleteValue, advapi32, 'RegDeleteValueW');
  978.   asm
  979.     mov esp, ebp
  980.     pop ebp
  981.     jmp [_RegDeleteValue]
  982.   end;
  983. end;
  984. {$ELSE}
  985. function RegDeleteValue; external advapi32 name 'RegDeleteValueW';
  986. {$ENDIF DYNAMIC_LINK}
  987. {$ELSE}
  988. {$IFDEF DYNAMIC_LINK}
  989. var
  990.   _RegDeleteValue: Pointer;
  991. function RegDeleteValue;
  992. begin
  993.   GetProcedureAddress(_RegDeleteValue, advapi32, 'RegDeleteValueA');
  994.   asm
  995.     mov esp, ebp
  996.     pop ebp
  997.     jmp [_RegDeleteValue]
  998.   end;
  999. end;
  1000. {$ELSE}
  1001. function RegDeleteValue; external advapi32 name 'RegDeleteValueA';
  1002. {$ENDIF DYNAMIC_LINK}
  1003. {$ENDIF}
  1004. {$IFDEF DYNAMIC_LINK}
  1005. var
  1006.   _RegEnumKeyA: Pointer;
  1007. function RegEnumKeyA;
  1008. begin
  1009.   GetProcedureAddress(_RegEnumKeyA, advapi32, 'RegEnumKeyA');
  1010.   asm
  1011.     mov esp, ebp
  1012.     pop ebp
  1013.     jmp [_RegEnumKeyA]
  1014.   end;
  1015. end;
  1016. {$ELSE}
  1017. function RegEnumKeyA; external advapi32 name 'RegEnumKeyA';
  1018. {$ENDIF DYNAMIC_LINK}
  1019. {$IFDEF DYNAMIC_LINK}
  1020. var
  1021.   _RegEnumKeyW: Pointer;
  1022. function RegEnumKeyW;
  1023. begin
  1024.   GetProcedureAddress(_RegEnumKeyW, advapi32, 'RegEnumKeyW');
  1025.   asm
  1026.     mov esp, ebp
  1027.     pop ebp
  1028.     jmp [_RegEnumKeyW]
  1029.   end;
  1030. end;
  1031. {$ELSE}
  1032. function RegEnumKeyW; external advapi32 name 'RegEnumKeyW';
  1033. {$ENDIF DYNAMIC_LINK}
  1034. {$IFDEF UNICODE}
  1035. {$IFDEF DYNAMIC_LINK}
  1036. var
  1037.   _RegEnumKey: Pointer;
  1038. function RegEnumKey;
  1039. begin
  1040.   GetProcedureAddress(_RegEnumKey, advapi32, 'RegEnumKeyW');
  1041.   asm
  1042.     mov esp, ebp
  1043.     pop ebp
  1044.     jmp [_RegEnumKey]
  1045.   end;
  1046. end;
  1047. {$ELSE}
  1048. function RegEnumKey; external advapi32 name 'RegEnumKeyW';
  1049. {$ENDIF DYNAMIC_LINK}
  1050. {$ELSE}
  1051. {$IFDEF DYNAMIC_LINK}
  1052. var
  1053.   _RegEnumKey: Pointer;
  1054. function RegEnumKey;
  1055. begin
  1056.   GetProcedureAddress(_RegEnumKey, advapi32, 'RegEnumKeyA');
  1057.   asm
  1058.     mov esp, ebp
  1059.     pop ebp
  1060.     jmp [_RegEnumKey]
  1061.   end;
  1062. end;
  1063. {$ELSE}
  1064. function RegEnumKey; external advapi32 name 'RegEnumKeyA';
  1065. {$ENDIF DYNAMIC_LINK}
  1066. {$ENDIF}
  1067. {$IFDEF DYNAMIC_LINK}
  1068. var
  1069.   _RegEnumKeyExA: Pointer;
  1070. function RegEnumKeyExA;
  1071. begin
  1072.   GetProcedureAddress(_RegEnumKeyExA, advapi32, 'RegEnumKeyExA');
  1073.   asm
  1074.     mov esp, ebp
  1075.     pop ebp
  1076.     jmp [_RegEnumKeyExA]
  1077.   end;
  1078. end;
  1079. {$ELSE}
  1080. function RegEnumKeyExA; external advapi32 name 'RegEnumKeyExA';
  1081. {$ENDIF DYNAMIC_LINK}
  1082. {$IFDEF DYNAMIC_LINK}
  1083. var
  1084.   _RegEnumKeyExW: Pointer;
  1085. function RegEnumKeyExW;
  1086. begin
  1087.   GetProcedureAddress(_RegEnumKeyExW, advapi32, 'RegEnumKeyExW');
  1088.   asm
  1089.     mov esp, ebp
  1090.     pop ebp
  1091.     jmp [_RegEnumKeyExW]
  1092.   end;
  1093. end;
  1094. {$ELSE}
  1095. function RegEnumKeyExW; external advapi32 name 'RegEnumKeyExW';
  1096. {$ENDIF DYNAMIC_LINK}
  1097. {$IFDEF UNICODE}
  1098. {$IFDEF DYNAMIC_LINK}
  1099. var
  1100.   _RegEnumKeyEx: Pointer;
  1101. function RegEnumKeyEx;
  1102. begin
  1103.   GetProcedureAddress(_RegEnumKeyEx, advapi32, 'RegEnumKeyExW');
  1104.   asm
  1105.     mov esp, ebp
  1106.     pop ebp
  1107.     jmp [_RegEnumKeyEx]
  1108.   end;
  1109. end;
  1110. {$ELSE}
  1111. function RegEnumKeyEx; external advapi32 name 'RegEnumKeyExW';
  1112. {$ENDIF DYNAMIC_LINK}
  1113. {$ELSE}
  1114. {$IFDEF DYNAMIC_LINK}
  1115. var
  1116.   _RegEnumKeyEx: Pointer;
  1117. function RegEnumKeyEx;
  1118. begin
  1119.   GetProcedureAddress(_RegEnumKeyEx, advapi32, 'RegEnumKeyExA');
  1120.   asm
  1121.     mov esp, ebp
  1122.     pop ebp
  1123.     jmp [_RegEnumKeyEx]
  1124.   end;
  1125. end;
  1126. {$ELSE}
  1127. function RegEnumKeyEx; external advapi32 name 'RegEnumKeyExA';
  1128. {$ENDIF DYNAMIC_LINK}
  1129. {$ENDIF}
  1130. {$IFDEF DYNAMIC_LINK}
  1131. var
  1132.   _RegEnumValueA: Pointer;
  1133. function RegEnumValueA;
  1134. begin
  1135.   GetProcedureAddress(_RegEnumValueA, advapi32, 'RegEnumValueA');
  1136.   asm
  1137.     mov esp, ebp
  1138.     pop ebp
  1139.     jmp [_RegEnumValueA]
  1140.   end;
  1141. end;
  1142. {$ELSE}
  1143. function RegEnumValueA; external advapi32 name 'RegEnumValueA';
  1144. {$ENDIF DYNAMIC_LINK}
  1145. {$IFDEF DYNAMIC_LINK}
  1146. var
  1147.   _RegEnumValueW: Pointer;
  1148. function RegEnumValueW;
  1149. begin
  1150.   GetProcedureAddress(_RegEnumValueW, advapi32, 'RegEnumValueW');
  1151.   asm
  1152.     mov esp, ebp
  1153.     pop ebp
  1154.     jmp [_RegEnumValueW]
  1155.   end;
  1156. end;
  1157. {$ELSE}
  1158. function RegEnumValueW; external advapi32 name 'RegEnumValueW';
  1159. {$ENDIF DYNAMIC_LINK}
  1160. {$IFDEF UNICODE}
  1161. {$IFDEF DYNAMIC_LINK}
  1162. var
  1163.   _RegEnumValue: Pointer;
  1164. function RegEnumValue;
  1165. begin
  1166.   GetProcedureAddress(_RegEnumValue, advapi32, 'RegEnumValueW');
  1167.   asm
  1168.     mov esp, ebp
  1169.     pop ebp
  1170.     jmp [_RegEnumValue]
  1171.   end;
  1172. end;
  1173. {$ELSE}
  1174. function RegEnumValue; external advapi32 name 'RegEnumValueW';
  1175. {$ENDIF DYNAMIC_LINK}
  1176. {$ELSE}
  1177. {$IFDEF DYNAMIC_LINK}
  1178. var
  1179.   _RegEnumValue: Pointer;
  1180. function RegEnumValue;
  1181. begin
  1182.   GetProcedureAddress(_RegEnumValue, advapi32, 'RegEnumValueA');
  1183.   asm
  1184.     mov esp, ebp
  1185.     pop ebp
  1186.     jmp [_RegEnumValue]
  1187.   end;
  1188. end;
  1189. {$ELSE}
  1190. function RegEnumValue; external advapi32 name 'RegEnumValueA';
  1191. {$ENDIF DYNAMIC_LINK}
  1192. {$ENDIF}
  1193. {$IFDEF DYNAMIC_LINK}
  1194. var
  1195.   _RegFlushKey: Pointer;
  1196. function RegFlushKey;
  1197. begin
  1198.   GetProcedureAddress(_RegFlushKey, advapi32, 'RegFlushKey');
  1199.   asm
  1200.     mov esp, ebp
  1201.     pop ebp
  1202.     jmp [_RegFlushKey]
  1203.   end;
  1204. end;
  1205. {$ELSE}
  1206. function RegFlushKey; external advapi32 name 'RegFlushKey';
  1207. {$ENDIF DYNAMIC_LINK}
  1208. {$IFDEF DYNAMIC_LINK}
  1209. var
  1210.   _RegGetKeySecurity: Pointer;
  1211. function RegGetKeySecurity;
  1212. begin
  1213.   GetProcedureAddress(_RegGetKeySecurity, advapi32, 'RegGetKeySecurity');
  1214.   asm
  1215.     mov esp, ebp
  1216.     pop ebp
  1217.     jmp [_RegGetKeySecurity]
  1218.   end;
  1219. end;
  1220. {$ELSE}
  1221. function RegGetKeySecurity; external advapi32 name 'RegGetKeySecurity';
  1222. {$ENDIF DYNAMIC_LINK}
  1223. {$IFDEF DYNAMIC_LINK}
  1224. var
  1225.   _RegLoadKeyA: Pointer;
  1226. function RegLoadKeyA;
  1227. begin
  1228.   GetProcedureAddress(_RegLoadKeyA, advapi32, 'RegLoadKeyA');
  1229.   asm
  1230.     mov esp, ebp
  1231.     pop ebp
  1232.     jmp [_RegLoadKeyA]
  1233.   end;
  1234. end;
  1235. {$ELSE}
  1236. function RegLoadKeyA; external advapi32 name 'RegLoadKeyA';
  1237. {$ENDIF DYNAMIC_LINK}
  1238. {$IFDEF DYNAMIC_LINK}
  1239. var
  1240.   _RegLoadKeyW: Pointer;
  1241. function RegLoadKeyW;
  1242. begin
  1243.   GetProcedureAddress(_RegLoadKeyW, advapi32, 'RegLoadKeyW');
  1244.   asm
  1245.     mov esp, ebp
  1246.     pop ebp
  1247.     jmp [_RegLoadKeyW]
  1248.   end;
  1249. end;
  1250. {$ELSE}
  1251. function RegLoadKeyW; external advapi32 name 'RegLoadKeyW';
  1252. {$ENDIF DYNAMIC_LINK}
  1253. {$IFDEF UNICODE}
  1254. {$IFDEF DYNAMIC_LINK}
  1255. var
  1256.   _RegLoadKey: Pointer;
  1257. function RegLoadKey;
  1258. begin
  1259.   GetProcedureAddress(_RegLoadKey, advapi32, 'RegLoadKeyW');
  1260.   asm
  1261.     mov esp, ebp
  1262.     pop ebp
  1263.     jmp [_RegLoadKey]
  1264.   end;
  1265. end;
  1266. {$ELSE}
  1267. function RegLoadKey; external advapi32 name 'RegLoadKeyW';
  1268. {$ENDIF DYNAMIC_LINK}
  1269. {$ELSE}
  1270. {$IFDEF DYNAMIC_LINK}
  1271. var
  1272.   _RegLoadKey: Pointer;
  1273. function RegLoadKey;
  1274. begin
  1275.   GetProcedureAddress(_RegLoadKey, advapi32, 'RegLoadKeyA');
  1276.   asm
  1277.     mov esp, ebp
  1278.     pop ebp
  1279.     jmp [_RegLoadKey]
  1280.   end;
  1281. end;
  1282. {$ELSE}
  1283. function RegLoadKey; external advapi32 name 'RegLoadKeyA';
  1284. {$ENDIF DYNAMIC_LINK}
  1285. {$ENDIF}
  1286. type
  1287.   TRegNotifyChangeKeyValue = function (hKey: HKEY; bWatchSubtree: LongBool; dwNotifyFilter: DWORD; hEvent: HANDLE; fAsynchronus: LongBool): LONG; stdcall;
  1288. var
  1289.   _RegNotifyChangeKeyValue: Pointer;
  1290. function RegNotifyChangeKeyValue(hKey: HKEY; bWatchSubtree: LongBool; dwNotifyFilter: DWORD; hEvent: HANDLE; fAsynchronus: LongBool): LONG;
  1291. begin
  1292.   GetProcedureAddress(_RegNotifyChangeKeyValue, advapi32, 'RegNotifyChangeKeyValue');
  1293.   if bWatchSubTree then
  1294.     Result := TRegNotifyChangeKeyValue(_RegNotifyChangeKeyValue)(hKey, LongBool(1), dwNotifyFilter, hEvent, fAsynchronus)
  1295.   else
  1296.     Result := TRegNotifyChangeKeyValue(_RegNotifyChangeKeyValue)(hKey, LongBool(0), dwNotifyFilter, hEvent, fAsynchronus);
  1297. end;
  1298. {$IFDEF DYNAMIC_LINK}
  1299. var
  1300.   _RegOpenKeyA: Pointer;
  1301. function RegOpenKeyA;
  1302. begin
  1303.   GetProcedureAddress(_RegOpenKeyA, advapi32, 'RegOpenKeyA');
  1304.   asm
  1305.     mov esp, ebp
  1306.     pop ebp
  1307.     jmp [_RegOpenKeyA]
  1308.   end;
  1309. end;
  1310. {$ELSE}
  1311. function RegOpenKeyA; external advapi32 name 'RegOpenKeyA';
  1312. {$ENDIF DYNAMIC_LINK}
  1313. {$IFDEF DYNAMIC_LINK}
  1314. var
  1315.   _RegOpenKeyW: Pointer;
  1316. function RegOpenKeyW;
  1317. begin
  1318.   GetProcedureAddress(_RegOpenKeyW, advapi32, 'RegOpenKeyW');
  1319.   asm
  1320.     mov esp, ebp
  1321.     pop ebp
  1322.     jmp [_RegOpenKeyW]
  1323.   end;
  1324. end;
  1325. {$ELSE}
  1326. function RegOpenKeyW; external advapi32 name 'RegOpenKeyW';
  1327. {$ENDIF DYNAMIC_LINK}
  1328. {$IFDEF UNICODE}
  1329. {$IFDEF DYNAMIC_LINK}
  1330. var
  1331.   _RegOpenKey: Pointer;
  1332. function RegOpenKey;
  1333. begin
  1334.   GetProcedureAddress(_RegOpenKey, advapi32, 'RegOpenKeyW');
  1335.   asm
  1336.     mov esp, ebp
  1337.     pop ebp
  1338.     jmp [_RegOpenKey]
  1339.   end;
  1340. end;
  1341. {$ELSE}
  1342. function RegOpenKey; external advapi32 name 'RegOpenKeyW';
  1343. {$ENDIF DYNAMIC_LINK}
  1344. {$ELSE}
  1345. {$IFDEF DYNAMIC_LINK}
  1346. var
  1347.   _RegOpenKey: Pointer;
  1348. function RegOpenKey;
  1349. begin
  1350.   GetProcedureAddress(_RegOpenKey, advapi32, 'RegOpenKeyA');
  1351.   asm
  1352.     mov esp, ebp
  1353.     pop ebp
  1354.     jmp [_RegOpenKey]
  1355.   end;
  1356. end;
  1357. {$ELSE}
  1358. function RegOpenKey; external advapi32 name 'RegOpenKeyA';
  1359. {$ENDIF DYNAMIC_LINK}
  1360. {$ENDIF}
  1361. {$IFDEF DYNAMIC_LINK}
  1362. var
  1363.   _RegOpenKeyExA: Pointer;
  1364. function RegOpenKeyExA;
  1365. begin
  1366.   GetProcedureAddress(_RegOpenKeyExA, advapi32, 'RegOpenKeyExA');
  1367.   asm
  1368.     mov esp, ebp
  1369.     pop ebp
  1370.     jmp [_RegOpenKeyExA]
  1371.   end;
  1372. end;
  1373. {$ELSE}
  1374. function RegOpenKeyExA; external advapi32 name 'RegOpenKeyExA';
  1375. {$ENDIF DYNAMIC_LINK}
  1376. {$IFDEF DYNAMIC_LINK}
  1377. var
  1378.   _RegOpenKeyExW: Pointer;
  1379. function RegOpenKeyExW;
  1380. begin
  1381.   GetProcedureAddress(_RegOpenKeyExW, advapi32, 'RegOpenKeyExW');
  1382.   asm
  1383.     mov esp, ebp
  1384.     pop ebp
  1385.     jmp [_RegOpenKeyExW]
  1386.   end;
  1387. end;
  1388. {$ELSE}
  1389. function RegOpenKeyExW; external advapi32 name 'RegOpenKeyExW';
  1390. {$ENDIF DYNAMIC_LINK}
  1391. {$IFDEF UNICODE}
  1392. {$IFDEF DYNAMIC_LINK}
  1393. var
  1394.   _RegOpenKeyEx: Pointer;
  1395. function RegOpenKeyEx;
  1396. begin
  1397.   GetProcedureAddress(_RegOpenKeyEx, advapi32, 'RegOpenKeyExW');
  1398.   asm
  1399.     mov esp, ebp
  1400.     pop ebp
  1401.     jmp [_RegOpenKeyEx]
  1402.   end;
  1403. end;
  1404. {$ELSE}
  1405. function RegOpenKeyEx; external advapi32 name 'RegOpenKeyExW';
  1406. {$ENDIF DYNAMIC_LINK}
  1407. {$ELSE}
  1408. {$IFDEF DYNAMIC_LINK}
  1409. var
  1410.   _RegOpenKeyEx: Pointer;
  1411. function RegOpenKeyEx;
  1412. begin
  1413.   GetProcedureAddress(_RegOpenKeyEx, advapi32, 'RegOpenKeyExA');
  1414.   asm
  1415.     mov esp, ebp
  1416.     pop ebp
  1417.     jmp [_RegOpenKeyEx]
  1418.   end;
  1419. end;
  1420. {$ELSE}
  1421. function RegOpenKeyEx; external advapi32 name 'RegOpenKeyExA';
  1422. {$ENDIF DYNAMIC_LINK}
  1423. {$ENDIF}
  1424. {$IFDEF DYNAMIC_LINK}
  1425. var
  1426.   _RegQueryInfoKeyA: Pointer;
  1427. function RegQueryInfoKeyA;
  1428. begin
  1429.   GetProcedureAddress(_RegQueryInfoKeyA, advapi32, 'RegQueryInfoKeyA');
  1430.   asm
  1431.     mov esp, ebp
  1432.     pop ebp
  1433.     jmp [_RegQueryInfoKeyA]
  1434.   end;
  1435. end;
  1436. {$ELSE}
  1437. function RegQueryInfoKeyA; external advapi32 name 'RegQueryInfoKeyA';
  1438. {$ENDIF DYNAMIC_LINK}
  1439. {$IFDEF DYNAMIC_LINK}
  1440. var
  1441.   _RegQueryInfoKeyW: Pointer;
  1442. function RegQueryInfoKeyW;
  1443. begin
  1444.   GetProcedureAddress(_RegQueryInfoKeyW, advapi32, 'RegQueryInfoKeyW');
  1445.   asm
  1446.     mov esp, ebp
  1447.     pop ebp
  1448.     jmp [_RegQueryInfoKeyW]
  1449.   end;
  1450. end;
  1451. {$ELSE}
  1452. function RegQueryInfoKeyW; external advapi32 name 'RegQueryInfoKeyW';
  1453. {$ENDIF DYNAMIC_LINK}
  1454. {$IFDEF UNICODE}
  1455. {$IFDEF DYNAMIC_LINK}
  1456. var
  1457.   _RegQueryInfoKey: Pointer;
  1458. function RegQueryInfoKey;
  1459. begin
  1460.   GetProcedureAddress(_RegQueryInfoKey, advapi32, 'RegQueryInfoKeyW');
  1461.   asm
  1462.     mov esp, ebp
  1463.     pop ebp
  1464.     jmp [_RegQueryInfoKey]
  1465.   end;
  1466. end;
  1467. {$ELSE}
  1468. function RegQueryInfoKey; external advapi32 name 'RegQueryInfoKeyW';
  1469. {$ENDIF DYNAMIC_LINK}
  1470. {$ELSE}
  1471. {$IFDEF DYNAMIC_LINK}
  1472. var
  1473.   _RegQueryInfoKey: Pointer;
  1474. function RegQueryInfoKey;
  1475. begin
  1476.   GetProcedureAddress(_RegQueryInfoKey, advapi32, 'RegQueryInfoKeyA');
  1477.   asm
  1478.     mov esp, ebp
  1479.     pop ebp
  1480.     jmp [_RegQueryInfoKey]
  1481.   end;
  1482. end;
  1483. {$ELSE}
  1484. function RegQueryInfoKey; external advapi32 name 'RegQueryInfoKeyA';
  1485. {$ENDIF DYNAMIC_LINK}
  1486. {$ENDIF}
  1487. {$IFDEF DYNAMIC_LINK}
  1488. var
  1489.   _RegQueryValueA: Pointer;
  1490. function RegQueryValueA;
  1491. begin
  1492.   GetProcedureAddress(_RegQueryValueA, advapi32, 'RegQueryValueA');
  1493.   asm
  1494.     mov esp, ebp
  1495.     pop ebp
  1496.     jmp [_RegQueryValueA]
  1497.   end;
  1498. end;
  1499. {$ELSE}
  1500. function RegQueryValueA; external advapi32 name 'RegQueryValueA';
  1501. {$ENDIF DYNAMIC_LINK}
  1502. {$IFDEF DYNAMIC_LINK}
  1503. var
  1504.   _RegQueryValueW: Pointer;
  1505. function RegQueryValueW;
  1506. begin
  1507.   GetProcedureAddress(_RegQueryValueW, advapi32, 'RegQueryValueW');
  1508.   asm
  1509.     mov esp, ebp
  1510.     pop ebp
  1511.     jmp [_RegQueryValueW]
  1512.   end;
  1513. end;
  1514. {$ELSE}
  1515. function RegQueryValueW; external advapi32 name 'RegQueryValueW';
  1516. {$ENDIF DYNAMIC_LINK}
  1517. {$IFDEF UNICODE}
  1518. {$IFDEF DYNAMIC_LINK}
  1519. var
  1520.   _RegQueryValue: Pointer;
  1521. function RegQueryValue;
  1522. begin
  1523.   GetProcedureAddress(_RegQueryValue, advapi32, 'RegQueryValueW');
  1524.   asm
  1525.     mov esp, ebp
  1526.     pop ebp
  1527.     jmp [_RegQueryValue]
  1528.   end;
  1529. end;
  1530. {$ELSE}
  1531. function RegQueryValue; external advapi32 name 'RegQueryValueW';
  1532. {$ENDIF DYNAMIC_LINK}
  1533. {$ELSE}
  1534. {$IFDEF DYNAMIC_LINK}
  1535. var
  1536.   _RegQueryValue: Pointer;
  1537. function RegQueryValue;
  1538. begin
  1539.   GetProcedureAddress(_RegQueryValue, advapi32, 'RegQueryValueA');
  1540.   asm
  1541.     mov esp, ebp
  1542.     pop ebp
  1543.     jmp [_RegQueryValue]
  1544.   end;
  1545. end;
  1546. {$ELSE}
  1547. function RegQueryValue; external advapi32 name 'RegQueryValueA';
  1548. {$ENDIF DYNAMIC_LINK}
  1549. {$ENDIF}
  1550. {$IFDEF DYNAMIC_LINK}
  1551. var
  1552.   _RegQueryMultipleValuesA: Pointer;
  1553. function RegQueryMultipleValuesA;
  1554. begin
  1555.   GetProcedureAddress(_RegQueryMultipleValuesA, advapi32, 'RegQueryMultipleValuesA');
  1556.   asm
  1557.     mov esp, ebp
  1558.     pop ebp
  1559.     jmp [_RegQueryMultipleValuesA]
  1560.   end;
  1561. end;
  1562. {$ELSE}
  1563. function RegQueryMultipleValuesA; external advapi32 name 'RegQueryMultipleValuesA';
  1564. {$ENDIF DYNAMIC_LINK}
  1565. {$IFDEF DYNAMIC_LINK}
  1566. var
  1567.   _RegQueryMultipleValuesW: Pointer;
  1568. function RegQueryMultipleValuesW;
  1569. begin
  1570.   GetProcedureAddress(_RegQueryMultipleValuesW, advapi32, 'RegQueryMultipleValuesW');
  1571.   asm
  1572.     mov esp, ebp
  1573.     pop ebp
  1574.     jmp [_RegQueryMultipleValuesW]
  1575.   end;
  1576. end;
  1577. {$ELSE}
  1578. function RegQueryMultipleValuesW; external advapi32 name 'RegQueryMultipleValuesW';
  1579. {$ENDIF DYNAMIC_LINK}
  1580. {$IFDEF UNICODE}
  1581. {$IFDEF DYNAMIC_LINK}
  1582. var
  1583.   _RegQueryMultipleValues: Pointer;
  1584. function RegQueryMultipleValues;
  1585. begin
  1586.   GetProcedureAddress(_RegQueryMultipleValues, advapi32, 'RegQueryMultipleValuesW');
  1587.   asm
  1588.     mov esp, ebp
  1589.     pop ebp
  1590.     jmp [_RegQueryMultipleValues]
  1591.   end;
  1592. end;
  1593. {$ELSE}
  1594. function RegQueryMultipleValues; external advapi32 name 'RegQueryMultipleValuesW';
  1595. {$ENDIF DYNAMIC_LINK}
  1596. {$ELSE}
  1597. {$IFDEF DYNAMIC_LINK}
  1598. var
  1599.   _RegQueryMultipleValues: Pointer;
  1600. function RegQueryMultipleValues;
  1601. begin
  1602.   GetProcedureAddress(_RegQueryMultipleValues, advapi32, 'RegQueryMultipleValuesA');
  1603.   asm
  1604.     mov esp, ebp
  1605.     pop ebp
  1606.     jmp [_RegQueryMultipleValues]
  1607.   end;
  1608. end;
  1609. {$ELSE}
  1610. function RegQueryMultipleValues; external advapi32 name 'RegQueryMultipleValuesA';
  1611. {$ENDIF DYNAMIC_LINK}
  1612. {$ENDIF}
  1613. {$IFDEF DYNAMIC_LINK}
  1614. var
  1615.   _RegQueryValueExA: Pointer;
  1616. function RegQueryValueExA;
  1617. begin
  1618.   GetProcedureAddress(_RegQueryValueExA, advapi32, 'RegQueryValueExA');
  1619.   asm
  1620.     mov esp, ebp
  1621.     pop ebp
  1622.     jmp [_RegQueryValueExA]
  1623.   end;
  1624. end;
  1625. {$ELSE}
  1626. function RegQueryValueExA; external advapi32 name 'RegQueryValueExA';
  1627. {$ENDIF DYNAMIC_LINK}
  1628. {$IFDEF DYNAMIC_LINK}
  1629. var
  1630.   _RegQueryValueExW: Pointer;
  1631. function RegQueryValueExW;
  1632. begin
  1633.   GetProcedureAddress(_RegQueryValueExW, advapi32, 'RegQueryValueExW');
  1634.   asm
  1635.     mov esp, ebp
  1636.     pop ebp
  1637.     jmp [_RegQueryValueExW]
  1638.   end;
  1639. end;
  1640. {$ELSE}
  1641. function RegQueryValueExW; external advapi32 name 'RegQueryValueExW';
  1642. {$ENDIF DYNAMIC_LINK}
  1643. {$IFDEF UNICODE}
  1644. {$IFDEF DYNAMIC_LINK}
  1645. var
  1646.   _RegQueryValueEx: Pointer;
  1647. function RegQueryValueEx;
  1648. begin
  1649.   GetProcedureAddress(_RegQueryValueEx, advapi32, 'RegQueryValueExW');
  1650.   asm
  1651.     mov esp, ebp
  1652.     pop ebp
  1653.     jmp [_RegQueryValueEx]
  1654.   end;
  1655. end;
  1656. {$ELSE}
  1657. function RegQueryValueEx; external advapi32 name 'RegQueryValueExW';
  1658. {$ENDIF DYNAMIC_LINK}
  1659. {$ELSE}
  1660. {$IFDEF DYNAMIC_LINK}
  1661. var
  1662.   _RegQueryValueEx: Pointer;
  1663. function RegQueryValueEx;
  1664. begin
  1665.   GetProcedureAddress(_RegQueryValueEx, advapi32, 'RegQueryValueExA');
  1666.   asm
  1667.     mov esp, ebp
  1668.     pop ebp
  1669.     jmp [_RegQueryValueEx]
  1670.   end;
  1671. end;
  1672. {$ELSE}
  1673. function RegQueryValueEx; external advapi32 name 'RegQueryValueExA';
  1674. {$ENDIF DYNAMIC_LINK}
  1675. {$ENDIF}
  1676. {$IFDEF DYNAMIC_LINK}
  1677. var
  1678.   _RegReplaceKeyA: Pointer;
  1679. function RegReplaceKeyA;
  1680. begin
  1681.   GetProcedureAddress(_RegReplaceKeyA, advapi32, 'RegReplaceKeyA');
  1682.   asm
  1683.     mov esp, ebp
  1684.     pop ebp
  1685.     jmp [_RegReplaceKeyA]
  1686.   end;
  1687. end;
  1688. {$ELSE}
  1689. function RegReplaceKeyA; external advapi32 name 'RegReplaceKeyA';
  1690. {$ENDIF DYNAMIC_LINK}
  1691. {$IFDEF DYNAMIC_LINK}
  1692. var
  1693.   _RegReplaceKeyW: Pointer;
  1694. function RegReplaceKeyW;
  1695. begin
  1696.   GetProcedureAddress(_RegReplaceKeyW, advapi32, 'RegReplaceKeyW');
  1697.   asm
  1698.     mov esp, ebp
  1699.     pop ebp
  1700.     jmp [_RegReplaceKeyW]
  1701.   end;
  1702. end;
  1703. {$ELSE}
  1704. function RegReplaceKeyW; external advapi32 name 'RegReplaceKeyW';
  1705. {$ENDIF DYNAMIC_LINK}
  1706. {$IFDEF UNICODE}
  1707. {$IFDEF DYNAMIC_LINK}
  1708. var
  1709.   _RegReplaceKey: Pointer;
  1710. function RegReplaceKey;
  1711. begin
  1712.   GetProcedureAddress(_RegReplaceKey, advapi32, 'RegReplaceKeyW');
  1713.   asm
  1714.     mov esp, ebp
  1715.     pop ebp
  1716.     jmp [_RegReplaceKey]
  1717.   end;
  1718. end;
  1719. {$ELSE}
  1720. function RegReplaceKey; external advapi32 name 'RegReplaceKeyW';
  1721. {$ENDIF DYNAMIC_LINK}
  1722. {$ELSE}
  1723. {$IFDEF DYNAMIC_LINK}
  1724. var
  1725.   _RegReplaceKey: Pointer;
  1726. function RegReplaceKey;
  1727. begin
  1728.   GetProcedureAddress(_RegReplaceKey, advapi32, 'RegReplaceKeyA');
  1729.   asm
  1730.     mov esp, ebp
  1731.     pop ebp
  1732.     jmp [_RegReplaceKey]
  1733.   end;
  1734. end;
  1735. {$ELSE}
  1736. function RegReplaceKey; external advapi32 name 'RegReplaceKeyA';
  1737. {$ENDIF DYNAMIC_LINK}
  1738. {$ENDIF}
  1739. {$IFDEF DYNAMIC_LINK}
  1740. var
  1741.   _RegRestoreKeyA: Pointer;
  1742. function RegRestoreKeyA;
  1743. begin
  1744.   GetProcedureAddress(_RegRestoreKeyA, advapi32, 'RegRestoreKeyA');
  1745.   asm
  1746.     mov esp, ebp
  1747.     pop ebp
  1748.     jmp [_RegRestoreKeyA]
  1749.   end;
  1750. end;
  1751. {$ELSE}
  1752. function RegRestoreKeyA; external advapi32 name 'RegRestoreKeyA';
  1753. {$ENDIF DYNAMIC_LINK}
  1754. {$IFDEF DYNAMIC_LINK}
  1755. var
  1756.   _RegRestoreKeyW: Pointer;
  1757. function RegRestoreKeyW;
  1758. begin
  1759.   GetProcedureAddress(_RegRestoreKeyW, advapi32, 'RegRestoreKeyW');
  1760.   asm
  1761.     mov esp, ebp
  1762.     pop ebp
  1763.     jmp [_RegRestoreKeyW]
  1764.   end;
  1765. end;
  1766. {$ELSE}
  1767. function RegRestoreKeyW; external advapi32 name 'RegRestoreKeyW';
  1768. {$ENDIF DYNAMIC_LINK}
  1769. {$IFDEF UNICODE}
  1770. {$IFDEF DYNAMIC_LINK}
  1771. var
  1772.   _RegRestoreKey: Pointer;
  1773. function RegRestoreKey;
  1774. begin
  1775.   GetProcedureAddress(_RegRestoreKey, advapi32, 'RegRestoreKeyW');
  1776.   asm
  1777.     mov esp, ebp
  1778.     pop ebp
  1779.     jmp [_RegRestoreKey]
  1780.   end;
  1781. end;
  1782. {$ELSE}
  1783. function RegRestoreKey; external advapi32 name 'RegRestoreKeyW';
  1784. {$ENDIF DYNAMIC_LINK}
  1785. {$ELSE}
  1786. {$IFDEF DYNAMIC_LINK}
  1787. var
  1788.   _RegRestoreKey: Pointer;
  1789. function RegRestoreKey;
  1790. begin
  1791.   GetProcedureAddress(_RegRestoreKey, advapi32, 'RegRestoreKeyA');
  1792.   asm
  1793.     mov esp, ebp
  1794.     pop ebp
  1795.     jmp [_RegRestoreKey]
  1796.   end;
  1797. end;
  1798. {$ELSE}
  1799. function RegRestoreKey; external advapi32 name 'RegRestoreKeyA';
  1800. {$ENDIF DYNAMIC_LINK}
  1801. {$ENDIF}
  1802. {$IFDEF DYNAMIC_LINK}
  1803. var
  1804.   _RegSaveKeyA: Pointer;
  1805. function RegSaveKeyA;
  1806. begin
  1807.   GetProcedureAddress(_RegSaveKeyA, advapi32, 'RegSaveKeyA');
  1808.   asm
  1809.     mov esp, ebp
  1810.     pop ebp
  1811.     jmp [_RegSaveKeyA]
  1812.   end;
  1813. end;
  1814. {$ELSE}
  1815. function RegSaveKeyA; external advapi32 name 'RegSaveKeyA';
  1816. {$ENDIF DYNAMIC_LINK}
  1817. {$IFDEF DYNAMIC_LINK}
  1818. var
  1819.   _RegSaveKeyW: Pointer;
  1820. function RegSaveKeyW;
  1821. begin
  1822.   GetProcedureAddress(_RegSaveKeyW, advapi32, 'RegSaveKeyW');
  1823.   asm
  1824.     mov esp, ebp
  1825.     pop ebp
  1826.     jmp [_RegSaveKeyW]
  1827.   end;
  1828. end;
  1829. {$ELSE}
  1830. function RegSaveKeyW; external advapi32 name 'RegSaveKeyW';
  1831. {$ENDIF DYNAMIC_LINK}
  1832. {$IFDEF UNICODE}
  1833. {$IFDEF DYNAMIC_LINK}
  1834. var
  1835.   _RegSaveKey: Pointer;
  1836. function RegSaveKey;
  1837. begin
  1838.   GetProcedureAddress(_RegSaveKey, advapi32, 'RegSaveKeyW');
  1839.   asm
  1840.     mov esp, ebp
  1841.     pop ebp
  1842.     jmp [_RegSaveKey]
  1843.   end;
  1844. end;
  1845. {$ELSE}
  1846. function RegSaveKey; external advapi32 name 'RegSaveKeyW';
  1847. {$ENDIF DYNAMIC_LINK}
  1848. {$ELSE}
  1849. {$IFDEF DYNAMIC_LINK}
  1850. var
  1851.   _RegSaveKey: Pointer;
  1852. function RegSaveKey;
  1853. begin
  1854.   GetProcedureAddress(_RegSaveKey, advapi32, 'RegSaveKeyA');
  1855.   asm
  1856.     mov esp, ebp
  1857.     pop ebp
  1858.     jmp [_RegSaveKey]
  1859.   end;
  1860. end;
  1861. {$ELSE}
  1862. function RegSaveKey; external advapi32 name 'RegSaveKeyA';
  1863. {$ENDIF DYNAMIC_LINK}
  1864. {$ENDIF}
  1865. {$IFDEF DYNAMIC_LINK}
  1866. var
  1867.   _RegSetKeySecurity: Pointer;
  1868. function RegSetKeySecurity;
  1869. begin
  1870.   GetProcedureAddress(_RegSetKeySecurity, advapi32, 'RegSetKeySecurity');
  1871.   asm
  1872.     mov esp, ebp
  1873.     pop ebp
  1874.     jmp [_RegSetKeySecurity]
  1875.   end;
  1876. end;
  1877. {$ELSE}
  1878. function RegSetKeySecurity; external advapi32 name 'RegSetKeySecurity';
  1879. {$ENDIF DYNAMIC_LINK}
  1880. {$IFDEF DYNAMIC_LINK}
  1881. var
  1882.   _RegSetValueA: Pointer;
  1883. function RegSetValueA;
  1884. begin
  1885.   GetProcedureAddress(_RegSetValueA, advapi32, 'RegSetValueA');
  1886.   asm
  1887.     mov esp, ebp
  1888.     pop ebp
  1889.     jmp [_RegSetValueA]
  1890.   end;
  1891. end;
  1892. {$ELSE}
  1893. function RegSetValueA; external advapi32 name 'RegSetValueA';
  1894. {$ENDIF DYNAMIC_LINK}
  1895. {$IFDEF DYNAMIC_LINK}
  1896. var
  1897.   _RegSetValueW: Pointer;
  1898. function RegSetValueW;
  1899. begin
  1900.   GetProcedureAddress(_RegSetValueW, advapi32, 'RegSetValueW');
  1901.   asm
  1902.     mov esp, ebp
  1903.     pop ebp
  1904.     jmp [_RegSetValueW]
  1905.   end;
  1906. end;
  1907. {$ELSE}
  1908. function RegSetValueW; external advapi32 name 'RegSetValueW';
  1909. {$ENDIF DYNAMIC_LINK}
  1910. {$IFDEF UNICODE}
  1911. {$IFDEF DYNAMIC_LINK}
  1912. var
  1913.   _RegSetValue: Pointer;
  1914. function RegSetValue;
  1915. begin
  1916.   GetProcedureAddress(_RegSetValue, advapi32, 'RegSetValueW');
  1917.   asm
  1918.     mov esp, ebp
  1919.     pop ebp
  1920.     jmp [_RegSetValue]
  1921.   end;
  1922. end;
  1923. {$ELSE}
  1924. function RegSetValue; external advapi32 name 'RegSetValueW';
  1925. {$ENDIF DYNAMIC_LINK}
  1926. {$ELSE}
  1927. {$IFDEF DYNAMIC_LINK}
  1928. var
  1929.   _RegSetValue: Pointer;
  1930. function RegSetValue;
  1931. begin
  1932.   GetProcedureAddress(_RegSetValue, advapi32, 'RegSetValueA');
  1933.   asm
  1934.     mov esp, ebp
  1935.     pop ebp
  1936.     jmp [_RegSetValue]
  1937.   end;
  1938. end;
  1939. {$ELSE}
  1940. function RegSetValue; external advapi32 name 'RegSetValueA';
  1941. {$ENDIF DYNAMIC_LINK}
  1942. {$ENDIF}
  1943. {$IFDEF DYNAMIC_LINK}
  1944. var
  1945.   _RegSetValueExA: Pointer;
  1946. function RegSetValueExA;
  1947. begin
  1948.   GetProcedureAddress(_RegSetValueExA, advapi32, 'RegSetValueExA');
  1949.   asm
  1950.     mov esp, ebp
  1951.     pop ebp
  1952.     jmp [_RegSetValueExA]
  1953.   end;
  1954. end;
  1955. {$ELSE}
  1956. function RegSetValueExA; external advapi32 name 'RegSetValueExA';
  1957. {$ENDIF DYNAMIC_LINK}
  1958. {$IFDEF DYNAMIC_LINK}
  1959. var
  1960.   _RegSetValueExW: Pointer;
  1961. function RegSetValueExW;
  1962. begin
  1963.   GetProcedureAddress(_RegSetValueExW, advapi32, 'RegSetValueExW');
  1964.   asm
  1965.     mov esp, ebp
  1966.     pop ebp
  1967.     jmp [_RegSetValueExW]
  1968.   end;
  1969. end;
  1970. {$ELSE}
  1971. function RegSetValueExW; external advapi32 name 'RegSetValueExW';
  1972. {$ENDIF DYNAMIC_LINK}
  1973. {$IFDEF UNICODE}
  1974. {$IFDEF DYNAMIC_LINK}
  1975. var
  1976.   _RegSetValueEx: Pointer;
  1977. function RegSetValueEx;
  1978. begin
  1979.   GetProcedureAddress(_RegSetValueEx, advapi32, 'RegSetValueExW');
  1980.   asm
  1981.     mov esp, ebp
  1982.     pop ebp
  1983.     jmp [_RegSetValueEx]
  1984.   end;
  1985. end;
  1986. {$ELSE}
  1987. function RegSetValueEx; external advapi32 name 'RegSetValueExW';
  1988. {$ENDIF DYNAMIC_LINK}
  1989. {$ELSE}
  1990. {$IFDEF DYNAMIC_LINK}
  1991. var
  1992.   _RegSetValueEx: Pointer;
  1993. function RegSetValueEx;
  1994. begin
  1995.   GetProcedureAddress(_RegSetValueEx, advapi32, 'RegSetValueExA');
  1996.   asm
  1997.     mov esp, ebp
  1998.     pop ebp
  1999.     jmp [_RegSetValueEx]
  2000.   end;
  2001. end;
  2002. {$ELSE}
  2003. function RegSetValueEx; external advapi32 name 'RegSetValueExA';
  2004. {$ENDIF DYNAMIC_LINK}
  2005. {$ENDIF}
  2006. {$IFDEF DYNAMIC_LINK}
  2007. var
  2008.   _RegUnLoadKeyA: Pointer;
  2009. function RegUnLoadKeyA;
  2010. begin
  2011.   GetProcedureAddress(_RegUnLoadKeyA, advapi32, 'RegUnLoadKeyA');
  2012.   asm
  2013.     mov esp, ebp
  2014.     pop ebp
  2015.     jmp [_RegUnLoadKeyA]
  2016.   end;
  2017. end;
  2018. {$ELSE}
  2019. function RegUnLoadKeyA; external advapi32 name 'RegUnLoadKeyA';
  2020. {$ENDIF DYNAMIC_LINK}
  2021. {$IFDEF DYNAMIC_LINK}
  2022. var
  2023.   _RegUnLoadKeyW: Pointer;
  2024. function RegUnLoadKeyW;
  2025. begin
  2026.   GetProcedureAddress(_RegUnLoadKeyW, advapi32, 'RegUnLoadKeyW');
  2027.   asm
  2028.     mov esp, ebp
  2029.     pop ebp
  2030.     jmp [_RegUnLoadKeyW]
  2031.   end;
  2032. end;
  2033. {$ELSE}
  2034. function RegUnLoadKeyW; external advapi32 name 'RegUnLoadKeyW';
  2035. {$ENDIF DYNAMIC_LINK}
  2036. {$IFDEF UNICODE}
  2037. {$IFDEF DYNAMIC_LINK}
  2038. var
  2039.   _RegUnLoadKey: Pointer;
  2040. function RegUnLoadKey;
  2041. begin
  2042.   GetProcedureAddress(_RegUnLoadKey, advapi32, 'RegUnLoadKeyW');
  2043.   asm
  2044.     mov esp, ebp
  2045.     pop ebp
  2046.     jmp [_RegUnLoadKey]
  2047.   end;
  2048. end;
  2049. {$ELSE}
  2050. function RegUnLoadKey; external advapi32 name 'RegUnLoadKeyW';
  2051. {$ENDIF DYNAMIC_LINK}
  2052. {$ELSE}
  2053. {$IFDEF DYNAMIC_LINK}
  2054. var
  2055.   _RegUnLoadKey: Pointer;
  2056. function RegUnLoadKey;
  2057. begin
  2058.   GetProcedureAddress(_RegUnLoadKey, advapi32, 'RegUnLoadKeyA');
  2059.   asm
  2060.     mov esp, ebp
  2061.     pop ebp
  2062.     jmp [_RegUnLoadKey]
  2063.   end;
  2064. end;
  2065. {$ELSE}
  2066. function RegUnLoadKey; external advapi32 name 'RegUnLoadKeyA';
  2067. {$ENDIF DYNAMIC_LINK}
  2068. {$ENDIF}
  2069. {$IFDEF DYNAMIC_LINK}
  2070. var
  2071.   _InitiateSystemShutdownA: Pointer;
  2072. function InitiateSystemShutdownA;
  2073. begin
  2074.   GetProcedureAddress(_InitiateSystemShutdownA, advapi32, 'InitiateSystemShutdownA');
  2075.   asm
  2076.     mov esp, ebp
  2077.     pop ebp
  2078.     jmp [_InitiateSystemShutdownA]
  2079.   end;
  2080. end;
  2081. {$ELSE}
  2082. function InitiateSystemShutdownA; external advapi32 name 'InitiateSystemShutdownA';
  2083. {$ENDIF DYNAMIC_LINK}
  2084. {$IFDEF DYNAMIC_LINK}
  2085. var
  2086.   _InitiateSystemShutdownW: Pointer;
  2087. function InitiateSystemShutdownW;
  2088. begin
  2089.   GetProcedureAddress(_InitiateSystemShutdownW, advapi32, 'InitiateSystemShutdownW');
  2090.   asm
  2091.     mov esp, ebp
  2092.     pop ebp
  2093.     jmp [_InitiateSystemShutdownW]
  2094.   end;
  2095. end;
  2096. {$ELSE}
  2097. function InitiateSystemShutdownW; external advapi32 name 'InitiateSystemShutdownW';
  2098. {$ENDIF DYNAMIC_LINK}
  2099. {$IFDEF UNICODE}
  2100. {$IFDEF DYNAMIC_LINK}
  2101. var
  2102.   _InitiateSystemShutdown: Pointer;
  2103. function InitiateSystemShutdown;
  2104. begin
  2105.   GetProcedureAddress(_InitiateSystemShutdown, advapi32, 'InitiateSystemShutdownW');
  2106.   asm
  2107.     mov esp, ebp
  2108.     pop ebp
  2109.     jmp [_InitiateSystemShutdown]
  2110.   end;
  2111. end;
  2112. {$ELSE}
  2113. function InitiateSystemShutdown; external advapi32 name 'InitiateSystemShutdownW';
  2114. {$ENDIF DYNAMIC_LINK}
  2115. {$ELSE}
  2116. {$IFDEF DYNAMIC_LINK}
  2117. var
  2118.   _InitiateSystemShutdown: Pointer;
  2119. function InitiateSystemShutdown;
  2120. begin
  2121.   GetProcedureAddress(_InitiateSystemShutdown, advapi32, 'InitiateSystemShutdownA');
  2122.   asm
  2123.     mov esp, ebp
  2124.     pop ebp
  2125.     jmp [_InitiateSystemShutdown]
  2126.   end;
  2127. end;
  2128. {$ELSE}
  2129. function InitiateSystemShutdown; external advapi32 name 'InitiateSystemShutdownA';
  2130. {$ENDIF DYNAMIC_LINK}
  2131. {$ENDIF}
  2132. {$IFDEF DYNAMIC_LINK}
  2133. var
  2134.   _AbortSystemShutdownA: Pointer;
  2135. function AbortSystemShutdownA;
  2136. begin
  2137.   GetProcedureAddress(_AbortSystemShutdownA, advapi32, 'AbortSystemShutdownA');
  2138.   asm
  2139.     mov esp, ebp
  2140.     pop ebp
  2141.     jmp [_AbortSystemShutdownA]
  2142.   end;
  2143. end;
  2144. {$ELSE}
  2145. function AbortSystemShutdownA; external advapi32 name 'AbortSystemShutdownA';
  2146. {$ENDIF DYNAMIC_LINK}
  2147. {$IFDEF DYNAMIC_LINK}
  2148. var
  2149.   _AbortSystemShutdownW: Pointer;
  2150. function AbortSystemShutdownW;
  2151. begin
  2152.   GetProcedureAddress(_AbortSystemShutdownW, advapi32, 'AbortSystemShutdownW');
  2153.   asm
  2154.     mov esp, ebp
  2155.     pop ebp
  2156.     jmp [_AbortSystemShutdownW]
  2157.   end;
  2158. end;
  2159. {$ELSE}
  2160. function AbortSystemShutdownW; external advapi32 name 'AbortSystemShutdownW';
  2161. {$ENDIF DYNAMIC_LINK}
  2162. {$IFDEF UNICODE}
  2163. {$IFDEF DYNAMIC_LINK}
  2164. var
  2165.   _AbortSystemShutdown: Pointer;
  2166. function AbortSystemShutdown;
  2167. begin
  2168.   GetProcedureAddress(_AbortSystemShutdown, advapi32, 'AbortSystemShutdownW');
  2169.   asm
  2170.     mov esp, ebp
  2171.     pop ebp
  2172.     jmp [_AbortSystemShutdown]
  2173.   end;
  2174. end;
  2175. {$ELSE}
  2176. function AbortSystemShutdown; external advapi32 name 'AbortSystemShutdownW';
  2177. {$ENDIF DYNAMIC_LINK}
  2178. {$ELSE}
  2179. {$IFDEF DYNAMIC_LINK}
  2180. var
  2181.   _AbortSystemShutdown: Pointer;
  2182. function AbortSystemShutdown;
  2183. begin
  2184.   GetProcedureAddress(_AbortSystemShutdown, advapi32, 'AbortSystemShutdownA');
  2185.   asm
  2186.     mov esp, ebp
  2187.     pop ebp
  2188.     jmp [_AbortSystemShutdown]
  2189.   end;
  2190. end;
  2191. {$ELSE}
  2192. function AbortSystemShutdown; external advapi32 name 'AbortSystemShutdownA';
  2193. {$ENDIF DYNAMIC_LINK}
  2194. {$ENDIF}
  2195. {$IFDEF DYNAMIC_LINK}
  2196. var
  2197.   _InitiateSystemShutdownExA: Pointer;
  2198. function InitiateSystemShutdownExA;
  2199. begin
  2200.   GetProcedureAddress(_InitiateSystemShutdownExA, advapi32, 'InitiateSystemShutdownExA');
  2201.   asm
  2202.     mov esp, ebp
  2203.     pop ebp
  2204.     jmp [_InitiateSystemShutdownExA]
  2205.   end;
  2206. end;
  2207. {$ELSE}
  2208. function InitiateSystemShutdownExA; external advapi32 name 'InitiateSystemShutdownExA';
  2209. {$ENDIF DYNAMIC_LINK}
  2210. {$IFDEF DYNAMIC_LINK}
  2211. var
  2212.   _InitiateSystemShutdownExW: Pointer;
  2213. function InitiateSystemShutdownExW;
  2214. begin
  2215.   GetProcedureAddress(_InitiateSystemShutdownExW, advapi32, 'InitiateSystemShutdownExW');
  2216.   asm
  2217.     mov esp, ebp
  2218.     pop ebp
  2219.     jmp [_InitiateSystemShutdownExW]
  2220.   end;
  2221. end;
  2222. {$ELSE}
  2223. function InitiateSystemShutdownExW; external advapi32 name 'InitiateSystemShutdownExW';
  2224. {$ENDIF DYNAMIC_LINK}
  2225. {$IFDEF UNICODE}
  2226. {$IFDEF DYNAMIC_LINK}
  2227. var
  2228.   _InitiateSystemShutdownEx: Pointer;
  2229. function InitiateSystemShutdownEx;
  2230. begin
  2231.   GetProcedureAddress(_InitiateSystemShutdownEx, advapi32, 'InitiateSystemShutdownExW');
  2232.   asm
  2233.     mov esp, ebp
  2234.     pop ebp
  2235.     jmp [_InitiateSystemShutdownEx]
  2236.   end;
  2237. end;
  2238. {$ELSE}
  2239. function InitiateSystemShutdownEx; external advapi32 name 'InitiateSystemShutdownExW';
  2240. {$ENDIF DYNAMIC_LINK}
  2241. {$ELSE}
  2242. {$IFDEF DYNAMIC_LINK}
  2243. var
  2244.   _InitiateSystemShutdownEx: Pointer;
  2245. function InitiateSystemShutdownEx;
  2246. begin
  2247.   GetProcedureAddress(_InitiateSystemShutdownEx, advapi32, 'InitiateSystemShutdownExA');
  2248.   asm
  2249.     mov esp, ebp
  2250.     pop ebp
  2251.     jmp [_InitiateSystemShutdownEx]
  2252.   end;
  2253. end;
  2254. {$ELSE}
  2255. function InitiateSystemShutdownEx; external advapi32 name 'InitiateSystemShutdownExA';
  2256. {$ENDIF DYNAMIC_LINK}
  2257. {$ENDIF}
  2258. {$IFDEF DYNAMIC_LINK}
  2259. var
  2260.   _RegSaveKeyExA: Pointer;
  2261. function RegSaveKeyExA;
  2262. begin
  2263.   GetProcedureAddress(_RegSaveKeyExA, advapi32, 'RegSaveKeyExA');
  2264.   asm
  2265.     mov esp, ebp
  2266.     pop ebp
  2267.     jmp [_RegSaveKeyExA]
  2268.   end;
  2269. end;
  2270. {$ELSE}
  2271. function RegSaveKeyExA; external advapi32 name 'RegSaveKeyExA';
  2272. {$ENDIF DYNAMIC_LINK}
  2273. {$IFDEF DYNAMIC_LINK}
  2274. var
  2275.   _RegSaveKeyExW: Pointer;
  2276. function RegSaveKeyExW;
  2277. begin
  2278.   GetProcedureAddress(_RegSaveKeyExW, advapi32, 'RegSaveKeyExW');
  2279.   asm
  2280.     mov esp, ebp
  2281.     pop ebp
  2282.     jmp [_RegSaveKeyExW]
  2283.   end;
  2284. end;
  2285. {$ELSE}
  2286. function RegSaveKeyExW; external advapi32 name 'RegSaveKeyExW';
  2287. {$ENDIF DYNAMIC_LINK}
  2288. {$IFDEF UNICODE}
  2289. {$IFDEF DYNAMIC_LINK}
  2290. var
  2291.   _RegSaveKeyEx: Pointer;
  2292. function RegSaveKeyEx;
  2293. begin
  2294.   GetProcedureAddress(_RegSaveKeyEx, advapi32, 'RegSaveKeyExW');
  2295.   asm
  2296.     mov esp, ebp
  2297.     pop ebp
  2298.     jmp [_RegSaveKeyEx]
  2299.   end;
  2300. end;
  2301. {$ELSE}
  2302. function RegSaveKeyEx; external advapi32 name 'RegSaveKeyExW';
  2303. {$ENDIF DYNAMIC_LINK}
  2304. {$ELSE}
  2305. {$IFDEF DYNAMIC_LINK}
  2306. var
  2307.   _RegSaveKeyEx: Pointer;
  2308. function RegSaveKeyEx;
  2309. begin
  2310.   GetProcedureAddress(_RegSaveKeyEx, advapi32, 'RegSaveKeyExA');
  2311.   asm
  2312.     mov esp, ebp
  2313.     pop ebp
  2314.     jmp [_RegSaveKeyEx]
  2315.   end;
  2316. end;
  2317. {$ELSE}
  2318. function RegSaveKeyEx; external advapi32 name 'RegSaveKeyExA';
  2319. {$ENDIF DYNAMIC_LINK}
  2320. {$ENDIF}
  2321. {$IFDEF DYNAMIC_LINK}
  2322. var
  2323.   _Wow64Win32ApiEntry: Pointer;
  2324. function Wow64Win32ApiEntry;
  2325. begin
  2326.   GetProcedureAddress(_Wow64Win32ApiEntry, advapi32, 'Wow64Win32ApiEntry');
  2327.   asm
  2328.     mov esp, ebp
  2329.     pop ebp
  2330.     jmp [_Wow64Win32ApiEntry]
  2331.   end;
  2332. end;
  2333. {$ELSE}
  2334. function Wow64Win32ApiEntry; external advapi32 name 'Wow64Win32ApiEntry';
  2335. {$ENDIF DYNAMIC_LINK}
  2336. end.