2
0

jwawinsvc.pas 58 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876
  1. {******************************************************************************}
  2. { }
  3. { Services 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: winsvc.h, released June 2000. The original Pascal }
  9. { code is: WinSvc.pas, released December 2000. The initial developer of the }
  10. { Pascal code is Marcel van Brakel (brakelm att chello dott 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 }
  18. { APILIB home page, located at http://jedi-apilib.sourceforge.net }
  19. { }
  20. { The contents of this file are used with permission, subject to the Mozilla }
  21. { Public License Version 1.1 (the "License"); you may not use this file except }
  22. { in compliance with the License. You may obtain a copy of the License at }
  23. { http://www.mozilla.org/MPL/MPL-1.1.html }
  24. { }
  25. { Software distributed under the License is distributed on an "AS IS" basis, }
  26. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  27. { the specific language governing rights and limitations under the License. }
  28. { }
  29. { Alternatively, the contents of this file may be used under the terms of the }
  30. { GNU Lesser General Public License (the "LGPL License"), in which case the }
  31. { provisions of the LGPL License are applicable instead of those above. }
  32. { If you wish to allow use of your version of this file only under the terms }
  33. { of the LGPL License and not to allow others to use your version of this file }
  34. { under the MPL, indicate your decision by deleting the provisions above and }
  35. { replace them with the notice and other provisions required by the LGPL }
  36. { License. If you do not delete the provisions above, a recipient may use }
  37. { your version of this file under either the MPL or the LGPL License. }
  38. { }
  39. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  40. { }
  41. {******************************************************************************}
  42. // $Id: JwaWinSvc.pas,v 1.10 2005/09/06 16:36:51 marquardt Exp $
  43. {$IFNDEF JWA_INCLUDEMODE}
  44. unit JwaWinSvc;
  45. {$WEAKPACKAGEUNIT}
  46. {$I jediapilib.inc}
  47. interface
  48. uses
  49. JwaWinNT, JwaWinType;
  50. {$ENDIF !JWA_INCLUDEMODE}
  51. {$IFDEF JWA_INTERFACESECTION}
  52. {$HPPEMIT ''}
  53. {$HPPEMIT '#include "WinSvc.h"'}
  54. {$HPPEMIT ''}
  55. //
  56. // Service database names
  57. //
  58. const
  59. SERVICES_ACTIVE_DATABASEW = 'ServicesActive';
  60. {$EXTERNALSYM SERVICES_ACTIVE_DATABASEW}
  61. SERVICES_FAILED_DATABASEW = 'ServicesFailed';
  62. {$EXTERNALSYM SERVICES_FAILED_DATABASEW}
  63. SERVICES_ACTIVE_DATABASEA = 'ServicesActive';
  64. {$EXTERNALSYM SERVICES_ACTIVE_DATABASEA}
  65. SERVICES_FAILED_DATABASEA = 'ServicesFailed';
  66. {$EXTERNALSYM SERVICES_FAILED_DATABASEA}
  67. //
  68. // Character to designate that a name is a group
  69. //
  70. SC_GROUP_IDENTIFIERW = '+';
  71. {$EXTERNALSYM SC_GROUP_IDENTIFIERW}
  72. SC_GROUP_IDENTIFIERA = '+';
  73. {$EXTERNALSYM SC_GROUP_IDENTIFIERA}
  74. {$IFDEF UNICODE}
  75. SERVICES_ACTIVE_DATABASE = SERVICES_ACTIVE_DATABASEW;
  76. {$EXTERNALSYM SERVICES_ACTIVE_DATABASE}
  77. SERVICES_FAILED_DATABASE = SERVICES_FAILED_DATABASEW;
  78. {$EXTERNALSYM SERVICES_FAILED_DATABASE}
  79. SC_GROUP_IDENTIFIER = SC_GROUP_IDENTIFIERW;
  80. {$EXTERNALSYM SC_GROUP_IDENTIFIER}
  81. {$ELSE}
  82. SERVICES_ACTIVE_DATABASE = SERVICES_ACTIVE_DATABASEA;
  83. {$EXTERNALSYM SERVICES_ACTIVE_DATABASE}
  84. SERVICES_FAILED_DATABASE = SERVICES_FAILED_DATABASEA;
  85. {$EXTERNALSYM SERVICES_FAILED_DATABASE}
  86. SC_GROUP_IDENTIFIER = SC_GROUP_IDENTIFIERA;
  87. {$EXTERNALSYM SC_GROUP_IDENTIFIER}
  88. {$ENDIF UNICODE}
  89. //
  90. // Value to indicate no change to an optional parameter
  91. //
  92. SERVICE_NO_CHANGE = $ffffffff;
  93. {$EXTERNALSYM SERVICE_NO_CHANGE}
  94. //
  95. // Service State -- for Enum Requests (Bit Mask)
  96. //
  97. SERVICE_ACTIVE = $00000001;
  98. {$EXTERNALSYM SERVICE_ACTIVE}
  99. SERVICE_INACTIVE = $00000002;
  100. {$EXTERNALSYM SERVICE_INACTIVE}
  101. SERVICE_STATE_ALL = SERVICE_ACTIVE or SERVICE_INACTIVE;
  102. {$EXTERNALSYM SERVICE_STATE_ALL}
  103. //
  104. // Controls
  105. //
  106. SERVICE_CONTROL_STOP = $00000001;
  107. {$EXTERNALSYM SERVICE_CONTROL_STOP}
  108. SERVICE_CONTROL_PAUSE = $00000002;
  109. {$EXTERNALSYM SERVICE_CONTROL_PAUSE}
  110. SERVICE_CONTROL_CONTINUE = $00000003;
  111. {$EXTERNALSYM SERVICE_CONTROL_CONTINUE}
  112. SERVICE_CONTROL_INTERROGATE = $00000004;
  113. {$EXTERNALSYM SERVICE_CONTROL_INTERROGATE}
  114. SERVICE_CONTROL_SHUTDOWN = $00000005;
  115. {$EXTERNALSYM SERVICE_CONTROL_SHUTDOWN}
  116. SERVICE_CONTROL_PARAMCHANGE = $00000006;
  117. {$EXTERNALSYM SERVICE_CONTROL_PARAMCHANGE}
  118. SERVICE_CONTROL_NETBINDADD = $00000007;
  119. {$EXTERNALSYM SERVICE_CONTROL_NETBINDADD}
  120. SERVICE_CONTROL_NETBINDREMOVE = $00000008;
  121. {$EXTERNALSYM SERVICE_CONTROL_NETBINDREMOVE}
  122. SERVICE_CONTROL_NETBINDENABLE = $00000009;
  123. {$EXTERNALSYM SERVICE_CONTROL_NETBINDENABLE}
  124. SERVICE_CONTROL_NETBINDDISABLE = $0000000A;
  125. {$EXTERNALSYM SERVICE_CONTROL_NETBINDDISABLE}
  126. SERVICE_CONTROL_DEVICEEVENT = $0000000B;
  127. {$EXTERNALSYM SERVICE_CONTROL_DEVICEEVENT}
  128. SERVICE_CONTROL_HARDWAREPROFILECHANGE = $0000000C;
  129. {$EXTERNALSYM SERVICE_CONTROL_HARDWAREPROFILECHANGE}
  130. SERVICE_CONTROL_POWEREVENT = $0000000D;
  131. {$EXTERNALSYM SERVICE_CONTROL_POWEREVENT}
  132. SERVICE_CONTROL_SESSIONCHANGE = $0000000E;
  133. {$EXTERNALSYM SERVICE_CONTROL_SESSIONCHANGE}
  134. //
  135. // Service State -- for CurrentState
  136. //
  137. SERVICE_STOPPED = $00000001;
  138. {$EXTERNALSYM SERVICE_STOPPED}
  139. SERVICE_START_PENDING = $00000002;
  140. {$EXTERNALSYM SERVICE_START_PENDING}
  141. SERVICE_STOP_PENDING = $00000003;
  142. {$EXTERNALSYM SERVICE_STOP_PENDING}
  143. SERVICE_RUNNING = $00000004;
  144. {$EXTERNALSYM SERVICE_RUNNING}
  145. SERVICE_CONTINUE_PENDING = $00000005;
  146. {$EXTERNALSYM SERVICE_CONTINUE_PENDING}
  147. SERVICE_PAUSE_PENDING = $00000006;
  148. {$EXTERNALSYM SERVICE_PAUSE_PENDING}
  149. SERVICE_PAUSED = $00000007;
  150. {$EXTERNALSYM SERVICE_PAUSED}
  151. //
  152. // Controls Accepted (Bit Mask)
  153. //
  154. SERVICE_ACCEPT_STOP = $00000001;
  155. {$EXTERNALSYM SERVICE_ACCEPT_STOP}
  156. SERVICE_ACCEPT_PAUSE_CONTINUE = $00000002;
  157. {$EXTERNALSYM SERVICE_ACCEPT_PAUSE_CONTINUE}
  158. SERVICE_ACCEPT_SHUTDOWN = $00000004;
  159. {$EXTERNALSYM SERVICE_ACCEPT_SHUTDOWN}
  160. SERVICE_ACCEPT_PARAMCHANGE = $00000008;
  161. {$EXTERNALSYM SERVICE_ACCEPT_PARAMCHANGE}
  162. SERVICE_ACCEPT_NETBINDCHANGE = $00000010;
  163. {$EXTERNALSYM SERVICE_ACCEPT_NETBINDCHANGE}
  164. SERVICE_ACCEPT_HARDWAREPROFILECHANGE = $00000020;
  165. {$EXTERNALSYM SERVICE_ACCEPT_HARDWAREPROFILECHANGE}
  166. SERVICE_ACCEPT_POWEREVENT = $00000040;
  167. {$EXTERNALSYM SERVICE_ACCEPT_POWEREVENT}
  168. SERVICE_ACCEPT_SESSIONCHANGE = $00000080;
  169. {$EXTERNALSYM SERVICE_ACCEPT_SESSIONCHANGE}
  170. //
  171. // Service Control Manager object specific access types
  172. //
  173. SC_MANAGER_CONNECT = $0001;
  174. {$EXTERNALSYM SC_MANAGER_CONNECT}
  175. SC_MANAGER_CREATE_SERVICE = $0002;
  176. {$EXTERNALSYM SC_MANAGER_CREATE_SERVICE}
  177. SC_MANAGER_ENUMERATE_SERVICE = $0004;
  178. {$EXTERNALSYM SC_MANAGER_ENUMERATE_SERVICE}
  179. SC_MANAGER_LOCK = $0008;
  180. {$EXTERNALSYM SC_MANAGER_LOCK}
  181. SC_MANAGER_QUERY_LOCK_STATUS = $0010;
  182. {$EXTERNALSYM SC_MANAGER_QUERY_LOCK_STATUS}
  183. SC_MANAGER_MODIFY_BOOT_CONFIG = $0020;
  184. {$EXTERNALSYM SC_MANAGER_MODIFY_BOOT_CONFIG}
  185. SC_MANAGER_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or
  186. SC_MANAGER_CONNECT or
  187. SC_MANAGER_CREATE_SERVICE or
  188. SC_MANAGER_ENUMERATE_SERVICE or
  189. SC_MANAGER_LOCK or
  190. SC_MANAGER_QUERY_LOCK_STATUS or
  191. SC_MANAGER_MODIFY_BOOT_CONFIG;
  192. {$EXTERNALSYM SC_MANAGER_ALL_ACCESS}
  193. //
  194. // Service object specific access type
  195. //
  196. SERVICE_QUERY_CONFIG = $0001;
  197. {$EXTERNALSYM SERVICE_QUERY_CONFIG}
  198. SERVICE_CHANGE_CONFIG = $0002;
  199. {$EXTERNALSYM SERVICE_CHANGE_CONFIG}
  200. SERVICE_QUERY_STATUS = $0004;
  201. {$EXTERNALSYM SERVICE_QUERY_STATUS}
  202. SERVICE_ENUMERATE_DEPENDENTS = $0008;
  203. {$EXTERNALSYM SERVICE_ENUMERATE_DEPENDENTS}
  204. SERVICE_START = $0010;
  205. {$EXTERNALSYM SERVICE_START}
  206. SERVICE_STOP = $0020;
  207. {$EXTERNALSYM SERVICE_STOP}
  208. SERVICE_PAUSE_CONTINUE = $0040;
  209. {$EXTERNALSYM SERVICE_PAUSE_CONTINUE}
  210. SERVICE_INTERROGATE = $0080;
  211. {$EXTERNALSYM SERVICE_INTERROGATE}
  212. SERVICE_USER_DEFINED_CONTROL = $0100;
  213. {$EXTERNALSYM SERVICE_USER_DEFINED_CONTROL}
  214. SERVICE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or
  215. SERVICE_QUERY_CONFIG or
  216. SERVICE_CHANGE_CONFIG or
  217. SERVICE_QUERY_STATUS or
  218. SERVICE_ENUMERATE_DEPENDENTS or
  219. SERVICE_START or
  220. SERVICE_STOP or
  221. SERVICE_PAUSE_CONTINUE or
  222. SERVICE_INTERROGATE or
  223. SERVICE_USER_DEFINED_CONTROL;
  224. {$EXTERNALSYM SERVICE_ALL_ACCESS}
  225. //
  226. // Service flags for QueryServiceStatusEx
  227. //
  228. SERVICE_RUNS_IN_SYSTEM_PROCESS = $00000001;
  229. {$EXTERNALSYM SERVICE_RUNS_IN_SYSTEM_PROCESS}
  230. //
  231. // Info levels for ChangeServiceConfig2 and QueryServiceConfig2
  232. //
  233. SERVICE_CONFIG_DESCRIPTION = 1;
  234. {$EXTERNALSYM SERVICE_CONFIG_DESCRIPTION}
  235. SERVICE_CONFIG_FAILURE_ACTIONS = 2;
  236. {$EXTERNALSYM SERVICE_CONFIG_FAILURE_ACTIONS}
  237. //
  238. // Service description string
  239. //
  240. type
  241. LPSERVICE_DESCRIPTIONA = ^SERVICE_DESCRIPTIONA;
  242. {$EXTERNALSYM LPSERVICE_DESCRIPTIONA}
  243. _SERVICE_DESCRIPTIONA = record
  244. lpDescription: LPSTR;
  245. end;
  246. {$EXTERNALSYM _SERVICE_DESCRIPTIONA}
  247. SERVICE_DESCRIPTIONA = _SERVICE_DESCRIPTIONA;
  248. {$EXTERNALSYM SERVICE_DESCRIPTIONA}
  249. TServiceDescriptionA = SERVICE_DESCRIPTIONA;
  250. PServiceDescriptionA = LPSERVICE_DESCRIPTIONA;
  251. //
  252. // Service description string
  253. //
  254. LPSERVICE_DESCRIPTIONW = ^SERVICE_DESCRIPTIONW;
  255. {$EXTERNALSYM LPSERVICE_DESCRIPTIONW}
  256. _SERVICE_DESCRIPTIONW = record
  257. lpDescription: LPWSTR;
  258. end;
  259. {$EXTERNALSYM _SERVICE_DESCRIPTIONW}
  260. SERVICE_DESCRIPTIONW = _SERVICE_DESCRIPTIONW;
  261. {$EXTERNALSYM SERVICE_DESCRIPTIONW}
  262. TServiceDescriptionW = SERVICE_DESCRIPTIONW;
  263. PServiceDescriptionW = LPSERVICE_DESCRIPTIONW;
  264. {$IFDEF UNICODE}
  265. SERVICE_DESCRIPTION = SERVICE_DESCRIPTIONW;
  266. {$EXTERNALSYM SERVICE_DESCRIPTION}
  267. LPSERVICE_DESCRIPTION = LPSERVICE_DESCRIPTIONW;
  268. {$EXTERNALSYM LPSERVICE_DESCRIPTION}
  269. TServiceDescription = TServiceDescriptionW;
  270. PServiceDescription = PServiceDescriptionW;
  271. {$ELSE}
  272. SERVICE_DESCRIPTION = SERVICE_DESCRIPTIONA;
  273. {$EXTERNALSYM SERVICE_DESCRIPTION}
  274. LPSERVICE_DESCRIPTION = LPSERVICE_DESCRIPTIONA;
  275. {$EXTERNALSYM LPSERVICE_DESCRIPTION}
  276. TServiceDescription = TServiceDescriptionA;
  277. PServiceDescription = PServiceDescriptionA;
  278. {$ENDIF UNICODE}
  279. //
  280. // Actions to take on service failure
  281. //
  282. _SC_ACTION_TYPE = (SC_ACTION_NONE, SC_ACTION_RESTART, SC_ACTION_REBOOT,
  283. SC_ACTION_RUN_COMMAND);
  284. {$EXTERNALSYM _SC_ACTION_TYPE}
  285. SC_ACTION_TYPE = _SC_ACTION_TYPE;
  286. {$EXTERNALSYM SC_ACTION_TYPE}
  287. TScActionType = _SC_ACTION_TYPE;
  288. LPSC_ACTION = ^SC_ACTION;
  289. {$EXTERNALSYM LPSC_ACTION}
  290. _SC_ACTION = record
  291. Type_: SC_ACTION_TYPE;
  292. Delay: DWORD;
  293. end;
  294. {$EXTERNALSYM _SC_ACTION}
  295. SC_ACTION = _SC_ACTION;
  296. {$EXTERNALSYM SC_ACTION}
  297. TScAction = SC_ACTION;
  298. PScAction = LPSC_ACTION;
  299. LPSERVICE_FAILURE_ACTIONSA = ^SERVICE_FAILURE_ACTIONSA;
  300. {$EXTERNALSYM LPSERVICE_FAILURE_ACTIONSA}
  301. _SERVICE_FAILURE_ACTIONSA = record
  302. dwResetPeriod: DWORD;
  303. lpRebootMsg: LPSTR;
  304. lpCommand: LPSTR;
  305. cActions: DWORD;
  306. lpsaActions: LPSC_ACTION;
  307. end;
  308. {$EXTERNALSYM _SERVICE_FAILURE_ACTIONSA}
  309. SERVICE_FAILURE_ACTIONSA = _SERVICE_FAILURE_ACTIONSA;
  310. {$EXTERNALSYM SERVICE_FAILURE_ACTIONSA}
  311. TServiceFailureActionsA = SERVICE_FAILURE_ACTIONSA;
  312. PServiceFailureActionsA = LPSERVICE_FAILURE_ACTIONSA;
  313. LPSERVICE_FAILURE_ACTIONSW = ^SERVICE_FAILURE_ACTIONSW;
  314. {$EXTERNALSYM LPSERVICE_FAILURE_ACTIONSW}
  315. _SERVICE_FAILURE_ACTIONSW = record
  316. dwResetPeriod: DWORD;
  317. lpRebootMsg: LPWSTR;
  318. lpCommand: LPWSTR;
  319. cActions: DWORD;
  320. lpsaActions: LPSC_ACTION;
  321. end;
  322. {$EXTERNALSYM _SERVICE_FAILURE_ACTIONSW}
  323. SERVICE_FAILURE_ACTIONSW = _SERVICE_FAILURE_ACTIONSW;
  324. {$EXTERNALSYM SERVICE_FAILURE_ACTIONSW}
  325. TServiceFailureActionsW = SERVICE_FAILURE_ACTIONSW;
  326. PServiceFailureActionsW = LPSERVICE_FAILURE_ACTIONSW;
  327. {$IFDEF UNICODE}
  328. SERVICE_FAILURE_ACTIONS = SERVICE_FAILURE_ACTIONSW;
  329. {$EXTERNALSYM SERVICE_FAILURE_ACTIONS}
  330. LPSERVICE_FAILURE_ACTIONS = LPSERVICE_FAILURE_ACTIONSW;
  331. {$EXTERNALSYM LPSERVICE_FAILURE_ACTIONS}
  332. TServiceFailureActions = TServiceFailureActionsW;
  333. PServiceFailureActions = PServiceFailureActionsW;
  334. {$ELSE}
  335. SERVICE_FAILURE_ACTIONS = SERVICE_FAILURE_ACTIONSA;
  336. {$EXTERNALSYM SERVICE_FAILURE_ACTIONS}
  337. LPSERVICE_FAILURE_ACTIONS = LPSERVICE_FAILURE_ACTIONSA;
  338. {$EXTERNALSYM LPSERVICE_FAILURE_ACTIONS}
  339. TServiceFailureActions = TServiceFailureActionsA;
  340. PServiceFailureActions = PServiceFailureActionsA;
  341. {$ENDIF UNICODE}
  342. //
  343. // Handle Types
  344. //
  345. SC_HANDLE = HANDLE;
  346. {$EXTERNALSYM SC_HANDLE}
  347. LPSC_HANDLE = ^SC_HANDLE;
  348. {$EXTERNALSYM LPSC_HANDLE}
  349. SERVICE_STATUS_HANDLE = HANDLE;
  350. {$EXTERNALSYM SERVICE_STATUS_HANDLE}
  351. //
  352. // Info levels for QueryServiceStatusEx
  353. //
  354. _SC_STATUS_TYPE = (SC_STATUS_PROCESS_INFO);
  355. {$EXTERNALSYM _SC_STATUS_TYPE}
  356. SC_STATUS_TYPE = _SC_STATUS_TYPE;
  357. {$EXTERNALSYM SC_STATUS_TYPE}
  358. //
  359. // Info levels for EnumServicesStatusEx
  360. //
  361. _SC_ENUM_TYPE = (SC_ENUM_PROCESS_INFO);
  362. {$EXTERNALSYM _SC_ENUM_TYPE}
  363. SC_ENUM_TYPE = _SC_ENUM_TYPE;
  364. {$EXTERNALSYM SC_ENUM_TYPE}
  365. //
  366. // Service Status Structures
  367. //
  368. LPSERVICE_STATUS = ^SERVICE_STATUS;
  369. {$EXTERNALSYM LPSERVICE_STATUS}
  370. _SERVICE_STATUS = record
  371. dwServiceType: DWORD;
  372. dwCurrentState: DWORD;
  373. dwControlsAccepted: DWORD;
  374. dwWin32ExitCode: DWORD;
  375. dwServiceSpecificExitCode: DWORD;
  376. dwCheckPoint: DWORD;
  377. dwWaitHint: DWORD;
  378. end;
  379. {$EXTERNALSYM _SERVICE_STATUS}
  380. SERVICE_STATUS = _SERVICE_STATUS;
  381. {$EXTERNALSYM SERVICE_STATUS}
  382. TServiceStatus = SERVICE_STATUS;
  383. PServiceStatus = LPSERVICE_STATUS;
  384. LPSERVICE_STATUS_PROCESS = ^SERVICE_STATUS_PROCESS;
  385. {$EXTERNALSYM LPSERVICE_STATUS_PROCESS}
  386. _SERVICE_STATUS_PROCESS = record
  387. dwServiceType: DWORD;
  388. dwCurrentState: DWORD;
  389. dwControlsAccepted: DWORD;
  390. dwWin32ExitCode: DWORD;
  391. dwServiceSpecificExitCode: DWORD;
  392. dwCheckPoint: DWORD;
  393. dwWaitHint: DWORD;
  394. dwProcessId: DWORD;
  395. dwServiceFlags: DWORD;
  396. end;
  397. {$EXTERNALSYM _SERVICE_STATUS_PROCESS}
  398. SERVICE_STATUS_PROCESS = _SERVICE_STATUS_PROCESS;
  399. {$EXTERNALSYM SERVICE_STATUS_PROCESS}
  400. TServiceStatusProcess = SERVICE_STATUS_PROCESS;
  401. PServiceStatusProcess = LPSERVICE_STATUS_PROCESS;
  402. //
  403. // Service Status Enumeration Structure
  404. //
  405. LPENUM_SERVICE_STATUSA = ^ENUM_SERVICE_STATUSA;
  406. {$EXTERNALSYM LPENUM_SERVICE_STATUSA}
  407. _ENUM_SERVICE_STATUSA = record
  408. lpServiceName: LPSTR;
  409. lpDisplayName: LPSTR;
  410. ServiceStatus: SERVICE_STATUS;
  411. end;
  412. {$EXTERNALSYM _ENUM_SERVICE_STATUSA}
  413. ENUM_SERVICE_STATUSA = _ENUM_SERVICE_STATUSA;
  414. {$EXTERNALSYM ENUM_SERVICE_STATUSA}
  415. TEnumServiceStatusA = ENUM_SERVICE_STATUSA;
  416. PEnumServiceStatusA = LPENUM_SERVICE_STATUSA;
  417. LPENUM_SERVICE_STATUSW = ^ENUM_SERVICE_STATUSW;
  418. {$EXTERNALSYM LPENUM_SERVICE_STATUSW}
  419. _ENUM_SERVICE_STATUSW = record
  420. lpServiceName: LPWSTR;
  421. lpDisplayName: LPWSTR;
  422. ServiceStatus: SERVICE_STATUS;
  423. end;
  424. {$EXTERNALSYM _ENUM_SERVICE_STATUSW}
  425. ENUM_SERVICE_STATUSW = _ENUM_SERVICE_STATUSW;
  426. {$EXTERNALSYM ENUM_SERVICE_STATUSW}
  427. TEnumServiceStatusW = ENUM_SERVICE_STATUSW;
  428. PEnumServiceStatusW = LPENUM_SERVICE_STATUSW;
  429. {$IFDEF UNICODE}
  430. ENUM_SERVICE_STATUS = ENUM_SERVICE_STATUSW;
  431. {$EXTERNALSYM ENUM_SERVICE_STATUS}
  432. LPENUM_SERVICE_STATUS = LPENUM_SERVICE_STATUSW;
  433. {$EXTERNALSYM LPENUM_SERVICE_STATUS}
  434. TEnumServiceStatus = TEnumServiceStatusW;
  435. PEnumServiceStatus = PEnumServiceStatusW;
  436. {$ELSE}
  437. ENUM_SERVICE_STATUS = ENUM_SERVICE_STATUSA;
  438. {$EXTERNALSYM ENUM_SERVICE_STATUS}
  439. LPENUM_SERVICE_STATUS = LPENUM_SERVICE_STATUSA;
  440. {$EXTERNALSYM LPENUM_SERVICE_STATUS}
  441. TEnumServiceStatus = TEnumServiceStatusA;
  442. PEnumServiceStatus = PEnumServiceStatusA;
  443. {$ENDIF UNICODE}
  444. LPENUM_SERVICE_STATUS_PROCESSA = ^ENUM_SERVICE_STATUS_PROCESSA;
  445. {$EXTERNALSYM LPENUM_SERVICE_STATUS_PROCESSA}
  446. _ENUM_SERVICE_STATUS_PROCESSA = record
  447. lpServiceName: LPSTR;
  448. lpDisplayName: LPSTR;
  449. ServiceStatusProcess: SERVICE_STATUS_PROCESS;
  450. end;
  451. {$EXTERNALSYM _ENUM_SERVICE_STATUS_PROCESSA}
  452. ENUM_SERVICE_STATUS_PROCESSA = _ENUM_SERVICE_STATUS_PROCESSA;
  453. {$EXTERNALSYM ENUM_SERVICE_STATUS_PROCESSA}
  454. TEnumServiceStatusProcessA = ENUM_SERVICE_STATUS_PROCESSA;
  455. PEnumServiceStatusProcessA = LPENUM_SERVICE_STATUS_PROCESSA;
  456. LPENUM_SERVICE_STATUS_PROCESSW = ^ENUM_SERVICE_STATUS_PROCESSW;
  457. {$EXTERNALSYM LPENUM_SERVICE_STATUS_PROCESSW}
  458. _ENUM_SERVICE_STATUS_PROCESSW = record
  459. lpServiceName: LPWSTR;
  460. lpDisplayName: LPWSTR;
  461. ServiceStatusProcess: SERVICE_STATUS_PROCESS;
  462. end;
  463. {$EXTERNALSYM _ENUM_SERVICE_STATUS_PROCESSW}
  464. ENUM_SERVICE_STATUS_PROCESSW = _ENUM_SERVICE_STATUS_PROCESSW;
  465. {$EXTERNALSYM ENUM_SERVICE_STATUS_PROCESSW}
  466. TEnumServiceStatusProcessW = ENUM_SERVICE_STATUS_PROCESSW;
  467. PEnumServiceStatusProcessW = LPENUM_SERVICE_STATUS_PROCESSW;
  468. {$IFDEF UNICODE}
  469. ENUM_SERVICE_STATUS_PROCESS = ENUM_SERVICE_STATUS_PROCESSW;
  470. {$EXTERNALSYM ENUM_SERVICE_STATUS_PROCESS}
  471. LPENUM_SERVICE_STATUS_PROCESS = LPENUM_SERVICE_STATUS_PROCESSW;
  472. {$EXTERNALSYM LPENUM_SERVICE_STATUS_PROCESS}
  473. TEnumServiceStatusProcess = TEnumServiceStatusProcessW;
  474. PEnumServiceStatusProcess = PEnumServiceStatusProcessW;
  475. {$ELSE}
  476. ENUM_SERVICE_STATUS_PROCESS = ENUM_SERVICE_STATUS_PROCESSA;
  477. {$EXTERNALSYM ENUM_SERVICE_STATUS_PROCESS}
  478. LPENUM_SERVICE_STATUS_PROCESS = LPENUM_SERVICE_STATUS_PROCESSA;
  479. {$EXTERNALSYM LPENUM_SERVICE_STATUS_PROCESS}
  480. TEnumServiceStatusProcess = TEnumServiceStatusProcessA;
  481. PEnumServiceStatusProcess = PEnumServiceStatusProcessA;
  482. {$ENDIF UNICODE}
  483. //
  484. // Structures for the Lock API functions
  485. //
  486. SC_LOCK = LPVOID;
  487. {$EXTERNALSYM SC_LOCK}
  488. LPQUERY_SERVICE_LOCK_STATUSA = ^QUERY_SERVICE_LOCK_STATUSA;
  489. {$EXTERNALSYM LPQUERY_SERVICE_LOCK_STATUSA}
  490. _QUERY_SERVICE_LOCK_STATUSA = record
  491. fIsLocked: DWORD;
  492. lpLockOwner: LPSTR;
  493. dwLockDuration: DWORD;
  494. end;
  495. {$EXTERNALSYM _QUERY_SERVICE_LOCK_STATUSA}
  496. QUERY_SERVICE_LOCK_STATUSA = _QUERY_SERVICE_LOCK_STATUSA;
  497. {$EXTERNALSYM QUERY_SERVICE_LOCK_STATUSA}
  498. TQueryServiceLockStatusA = QUERY_SERVICE_LOCK_STATUSA;
  499. PQueryServiceLockStatusA = LPQUERY_SERVICE_LOCK_STATUSA;
  500. LPQUERY_SERVICE_LOCK_STATUSW = ^QUERY_SERVICE_LOCK_STATUSW;
  501. {$EXTERNALSYM LPQUERY_SERVICE_LOCK_STATUSW}
  502. _QUERY_SERVICE_LOCK_STATUSW = record
  503. fIsLocked: DWORD;
  504. lpLockOwner: LPWSTR;
  505. dwLockDuration: DWORD;
  506. end;
  507. {$EXTERNALSYM _QUERY_SERVICE_LOCK_STATUSW}
  508. QUERY_SERVICE_LOCK_STATUSW = _QUERY_SERVICE_LOCK_STATUSW;
  509. {$EXTERNALSYM QUERY_SERVICE_LOCK_STATUSW}
  510. TQueryServiceLockStatusW = QUERY_SERVICE_LOCK_STATUSW;
  511. PQueryServiceLockStatusW = LPQUERY_SERVICE_LOCK_STATUSW;
  512. {$IFDEF UNICODE}
  513. QUERY_SERVICE_LOCK_STATUS = QUERY_SERVICE_LOCK_STATUSW;
  514. {$EXTERNALSYM QUERY_SERVICE_LOCK_STATUS}
  515. LPQUERY_SERVICE_LOCK_STATUS = LPQUERY_SERVICE_LOCK_STATUSW;
  516. {$EXTERNALSYM LPQUERY_SERVICE_LOCK_STATUS}
  517. TQueryServiceLockStatus = TQueryServiceLockStatusW;
  518. PQueryServiceLockStatus = PQueryServiceLockStatusW;
  519. {$ELSE}
  520. QUERY_SERVICE_LOCK_STATUS = QUERY_SERVICE_LOCK_STATUSA;
  521. {$EXTERNALSYM QUERY_SERVICE_LOCK_STATUS}
  522. LPQUERY_SERVICE_LOCK_STATUS = LPQUERY_SERVICE_LOCK_STATUSA;
  523. {$EXTERNALSYM LPQUERY_SERVICE_LOCK_STATUS}
  524. TQueryServiceLockStatus = TQueryServiceLockStatusA;
  525. PQueryServiceLockStatus = PQueryServiceLockStatusA;
  526. {$ENDIF UNICODE}
  527. //
  528. // Query Service Configuration Structure
  529. //
  530. LPQUERY_SERVICE_CONFIGA = ^QUERY_SERVICE_CONFIGA;
  531. {$EXTERNALSYM LPQUERY_SERVICE_CONFIGA}
  532. _QUERY_SERVICE_CONFIGA = record
  533. dwServiceType: DWORD;
  534. dwStartType: DWORD;
  535. dwErrorControl: DWORD;
  536. lpBinaryPathName: LPSTR;
  537. lpLoadOrderGroup: LPSTR;
  538. dwTagId: DWORD;
  539. lpDependencies: LPSTR;
  540. lpServiceStartName: LPSTR;
  541. lpDisplayName: LPSTR;
  542. end;
  543. {$EXTERNALSYM _QUERY_SERVICE_CONFIGA}
  544. QUERY_SERVICE_CONFIGA = _QUERY_SERVICE_CONFIGA;
  545. {$EXTERNALSYM QUERY_SERVICE_CONFIGA}
  546. TQueryServiceConfigA = QUERY_SERVICE_CONFIGA;
  547. PQueryServiceConfigA = LPQUERY_SERVICE_CONFIGA;
  548. LPQUERY_SERVICE_CONFIGW = ^QUERY_SERVICE_CONFIGW;
  549. {$EXTERNALSYM LPQUERY_SERVICE_CONFIGW}
  550. _QUERY_SERVICE_CONFIGW = record
  551. dwServiceType: DWORD;
  552. dwStartType: DWORD;
  553. dwErrorControl: DWORD;
  554. lpBinaryPathName: LPWSTR;
  555. lpLoadOrderGroup: LPWSTR;
  556. dwTagId: DWORD;
  557. lpDependencies: LPWSTR;
  558. lpServiceStartName: LPWSTR;
  559. lpDisplayName: LPWSTR;
  560. end;
  561. {$EXTERNALSYM _QUERY_SERVICE_CONFIGW}
  562. QUERY_SERVICE_CONFIGW = _QUERY_SERVICE_CONFIGW;
  563. {$EXTERNALSYM QUERY_SERVICE_CONFIGW}
  564. TQueryServiceConfigW = QUERY_SERVICE_CONFIGW;
  565. PQueryServiceConfigW = LPQUERY_SERVICE_CONFIGW;
  566. {$IFDEF UNICODE}
  567. QUERY_SERVICE_CONFIG = QUERY_SERVICE_CONFIGW;
  568. {$EXTERNALSYM QUERY_SERVICE_CONFIG}
  569. LPQUERY_SERVICE_CONFIG = LPQUERY_SERVICE_CONFIGW;
  570. {$EXTERNALSYM LPQUERY_SERVICE_CONFIG}
  571. TQueryServiceConfig = TQueryServiceConfigW;
  572. PQueryServiceConfig = PQueryServiceConfigW;
  573. {$ELSE}
  574. QUERY_SERVICE_CONFIG = QUERY_SERVICE_CONFIGA;
  575. {$EXTERNALSYM QUERY_SERVICE_CONFIG}
  576. LPQUERY_SERVICE_CONFIG = LPQUERY_SERVICE_CONFIGA;
  577. {$EXTERNALSYM LPQUERY_SERVICE_CONFIG}
  578. TQueryServiceConfig = TQueryServiceConfigA;
  579. PQueryServiceConfig = PQueryServiceConfigA;
  580. {$ENDIF UNICODE}
  581. //
  582. // Function Prototype for the Service Main Function
  583. //
  584. type
  585. LPSERVICE_MAIN_FUNCTIONW = procedure(dwNumServicesArgs: DWORD;
  586. lpServiceArgVectors: LPWSTR); stdcall;
  587. {$EXTERNALSYM LPSERVICE_MAIN_FUNCTIONW}
  588. LPSERVICE_MAIN_FUNCTIONA = procedure(dwNumServicesArgs: DWORD;
  589. lpServiceArgVectors: LPSTR); stdcall;
  590. {$EXTERNALSYM LPSERVICE_MAIN_FUNCTIONA}
  591. TServiceMainFunctionA = LPSERVICE_MAIN_FUNCTIONA;
  592. TServiceMainFunctionW = LPSERVICE_MAIN_FUNCTIONW;
  593. {$IFDEF UNICODE}
  594. LPSERVICE_MAIN_FUNCTION = LPSERVICE_MAIN_FUNCTIONW;
  595. {$EXTERNALSYM LPSERVICE_MAIN_FUNCTION}
  596. TServiceMainFunction = LPSERVICE_MAIN_FUNCTIONW;
  597. {$ELSE}
  598. LPSERVICE_MAIN_FUNCTION = LPSERVICE_MAIN_FUNCTIONA;
  599. {$EXTERNALSYM LPSERVICE_MAIN_FUNCTION}
  600. TServiceMainFunction = LPSERVICE_MAIN_FUNCTIONA;
  601. {$ENDIF UNICODE}
  602. //
  603. // Service Start Table
  604. //
  605. LPSERVICE_TABLE_ENTRYA = ^SERVICE_TABLE_ENTRYA;
  606. {$EXTERNALSYM LPSERVICE_TABLE_ENTRYA}
  607. _SERVICE_TABLE_ENTRYA = record
  608. lpServiceName: LPSTR;
  609. lpServiceProc: LPSERVICE_MAIN_FUNCTIONA;
  610. end;
  611. {$EXTERNALSYM _SERVICE_TABLE_ENTRYA}
  612. SERVICE_TABLE_ENTRYA = _SERVICE_TABLE_ENTRYA;
  613. {$EXTERNALSYM SERVICE_TABLE_ENTRYA}
  614. TServiceTableEntryA = SERVICE_TABLE_ENTRYA;
  615. PServiceTableEntryA = LPSERVICE_TABLE_ENTRYA;
  616. LPSERVICE_TABLE_ENTRYW = ^SERVICE_TABLE_ENTRYW;
  617. {$EXTERNALSYM LPSERVICE_TABLE_ENTRYW}
  618. _SERVICE_TABLE_ENTRYW = record
  619. lpServiceName: LPWSTR;
  620. lpServiceProc: LPSERVICE_MAIN_FUNCTIONW;
  621. end;
  622. {$EXTERNALSYM _SERVICE_TABLE_ENTRYW}
  623. SERVICE_TABLE_ENTRYW = _SERVICE_TABLE_ENTRYW;
  624. {$EXTERNALSYM SERVICE_TABLE_ENTRYW}
  625. TServiceTableEntryW = SERVICE_TABLE_ENTRYW;
  626. PServiceTableEntryW = LPSERVICE_TABLE_ENTRYW;
  627. {$IFDEF UNICODE}
  628. SERVICE_TABLE_ENTRY = SERVICE_TABLE_ENTRYW;
  629. LPSERVICE_TABLE_ENTRY = LPSERVICE_TABLE_ENTRYW;
  630. TServiceTableEntry = TServiceTableEntryW;
  631. PServiceTableEntry = PServiceTableEntryW;
  632. {$ELSE}
  633. SERVICE_TABLE_ENTRY = SERVICE_TABLE_ENTRYA;
  634. LPSERVICE_TABLE_ENTRY = LPSERVICE_TABLE_ENTRYA;
  635. TServiceTableEntry = TServiceTableEntryA;
  636. PServiceTableEntry = PServiceTableEntryA;
  637. {$ENDIF UNICODE}
  638. //
  639. // Prototype for the Service Control Handler Function
  640. //
  641. LPHANDLER_FUNCTION = procedure(dwControl: DWORD); stdcall;
  642. {$EXTERNALSYM LPHANDLER_FUNCTION}
  643. THandlerFunction = LPHANDLER_FUNCTION;
  644. LPHANDLER_FUNCTION_EX = function(dwControl, dwEventType: DWORD;
  645. lpEventData, lpContext: LPVOID): DWORD; stdcall;
  646. {$EXTERNALSYM LPHANDLER_FUNCTION_EX}
  647. THandlerFunctionEx = LPHANDLER_FUNCTION_EX;
  648. ///////////////////////////////////////////////////////////////////////////
  649. // API Function Prototypes
  650. ///////////////////////////////////////////////////////////////////////////
  651. function ChangeServiceConfigA(hService: SC_HANDLE; dwServiceType, dwStartType,
  652. dwErrorControl: DWORD; lpBinaryPathName, lpLoadOrderGroup: LPCSTR;
  653. lpdwTagId: LPDWORD; lpDependencies, lpServiceStartName, lpPassword,
  654. lpDisplayName: LPCSTR): BOOL; stdcall;
  655. {$EXTERNALSYM ChangeServiceConfigA}
  656. function ChangeServiceConfigW(hService: SC_HANDLE; dwServiceType, dwStartType,
  657. dwErrorControl: DWORD; lpBinaryPathName, lpLoadOrderGroup: LPCWSTR;
  658. lpdwTagId: LPDWORD; lpDependencies, lpServiceStartName, lpPassword,
  659. lpDisplayName: LPCWSTR): BOOL; stdcall;
  660. {$EXTERNALSYM ChangeServiceConfigW}
  661. function ChangeServiceConfig(hService: SC_HANDLE; dwServiceType, dwStartType,
  662. dwErrorControl: DWORD; lpBinaryPathName, lpLoadOrderGroup: LPCTSTR;
  663. lpdwTagId: LPDWORD; lpDependencies, lpServiceStartName, lpPassword,
  664. lpDisplayName: LPCTSTR): BOOL; stdcall;
  665. {$EXTERNALSYM ChangeServiceConfig}
  666. function ChangeServiceConfig2A(hService: SC_HANDLE; dwInfoLevel: DWORD;
  667. lpInfo: LPVOID): BOOL; stdcall;
  668. {$EXTERNALSYM ChangeServiceConfig2A}
  669. function ChangeServiceConfig2W(hService: SC_HANDLE; dwInfoLevel: DWORD;
  670. lpInfo: LPVOID): BOOL; stdcall;
  671. {$EXTERNALSYM ChangeServiceConfig2W}
  672. function ChangeServiceConfig2(hService: SC_HANDLE; dwInfoLevel: DWORD;
  673. lpInfo: LPVOID): BOOL; stdcall;
  674. {$EXTERNALSYM ChangeServiceConfig2}
  675. function CloseServiceHandle(hSCObject: SC_HANDLE): BOOL; stdcall;
  676. {$EXTERNALSYM CloseServiceHandle}
  677. function ControlService(hService: SC_HANDLE; dwControl: DWORD;
  678. var lpServiceStatus: SERVICE_STATUS): BOOL; stdcall;
  679. {$EXTERNALSYM ControlService}
  680. function CreateServiceA(hSCManager: SC_HANDLE; lpServiceName, lpDisplayName: LPCSTR;
  681. dwDesiredAccess, dwServiceType, dwStartType, dwErrorControl: DWORD;
  682. lpBinaryPathName, lpLoadOrderGroup: LPCSTR; lpdwTagId: LPDWORD;
  683. lpDependencies, lpServiceStartName, lpPassword: LPCSTR): SC_HANDLE; stdcall;
  684. {$EXTERNALSYM CreateServiceA}
  685. function CreateServiceW(hSCManager: SC_HANDLE; lpServiceName, lpDisplayName: LPCWSTR;
  686. dwDesiredAccess, dwServiceType, dwStartType, dwErrorControl: DWORD;
  687. lpBinaryPathName, lpLoadOrderGroup: LPCWSTR; lpdwTagId: LPDWORD;
  688. lpDependencies, lpServiceStartName, lpPassword: LPCWSTR): SC_HANDLE; stdcall;
  689. {$EXTERNALSYM CreateServiceW}
  690. function CreateService(hSCManager: SC_HANDLE; lpServiceName, lpDisplayName: LPCTSTR;
  691. dwDesiredAccess, dwServiceType, dwStartType, dwErrorControl: DWORD;
  692. lpBinaryPathName, lpLoadOrderGroup: LPCTSTR; lpdwTagId: LPDWORD;
  693. lpDependencies, lpServiceStartName, lpPassword: LPCTSTR): SC_HANDLE; stdcall;
  694. {$EXTERNALSYM CreateService}
  695. function DeleteService(hService: SC_HANDLE): BOOL; stdcall;
  696. {$EXTERNALSYM DeleteService}
  697. function EnumDependentServicesA(hService: SC_HANDLE; dwServiceState: DWORD;
  698. lpServices: LPENUM_SERVICE_STATUSA; cbBufSize: DWORD; var pcbBytesNeeded,
  699. lpServicesReturned: DWORD): BOOL; stdcall;
  700. {$EXTERNALSYM EnumDependentServicesA}
  701. function EnumDependentServicesW(hService: SC_HANDLE; dwServiceState: DWORD;
  702. lpServices: LPENUM_SERVICE_STATUSW; cbBufSize: DWORD; var pcbBytesNeeded,
  703. lpServicesReturned: DWORD): BOOL; stdcall;
  704. {$EXTERNALSYM EnumDependentServicesW}
  705. function EnumDependentServices(hService: SC_HANDLE; dwServiceState: DWORD;
  706. lpServices: LPENUM_SERVICE_STATUS; cbBufSize: DWORD; var pcbBytesNeeded,
  707. lpServicesReturned: DWORD): BOOL; stdcall;
  708. {$EXTERNALSYM EnumDependentServices}
  709. function EnumServicesStatusA(hSCManager: SC_HANDLE; dwServiceType: DWORD;
  710. dwServiceState: DWORD; lpServices: LPENUM_SERVICE_STATUSA; cbBufSize: DWORD;
  711. var pcbBytesNeeded, lpServicesReturned, lpResumeHandle: DWORD): BOOL; stdcall;
  712. {$EXTERNALSYM EnumServicesStatusA}
  713. function EnumServicesStatusW(hSCManager: SC_HANDLE; dwServiceType: DWORD;
  714. dwServiceState: DWORD; lpServices: LPENUM_SERVICE_STATUSW; cbBufSize: DWORD;
  715. var pcbBytesNeeded, lpServicesReturned, lpResumeHandle: DWORD): BOOL; stdcall;
  716. {$EXTERNALSYM EnumServicesStatusW}
  717. function EnumServicesStatus(hSCManager: SC_HANDLE; dwServiceType: DWORD;
  718. dwServiceState: DWORD; lpServices: LPENUM_SERVICE_STATUS; cbBufSize: DWORD;
  719. var pcbBytesNeeded, lpServicesReturned, lpResumeHandle: DWORD): BOOL; stdcall;
  720. {$EXTERNALSYM EnumServicesStatus}
  721. function EnumServicesStatusExA(hSCManager: SC_HANDLE; InfoLevel: SC_ENUM_TYPE;
  722. dwServiceType: DWORD; dwServiceState: DWORD; lpServices: LPBYTE;
  723. cbBufSize: DWORD; var pcbBytesNeeded, lpServicesReturned, lpResumeHandle: DWORD;
  724. pszGroupName: LPCSTR): BOOL; stdcall;
  725. {$EXTERNALSYM EnumServicesStatusExA}
  726. function EnumServicesStatusExW(hSCManager: SC_HANDLE; InfoLevel: SC_ENUM_TYPE;
  727. dwServiceType: DWORD; dwServiceState: DWORD; lpServices: LPBYTE;
  728. cbBufSize: DWORD; var pcbBytesNeeded, lpServicesReturned, lpResumeHandle: DWORD;
  729. pszGroupName: LPCWSTR): BOOL; stdcall;
  730. {$EXTERNALSYM EnumServicesStatusExW}
  731. function EnumServicesStatusEx(hSCManager: SC_HANDLE; InfoLevel: SC_ENUM_TYPE;
  732. dwServiceType: DWORD; dwServiceState: DWORD; lpServices: LPBYTE;
  733. cbBufSize: DWORD; var pcbBytesNeeded, lpServicesReturned, lpResumeHandle: DWORD;
  734. pszGroupName: LPCTSTR): BOOL; stdcall;
  735. {$EXTERNALSYM EnumServicesStatusEx}
  736. function GetServiceKeyNameA(hSCManager: SC_HANDLE; lpDisplayName: LPCSTR;
  737. lpServiceName: LPSTR; var lpcchBuffer: DWORD): BOOL; stdcall;
  738. {$EXTERNALSYM GetServiceKeyNameA}
  739. function GetServiceKeyNameW(hSCManager: SC_HANDLE; lpDisplayName: LPCWSTR;
  740. lpServiceName: LPWSTR; var lpcchBuffer: DWORD): BOOL; stdcall;
  741. {$EXTERNALSYM GetServiceKeyNameW}
  742. function GetServiceKeyName(hSCManager: SC_HANDLE; lpDisplayName: LPCTSTR;
  743. lpServiceName: LPTSTR; var lpcchBuffer: DWORD): BOOL; stdcall;
  744. {$EXTERNALSYM GetServiceKeyName}
  745. function GetServiceDisplayNameA(hSCManager: SC_HANDLE; lpServiceName: LPCSTR;
  746. lpDisplayName: LPSTR; var lpcchBuffer: DWORD): BOOL; stdcall;
  747. {$EXTERNALSYM GetServiceDisplayNameA}
  748. function GetServiceDisplayNameW(hSCManager: SC_HANDLE; lpServiceName: LPCWSTR;
  749. lpDisplayName: LPWSTR; var lpcchBuffer: DWORD): BOOL; stdcall;
  750. {$EXTERNALSYM GetServiceDisplayNameW}
  751. function GetServiceDisplayName(hSCManager: SC_HANDLE; lpServiceName: LPCTSTR;
  752. lpDisplayName: LPTSTR; var lpcchBuffer: DWORD): BOOL; stdcall;
  753. {$EXTERNALSYM GetServiceDisplayName}
  754. function LockServiceDatabase(hSCManager: SC_HANDLE): SC_LOCK; stdcall;
  755. {$EXTERNALSYM LockServiceDatabase}
  756. function NotifyBootConfigStatus(BootAcceptable: BOOL): BOOL; stdcall;
  757. {$EXTERNALSYM NotifyBootConfigStatus}
  758. function OpenSCManagerA(lpMachineName: LPCSTR; lpDatabaseName: LPCSTR;
  759. dwDesiredAccess: DWORD): SC_HANDLE; stdcall;
  760. {$EXTERNALSYM OpenSCManagerA}
  761. function OpenSCManagerW(lpMachineName: LPCWSTR; lpDatabaseName: LPCWSTR;
  762. dwDesiredAccess: DWORD): SC_HANDLE; stdcall;
  763. {$EXTERNALSYM OpenSCManagerW}
  764. function OpenSCManager(lpMachineName: LPCTSTR; lpDatabaseName: LPCTSTR;
  765. dwDesiredAccess: DWORD): SC_HANDLE; stdcall;
  766. {$EXTERNALSYM OpenSCManager}
  767. function OpenServiceA(hSCManager: SC_HANDLE; lpServiceName: LPCSTR;
  768. dwDesiredAccess: DWORD): SC_HANDLE; stdcall;
  769. {$EXTERNALSYM OpenServiceA}
  770. function OpenServiceW(hSCManager: SC_HANDLE; lpServiceName: LPCWSTR;
  771. dwDesiredAccess: DWORD): SC_HANDLE; stdcall;
  772. {$EXTERNALSYM OpenServiceW}
  773. function OpenService(hSCManager: SC_HANDLE; lpServiceName: LPCTSTR;
  774. dwDesiredAccess: DWORD): SC_HANDLE; stdcall;
  775. {$EXTERNALSYM OpenService}
  776. function QueryServiceConfigA(hService: SC_HANDLE;
  777. lpServiceConfig: LPQUERY_SERVICE_CONFIGA; cbBufSize: DWORD;
  778. var pcbBytesNeeded: DWORD): BOOL; stdcall;
  779. {$EXTERNALSYM QueryServiceConfigA}
  780. function QueryServiceConfigW(hService: SC_HANDLE;
  781. lpServiceConfig: LPQUERY_SERVICE_CONFIGW; cbBufSize: DWORD;
  782. var pcbBytesNeeded: DWORD): BOOL; stdcall;
  783. {$EXTERNALSYM QueryServiceConfigW}
  784. function QueryServiceConfig(hService: SC_HANDLE;
  785. lpServiceConfig: LPQUERY_SERVICE_CONFIG; cbBufSize: DWORD;
  786. var pcbBytesNeeded: DWORD): BOOL; stdcall;
  787. {$EXTERNALSYM QueryServiceConfig}
  788. function QueryServiceConfig2A(hService: SC_HANDLE; dwInfoLevel: DWORD;
  789. lpBuffer: LPBYTE; cbBufSize: DWORD; var pcbBytesNeeded: DWORD): BOOL; stdcall;
  790. {$EXTERNALSYM QueryServiceConfig2A}
  791. function QueryServiceConfig2W(hService: SC_HANDLE; dwInfoLevel: DWORD;
  792. lpBuffer: LPBYTE; cbBufSize: DWORD; var pcbBytesNeeded: DWORD): BOOL; stdcall;
  793. {$EXTERNALSYM QueryServiceConfig2W}
  794. function QueryServiceConfig2(hService: SC_HANDLE; dwInfoLevel: DWORD;
  795. lpBuffer: LPBYTE; cbBufSize: DWORD; var pcbBytesNeeded: DWORD): BOOL; stdcall;
  796. {$EXTERNALSYM QueryServiceConfig2}
  797. function QueryServiceLockStatusA(hSCManager: SC_HANDLE;
  798. lpLockStatus: LPQUERY_SERVICE_LOCK_STATUSA; cbBufSize: DWORD;
  799. var pcbBytesNeeded: DWORD): BOOL; stdcall;
  800. {$EXTERNALSYM QueryServiceLockStatusA}
  801. function QueryServiceLockStatusW(hSCManager: SC_HANDLE;
  802. lpLockStatus: LPQUERY_SERVICE_LOCK_STATUSW; cbBufSize: DWORD;
  803. var pcbBytesNeeded: DWORD): BOOL; stdcall;
  804. {$EXTERNALSYM QueryServiceLockStatusW}
  805. function QueryServiceLockStatus(hSCManager: SC_HANDLE;
  806. lpLockStatus: LPQUERY_SERVICE_LOCK_STATUS; cbBufSize: DWORD;
  807. var pcbBytesNeeded: DWORD): BOOL; stdcall;
  808. {$EXTERNALSYM QueryServiceLockStatus}
  809. function QueryServiceObjectSecurity(hService: SC_HANDLE;
  810. dwSecurityInformation: SECURITY_INFORMATION;
  811. var lpSecurityDescriptor: SECURITY_DESCRIPTOR; cbBufSize: DWORD;
  812. var pcbBytesNeeded: DWORD): BOOL; stdcall;
  813. {$EXTERNALSYM QueryServiceObjectSecurity}
  814. function QueryServiceStatus(hService: SC_HANDLE;
  815. var lpServiceStatus: SERVICE_STATUS): BOOL; stdcall;
  816. {$EXTERNALSYM QueryServiceStatus}
  817. function QueryServiceStatusEx(hService: SC_HANDLE; InfoLevel: SC_STATUS_TYPE;
  818. lpBuffer: LPBYTE; cbBufSize: DWORD; var pcbBytesNeeded: DWORD): BOOL; stdcall;
  819. {$EXTERNALSYM QueryServiceStatusEx}
  820. function RegisterServiceCtrlHandlerA(lpServiceName: LPCSTR;
  821. lpHandlerProc: LPHANDLER_FUNCTION): SERVICE_STATUS_HANDLE; stdcall;
  822. {$EXTERNALSYM RegisterServiceCtrlHandlerA}
  823. function RegisterServiceCtrlHandlerW(lpServiceName: LPCWSTR;
  824. lpHandlerProc: LPHANDLER_FUNCTION): SERVICE_STATUS_HANDLE; stdcall;
  825. {$EXTERNALSYM RegisterServiceCtrlHandlerW}
  826. function RegisterServiceCtrlHandler(lpServiceName: LPCTSTR;
  827. lpHandlerProc: LPHANDLER_FUNCTION): SERVICE_STATUS_HANDLE; stdcall;
  828. {$EXTERNALSYM RegisterServiceCtrlHandler}
  829. function RegisterServiceCtrlHandlerExA(lpServiceName: LPCSTR;
  830. lpHandlerProc: LPHANDLER_FUNCTION_EX; lpContext: LPVOID): SERVICE_STATUS_HANDLE; stdcall;
  831. {$EXTERNALSYM RegisterServiceCtrlHandlerExA}
  832. function RegisterServiceCtrlHandlerExW(lpServiceName: LPCWSTR;
  833. lpHandlerProc: LPHANDLER_FUNCTION_EX; lpContext: LPVOID): SERVICE_STATUS_HANDLE; stdcall;
  834. {$EXTERNALSYM RegisterServiceCtrlHandlerExW}
  835. function RegisterServiceCtrlHandlerEx(lpServiceName: LPCTSTR;
  836. lpHandlerProc: LPHANDLER_FUNCTION_EX; lpContext: LPVOID): SERVICE_STATUS_HANDLE; stdcall;
  837. {$EXTERNALSYM RegisterServiceCtrlHandlerEx}
  838. // 9/4/2002 Changed last parameter from const to pointer - reported by James Ots.
  839. function SetServiceObjectSecurity(hService: SC_HANDLE;
  840. dwSecurityInformation: SECURITY_INFORMATION;
  841. lpSecurityDescriptor: PSECURITY_DESCRIPTOR): BOOL; stdcall;
  842. {$EXTERNALSYM SetServiceObjectSecurity}
  843. function SetServiceStatus(hServiceStatus: SERVICE_STATUS_HANDLE;
  844. const lpServiceStatus: SERVICE_STATUS): BOOL; stdcall;
  845. {$EXTERNALSYM SetServiceStatus}
  846. function StartServiceCtrlDispatcherA(lpServiceStartTable: LPSERVICE_TABLE_ENTRYA): BOOL; stdcall;
  847. {$EXTERNALSYM StartServiceCtrlDispatcherA}
  848. function StartServiceCtrlDispatcherW(lpServiceStartTable: LPSERVICE_TABLE_ENTRYW): BOOL; stdcall;
  849. {$EXTERNALSYM StartServiceCtrlDispatcherW}
  850. function StartServiceCtrlDispatcher(lpServiceStartTable: LPSERVICE_TABLE_ENTRY): BOOL; stdcall;
  851. {$EXTERNALSYM StartServiceCtrlDispatcher}
  852. function StartServiceA(hService: SC_HANDLE; dwNumServiceArgs: DWORD;
  853. lpServiceArgVectors: LPCSTR): BOOL; stdcall;
  854. {$EXTERNALSYM StartServiceA}
  855. function StartServiceW(hService: SC_HANDLE; dwNumServiceArgs: DWORD;
  856. lpServiceArgVectors: LPCWSTR): BOOL; stdcall;
  857. {$EXTERNALSYM StartServiceW}
  858. function StartService(hService: SC_HANDLE; dwNumServiceArgs: DWORD;
  859. lpServiceArgVectors: LPCTSTR): BOOL; stdcall;
  860. {$EXTERNALSYM StartService}
  861. function UnlockServiceDatabase(ScLock: SC_LOCK): BOOL; stdcall;
  862. {$EXTERNALSYM UnlockServiceDatabase}
  863. {$ENDIF JWA_INTERFACESECTION}
  864. {$IFNDEF JWA_INCLUDEMODE}
  865. implementation
  866. uses
  867. JwaWinDLLNames;
  868. {$ENDIF !JWA_INCLUDEMODE}
  869. {$IFDEF JWA_IMPLEMENTATIONSECTION}
  870. {$IFDEF DYNAMIC_LINK}
  871. var
  872. _ChangeServiceConfigA: Pointer;
  873. function ChangeServiceConfigA;
  874. begin
  875. GetProcedureAddress(_ChangeServiceConfigA, advapi32, 'ChangeServiceConfigA');
  876. asm
  877. MOV ESP, EBP
  878. POP EBP
  879. JMP [_ChangeServiceConfigA]
  880. end;
  881. end;
  882. var
  883. _ChangeServiceConfigW: Pointer;
  884. function ChangeServiceConfigW;
  885. begin
  886. GetProcedureAddress(_ChangeServiceConfigW, advapi32, 'ChangeServiceConfigW');
  887. asm
  888. MOV ESP, EBP
  889. POP EBP
  890. JMP [_ChangeServiceConfigW]
  891. end;
  892. end;
  893. var
  894. _ChangeServiceConfig: Pointer;
  895. function ChangeServiceConfig;
  896. begin
  897. GetProcedureAddress(_ChangeServiceConfig, advapi32, 'ChangeServiceConfig' + AWSuffix);
  898. asm
  899. MOV ESP, EBP
  900. POP EBP
  901. JMP [_ChangeServiceConfig]
  902. end;
  903. end;
  904. var
  905. _ChangeServiceConfig2A: Pointer;
  906. function ChangeServiceConfig2A;
  907. begin
  908. GetProcedureAddress(_ChangeServiceConfig2A, advapi32, 'ChangeServiceConfig2A');
  909. asm
  910. MOV ESP, EBP
  911. POP EBP
  912. JMP [_ChangeServiceConfig2A]
  913. end;
  914. end;
  915. var
  916. _ChangeServiceConfig2W: Pointer;
  917. function ChangeServiceConfig2W;
  918. begin
  919. GetProcedureAddress(_ChangeServiceConfig2W, advapi32, 'ChangeServiceConfig2W');
  920. asm
  921. MOV ESP, EBP
  922. POP EBP
  923. JMP [_ChangeServiceConfig2W]
  924. end;
  925. end;
  926. var
  927. _ChangeServiceConfig2: Pointer;
  928. function ChangeServiceConfig2;
  929. begin
  930. GetProcedureAddress(_ChangeServiceConfig2, advapi32, 'ChangeServiceConfig2' + AWSuffix);
  931. asm
  932. MOV ESP, EBP
  933. POP EBP
  934. JMP [_ChangeServiceConfig2]
  935. end;
  936. end;
  937. var
  938. _CloseServiceHandle: Pointer;
  939. function CloseServiceHandle;
  940. begin
  941. GetProcedureAddress(_CloseServiceHandle, advapi32, 'CloseServiceHandle');
  942. asm
  943. MOV ESP, EBP
  944. POP EBP
  945. JMP [_CloseServiceHandle]
  946. end;
  947. end;
  948. var
  949. _ControlService: Pointer;
  950. function ControlService;
  951. begin
  952. GetProcedureAddress(_ControlService, advapi32, 'ControlService');
  953. asm
  954. MOV ESP, EBP
  955. POP EBP
  956. JMP [_ControlService]
  957. end;
  958. end;
  959. var
  960. _CreateServiceA: Pointer;
  961. function CreateServiceA;
  962. begin
  963. GetProcedureAddress(_CreateServiceA, advapi32, 'CreateServiceA');
  964. asm
  965. MOV ESP, EBP
  966. POP EBP
  967. JMP [_CreateServiceA]
  968. end;
  969. end;
  970. var
  971. _CreateServiceW: Pointer;
  972. function CreateServiceW;
  973. begin
  974. GetProcedureAddress(_CreateServiceW, advapi32, 'CreateServiceW');
  975. asm
  976. MOV ESP, EBP
  977. POP EBP
  978. JMP [_CreateServiceW]
  979. end;
  980. end;
  981. var
  982. _CreateService: Pointer;
  983. function CreateService;
  984. begin
  985. GetProcedureAddress(_CreateService, advapi32, 'CreateService' + AWSuffix);
  986. asm
  987. MOV ESP, EBP
  988. POP EBP
  989. JMP [_CreateService]
  990. end;
  991. end;
  992. var
  993. _DeleteService: Pointer;
  994. function DeleteService;
  995. begin
  996. GetProcedureAddress(_DeleteService, advapi32, 'DeleteService');
  997. asm
  998. MOV ESP, EBP
  999. POP EBP
  1000. JMP [_DeleteService]
  1001. end;
  1002. end;
  1003. var
  1004. _EnumDependentServicesA: Pointer;
  1005. function EnumDependentServicesA;
  1006. begin
  1007. GetProcedureAddress(_EnumDependentServicesA, advapi32, 'EnumDependentServicesA');
  1008. asm
  1009. MOV ESP, EBP
  1010. POP EBP
  1011. JMP [_EnumDependentServicesA]
  1012. end;
  1013. end;
  1014. var
  1015. _EnumDependentServicesW: Pointer;
  1016. function EnumDependentServicesW;
  1017. begin
  1018. GetProcedureAddress(_EnumDependentServicesW, advapi32, 'EnumDependentServicesW');
  1019. asm
  1020. MOV ESP, EBP
  1021. POP EBP
  1022. JMP [_EnumDependentServicesW]
  1023. end;
  1024. end;
  1025. var
  1026. _EnumDependentServices: Pointer;
  1027. function EnumDependentServices;
  1028. begin
  1029. GetProcedureAddress(_EnumDependentServices, advapi32, 'EnumDependentServices' + AWSuffix);
  1030. asm
  1031. MOV ESP, EBP
  1032. POP EBP
  1033. JMP [_EnumDependentServices]
  1034. end;
  1035. end;
  1036. var
  1037. _EnumServicesStatusA: Pointer;
  1038. function EnumServicesStatusA;
  1039. begin
  1040. GetProcedureAddress(_EnumServicesStatusA, advapi32, 'EnumServicesStatusA');
  1041. asm
  1042. MOV ESP, EBP
  1043. POP EBP
  1044. JMP [_EnumServicesStatusA]
  1045. end;
  1046. end;
  1047. var
  1048. _EnumServicesStatusW: Pointer;
  1049. function EnumServicesStatusW;
  1050. begin
  1051. GetProcedureAddress(_EnumServicesStatusW, advapi32, 'EnumServicesStatusW');
  1052. asm
  1053. MOV ESP, EBP
  1054. POP EBP
  1055. JMP [_EnumServicesStatusW]
  1056. end;
  1057. end;
  1058. var
  1059. _EnumServicesStatus: Pointer;
  1060. function EnumServicesStatus;
  1061. begin
  1062. GetProcedureAddress(_EnumServicesStatus, advapi32, 'EnumServicesStatus' + AWSuffix);
  1063. asm
  1064. MOV ESP, EBP
  1065. POP EBP
  1066. JMP [_EnumServicesStatus]
  1067. end;
  1068. end;
  1069. var
  1070. _EnumServicesStatusExA: Pointer;
  1071. function EnumServicesStatusExA;
  1072. begin
  1073. GetProcedureAddress(_EnumServicesStatusExA, advapi32, 'EnumServicesStatusExA');
  1074. asm
  1075. MOV ESP, EBP
  1076. POP EBP
  1077. JMP [_EnumServicesStatusExA]
  1078. end;
  1079. end;
  1080. var
  1081. _EnumServicesStatusExW: Pointer;
  1082. function EnumServicesStatusExW;
  1083. begin
  1084. GetProcedureAddress(_EnumServicesStatusExW, advapi32, 'EnumServicesStatusExW');
  1085. asm
  1086. MOV ESP, EBP
  1087. POP EBP
  1088. JMP [_EnumServicesStatusExW]
  1089. end;
  1090. end;
  1091. var
  1092. _EnumServicesStatusEx: Pointer;
  1093. function EnumServicesStatusEx;
  1094. begin
  1095. GetProcedureAddress(_EnumServicesStatusEx, advapi32, 'EnumServicesStatusEx' + AWSuffix);
  1096. asm
  1097. MOV ESP, EBP
  1098. POP EBP
  1099. JMP [_EnumServicesStatusEx]
  1100. end;
  1101. end;
  1102. var
  1103. _GetServiceKeyNameA: Pointer;
  1104. function GetServiceKeyNameA;
  1105. begin
  1106. GetProcedureAddress(_GetServiceKeyNameA, advapi32, 'GetServiceKeyNameA');
  1107. asm
  1108. MOV ESP, EBP
  1109. POP EBP
  1110. JMP [_GetServiceKeyNameA]
  1111. end;
  1112. end;
  1113. var
  1114. _GetServiceKeyNameW: Pointer;
  1115. function GetServiceKeyNameW;
  1116. begin
  1117. GetProcedureAddress(_GetServiceKeyNameW, advapi32, 'GetServiceKeyNameW');
  1118. asm
  1119. MOV ESP, EBP
  1120. POP EBP
  1121. JMP [_GetServiceKeyNameW]
  1122. end;
  1123. end;
  1124. var
  1125. _GetServiceKeyName: Pointer;
  1126. function GetServiceKeyName;
  1127. begin
  1128. GetProcedureAddress(_GetServiceKeyName, advapi32, 'GetServiceKeyName' + AWSuffix);
  1129. asm
  1130. MOV ESP, EBP
  1131. POP EBP
  1132. JMP [_GetServiceKeyName]
  1133. end;
  1134. end;
  1135. var
  1136. _GetServiceDisplayNameA: Pointer;
  1137. function GetServiceDisplayNameA;
  1138. begin
  1139. GetProcedureAddress(_GetServiceDisplayNameA, advapi32, 'GetServiceDisplayNameA');
  1140. asm
  1141. MOV ESP, EBP
  1142. POP EBP
  1143. JMP [_GetServiceDisplayNameA]
  1144. end;
  1145. end;
  1146. var
  1147. _GetServiceDisplayNameW: Pointer;
  1148. function GetServiceDisplayNameW;
  1149. begin
  1150. GetProcedureAddress(_GetServiceDisplayNameW, advapi32, 'GetServiceDisplayNameW');
  1151. asm
  1152. MOV ESP, EBP
  1153. POP EBP
  1154. JMP [_GetServiceDisplayNameW]
  1155. end;
  1156. end;
  1157. var
  1158. _GetServiceDisplayName: Pointer;
  1159. function GetServiceDisplayName;
  1160. begin
  1161. GetProcedureAddress(_GetServiceDisplayName, advapi32, 'GetServiceDisplayName' + AWSuffix);
  1162. asm
  1163. MOV ESP, EBP
  1164. POP EBP
  1165. JMP [_GetServiceDisplayName]
  1166. end;
  1167. end;
  1168. var
  1169. _LockServiceDatabase: Pointer;
  1170. function LockServiceDatabase;
  1171. begin
  1172. GetProcedureAddress(_LockServiceDatabase, advapi32, 'LockServiceDatabase');
  1173. asm
  1174. MOV ESP, EBP
  1175. POP EBP
  1176. JMP [_LockServiceDatabase]
  1177. end;
  1178. end;
  1179. var
  1180. _NotifyBootConfigStatus: Pointer;
  1181. function NotifyBootConfigStatus;
  1182. begin
  1183. GetProcedureAddress(_NotifyBootConfigStatus, advapi32, 'NotifyBootConfigStatus');
  1184. asm
  1185. MOV ESP, EBP
  1186. POP EBP
  1187. JMP [_NotifyBootConfigStatus]
  1188. end;
  1189. end;
  1190. var
  1191. _OpenSCManagerA: Pointer;
  1192. function OpenSCManagerA;
  1193. begin
  1194. GetProcedureAddress(_OpenSCManagerA, advapi32, 'OpenSCManagerA');
  1195. asm
  1196. MOV ESP, EBP
  1197. POP EBP
  1198. JMP [_OpenSCManagerA]
  1199. end;
  1200. end;
  1201. var
  1202. _OpenSCManagerW: Pointer;
  1203. function OpenSCManagerW;
  1204. begin
  1205. GetProcedureAddress(_OpenSCManagerW, advapi32, 'OpenSCManagerW');
  1206. asm
  1207. MOV ESP, EBP
  1208. POP EBP
  1209. JMP [_OpenSCManagerW]
  1210. end;
  1211. end;
  1212. var
  1213. _OpenSCManager: Pointer;
  1214. function OpenSCManager;
  1215. begin
  1216. GetProcedureAddress(_OpenSCManager, advapi32, 'OpenSCManager' + AWSuffix);
  1217. asm
  1218. MOV ESP, EBP
  1219. POP EBP
  1220. JMP [_OpenSCManager]
  1221. end;
  1222. end;
  1223. var
  1224. _OpenServiceA: Pointer;
  1225. function OpenServiceA;
  1226. begin
  1227. GetProcedureAddress(_OpenServiceA, advapi32, 'OpenServiceA');
  1228. asm
  1229. MOV ESP, EBP
  1230. POP EBP
  1231. JMP [_OpenServiceA]
  1232. end;
  1233. end;
  1234. var
  1235. _OpenServiceW: Pointer;
  1236. function OpenServiceW;
  1237. begin
  1238. GetProcedureAddress(_OpenServiceW, advapi32, 'OpenServiceW');
  1239. asm
  1240. MOV ESP, EBP
  1241. POP EBP
  1242. JMP [_OpenServiceW]
  1243. end;
  1244. end;
  1245. var
  1246. _OpenService: Pointer;
  1247. function OpenService;
  1248. begin
  1249. GetProcedureAddress(_OpenService, advapi32, 'OpenService' + AWSuffix);
  1250. asm
  1251. MOV ESP, EBP
  1252. POP EBP
  1253. JMP [_OpenService]
  1254. end;
  1255. end;
  1256. var
  1257. _QueryServiceConfigA: Pointer;
  1258. function QueryServiceConfigA;
  1259. begin
  1260. GetProcedureAddress(_QueryServiceConfigA, advapi32, 'QueryServiceConfigA');
  1261. asm
  1262. MOV ESP, EBP
  1263. POP EBP
  1264. JMP [_QueryServiceConfigA]
  1265. end;
  1266. end;
  1267. var
  1268. _QueryServiceConfigW: Pointer;
  1269. function QueryServiceConfigW;
  1270. begin
  1271. GetProcedureAddress(_QueryServiceConfigW, advapi32, 'QueryServiceConfigW');
  1272. asm
  1273. MOV ESP, EBP
  1274. POP EBP
  1275. JMP [_QueryServiceConfigW]
  1276. end;
  1277. end;
  1278. var
  1279. _QueryServiceConfig: Pointer;
  1280. function QueryServiceConfig;
  1281. begin
  1282. GetProcedureAddress(_QueryServiceConfig, advapi32, 'QueryServiceConfig' + AWSuffix);
  1283. asm
  1284. MOV ESP, EBP
  1285. POP EBP
  1286. JMP [_QueryServiceConfig]
  1287. end;
  1288. end;
  1289. var
  1290. _QueryServiceConfig2A: Pointer;
  1291. function QueryServiceConfig2A;
  1292. begin
  1293. GetProcedureAddress(_QueryServiceConfig2A, advapi32, 'QueryServiceConfig2A');
  1294. asm
  1295. MOV ESP, EBP
  1296. POP EBP
  1297. JMP [_QueryServiceConfig2A]
  1298. end;
  1299. end;
  1300. var
  1301. _QueryServiceConfig2W: Pointer;
  1302. function QueryServiceConfig2W;
  1303. begin
  1304. GetProcedureAddress(_QueryServiceConfig2W, advapi32, 'QueryServiceConfig2W');
  1305. asm
  1306. MOV ESP, EBP
  1307. POP EBP
  1308. JMP [_QueryServiceConfig2W]
  1309. end;
  1310. end;
  1311. var
  1312. _QueryServiceConfig2: Pointer;
  1313. function QueryServiceConfig2;
  1314. begin
  1315. GetProcedureAddress(_QueryServiceConfig2, advapi32, 'QueryServiceConfig2' + AWSuffix);
  1316. asm
  1317. MOV ESP, EBP
  1318. POP EBP
  1319. JMP [_QueryServiceConfig2]
  1320. end;
  1321. end;
  1322. var
  1323. _QueryServiceLockStatusA: Pointer;
  1324. function QueryServiceLockStatusA;
  1325. begin
  1326. GetProcedureAddress(_QueryServiceLockStatusA, advapi32, 'QueryServiceLockStatusA');
  1327. asm
  1328. MOV ESP, EBP
  1329. POP EBP
  1330. JMP [_QueryServiceLockStatusA]
  1331. end;
  1332. end;
  1333. var
  1334. _QueryServiceLockStatusW: Pointer;
  1335. function QueryServiceLockStatusW;
  1336. begin
  1337. GetProcedureAddress(_QueryServiceLockStatusW, advapi32, 'QueryServiceLockStatusW');
  1338. asm
  1339. MOV ESP, EBP
  1340. POP EBP
  1341. JMP [_QueryServiceLockStatusW]
  1342. end;
  1343. end;
  1344. var
  1345. _QueryServiceLockStatus: Pointer;
  1346. function QueryServiceLockStatus;
  1347. begin
  1348. GetProcedureAddress(_QueryServiceLockStatus, advapi32, 'QueryServiceLockStatus' + AWSuffix);
  1349. asm
  1350. MOV ESP, EBP
  1351. POP EBP
  1352. JMP [_QueryServiceLockStatus]
  1353. end;
  1354. end;
  1355. var
  1356. _QueryServiceObjectSecurity: Pointer;
  1357. function QueryServiceObjectSecurity;
  1358. begin
  1359. GetProcedureAddress(_QueryServiceObjectSecurity, advapi32, 'QueryServiceObjectSecurity');
  1360. asm
  1361. MOV ESP, EBP
  1362. POP EBP
  1363. JMP [_QueryServiceObjectSecurity]
  1364. end;
  1365. end;
  1366. var
  1367. _QueryServiceStatus: Pointer;
  1368. function QueryServiceStatus;
  1369. begin
  1370. GetProcedureAddress(_QueryServiceStatus, advapi32, 'QueryServiceStatus');
  1371. asm
  1372. MOV ESP, EBP
  1373. POP EBP
  1374. JMP [_QueryServiceStatus]
  1375. end;
  1376. end;
  1377. var
  1378. _QueryServiceStatusEx: Pointer;
  1379. function QueryServiceStatusEx;
  1380. begin
  1381. GetProcedureAddress(_QueryServiceStatusEx, advapi32, 'QueryServiceStatusEx');
  1382. asm
  1383. MOV ESP, EBP
  1384. POP EBP
  1385. JMP [_QueryServiceStatusEx]
  1386. end;
  1387. end;
  1388. var
  1389. _RegisterServiceCtrlHandlerA: Pointer;
  1390. function RegisterServiceCtrlHandlerA;
  1391. begin
  1392. GetProcedureAddress(_RegisterServiceCtrlHandlerA, advapi32, 'RegisterServiceCtrlHandlerA');
  1393. asm
  1394. MOV ESP, EBP
  1395. POP EBP
  1396. JMP [_RegisterServiceCtrlHandlerA]
  1397. end;
  1398. end;
  1399. var
  1400. _RegisterServiceCtrlHandlerW: Pointer;
  1401. function RegisterServiceCtrlHandlerW;
  1402. begin
  1403. GetProcedureAddress(_RegisterServiceCtrlHandlerW, advapi32, 'RegisterServiceCtrlHandlerW');
  1404. asm
  1405. MOV ESP, EBP
  1406. POP EBP
  1407. JMP [_RegisterServiceCtrlHandlerW]
  1408. end;
  1409. end;
  1410. var
  1411. _RegisterServiceCtrlHandler: Pointer;
  1412. function RegisterServiceCtrlHandler;
  1413. begin
  1414. GetProcedureAddress(_RegisterServiceCtrlHandler, advapi32, 'RegisterServiceCtrlHandler' + AWSuffix);
  1415. asm
  1416. MOV ESP, EBP
  1417. POP EBP
  1418. JMP [_RegisterServiceCtrlHandler]
  1419. end;
  1420. end;
  1421. var
  1422. _RegisterServiceCtrlHandlerExA: Pointer;
  1423. function RegisterServiceCtrlHandlerExA;
  1424. begin
  1425. GetProcedureAddress(_RegisterServiceCtrlHandlerExA, advapi32, 'RegisterServiceCtrlHandlerExA');
  1426. asm
  1427. MOV ESP, EBP
  1428. POP EBP
  1429. JMP [_RegisterServiceCtrlHandlerExA]
  1430. end;
  1431. end;
  1432. var
  1433. _RegisterServiceCtrlHandlerExW: Pointer;
  1434. function RegisterServiceCtrlHandlerExW;
  1435. begin
  1436. GetProcedureAddress(_RegisterServiceCtrlHandlerExW, advapi32, 'RegisterServiceCtrlHandlerExW');
  1437. asm
  1438. MOV ESP, EBP
  1439. POP EBP
  1440. JMP [_RegisterServiceCtrlHandlerExW]
  1441. end;
  1442. end;
  1443. var
  1444. _RegisterServiceCtrlHandlerEx: Pointer;
  1445. function RegisterServiceCtrlHandlerEx;
  1446. begin
  1447. GetProcedureAddress(_RegisterServiceCtrlHandlerEx, advapi32, 'RegisterServiceCtrlHandlerEx' + AWSuffix);
  1448. asm
  1449. MOV ESP, EBP
  1450. POP EBP
  1451. JMP [_RegisterServiceCtrlHandlerEx]
  1452. end;
  1453. end;
  1454. var
  1455. _SetServiceObjectSecurity: Pointer;
  1456. function SetServiceObjectSecurity;
  1457. begin
  1458. GetProcedureAddress(_SetServiceObjectSecurity, advapi32, 'SetServiceObjectSecurity');
  1459. asm
  1460. MOV ESP, EBP
  1461. POP EBP
  1462. JMP [_SetServiceObjectSecurity]
  1463. end;
  1464. end;
  1465. var
  1466. _SetServiceStatus: Pointer;
  1467. function SetServiceStatus;
  1468. begin
  1469. GetProcedureAddress(_SetServiceStatus, advapi32, 'SetServiceStatus');
  1470. asm
  1471. MOV ESP, EBP
  1472. POP EBP
  1473. JMP [_SetServiceStatus]
  1474. end;
  1475. end;
  1476. var
  1477. _StartServiceCtrlDispatcherA: Pointer;
  1478. function StartServiceCtrlDispatcherA;
  1479. begin
  1480. GetProcedureAddress(_StartServiceCtrlDispatcherA, advapi32, 'StartServiceCtrlDispatcherA');
  1481. asm
  1482. MOV ESP, EBP
  1483. POP EBP
  1484. JMP [_StartServiceCtrlDispatcherA]
  1485. end;
  1486. end;
  1487. var
  1488. _StartServiceCtrlDispatcherW: Pointer;
  1489. function StartServiceCtrlDispatcherW;
  1490. begin
  1491. GetProcedureAddress(_StartServiceCtrlDispatcherW, advapi32, 'StartServiceCtrlDispatcherW');
  1492. asm
  1493. MOV ESP, EBP
  1494. POP EBP
  1495. JMP [_StartServiceCtrlDispatcherW]
  1496. end;
  1497. end;
  1498. var
  1499. _StartServiceCtrlDispatcher: Pointer;
  1500. function StartServiceCtrlDispatcher;
  1501. begin
  1502. GetProcedureAddress(_StartServiceCtrlDispatcher, advapi32, 'StartServiceCtrlDispatcher' + AWSuffix);
  1503. asm
  1504. MOV ESP, EBP
  1505. POP EBP
  1506. JMP [_StartServiceCtrlDispatcher]
  1507. end;
  1508. end;
  1509. var
  1510. _StartServiceA: Pointer;
  1511. function StartServiceA;
  1512. begin
  1513. GetProcedureAddress(_StartServiceA, advapi32, 'StartServiceA');
  1514. asm
  1515. MOV ESP, EBP
  1516. POP EBP
  1517. JMP [_StartServiceA]
  1518. end;
  1519. end;
  1520. var
  1521. _StartServiceW: Pointer;
  1522. function StartServiceW;
  1523. begin
  1524. GetProcedureAddress(_StartServiceW, advapi32, 'StartServiceW');
  1525. asm
  1526. MOV ESP, EBP
  1527. POP EBP
  1528. JMP [_StartServiceW]
  1529. end;
  1530. end;
  1531. var
  1532. _StartService: Pointer;
  1533. function StartService;
  1534. begin
  1535. GetProcedureAddress(_StartService, advapi32, 'StartService' + AWSuffix);
  1536. asm
  1537. MOV ESP, EBP
  1538. POP EBP
  1539. JMP [_StartService]
  1540. end;
  1541. end;
  1542. var
  1543. _UnlockServiceDatabase: Pointer;
  1544. function UnlockServiceDatabase;
  1545. begin
  1546. GetProcedureAddress(_UnlockServiceDatabase, advapi32, 'UnlockServiceDatabase');
  1547. asm
  1548. MOV ESP, EBP
  1549. POP EBP
  1550. JMP [_UnlockServiceDatabase]
  1551. end;
  1552. end;
  1553. {$ELSE}
  1554. function ChangeServiceConfigA; external advapi32 name 'ChangeServiceConfigA';
  1555. function ChangeServiceConfigW; external advapi32 name 'ChangeServiceConfigW';
  1556. function ChangeServiceConfig; external advapi32 name 'ChangeServiceConfig' + AWSuffix;
  1557. function ChangeServiceConfig2A; external advapi32 name 'ChangeServiceConfig2A';
  1558. function ChangeServiceConfig2W; external advapi32 name 'ChangeServiceConfig2W';
  1559. function ChangeServiceConfig2; external advapi32 name 'ChangeServiceConfig2' + AWSuffix;
  1560. function CloseServiceHandle; external advapi32 name 'CloseServiceHandle';
  1561. function ControlService; external advapi32 name 'ControlService';
  1562. function CreateServiceA; external advapi32 name 'CreateServiceA';
  1563. function CreateServiceW; external advapi32 name 'CreateServiceW';
  1564. function CreateService; external advapi32 name 'CreateService' + AWSuffix;
  1565. function DeleteService; external advapi32 name 'DeleteService';
  1566. function EnumDependentServicesA; external advapi32 name 'EnumDependentServicesA';
  1567. function EnumDependentServicesW; external advapi32 name 'EnumDependentServicesW';
  1568. function EnumDependentServices; external advapi32 name 'EnumDependentServices' + AWSuffix;
  1569. function EnumServicesStatusA; external advapi32 name 'EnumServicesStatusA';
  1570. function EnumServicesStatusW; external advapi32 name 'EnumServicesStatusW';
  1571. function EnumServicesStatus; external advapi32 name 'EnumServicesStatus' + AWSuffix;
  1572. function EnumServicesStatusExA; external advapi32 name 'EnumServicesStatusExA';
  1573. function EnumServicesStatusExW; external advapi32 name 'EnumServicesStatusExW';
  1574. function EnumServicesStatusEx; external advapi32 name 'EnumServicesStatusEx' + AWSuffix;
  1575. function GetServiceKeyNameA; external advapi32 name 'GetServiceKeyNameA';
  1576. function GetServiceKeyNameW; external advapi32 name 'GetServiceKeyNameW';
  1577. function GetServiceKeyName; external advapi32 name 'GetServiceKeyName' + AWSuffix;
  1578. function GetServiceDisplayNameA; external advapi32 name 'GetServiceDisplayNameA';
  1579. function GetServiceDisplayNameW; external advapi32 name 'GetServiceDisplayNameW';
  1580. function GetServiceDisplayName; external advapi32 name 'GetServiceDisplayName' + AWSuffix;
  1581. function LockServiceDatabase; external advapi32 name 'LockServiceDatabase';
  1582. function NotifyBootConfigStatus; external advapi32 name 'NotifyBootConfigStatus';
  1583. function OpenSCManagerA; external advapi32 name 'OpenSCManagerA';
  1584. function OpenSCManagerW; external advapi32 name 'OpenSCManagerW';
  1585. function OpenSCManager; external advapi32 name 'OpenSCManager' + AWSuffix;
  1586. function OpenServiceA; external advapi32 name 'OpenServiceA';
  1587. function OpenServiceW; external advapi32 name 'OpenServiceW';
  1588. function OpenService; external advapi32 name 'OpenService' + AWSuffix;
  1589. function QueryServiceConfigA; external advapi32 name 'QueryServiceConfigA';
  1590. function QueryServiceConfigW; external advapi32 name 'QueryServiceConfigW';
  1591. function QueryServiceConfig; external advapi32 name 'QueryServiceConfig' + AWSuffix;
  1592. function QueryServiceConfig2A; external advapi32 name 'QueryServiceConfig2A';
  1593. function QueryServiceConfig2W; external advapi32 name 'QueryServiceConfig2W';
  1594. function QueryServiceConfig2; external advapi32 name 'QueryServiceConfig2' + AWSuffix;
  1595. function QueryServiceLockStatusA; external advapi32 name 'QueryServiceLockStatusA';
  1596. function QueryServiceLockStatusW; external advapi32 name 'QueryServiceLockStatusW';
  1597. function QueryServiceLockStatus; external advapi32 name 'QueryServiceLockStatus' + AWSuffix;
  1598. function QueryServiceObjectSecurity; external advapi32 name 'QueryServiceObjectSecurity';
  1599. function QueryServiceStatus; external advapi32 name 'QueryServiceStatus';
  1600. function QueryServiceStatusEx; external advapi32 name 'QueryServiceStatusEx';
  1601. function RegisterServiceCtrlHandlerA; external advapi32 name 'RegisterServiceCtrlHandlerA';
  1602. function RegisterServiceCtrlHandlerW; external advapi32 name 'RegisterServiceCtrlHandlerW';
  1603. function RegisterServiceCtrlHandler; external advapi32 name 'RegisterServiceCtrlHandler' + AWSuffix;
  1604. function RegisterServiceCtrlHandlerExA; external advapi32 name 'RegisterServiceCtrlHandlerExA';
  1605. function RegisterServiceCtrlHandlerExW; external advapi32 name 'RegisterServiceCtrlHandlerExW';
  1606. function RegisterServiceCtrlHandlerEx; external advapi32 name 'RegisterServiceCtrlHandlerEx' + AWSuffix;
  1607. function SetServiceObjectSecurity; external advapi32 name 'SetServiceObjectSecurity';
  1608. function SetServiceStatus; external advapi32 name 'SetServiceStatus';
  1609. function StartServiceCtrlDispatcherA; external advapi32 name 'StartServiceCtrlDispatcherA';
  1610. function StartServiceCtrlDispatcherW; external advapi32 name 'StartServiceCtrlDispatcherW';
  1611. function StartServiceCtrlDispatcher; external advapi32 name 'StartServiceCtrlDispatcher' + AWSuffix;
  1612. function StartServiceA; external advapi32 name 'StartServiceA';
  1613. function StartServiceW; external advapi32 name 'StartServiceW';
  1614. function StartService; external advapi32 name 'StartService' + AWSuffix;
  1615. function UnlockServiceDatabase; external advapi32 name 'UnlockServiceDatabase';
  1616. {$ENDIF DYNAMIC_LINK}
  1617. {$ENDIF JWA_IMPLEMENTATIONSECTION}
  1618. {$IFNDEF JWA_INCLUDEMODE}
  1619. end.
  1620. {$ENDIF !JWA_INCLUDEMODE}