jwawinsvc.pas 58 KB

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