Hex Artifact Content

Not logged in

Artifact 1045de9392b75c75eb14ce61d494a49cc771c640:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0040: 2a 2a 2a 2a 2a 2a 2a 2a 5c 0d 0a 2a 20 20 20 20  ********\..*    
0050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0060: 20 20 20 20 20 20 20 20 20 20 20 20 77 69 6e 73              wins
0070: 76 63 2e 64 20 20 20 20 20 20 20 20 20 20 20 20  vc.d            
0080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0090: 20 20 20 2a 0d 0a 2a 20 20 20 20 20 20 20 20 20     *..*         
00a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 0d                *.
00e0: 0a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .*              
00f0: 20 20 20 20 20 20 20 20 20 57 69 6e 64 6f 77 73           Windows
0100: 20 41 50 49 20 68 65 61 64 65 72 20 6d 6f 64 75   API header modu
0110: 6c 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20  le              
0120: 20 20 20 20 20 20 20 20 20 2a 0d 0a 2a 20 20 20           *..*   
0130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0170: 20 20 20 20 2a 0d 0a 2a 20 20 20 20 20 20 20 20      *..*        
0180: 20 20 20 20 20 20 20 20 20 54 72 61 6e 73 6c 61           Transla
0190: 74 65 64 20 66 72 6f 6d 20 4d 69 6e 47 57 20 57  ted from MinGW W
01a0: 69 6e 64 6f 77 73 20 68 65 61 64 65 72 73 20 20  indows headers  
01b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
01c0: 0d 0a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  ..*             
01d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79                by
01e0: 20 53 74 65 77 61 72 74 20 47 6f 72 64 6f 6e 20   Stewart Gordon 
01f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0200: 20 20 20 20 20 20 20 20 20 20 2a 0d 0a 2a 20 20            *..*  
0210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0250: 20 20 20 20 20 2a 0d 0a 2a 20 20 20 20 20 20 20       *..*       
0260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0270: 50 6c 61 63 65 64 20 69 6e 74 6f 20 70 75 62 6c  Placed into publ
0280: 69 63 20 64 6f 6d 61 69 6e 20 20 20 20 20 20 20  ic domain       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 2a 0d 0a 5c 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  *..\************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0d 0a 6d 6f  ***********/..mo
02f0: 64 75 6c 65 20 77 69 6e 33 32 2e 77 69 6e 73 76  dule win32.winsv
0300: 63 3b 0d 0a 70 72 61 67 6d 61 28 6c 69 62 2c 20  c;..pragma(lib, 
0310: 22 61 64 76 61 70 69 33 32 22 29 3b 0d 0a 0d 0a  "advapi32");....
0320: 70 72 69 76 61 74 65 20 69 6d 70 6f 72 74 20 77  private import w
0330: 69 6e 33 32 2e 77 33 32 61 70 69 2c 20 77 69 6e  in32.w32api, win
0340: 33 32 2e 77 69 6e 64 65 66 3b 0d 0a 0d 0a 2f 2f  32.windef;....//
0350: 20 46 49 58 4d 45 3a 20 63 68 65 63 6b 20 57 69   FIXME: check Wi
0360: 6e 64 6f 77 73 20 76 65 72 73 69 6f 6e 20 73 75  ndows version su
0370: 70 70 6f 72 74 0d 0a 0d 0a 63 6f 6e 73 74 20 54  pport....const T
0380: 43 48 41 52 5b 5d 0d 0a 09 53 45 52 56 49 43 45  CHAR[]...SERVICE
0390: 53 5f 41 43 54 49 56 45 5f 44 41 54 41 42 41 53  S_ACTIVE_DATABAS
03a0: 45 20 3d 20 22 53 65 72 76 69 63 65 73 41 63 74  E = "ServicesAct
03b0: 69 76 65 22 2c 0d 0a 09 53 45 52 56 49 43 45 53  ive",...SERVICES
03c0: 5f 46 41 49 4c 45 44 5f 44 41 54 41 42 41 53 45  _FAILED_DATABASE
03d0: 20 3d 20 22 53 65 72 76 69 63 65 73 46 61 69 6c   = "ServicesFail
03e0: 65 64 22 3b 0d 0a 0d 0a 63 6f 6e 73 74 20 54 43  ed";....const TC
03f0: 48 41 52 20 53 43 5f 47 52 4f 55 50 5f 49 44 45  HAR SC_GROUP_IDE
0400: 4e 54 49 46 49 45 52 20 3d 20 27 2b 27 3b 0d 0a  NTIFIER = '+';..
0410: 0d 0a 63 6f 6e 73 74 20 44 57 4f 52 44 0d 0a 09  ..const DWORD...
0420: 53 43 5f 4d 41 4e 41 47 45 52 5f 41 4c 4c 5f 41  SC_MANAGER_ALL_A
0430: 43 43 45 53 53 20 20 20 20 20 20 20 20 20 3d 20  CCESS         = 
0440: 30 78 66 30 30 33 66 2c 0d 0a 09 53 43 5f 4d 41  0xf003f,...SC_MA
0450: 4e 41 47 45 52 5f 43 4f 4e 4e 45 43 54 20 20 20  NAGER_CONNECT   
0460: 20 20 20 20 20 20 20 20 20 3d 20 20 31 2c 0d 0a           =  1,..
0470: 09 53 43 5f 4d 41 4e 41 47 45 52 5f 43 52 45 41  .SC_MANAGER_CREA
0480: 54 45 5f 53 45 52 56 49 43 45 20 20 20 20 20 3d  TE_SERVICE     =
0490: 20 20 32 2c 0d 0a 09 53 43 5f 4d 41 4e 41 47 45    2,...SC_MANAGE
04a0: 52 5f 45 4e 55 4d 45 52 41 54 45 5f 53 45 52 56  R_ENUMERATE_SERV
04b0: 49 43 45 20 20 3d 20 20 34 2c 0d 0a 09 53 43 5f  ICE  =  4,...SC_
04c0: 4d 41 4e 41 47 45 52 5f 4c 4f 43 4b 20 20 20 20  MANAGER_LOCK    
04d0: 20 20 20 20 20 20 20 20 20 20 20 3d 20 20 38 2c             =  8,
04e0: 0d 0a 09 53 43 5f 4d 41 4e 41 47 45 52 5f 51 55  ...SC_MANAGER_QU
04f0: 45 52 59 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 20  ERY_LOCK_STATUS 
0500: 20 3d 20 31 36 2c 0d 0a 09 53 43 5f 4d 41 4e 41   = 16,...SC_MANA
0510: 47 45 52 5f 4d 4f 44 49 46 59 5f 42 4f 4f 54 5f  GER_MODIFY_BOOT_
0520: 43 4f 4e 46 49 47 20 3d 20 33 32 3b 0d 0a 0d 0a  CONFIG = 32;....
0530: 63 6f 6e 73 74 20 44 57 4f 52 44 20 53 45 52 56  const DWORD SERV
0540: 49 43 45 5f 4e 4f 5f 43 48 41 4e 47 45 20 3d 20  ICE_NO_CHANGE = 
0550: 30 78 66 66 66 66 66 66 66 66 3b 0d 0a 0d 0a 65  0xffffffff;....e
0560: 6e 75 6d 20 3a 20 44 57 4f 52 44 20 7b 0d 0a 09  num : DWORD {...
0570: 53 45 52 56 49 43 45 5f 53 54 4f 50 50 45 44 20  SERVICE_STOPPED 
0580: 3d 20 31 2c 0d 0a 09 53 45 52 56 49 43 45 5f 53  = 1,...SERVICE_S
0590: 54 41 52 54 5f 50 45 4e 44 49 4e 47 2c 0d 0a 09  TART_PENDING,...
05a0: 53 45 52 56 49 43 45 5f 53 54 4f 50 5f 50 45 4e  SERVICE_STOP_PEN
05b0: 44 49 4e 47 2c 0d 0a 09 53 45 52 56 49 43 45 5f  DING,...SERVICE_
05c0: 52 55 4e 4e 49 4e 47 2c 0d 0a 09 53 45 52 56 49  RUNNING,...SERVI
05d0: 43 45 5f 43 4f 4e 54 49 4e 55 45 5f 50 45 4e 44  CE_CONTINUE_PEND
05e0: 49 4e 47 2c 0d 0a 09 53 45 52 56 49 43 45 5f 50  ING,...SERVICE_P
05f0: 41 55 53 45 5f 50 45 4e 44 49 4e 47 2c 0d 0a 09  AUSE_PENDING,...
0600: 53 45 52 56 49 43 45 5f 50 41 55 53 45 44 20 2f  SERVICE_PAUSED /
0610: 2f 20 3d 20 37 0d 0a 7d 0d 0a 0d 0a 63 6f 6e 73  / = 7..}....cons
0620: 74 20 44 57 4f 52 44 0d 0a 09 53 45 52 56 49 43  t DWORD...SERVIC
0630: 45 5f 41 43 43 45 50 54 5f 53 54 4f 50 20 20 20  E_ACCEPT_STOP   
0640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3d                 =
0650: 20 20 20 31 2c 0d 0a 09 53 45 52 56 49 43 45 5f     1,...SERVICE_
0660: 41 43 43 45 50 54 5f 50 41 55 53 45 5f 43 4f 4e  ACCEPT_PAUSE_CON
0670: 54 49 4e 55 45 20 20 20 20 20 20 20 20 3d 20 20  TINUE        =  
0680: 20 32 2c 0d 0a 09 53 45 52 56 49 43 45 5f 41 43   2,...SERVICE_AC
0690: 43 45 50 54 5f 53 48 55 54 44 4f 57 4e 20 20 20  CEPT_SHUTDOWN   
06a0: 20 20 20 20 20 20 20 20 20 20 20 3d 20 20 20 34             =   4
06b0: 2c 0d 0a 09 53 45 52 56 49 43 45 5f 41 43 43 45  ,...SERVICE_ACCE
06c0: 50 54 5f 50 41 52 41 4d 43 48 41 4e 47 45 20 20  PT_PARAMCHANGE  
06d0: 20 20 20 20 20 20 20 20 20 3d 20 20 20 38 2c 0d           =   8,.
06e0: 0a 09 53 45 52 56 49 43 45 5f 41 43 43 45 50 54  ..SERVICE_ACCEPT
06f0: 5f 4e 45 54 42 49 4e 44 43 48 41 4e 47 45 20 20  _NETBINDCHANGE  
0700: 20 20 20 20 20 20 20 3d 20 20 31 36 2c 0d 0a 09         =  16,...
0710: 53 45 52 56 49 43 45 5f 41 43 43 45 50 54 5f 48  SERVICE_ACCEPT_H
0720: 41 52 44 57 41 52 45 50 52 4f 46 49 4c 45 43 48  ARDWAREPROFILECH
0730: 41 4e 47 45 20 3d 20 20 33 32 2c 0d 0a 09 53 45  ANGE =  32,...SE
0740: 52 56 49 43 45 5f 41 43 43 45 50 54 5f 50 4f 57  RVICE_ACCEPT_POW
0750: 45 52 45 56 45 4e 54 20 20 20 20 20 20 20 20 20  EREVENT         
0760: 20 20 20 3d 20 20 36 34 2c 0d 0a 09 53 45 52 56     =  64,...SERV
0770: 49 43 45 5f 41 43 43 45 50 54 5f 53 45 53 53 49  ICE_ACCEPT_SESSI
0780: 4f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 20  ONCHANGE        
0790: 20 3d 20 31 32 38 3b 0d 0a 0d 0a 65 6e 75 6d 20   = 128;....enum 
07a0: 3a 20 44 57 4f 52 44 20 7b 0d 0a 09 53 45 52 56  : DWORD {...SERV
07b0: 49 43 45 5f 43 4f 4e 54 52 4f 4c 5f 53 54 4f 50  ICE_CONTROL_STOP
07c0: 20 3d 20 31 2c 0d 0a 09 53 45 52 56 49 43 45 5f   = 1,...SERVICE_
07d0: 43 4f 4e 54 52 4f 4c 5f 50 41 55 53 45 2c 0d 0a  CONTROL_PAUSE,..
07e0: 09 53 45 52 56 49 43 45 5f 43 4f 4e 54 52 4f 4c  .SERVICE_CONTROL
07f0: 5f 43 4f 4e 54 49 4e 55 45 2c 0d 0a 09 53 45 52  _CONTINUE,...SER
0800: 56 49 43 45 5f 43 4f 4e 54 52 4f 4c 5f 49 4e 54  VICE_CONTROL_INT
0810: 45 52 52 4f 47 41 54 45 2c 0d 0a 09 53 45 52 56  ERROGATE,...SERV
0820: 49 43 45 5f 43 4f 4e 54 52 4f 4c 5f 53 48 55 54  ICE_CONTROL_SHUT
0830: 44 4f 57 4e 2c 0d 0a 09 53 45 52 56 49 43 45 5f  DOWN,...SERVICE_
0840: 43 4f 4e 54 52 4f 4c 5f 50 41 52 41 4d 43 48 41  CONTROL_PARAMCHA
0850: 4e 47 45 2c 0d 0a 09 53 45 52 56 49 43 45 5f 43  NGE,...SERVICE_C
0860: 4f 4e 54 52 4f 4c 5f 4e 45 54 42 49 4e 44 41 44  ONTROL_NETBINDAD
0870: 44 2c 0d 0a 09 53 45 52 56 49 43 45 5f 43 4f 4e  D,...SERVICE_CON
0880: 54 52 4f 4c 5f 4e 45 54 42 49 4e 44 52 45 4d 4f  TROL_NETBINDREMO
0890: 56 45 2c 0d 0a 09 53 45 52 56 49 43 45 5f 43 4f  VE,...SERVICE_CO
08a0: 4e 54 52 4f 4c 5f 4e 45 54 42 49 4e 44 45 4e 41  NTROL_NETBINDENA
08b0: 42 4c 45 2c 0d 0a 09 53 45 52 56 49 43 45 5f 43  BLE,...SERVICE_C
08c0: 4f 4e 54 52 4f 4c 5f 4e 45 54 42 49 4e 44 44 49  ONTROL_NETBINDDI
08d0: 53 41 42 4c 45 2c 0d 0a 09 53 45 52 56 49 43 45  SABLE,...SERVICE
08e0: 5f 43 4f 4e 54 52 4f 4c 5f 44 45 56 49 43 45 45  _CONTROL_DEVICEE
08f0: 56 45 4e 54 2c 0d 0a 09 53 45 52 56 49 43 45 5f  VENT,...SERVICE_
0900: 43 4f 4e 54 52 4f 4c 5f 48 41 52 44 57 41 52 45  CONTROL_HARDWARE
0910: 50 52 4f 46 49 4c 45 43 48 41 4e 47 45 2c 0d 0a  PROFILECHANGE,..
0920: 09 53 45 52 56 49 43 45 5f 43 4f 4e 54 52 4f 4c  .SERVICE_CONTROL
0930: 5f 50 4f 57 45 52 45 56 45 4e 54 2c 0d 0a 09 53  _POWEREVENT,...S
0940: 45 52 56 49 43 45 5f 43 4f 4e 54 52 4f 4c 5f 53  ERVICE_CONTROL_S
0950: 45 53 53 49 4f 4e 43 48 41 4e 47 45 2c 20 2f 2f  ESSIONCHANGE, //
0960: 20 3d 20 31 34 0d 0a 7d 0d 0a 0d 0a 65 6e 75 6d   = 14..}....enum
0970: 20 3a 20 44 57 4f 52 44 20 7b 0d 0a 09 53 45 52   : DWORD {...SER
0980: 56 49 43 45 5f 41 43 54 49 56 45 20 3d 20 31 2c  VICE_ACTIVE = 1,
0990: 0d 0a 09 53 45 52 56 49 43 45 5f 49 4e 41 43 54  ...SERVICE_INACT
09a0: 49 56 45 2c 0d 0a 09 53 45 52 56 49 43 45 5f 53  IVE,...SERVICE_S
09b0: 54 41 54 45 5f 41 4c 4c 0d 0a 7d 0d 0a 0d 0a 63  TATE_ALL..}....c
09c0: 6f 6e 73 74 20 44 57 4f 52 44 0d 0a 09 53 45 52  onst DWORD...SER
09d0: 56 49 43 45 5f 51 55 45 52 59 5f 43 4f 4e 46 49  VICE_QUERY_CONFI
09e0: 47 20 20 20 20 20 20 20 20 20 3d 20 30 78 30 30  G         = 0x00
09f0: 30 31 2c 0d 0a 09 53 45 52 56 49 43 45 5f 43 48  01,...SERVICE_CH
0a00: 41 4e 47 45 5f 43 4f 4e 46 49 47 20 20 20 20 20  ANGE_CONFIG     
0a10: 20 20 20 3d 20 30 78 30 30 30 32 2c 0d 0a 09 53     = 0x0002,...S
0a20: 45 52 56 49 43 45 5f 51 55 45 52 59 5f 53 54 41  ERVICE_QUERY_STA
0a30: 54 55 53 20 20 20 20 20 20 20 20 20 3d 20 30 78  TUS         = 0x
0a40: 30 30 30 34 2c 0d 0a 09 53 45 52 56 49 43 45 5f  0004,...SERVICE_
0a50: 45 4e 55 4d 45 52 41 54 45 5f 44 45 50 45 4e 44  ENUMERATE_DEPEND
0a60: 45 4e 54 53 20 3d 20 30 78 30 30 30 38 2c 0d 0a  ENTS = 0x0008,..
0a70: 09 53 45 52 56 49 43 45 5f 53 54 41 52 54 20 20  .SERVICE_START  
0a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3d 20                = 
0a90: 30 78 30 30 31 30 2c 0d 0a 09 53 45 52 56 49 43  0x0010,...SERVIC
0aa0: 45 5f 53 54 4f 50 20 20 20 20 20 20 20 20 20 20  E_STOP          
0ab0: 20 20 20 20 20 20 20 3d 20 30 78 30 30 32 30 2c         = 0x0020,
0ac0: 0d 0a 09 53 45 52 56 49 43 45 5f 50 41 55 53 45  ...SERVICE_PAUSE
0ad0: 5f 43 4f 4e 54 49 4e 55 45 20 20 20 20 20 20 20  _CONTINUE       
0ae0: 3d 20 30 78 30 30 34 30 2c 0d 0a 09 53 45 52 56  = 0x0040,...SERV
0af0: 49 43 45 5f 49 4e 54 45 52 52 4f 47 41 54 45 20  ICE_INTERROGATE 
0b00: 20 20 20 20 20 20 20 20 20 3d 20 30 78 30 30 38           = 0x008
0b10: 30 2c 0d 0a 09 53 45 52 56 49 43 45 5f 55 53 45  0,...SERVICE_USE
0b20: 52 5f 44 45 46 49 4e 45 44 5f 43 4f 4e 54 52 4f  R_DEFINED_CONTRO
0b30: 4c 20 3d 20 30 78 30 31 30 30 2c 0d 0a 09 53 45  L = 0x0100,...SE
0b40: 52 56 49 43 45 5f 41 4c 4c 5f 41 43 43 45 53 53  RVICE_ALL_ACCESS
0b50: 20 20 20 20 20 20 20 20 20 20 20 3d 20 30 78 30             = 0x0
0b60: 31 46 46 20 7c 20 53 54 41 4e 44 41 52 44 5f 52  1FF | STANDARD_R
0b70: 49 47 48 54 53 5f 52 45 51 55 49 52 45 44 3b 0d  IGHTS_REQUIRED;.
0b80: 0a 0d 0a 2f 2f 20 54 68 69 73 20 69 73 20 6e 6f  ...// This is no
0b90: 74 20 64 6f 63 75 6d 65 6e 74 65 64 20 6f 6e 20  t documented on 
0ba0: 74 68 65 20 4d 53 44 4e 20 73 69 74 65 0d 0a 63  the MSDN site..c
0bb0: 6f 6e 73 74 20 53 45 52 56 49 43 45 5f 52 55 4e  onst SERVICE_RUN
0bc0: 53 5f 49 4e 5f 53 59 53 54 45 4d 5f 50 52 4f 43  S_IN_SYSTEM_PROC
0bd0: 45 53 53 20 3d 20 31 3b 0d 0a 0d 0a 65 6e 75 6d  ESS = 1;....enum
0be0: 20 3a 20 44 57 4f 52 44 20 7b 0d 0a 09 53 45 52   : DWORD {...SER
0bf0: 56 49 43 45 5f 43 4f 4e 46 49 47 5f 44 45 53 43  VICE_CONFIG_DESC
0c00: 52 49 50 54 49 4f 4e 20 20 20 20 20 20 20 20 20  RIPTION         
0c10: 3d 20 31 2c 0d 0a 09 53 45 52 56 49 43 45 5f 43  = 1,...SERVICE_C
0c20: 4f 4e 46 49 47 5f 46 41 49 4c 55 52 45 5f 41 43  ONFIG_FAILURE_AC
0c30: 54 49 4f 4e 53 2c 0d 0a 09 53 45 52 56 49 43 45  TIONS,...SERVICE
0c40: 5f 43 4f 4e 46 49 47 5f 44 45 4c 41 59 45 44 5f  _CONFIG_DELAYED_
0c50: 41 55 54 4f 5f 53 54 41 52 54 5f 49 4e 46 4f 2c  AUTO_START_INFO,
0c60: 0d 0a 09 53 45 52 56 49 43 45 5f 43 4f 4e 46 49  ...SERVICE_CONFI
0c70: 47 5f 46 41 49 4c 55 52 45 5f 41 43 54 49 4f 4e  G_FAILURE_ACTION
0c80: 53 5f 46 4c 41 47 2c 0d 0a 09 53 45 52 56 49 43  S_FLAG,...SERVIC
0c90: 45 5f 43 4f 4e 46 49 47 5f 53 45 52 56 49 43 45  E_CONFIG_SERVICE
0ca0: 5f 53 49 44 5f 49 4e 46 4f 2c 0d 0a 09 53 45 52  _SID_INFO,...SER
0cb0: 56 49 43 45 5f 43 4f 4e 46 49 47 5f 52 45 51 55  VICE_CONFIG_REQU
0cc0: 49 52 45 44 5f 50 52 49 56 49 4c 45 47 45 53 5f  IRED_PRIVILEGES_
0cd0: 49 4e 46 4f 2c 0d 0a 09 53 45 52 56 49 43 45 5f  INFO,...SERVICE_
0ce0: 43 4f 4e 46 49 47 5f 50 52 45 53 48 55 54 44 4f  CONFIG_PRESHUTDO
0cf0: 57 4e 5f 49 4e 46 4f 20 2f 2f 20 3d 20 37 0d 0a  WN_INFO // = 7..
0d00: 7d 0d 0a 0d 0a 73 74 72 75 63 74 20 53 45 52 56  }....struct SERV
0d10: 49 43 45 5f 53 54 41 54 55 53 20 7b 0d 0a 09 44  ICE_STATUS {...D
0d20: 57 4f 52 44 20 64 77 53 65 72 76 69 63 65 54 79  WORD dwServiceTy
0d30: 70 65 3b 0d 0a 09 44 57 4f 52 44 20 64 77 43 75  pe;...DWORD dwCu
0d40: 72 72 65 6e 74 53 74 61 74 65 3b 0d 0a 09 44 57  rrentState;...DW
0d50: 4f 52 44 20 64 77 43 6f 6e 74 72 6f 6c 73 41 63  ORD dwControlsAc
0d60: 63 65 70 74 65 64 3b 0d 0a 09 44 57 4f 52 44 20  cepted;...DWORD 
0d70: 64 77 57 69 6e 33 32 45 78 69 74 43 6f 64 65 3b  dwWin32ExitCode;
0d80: 0d 0a 09 44 57 4f 52 44 20 64 77 53 65 72 76 69  ...DWORD dwServi
0d90: 63 65 53 70 65 63 69 66 69 63 45 78 69 74 43 6f  ceSpecificExitCo
0da0: 64 65 3b 0d 0a 09 44 57 4f 52 44 20 64 77 43 68  de;...DWORD dwCh
0db0: 65 63 6b 50 6f 69 6e 74 3b 0d 0a 09 44 57 4f 52  eckPoint;...DWOR
0dc0: 44 20 64 77 57 61 69 74 48 69 6e 74 3b 0d 0a 7d  D dwWaitHint;..}
0dd0: 0d 0a 61 6c 69 61 73 20 53 45 52 56 49 43 45 5f  ..alias SERVICE_
0de0: 53 54 41 54 55 53 2a 20 4c 50 53 45 52 56 49 43  STATUS* LPSERVIC
0df0: 45 5f 53 54 41 54 55 53 3b 0d 0a 0d 0a 73 74 72  E_STATUS;....str
0e00: 75 63 74 20 45 4e 55 4d 5f 53 45 52 56 49 43 45  uct ENUM_SERVICE
0e10: 5f 53 54 41 54 55 53 41 20 7b 0d 0a 09 4c 50 53  _STATUSA {...LPS
0e20: 54 52 20 20 20 20 20 20 20 20 20 20 6c 70 53 65  TR          lpSe
0e30: 72 76 69 63 65 4e 61 6d 65 3b 0d 0a 09 4c 50 53  rviceName;...LPS
0e40: 54 52 20 20 20 20 20 20 20 20 20 20 6c 70 44 69  TR          lpDi
0e50: 73 70 6c 61 79 4e 61 6d 65 3b 0d 0a 09 53 45 52  splayName;...SER
0e60: 56 49 43 45 5f 53 54 41 54 55 53 20 53 65 72 76  VICE_STATUS Serv
0e70: 69 63 65 53 74 61 74 75 73 3b 0d 0a 7d 0d 0a 61  iceStatus;..}..a
0e80: 6c 69 61 73 20 45 4e 55 4d 5f 53 45 52 56 49 43  lias ENUM_SERVIC
0e90: 45 5f 53 54 41 54 55 53 41 2a 20 4c 50 45 4e 55  E_STATUSA* LPENU
0ea0: 4d 5f 53 45 52 56 49 43 45 5f 53 54 41 54 55 53  M_SERVICE_STATUS
0eb0: 41 3b 0d 0a 0d 0a 73 74 72 75 63 74 20 45 4e 55  A;....struct ENU
0ec0: 4d 5f 53 45 52 56 49 43 45 5f 53 54 41 54 55 53  M_SERVICE_STATUS
0ed0: 57 20 7b 0d 0a 09 4c 50 57 53 54 52 20 20 20 20  W {...LPWSTR    
0ee0: 20 20 20 20 20 6c 70 53 65 72 76 69 63 65 4e 61       lpServiceNa
0ef0: 6d 65 3b 0d 0a 09 4c 50 57 53 54 52 20 20 20 20  me;...LPWSTR    
0f00: 20 20 20 20 20 6c 70 44 69 73 70 6c 61 79 4e 61       lpDisplayNa
0f10: 6d 65 3b 0d 0a 09 53 45 52 56 49 43 45 5f 53 54  me;...SERVICE_ST
0f20: 41 54 55 53 20 53 65 72 76 69 63 65 53 74 61 74  ATUS ServiceStat
0f30: 75 73 3b 0d 0a 7d 0d 0a 61 6c 69 61 73 20 45 4e  us;..}..alias EN
0f40: 55 4d 5f 53 45 52 56 49 43 45 5f 53 54 41 54 55  UM_SERVICE_STATU
0f50: 53 57 2a 20 4c 50 45 4e 55 4d 5f 53 45 52 56 49  SW* LPENUM_SERVI
0f60: 43 45 5f 53 54 41 54 55 53 57 3b 0d 0a 0d 0a 73  CE_STATUSW;....s
0f70: 74 72 75 63 74 20 51 55 45 52 59 5f 53 45 52 56  truct QUERY_SERV
0f80: 49 43 45 5f 43 4f 4e 46 49 47 41 20 7b 0d 0a 09  ICE_CONFIGA {...
0f90: 44 57 4f 52 44 20 64 77 53 65 72 76 69 63 65 54  DWORD dwServiceT
0fa0: 79 70 65 3b 0d 0a 09 44 57 4f 52 44 20 64 77 53  ype;...DWORD dwS
0fb0: 74 61 72 74 54 79 70 65 3b 0d 0a 09 44 57 4f 52  tartType;...DWOR
0fc0: 44 20 64 77 45 72 72 6f 72 43 6f 6e 74 72 6f 6c  D dwErrorControl
0fd0: 3b 0d 0a 09 4c 50 53 54 52 20 6c 70 42 69 6e 61  ;...LPSTR lpBina
0fe0: 72 79 50 61 74 68 4e 61 6d 65 3b 0d 0a 09 4c 50  ryPathName;...LP
0ff0: 53 54 52 20 6c 70 4c 6f 61 64 4f 72 64 65 72 47  STR lpLoadOrderG
1000: 72 6f 75 70 3b 0d 0a 09 44 57 4f 52 44 20 64 77  roup;...DWORD dw
1010: 54 61 67 49 64 3b 0d 0a 09 4c 50 53 54 52 20 6c  TagId;...LPSTR l
1020: 70 44 65 70 65 6e 64 65 6e 63 69 65 73 3b 0d 0a  pDependencies;..
1030: 09 4c 50 53 54 52 20 6c 70 53 65 72 76 69 63 65  .LPSTR lpService
1040: 53 74 61 72 74 4e 61 6d 65 3b 0d 0a 09 4c 50 53  StartName;...LPS
1050: 54 52 20 6c 70 44 69 73 70 6c 61 79 4e 61 6d 65  TR lpDisplayName
1060: 3b 0d 0a 7d 0d 0a 61 6c 69 61 73 20 51 55 45 52  ;..}..alias QUER
1070: 59 5f 53 45 52 56 49 43 45 5f 43 4f 4e 46 49 47  Y_SERVICE_CONFIG
1080: 41 2a 20 4c 50 51 55 45 52 59 5f 53 45 52 56 49  A* LPQUERY_SERVI
1090: 43 45 5f 43 4f 4e 46 49 47 41 3b 0d 0a 0d 0a 73  CE_CONFIGA;....s
10a0: 74 72 75 63 74 20 51 55 45 52 59 5f 53 45 52 56  truct QUERY_SERV
10b0: 49 43 45 5f 43 4f 4e 46 49 47 57 20 7b 0d 0a 09  ICE_CONFIGW {...
10c0: 44 57 4f 52 44 20 20 64 77 53 65 72 76 69 63 65  DWORD  dwService
10d0: 54 79 70 65 3b 0d 0a 09 44 57 4f 52 44 20 20 64  Type;...DWORD  d
10e0: 77 53 74 61 72 74 54 79 70 65 3b 0d 0a 09 44 57  wStartType;...DW
10f0: 4f 52 44 20 20 64 77 45 72 72 6f 72 43 6f 6e 74  ORD  dwErrorCont
1100: 72 6f 6c 3b 0d 0a 09 4c 50 57 53 54 52 20 6c 70  rol;...LPWSTR lp
1110: 42 69 6e 61 72 79 50 61 74 68 4e 61 6d 65 3b 0d  BinaryPathName;.
1120: 0a 09 4c 50 57 53 54 52 20 6c 70 4c 6f 61 64 4f  ..LPWSTR lpLoadO
1130: 72 64 65 72 47 72 6f 75 70 3b 0d 0a 09 44 57 4f  rderGroup;...DWO
1140: 52 44 20 20 64 77 54 61 67 49 64 3b 0d 0a 09 4c  RD  dwTagId;...L
1150: 50 57 53 54 52 20 6c 70 44 65 70 65 6e 64 65 6e  PWSTR lpDependen
1160: 63 69 65 73 3b 0d 0a 09 4c 50 57 53 54 52 20 6c  cies;...LPWSTR l
1170: 70 53 65 72 76 69 63 65 53 74 61 72 74 4e 61 6d  pServiceStartNam
1180: 65 3b 0d 0a 09 4c 50 57 53 54 52 20 6c 70 44 69  e;...LPWSTR lpDi
1190: 73 70 6c 61 79 4e 61 6d 65 3b 0d 0a 7d 0d 0a 61  splayName;..}..a
11a0: 6c 69 61 73 20 51 55 45 52 59 5f 53 45 52 56 49  lias QUERY_SERVI
11b0: 43 45 5f 43 4f 4e 46 49 47 57 2a 20 4c 50 51 55  CE_CONFIGW* LPQU
11c0: 45 52 59 5f 53 45 52 56 49 43 45 5f 43 4f 4e 46  ERY_SERVICE_CONF
11d0: 49 47 57 3b 0d 0a 0d 0a 73 74 72 75 63 74 20 51  IGW;....struct Q
11e0: 55 45 52 59 5f 53 45 52 56 49 43 45 5f 4c 4f 43  UERY_SERVICE_LOC
11f0: 4b 5f 53 54 41 54 55 53 41 20 7b 0d 0a 09 44 57  K_STATUSA {...DW
1200: 4f 52 44 20 66 49 73 4c 6f 63 6b 65 64 3b 0d 0a  ORD fIsLocked;..
1210: 09 4c 50 53 54 52 20 6c 70 4c 6f 63 6b 4f 77 6e  .LPSTR lpLockOwn
1220: 65 72 3b 0d 0a 09 44 57 4f 52 44 20 64 77 4c 6f  er;...DWORD dwLo
1230: 63 6b 44 75 72 61 74 69 6f 6e 3b 0d 0a 7d 0d 0a  ckDuration;..}..
1240: 61 6c 69 61 73 20 51 55 45 52 59 5f 53 45 52 56  alias QUERY_SERV
1250: 49 43 45 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 41  ICE_LOCK_STATUSA
1260: 2a 20 4c 50 51 55 45 52 59 5f 53 45 52 56 49 43  * LPQUERY_SERVIC
1270: 45 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 41 3b 0d  E_LOCK_STATUSA;.
1280: 0a 0d 0a 73 74 72 75 63 74 20 51 55 45 52 59 5f  ...struct QUERY_
1290: 53 45 52 56 49 43 45 5f 4c 4f 43 4b 5f 53 54 41  SERVICE_LOCK_STA
12a0: 54 55 53 57 20 7b 0d 0a 09 44 57 4f 52 44 20 20  TUSW {...DWORD  
12b0: 66 49 73 4c 6f 63 6b 65 64 3b 0d 0a 09 4c 50 57  fIsLocked;...LPW
12c0: 53 54 52 20 6c 70 4c 6f 63 6b 4f 77 6e 65 72 3b  STR lpLockOwner;
12d0: 0d 0a 09 44 57 4f 52 44 20 20 64 77 4c 6f 63 6b  ...DWORD  dwLock
12e0: 44 75 72 61 74 69 6f 6e 3b 0d 0a 7d 0d 0a 61 6c  Duration;..}..al
12f0: 69 61 73 20 51 55 45 52 59 5f 53 45 52 56 49 43  ias QUERY_SERVIC
1300: 45 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 57 2a 20  E_LOCK_STATUSW* 
1310: 4c 50 51 55 45 52 59 5f 53 45 52 56 49 43 45 5f  LPQUERY_SERVICE_
1320: 4c 4f 43 4b 5f 53 54 41 54 55 53 57 3b 0d 0a 0d  LOCK_STATUSW;...
1330: 0a 65 78 74 65 72 6e 20 28 57 69 6e 64 6f 77 73  .extern (Windows
1340: 29 20 7b 0d 0a 09 61 6c 69 61 73 20 76 6f 69 64  ) {...alias void
1350: 20 66 75 6e 63 74 69 6f 6e 28 44 57 4f 52 44 2c   function(DWORD,
1360: 20 4c 50 53 54 52 2a 29 20 20 4c 50 53 45 52 56   LPSTR*)  LPSERV
1370: 49 43 45 5f 4d 41 49 4e 5f 46 55 4e 43 54 49 4f  ICE_MAIN_FUNCTIO
1380: 4e 41 3b 0d 0a 09 61 6c 69 61 73 20 76 6f 69 64  NA;...alias void
1390: 20 66 75 6e 63 74 69 6f 6e 28 44 57 4f 52 44 2c   function(DWORD,
13a0: 20 4c 50 57 53 54 52 2a 29 20 4c 50 53 45 52 56   LPWSTR*) LPSERV
13b0: 49 43 45 5f 4d 41 49 4e 5f 46 55 4e 43 54 49 4f  ICE_MAIN_FUNCTIO
13c0: 4e 57 3b 0d 0a 7d 0d 0a 0d 0a 73 74 72 75 63 74  NW;..}....struct
13d0: 20 53 45 52 56 49 43 45 5f 54 41 42 4c 45 5f 45   SERVICE_TABLE_E
13e0: 4e 54 52 59 41 20 7b 0d 0a 09 4c 50 53 54 52 20  NTRYA {...LPSTR 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 6c 70 53 65 72 76 69 63 65 4e 61 6d 65     lpServiceName
1410: 3b 0d 0a 09 4c 50 53 45 52 56 49 43 45 5f 4d 41  ;...LPSERVICE_MA
1420: 49 4e 5f 46 55 4e 43 54 49 4f 4e 41 20 6c 70 53  IN_FUNCTIONA lpS
1430: 65 72 76 69 63 65 50 72 6f 63 3b 0d 0a 7d 0d 0a  erviceProc;..}..
1440: 61 6c 69 61 73 20 53 45 52 56 49 43 45 5f 54 41  alias SERVICE_TA
1450: 42 4c 45 5f 45 4e 54 52 59 41 2a 20 4c 50 53 45  BLE_ENTRYA* LPSE
1460: 52 56 49 43 45 5f 54 41 42 4c 45 5f 45 4e 54 52  RVICE_TABLE_ENTR
1470: 59 41 3b 0d 0a 0d 0a 73 74 72 75 63 74 20 53 45  YA;....struct SE
1480: 52 56 49 43 45 5f 54 41 42 4c 45 5f 45 4e 54 52  RVICE_TABLE_ENTR
1490: 59 57 20 7b 0d 0a 09 4c 50 57 53 54 52 20 20 20  YW {...LPWSTR   
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b0: 6c 70 53 65 72 76 69 63 65 4e 61 6d 65 3b 0d 0a  lpServiceName;..
14c0: 09 4c 50 53 45 52 56 49 43 45 5f 4d 41 49 4e 5f  .LPSERVICE_MAIN_
14d0: 46 55 4e 43 54 49 4f 4e 57 20 6c 70 53 65 72 76  FUNCTIONW lpServ
14e0: 69 63 65 50 72 6f 63 3b 0d 0a 7d 0d 0a 61 6c 69  iceProc;..}..ali
14f0: 61 73 20 53 45 52 56 49 43 45 5f 54 41 42 4c 45  as SERVICE_TABLE
1500: 5f 45 4e 54 52 59 57 2a 20 4c 50 53 45 52 56 49  _ENTRYW* LPSERVI
1510: 43 45 5f 54 41 42 4c 45 5f 45 4e 54 52 59 57 3b  CE_TABLE_ENTRYW;
1520: 0d 0a 0d 0a 6d 69 78 69 6e 20 44 45 43 4c 41 52  ....mixin DECLAR
1530: 45 5f 48 41 4e 44 4c 45 21 28 22 53 43 5f 48 41  E_HANDLE!("SC_HA
1540: 4e 44 4c 45 22 29 3b 0d 0a 61 6c 69 61 73 20 53  NDLE");..alias S
1550: 43 5f 48 41 4e 44 4c 45 2a 20 4c 50 53 43 5f 48  C_HANDLE* LPSC_H
1560: 41 4e 44 4c 45 3b 0d 0a 61 6c 69 61 73 20 76 6f  ANDLE;..alias vo
1570: 69 64 2a 20 53 43 5f 4c 4f 43 4b 3b 0d 0a 6d 69  id* SC_LOCK;..mi
1580: 78 69 6e 20 44 45 43 4c 41 52 45 5f 48 41 4e 44  xin DECLARE_HAND
1590: 4c 45 21 28 22 53 45 52 56 49 43 45 5f 53 54 41  LE!("SERVICE_STA
15a0: 54 55 53 5f 48 41 4e 44 4c 45 22 29 3b 0d 0a 0d  TUS_HANDLE");...
15b0: 0a 65 78 74 65 72 6e 20 28 57 69 6e 64 6f 77 73  .extern (Windows
15c0: 29 20 7b 0d 0a 09 61 6c 69 61 73 20 76 6f 69 64  ) {...alias void
15d0: 20 66 75 6e 63 74 69 6f 6e 28 44 57 4f 52 44 29   function(DWORD)
15e0: 20 4c 50 48 41 4e 44 4c 45 52 5f 46 55 4e 43 54   LPHANDLER_FUNCT
15f0: 49 4f 4e 3b 0d 0a 09 61 6c 69 61 73 20 44 57 4f  ION;...alias DWO
1600: 52 44 20 66 75 6e 63 74 69 6f 6e 28 44 57 4f 52  RD function(DWOR
1610: 44 2c 20 44 57 4f 52 44 2c 20 4c 50 56 4f 49 44  D, DWORD, LPVOID
1620: 2c 20 4c 50 56 4f 49 44 29 20 4c 50 48 41 4e 44  , LPVOID) LPHAND
1630: 4c 45 52 5f 46 55 4e 43 54 49 4f 4e 5f 45 58 3b  LER_FUNCTION_EX;
1640: 0d 0a 7d 0d 0a 0d 0a 73 74 61 74 69 63 20 69 66  ..}....static if
1650: 20 28 5f 57 49 4e 33 32 5f 57 49 4e 4e 54 20 3e   (_WIN32_WINNT >
1660: 3d 20 30 78 35 30 30 29 20 7b 0d 0a 09 73 74 72  = 0x500) {...str
1670: 75 63 74 20 53 45 52 56 49 43 45 5f 53 54 41 54  uct SERVICE_STAT
1680: 55 53 5f 50 52 4f 43 45 53 53 20 7b 0d 0a 09 09  US_PROCESS {....
1690: 44 57 4f 52 44 20 64 77 53 65 72 76 69 63 65 54  DWORD dwServiceT
16a0: 79 70 65 3b 0d 0a 09 09 44 57 4f 52 44 20 64 77  ype;....DWORD dw
16b0: 43 75 72 72 65 6e 74 53 74 61 74 65 3b 0d 0a 09  CurrentState;...
16c0: 09 44 57 4f 52 44 20 64 77 43 6f 6e 74 72 6f 6c  .DWORD dwControl
16d0: 73 41 63 63 65 70 74 65 64 3b 0d 0a 09 09 44 57  sAccepted;....DW
16e0: 4f 52 44 20 64 77 57 69 6e 33 32 45 78 69 74 43  ORD dwWin32ExitC
16f0: 6f 64 65 3b 0d 0a 09 09 44 57 4f 52 44 20 64 77  ode;....DWORD dw
1700: 53 65 72 76 69 63 65 53 70 65 63 69 66 69 63 45  ServiceSpecificE
1710: 78 69 74 43 6f 64 65 3b 0d 0a 09 09 44 57 4f 52  xitCode;....DWOR
1720: 44 20 64 77 43 68 65 63 6b 50 6f 69 6e 74 3b 0d  D dwCheckPoint;.
1730: 0a 09 09 44 57 4f 52 44 20 64 77 57 61 69 74 48  ...DWORD dwWaitH
1740: 69 6e 74 3b 0d 0a 09 09 44 57 4f 52 44 20 64 77  int;....DWORD dw
1750: 50 72 6f 63 65 73 73 49 64 3b 0d 0a 09 09 44 57  ProcessId;....DW
1760: 4f 52 44 20 64 77 53 65 72 76 69 63 65 46 6c 61  ORD dwServiceFla
1770: 67 73 3b 0d 0a 09 7d 0d 0a 09 61 6c 69 61 73 20  gs;...}...alias 
1780: 53 45 52 56 49 43 45 5f 53 54 41 54 55 53 5f 50  SERVICE_STATUS_P
1790: 52 4f 43 45 53 53 2a 20 4c 50 53 45 52 56 49 43  ROCESS* LPSERVIC
17a0: 45 5f 53 54 41 54 55 53 5f 50 52 4f 43 45 53 53  E_STATUS_PROCESS
17b0: 3b 0d 0a 0d 0a 09 65 6e 75 6d 20 53 43 5f 53 54  ;.....enum SC_ST
17c0: 41 54 55 53 5f 54 59 50 45 20 7b 0d 0a 09 09 53  ATUS_TYPE {....S
17d0: 43 5f 53 54 41 54 55 53 5f 50 52 4f 43 45 53 53  C_STATUS_PROCESS
17e0: 5f 49 4e 46 4f 20 3d 20 30 0d 0a 09 7d 0d 0a 0d  _INFO = 0...}...
17f0: 0a 09 65 6e 75 6d 20 53 43 5f 45 4e 55 4d 5f 54  ..enum SC_ENUM_T
1800: 59 50 45 20 7b 0d 0a 09 09 53 43 5f 45 4e 55 4d  YPE {....SC_ENUM
1810: 5f 50 52 4f 43 45 53 53 5f 49 4e 46 4f 20 3d 20  _PROCESS_INFO = 
1820: 30 0d 0a 09 7d 0d 0a 0d 0a 09 73 74 72 75 63 74  0...}.....struct
1830: 20 45 4e 55 4d 5f 53 45 52 56 49 43 45 5f 53 54   ENUM_SERVICE_ST
1840: 41 54 55 53 5f 50 52 4f 43 45 53 53 41 20 7b 0d  ATUS_PROCESSA {.
1850: 0a 09 09 4c 50 53 54 52 20 20 20 20 20 20 20 20  ...LPSTR        
1860: 20 20 20 20 20 20 20 20 20 20 6c 70 53 65 72 76            lpServ
1870: 69 63 65 4e 61 6d 65 3b 0d 0a 09 09 4c 50 53 54  iceName;....LPST
1880: 52 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  R               
1890: 20 20 20 6c 70 44 69 73 70 6c 61 79 4e 61 6d 65     lpDisplayName
18a0: 3b 0d 0a 09 09 53 45 52 56 49 43 45 5f 53 54 41  ;....SERVICE_STA
18b0: 54 55 53 5f 50 52 4f 43 45 53 53 20 53 65 72 76  TUS_PROCESS Serv
18c0: 69 63 65 53 74 61 74 75 73 50 72 6f 63 65 73 73  iceStatusProcess
18d0: 3b 0d 0a 09 7d 0d 0a 09 61 6c 69 61 73 20 45 4e  ;...}...alias EN
18e0: 55 4d 5f 53 45 52 56 49 43 45 5f 53 54 41 54 55  UM_SERVICE_STATU
18f0: 53 5f 50 52 4f 43 45 53 53 41 2a 20 4c 50 45 4e  S_PROCESSA* LPEN
1900: 55 4d 5f 53 45 52 56 49 43 45 5f 53 54 41 54 55  UM_SERVICE_STATU
1910: 53 5f 50 52 4f 43 45 53 53 41 3b 0d 0a 0d 0a 09  S_PROCESSA;.....
1920: 73 74 72 75 63 74 20 45 4e 55 4d 5f 53 45 52 56  struct ENUM_SERV
1930: 49 43 45 5f 53 54 41 54 55 53 5f 50 52 4f 43 45  ICE_STATUS_PROCE
1940: 53 53 57 20 7b 0d 0a 09 09 4c 50 57 53 54 52 20  SSW {....LPWSTR 
1950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1960: 6c 70 53 65 72 76 69 63 65 4e 61 6d 65 3b 0d 0a  lpServiceName;..
1970: 09 09 4c 50 57 53 54 52 20 20 20 20 20 20 20 20  ..LPWSTR        
1980: 20 20 20 20 20 20 20 20 20 6c 70 44 69 73 70 6c           lpDispl
1990: 61 79 4e 61 6d 65 3b 0d 0a 09 09 53 45 52 56 49  ayName;....SERVI
19a0: 43 45 5f 53 54 41 54 55 53 5f 50 52 4f 43 45 53  CE_STATUS_PROCES
19b0: 53 20 53 65 72 76 69 63 65 53 74 61 74 75 73 50  S ServiceStatusP
19c0: 72 6f 63 65 73 73 3b 0d 0a 09 7d 0d 0a 09 61 6c  rocess;...}...al
19d0: 69 61 73 20 45 4e 55 4d 5f 53 45 52 56 49 43 45  ias ENUM_SERVICE
19e0: 5f 53 54 41 54 55 53 5f 50 52 4f 43 45 53 53 57  _STATUS_PROCESSW
19f0: 2a 20 4c 50 45 4e 55 4d 5f 53 45 52 56 49 43 45  * LPENUM_SERVICE
1a00: 5f 53 54 41 54 55 53 5f 50 52 4f 43 45 53 53 57  _STATUS_PROCESSW
1a10: 3b 0d 0a 0d 0a 09 73 74 72 75 63 74 20 53 45 52  ;.....struct SER
1a20: 56 49 43 45 5f 44 45 53 43 52 49 50 54 49 4f 4e  VICE_DESCRIPTION
1a30: 41 20 7b 0d 0a 09 09 4c 50 53 54 52 20 6c 70 44  A {....LPSTR lpD
1a40: 65 73 63 72 69 70 74 69 6f 6e 3b 0d 0a 09 7d 0d  escription;...}.
1a50: 0a 09 61 6c 69 61 73 20 53 45 52 56 49 43 45 5f  ..alias SERVICE_
1a60: 44 45 53 43 52 49 50 54 49 4f 4e 41 2a 20 4c 50  DESCRIPTIONA* LP
1a70: 53 45 52 56 49 43 45 5f 44 45 53 43 52 49 50 54  SERVICE_DESCRIPT
1a80: 49 4f 4e 41 3b 0d 0a 0d 0a 09 73 74 72 75 63 74  IONA;.....struct
1a90: 20 53 45 52 56 49 43 45 5f 44 45 53 43 52 49 50   SERVICE_DESCRIP
1aa0: 54 49 4f 4e 57 20 7b 0d 0a 09 09 4c 50 57 53 54  TIONW {....LPWST
1ab0: 52 20 6c 70 44 65 73 63 72 69 70 74 69 6f 6e 3b  R lpDescription;
1ac0: 0d 0a 09 7d 0d 0a 09 61 6c 69 61 73 20 53 45 52  ...}...alias SER
1ad0: 56 49 43 45 5f 44 45 53 43 52 49 50 54 49 4f 4e  VICE_DESCRIPTION
1ae0: 57 2a 20 4c 50 53 45 52 56 49 43 45 5f 44 45 53  W* LPSERVICE_DES
1af0: 43 52 49 50 54 49 4f 4e 57 3b 0d 0a 0d 0a 09 65  CRIPTIONW;.....e
1b00: 6e 75 6d 20 53 43 5f 41 43 54 49 4f 4e 5f 54 59  num SC_ACTION_TY
1b10: 50 45 20 7b 0d 0a 09 09 53 43 5f 41 43 54 49 4f  PE {....SC_ACTIO
1b20: 4e 5f 4e 4f 4e 45 2c 0d 0a 09 09 53 43 5f 41 43  N_NONE,....SC_AC
1b30: 54 49 4f 4e 5f 52 45 53 54 41 52 54 2c 0d 0a 09  TION_RESTART,...
1b40: 09 53 43 5f 41 43 54 49 4f 4e 5f 52 45 42 4f 4f  .SC_ACTION_REBOO
1b50: 54 2c 0d 0a 09 09 53 43 5f 41 43 54 49 4f 4e 5f  T,....SC_ACTION_
1b60: 52 55 4e 5f 43 4f 4d 4d 41 4e 44 0d 0a 09 7d 0d  RUN_COMMAND...}.
1b70: 0a 0d 0a 09 73 74 72 75 63 74 20 53 43 5f 41 43  ....struct SC_AC
1b80: 54 49 4f 4e 20 7b 0d 0a 09 09 53 43 5f 41 43 54  TION {....SC_ACT
1b90: 49 4f 4e 5f 54 59 50 45 20 54 79 70 65 3b 0d 0a  ION_TYPE Type;..
1ba0: 09 09 44 57 4f 52 44 20 20 20 20 20 20 20 20 20  ..DWORD         
1bb0: 20 44 65 6c 61 79 3b 0d 0a 09 7d 0d 0a 09 61 6c   Delay;...}...al
1bc0: 69 61 73 20 53 43 5f 41 43 54 49 4f 4e 2a 20 4c  ias SC_ACTION* L
1bd0: 50 53 43 5f 41 43 54 49 4f 4e 3b 0d 0a 0d 0a 09  PSC_ACTION;.....
1be0: 73 74 72 75 63 74 20 53 45 52 56 49 43 45 5f 46  struct SERVICE_F
1bf0: 41 49 4c 55 52 45 5f 41 43 54 49 4f 4e 53 41 20  AILURE_ACTIONSA 
1c00: 7b 0d 0a 09 09 44 57 4f 52 44 20 20 20 20 20 20  {....DWORD      
1c10: 64 77 52 65 73 65 74 50 65 72 69 6f 64 3b 0d 0a  dwResetPeriod;..
1c20: 09 09 4c 50 53 54 52 20 20 20 20 20 20 6c 70 52  ..LPSTR      lpR
1c30: 65 62 6f 6f 74 4d 73 67 3b 0d 0a 09 09 4c 50 53  ebootMsg;....LPS
1c40: 54 52 20 20 20 20 20 20 6c 70 43 6f 6d 6d 61 6e  TR      lpComman
1c50: 64 3b 0d 0a 09 09 44 57 4f 52 44 20 20 20 20 20  d;....DWORD     
1c60: 20 63 41 63 74 69 6f 6e 73 3b 0d 0a 09 09 53 43   cActions;....SC
1c70: 5f 41 43 54 49 4f 4e 2a 20 6c 70 73 61 41 63 74  _ACTION* lpsaAct
1c80: 69 6f 6e 73 3b 0d 0a 09 7d 0d 0a 09 61 6c 69 61  ions;...}...alia
1c90: 73 20 53 45 52 56 49 43 45 5f 46 41 49 4c 55 52  s SERVICE_FAILUR
1ca0: 45 5f 41 43 54 49 4f 4e 53 41 2a 20 4c 50 53 45  E_ACTIONSA* LPSE
1cb0: 52 56 49 43 45 5f 46 41 49 4c 55 52 45 5f 41 43  RVICE_FAILURE_AC
1cc0: 54 49 4f 4e 53 41 3b 0d 0a 0d 0a 09 73 74 72 75  TIONSA;.....stru
1cd0: 63 74 20 53 45 52 56 49 43 45 5f 46 41 49 4c 55  ct SERVICE_FAILU
1ce0: 52 45 5f 41 43 54 49 4f 4e 53 57 20 7b 0d 0a 09  RE_ACTIONSW {...
1cf0: 09 44 57 4f 52 44 20 20 20 20 20 20 64 77 52 65  .DWORD      dwRe
1d00: 73 65 74 50 65 72 69 6f 64 3b 0d 0a 09 09 4c 50  setPeriod;....LP
1d10: 57 53 54 52 20 20 20 20 20 6c 70 52 65 62 6f 6f  WSTR     lpReboo
1d20: 74 4d 73 67 3b 0d 0a 09 09 4c 50 57 53 54 52 20  tMsg;....LPWSTR 
1d30: 20 20 20 20 6c 70 43 6f 6d 6d 61 6e 64 3b 0d 0a      lpCommand;..
1d40: 09 09 44 57 4f 52 44 20 20 20 20 20 20 63 41 63  ..DWORD      cAc
1d50: 74 69 6f 6e 73 3b 0d 0a 09 09 53 43 5f 41 43 54  tions;....SC_ACT
1d60: 49 4f 4e 2a 20 6c 70 73 61 41 63 74 69 6f 6e 73  ION* lpsaActions
1d70: 3b 0d 0a 09 7d 0d 0a 09 61 6c 69 61 73 20 53 45  ;...}...alias SE
1d80: 52 56 49 43 45 5f 46 41 49 4c 55 52 45 5f 41 43  RVICE_FAILURE_AC
1d90: 54 49 4f 4e 53 57 2a 20 4c 50 53 45 52 56 49 43  TIONSW* LPSERVIC
1da0: 45 5f 46 41 49 4c 55 52 45 5f 41 43 54 49 4f 4e  E_FAILURE_ACTION
1db0: 53 57 3b 0d 0a 7d 0d 0a 0d 0a 65 78 74 65 72 6e  SW;..}....extern
1dc0: 20 28 57 69 6e 64 6f 77 73 29 20 7b 0d 0a 09 42   (Windows) {...B
1dd0: 4f 4f 4c 20 43 68 61 6e 67 65 53 65 72 76 69 63  OOL ChangeServic
1de0: 65 43 6f 6e 66 69 67 41 28 53 43 5f 48 41 4e 44  eConfigA(SC_HAND
1df0: 4c 45 2c 20 44 57 4f 52 44 2c 20 44 57 4f 52 44  LE, DWORD, DWORD
1e00: 2c 20 44 57 4f 52 44 2c 20 4c 50 43 53 54 52 2c  , DWORD, LPCSTR,
1e10: 0d 0a 09 20 20 4c 50 43 53 54 52 2c 20 4c 50 44  ...  LPCSTR, LPD
1e20: 57 4f 52 44 2c 20 4c 50 43 53 54 52 2c 20 4c 50  WORD, LPCSTR, LP
1e30: 43 53 54 52 2c 20 4c 50 43 53 54 52 2c 20 4c 50  CSTR, LPCSTR, LP
1e40: 43 53 54 52 29 3b 0d 0a 09 42 4f 4f 4c 20 43 68  CSTR);...BOOL Ch
1e50: 61 6e 67 65 53 65 72 76 69 63 65 43 6f 6e 66 69  angeServiceConfi
1e60: 67 57 28 53 43 5f 48 41 4e 44 4c 45 2c 20 44 57  gW(SC_HANDLE, DW
1e70: 4f 52 44 2c 20 44 57 4f 52 44 2c 20 44 57 4f 52  ORD, DWORD, DWOR
1e80: 44 2c 20 4c 50 43 57 53 54 52 2c 0d 0a 09 20 20  D, LPCWSTR,...  
1e90: 4c 50 43 57 53 54 52 2c 20 4c 50 44 57 4f 52 44  LPCWSTR, LPDWORD
1ea0: 2c 20 4c 50 43 57 53 54 52 2c 20 4c 50 43 57 53  , LPCWSTR, LPCWS
1eb0: 54 52 2c 20 4c 50 43 57 53 54 52 2c 20 4c 50 43  TR, LPCWSTR, LPC
1ec0: 57 53 54 52 29 3b 0d 0a 09 42 4f 4f 4c 20 43 6c  WSTR);...BOOL Cl
1ed0: 6f 73 65 53 65 72 76 69 63 65 48 61 6e 64 6c 65  oseServiceHandle
1ee0: 28 53 43 5f 48 41 4e 44 4c 45 29 3b 0d 0a 09 42  (SC_HANDLE);...B
1ef0: 4f 4f 4c 20 43 6f 6e 74 72 6f 6c 53 65 72 76 69  OOL ControlServi
1f00: 63 65 28 53 43 5f 48 41 4e 44 4c 45 2c 20 44 57  ce(SC_HANDLE, DW
1f10: 4f 52 44 2c 20 4c 50 53 45 52 56 49 43 45 5f 53  ORD, LPSERVICE_S
1f20: 54 41 54 55 53 29 3b 0d 0a 09 53 43 5f 48 41 4e  TATUS);...SC_HAN
1f30: 44 4c 45 20 43 72 65 61 74 65 53 65 72 76 69 63  DLE CreateServic
1f40: 65 41 28 53 43 5f 48 41 4e 44 4c 45 2c 20 4c 50  eA(SC_HANDLE, LP
1f50: 43 53 54 52 2c 20 4c 50 43 53 54 52 2c 20 44 57  CSTR, LPCSTR, DW
1f60: 4f 52 44 2c 20 44 57 4f 52 44 2c 0d 0a 09 20 20  ORD, DWORD,...  
1f70: 44 57 4f 52 44 2c 20 44 57 4f 52 44 2c 20 4c 50  DWORD, DWORD, LP
1f80: 43 53 54 52 2c 20 4c 50 43 53 54 52 2c 20 50 44  CSTR, LPCSTR, PD
1f90: 57 4f 52 44 2c 20 4c 50 43 53 54 52 2c 20 4c 50  WORD, LPCSTR, LP
1fa0: 43 53 54 52 2c 20 4c 50 43 53 54 52 29 3b 0d 0a  CSTR, LPCSTR);..
1fb0: 09 53 43 5f 48 41 4e 44 4c 45 20 43 72 65 61 74  .SC_HANDLE Creat
1fc0: 65 53 65 72 76 69 63 65 57 28 53 43 5f 48 41 4e  eServiceW(SC_HAN
1fd0: 44 4c 45 2c 20 4c 50 43 57 53 54 52 2c 20 4c 50  DLE, LPCWSTR, LP
1fe0: 43 57 53 54 52 2c 20 44 57 4f 52 44 2c 20 44 57  CWSTR, DWORD, DW
1ff0: 4f 52 44 2c 0d 0a 09 20 20 44 57 4f 52 44 2c 20  ORD,...  DWORD, 
2000: 44 57 4f 52 44 2c 20 4c 50 43 57 53 54 52 2c 20  DWORD, LPCWSTR, 
2010: 4c 50 43 57 53 54 52 2c 20 50 44 57 4f 52 44 2c  LPCWSTR, PDWORD,
2020: 20 4c 50 43 57 53 54 52 2c 20 4c 50 43 57 53 54   LPCWSTR, LPCWST
2030: 52 2c 20 4c 50 43 57 53 54 52 29 3b 0d 0a 09 42  R, LPCWSTR);...B
2040: 4f 4f 4c 20 44 65 6c 65 74 65 53 65 72 76 69 63  OOL DeleteServic
2050: 65 28 53 43 5f 48 41 4e 44 4c 45 29 3b 0d 0a 09  e(SC_HANDLE);...
2060: 42 4f 4f 4c 20 45 6e 75 6d 44 65 70 65 6e 64 65  BOOL EnumDepende
2070: 6e 74 53 65 72 76 69 63 65 73 41 28 53 43 5f 48  ntServicesA(SC_H
2080: 41 4e 44 4c 45 2c 20 44 57 4f 52 44 2c 20 4c 50  ANDLE, DWORD, LP
2090: 45 4e 55 4d 5f 53 45 52 56 49 43 45 5f 53 54 41  ENUM_SERVICE_STA
20a0: 54 55 53 41 2c 0d 0a 09 20 20 44 57 4f 52 44 2c  TUSA,...  DWORD,
20b0: 20 50 44 57 4f 52 44 2c 20 50 44 57 4f 52 44 29   PDWORD, PDWORD)
20c0: 3b 0d 0a 09 42 4f 4f 4c 20 45 6e 75 6d 44 65 70  ;...BOOL EnumDep
20d0: 65 6e 64 65 6e 74 53 65 72 76 69 63 65 73 57 28  endentServicesW(
20e0: 53 43 5f 48 41 4e 44 4c 45 2c 20 44 57 4f 52 44  SC_HANDLE, DWORD
20f0: 2c 20 4c 50 45 4e 55 4d 5f 53 45 52 56 49 43 45  , LPENUM_SERVICE
2100: 5f 53 54 41 54 55 53 57 2c 0d 0a 09 20 20 44 57  _STATUSW,...  DW
2110: 4f 52 44 2c 20 50 44 57 4f 52 44 2c 20 50 44 57  ORD, PDWORD, PDW
2120: 4f 52 44 29 3b 0d 0a 09 42 4f 4f 4c 20 45 6e 75  ORD);...BOOL Enu
2130: 6d 53 65 72 76 69 63 65 73 53 74 61 74 75 73 41  mServicesStatusA
2140: 28 53 43 5f 48 41 4e 44 4c 45 2c 20 44 57 4f 52  (SC_HANDLE, DWOR
2150: 44 2c 20 44 57 4f 52 44 2c 20 4c 50 45 4e 55 4d  D, DWORD, LPENUM
2160: 5f 53 45 52 56 49 43 45 5f 53 54 41 54 55 53 41  _SERVICE_STATUSA
2170: 2c 0d 0a 09 20 20 44 57 4f 52 44 2c 20 50 44 57  ,...  DWORD, PDW
2180: 4f 52 44 2c 20 50 44 57 4f 52 44 2c 20 50 44 57  ORD, PDWORD, PDW
2190: 4f 52 44 29 3b 0d 0a 09 42 4f 4f 4c 20 45 6e 75  ORD);...BOOL Enu
21a0: 6d 53 65 72 76 69 63 65 73 53 74 61 74 75 73 57  mServicesStatusW
21b0: 28 53 43 5f 48 41 4e 44 4c 45 2c 20 44 57 4f 52  (SC_HANDLE, DWOR
21c0: 44 2c 20 44 57 4f 52 44 2c 20 4c 50 45 4e 55 4d  D, DWORD, LPENUM
21d0: 5f 53 45 52 56 49 43 45 5f 53 54 41 54 55 53 57  _SERVICE_STATUSW
21e0: 2c 0d 0a 09 20 20 44 57 4f 52 44 2c 20 50 44 57  ,...  DWORD, PDW
21f0: 4f 52 44 2c 20 50 44 57 4f 52 44 2c 20 50 44 57  ORD, PDWORD, PDW
2200: 4f 52 44 29 3b 0d 0a 09 42 4f 4f 4c 20 47 65 74  ORD);...BOOL Get
2210: 53 65 72 76 69 63 65 44 69 73 70 6c 61 79 4e 61  ServiceDisplayNa
2220: 6d 65 41 28 53 43 5f 48 41 4e 44 4c 45 2c 20 4c  meA(SC_HANDLE, L
2230: 50 43 53 54 52 2c 20 4c 50 53 54 52 2c 20 50 44  PCSTR, LPSTR, PD
2240: 57 4f 52 44 29 3b 0d 0a 09 42 4f 4f 4c 20 47 65  WORD);...BOOL Ge
2250: 74 53 65 72 76 69 63 65 44 69 73 70 6c 61 79 4e  tServiceDisplayN
2260: 61 6d 65 57 28 53 43 5f 48 41 4e 44 4c 45 2c 20  ameW(SC_HANDLE, 
2270: 4c 50 43 57 53 54 52 2c 20 4c 50 57 53 54 52 2c  LPCWSTR, LPWSTR,
2280: 20 50 44 57 4f 52 44 29 3b 0d 0a 09 42 4f 4f 4c   PDWORD);...BOOL
2290: 20 47 65 74 53 65 72 76 69 63 65 4b 65 79 4e 61   GetServiceKeyNa
22a0: 6d 65 41 28 53 43 5f 48 41 4e 44 4c 45 2c 20 4c  meA(SC_HANDLE, L
22b0: 50 43 53 54 52 2c 20 4c 50 53 54 52 2c 20 50 44  PCSTR, LPSTR, PD
22c0: 57 4f 52 44 29 3b 0d 0a 09 42 4f 4f 4c 20 47 65  WORD);...BOOL Ge
22d0: 74 53 65 72 76 69 63 65 4b 65 79 4e 61 6d 65 57  tServiceKeyNameW
22e0: 28 53 43 5f 48 41 4e 44 4c 45 2c 20 4c 50 43 57  (SC_HANDLE, LPCW
22f0: 53 54 52 2c 20 4c 50 57 53 54 52 2c 20 50 44 57  STR, LPWSTR, PDW
2300: 4f 52 44 29 3b 0d 0a 09 53 43 5f 4c 4f 43 4b 20  ORD);...SC_LOCK 
2310: 4c 6f 63 6b 53 65 72 76 69 63 65 44 61 74 61 62  LockServiceDatab
2320: 61 73 65 28 53 43 5f 48 41 4e 44 4c 45 29 3b 0d  ase(SC_HANDLE);.
2330: 0a 09 42 4f 4f 4c 20 4e 6f 74 69 66 79 42 6f 6f  ..BOOL NotifyBoo
2340: 74 43 6f 6e 66 69 67 53 74 61 74 75 73 28 42 4f  tConfigStatus(BO
2350: 4f 4c 29 3b 0d 0a 09 53 43 5f 48 41 4e 44 4c 45  OL);...SC_HANDLE
2360: 20 4f 70 65 6e 53 43 4d 61 6e 61 67 65 72 41 28   OpenSCManagerA(
2370: 4c 50 43 53 54 52 2c 20 4c 50 43 53 54 52 2c 20  LPCSTR, LPCSTR, 
2380: 44 57 4f 52 44 29 3b 0d 0a 09 53 43 5f 48 41 4e  DWORD);...SC_HAN
2390: 44 4c 45 20 4f 70 65 6e 53 43 4d 61 6e 61 67 65  DLE OpenSCManage
23a0: 72 57 28 4c 50 43 57 53 54 52 2c 20 4c 50 43 57  rW(LPCWSTR, LPCW
23b0: 53 54 52 2c 20 44 57 4f 52 44 29 3b 0d 0a 09 53  STR, DWORD);...S
23c0: 43 5f 48 41 4e 44 4c 45 20 4f 70 65 6e 53 65 72  C_HANDLE OpenSer
23d0: 76 69 63 65 41 28 53 43 5f 48 41 4e 44 4c 45 2c  viceA(SC_HANDLE,
23e0: 20 4c 50 43 53 54 52 2c 20 44 57 4f 52 44 29 3b   LPCSTR, DWORD);
23f0: 0d 0a 09 53 43 5f 48 41 4e 44 4c 45 20 4f 70 65  ...SC_HANDLE Ope
2400: 6e 53 65 72 76 69 63 65 57 28 53 43 5f 48 41 4e  nServiceW(SC_HAN
2410: 44 4c 45 2c 20 4c 50 43 57 53 54 52 2c 20 44 57  DLE, LPCWSTR, DW
2420: 4f 52 44 29 3b 0d 0a 09 42 4f 4f 4c 20 51 75 65  ORD);...BOOL Que
2430: 72 79 53 65 72 76 69 63 65 43 6f 6e 66 69 67 41  ryServiceConfigA
2440: 28 53 43 5f 48 41 4e 44 4c 45 2c 20 4c 50 51 55  (SC_HANDLE, LPQU
2450: 45 52 59 5f 53 45 52 56 49 43 45 5f 43 4f 4e 46  ERY_SERVICE_CONF
2460: 49 47 41 2c 20 44 57 4f 52 44 2c 0d 0a 09 20 20  IGA, DWORD,...  
2470: 50 44 57 4f 52 44 29 3b 0d 0a 09 42 4f 4f 4c 20  PDWORD);...BOOL 
2480: 51 75 65 72 79 53 65 72 76 69 63 65 43 6f 6e 66  QueryServiceConf
2490: 69 67 57 28 53 43 5f 48 41 4e 44 4c 45 2c 20 4c  igW(SC_HANDLE, L
24a0: 50 51 55 45 52 59 5f 53 45 52 56 49 43 45 5f 43  PQUERY_SERVICE_C
24b0: 4f 4e 46 49 47 57 2c 20 44 57 4f 52 44 2c 0d 0a  ONFIGW, DWORD,..
24c0: 09 20 20 50 44 57 4f 52 44 29 3b 0d 0a 09 42 4f  .  PDWORD);...BO
24d0: 4f 4c 20 51 75 65 72 79 53 65 72 76 69 63 65 4c  OL QueryServiceL
24e0: 6f 63 6b 53 74 61 74 75 73 41 28 53 43 5f 48 41  ockStatusA(SC_HA
24f0: 4e 44 4c 45 2c 20 4c 50 51 55 45 52 59 5f 53 45  NDLE, LPQUERY_SE
2500: 52 56 49 43 45 5f 4c 4f 43 4b 5f 53 54 41 54 55  RVICE_LOCK_STATU
2510: 53 41 2c 0d 0a 09 20 20 44 57 4f 52 44 2c 20 50  SA,...  DWORD, P
2520: 44 57 4f 52 44 29 3b 0d 0a 09 42 4f 4f 4c 20 51  DWORD);...BOOL Q
2530: 75 65 72 79 53 65 72 76 69 63 65 4c 6f 63 6b 53  ueryServiceLockS
2540: 74 61 74 75 73 57 28 53 43 5f 48 41 4e 44 4c 45  tatusW(SC_HANDLE
2550: 2c 20 4c 50 51 55 45 52 59 5f 53 45 52 56 49 43  , LPQUERY_SERVIC
2560: 45 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 57 2c 0d  E_LOCK_STATUSW,.
2570: 0a 09 20 20 44 57 4f 52 44 2c 20 50 44 57 4f 52  ..  DWORD, PDWOR
2580: 44 29 3b 0d 0a 09 42 4f 4f 4c 20 51 75 65 72 79  D);...BOOL Query
2590: 53 65 72 76 69 63 65 4f 62 6a 65 63 74 53 65 63  ServiceObjectSec
25a0: 75 72 69 74 79 28 53 43 5f 48 41 4e 44 4c 45 2c  urity(SC_HANDLE,
25b0: 20 53 45 43 55 52 49 54 59 5f 49 4e 46 4f 52 4d   SECURITY_INFORM
25c0: 41 54 49 4f 4e 2c 0d 0a 09 20 20 50 53 45 43 55  ATION,...  PSECU
25d0: 52 49 54 59 5f 44 45 53 43 52 49 50 54 4f 52 2c  RITY_DESCRIPTOR,
25e0: 20 44 57 4f 52 44 2c 20 4c 50 44 57 4f 52 44 29   DWORD, LPDWORD)
25f0: 3b 0d 0a 09 42 4f 4f 4c 20 51 75 65 72 79 53 65  ;...BOOL QuerySe
2600: 72 76 69 63 65 53 74 61 74 75 73 28 53 43 5f 48  rviceStatus(SC_H
2610: 41 4e 44 4c 45 2c 20 4c 50 53 45 52 56 49 43 45  ANDLE, LPSERVICE
2620: 5f 53 54 41 54 55 53 29 3b 0d 0a 09 53 45 52 56  _STATUS);...SERV
2630: 49 43 45 5f 53 54 41 54 55 53 5f 48 41 4e 44 4c  ICE_STATUS_HANDL
2640: 45 20 52 65 67 69 73 74 65 72 53 65 72 76 69 63  E RegisterServic
2650: 65 43 74 72 6c 48 61 6e 64 6c 65 72 41 28 4c 50  eCtrlHandlerA(LP
2660: 43 53 54 52 2c 0d 0a 09 20 20 4c 50 48 41 4e 44  CSTR,...  LPHAND
2670: 4c 45 52 5f 46 55 4e 43 54 49 4f 4e 29 3b 0d 0a  LER_FUNCTION);..
2680: 09 53 45 52 56 49 43 45 5f 53 54 41 54 55 53 5f  .SERVICE_STATUS_
2690: 48 41 4e 44 4c 45 20 52 65 67 69 73 74 65 72 53  HANDLE RegisterS
26a0: 65 72 76 69 63 65 43 74 72 6c 48 61 6e 64 6c 65  erviceCtrlHandle
26b0: 72 57 28 4c 50 43 57 53 54 52 2c 0d 0a 09 20 20  rW(LPCWSTR,...  
26c0: 4c 50 48 41 4e 44 4c 45 52 5f 46 55 4e 43 54 49  LPHANDLER_FUNCTI
26d0: 4f 4e 29 3b 0d 0a 09 42 4f 4f 4c 20 53 65 74 53  ON);...BOOL SetS
26e0: 65 72 76 69 63 65 4f 62 6a 65 63 74 53 65 63 75  erviceObjectSecu
26f0: 72 69 74 79 28 53 43 5f 48 41 4e 44 4c 45 2c 20  rity(SC_HANDLE, 
2700: 53 45 43 55 52 49 54 59 5f 49 4e 46 4f 52 4d 41  SECURITY_INFORMA
2710: 54 49 4f 4e 2c 0d 0a 09 20 20 50 53 45 43 55 52  TION,...  PSECUR
2720: 49 54 59 5f 44 45 53 43 52 49 50 54 4f 52 29 3b  ITY_DESCRIPTOR);
2730: 0d 0a 09 42 4f 4f 4c 20 53 65 74 53 65 72 76 69  ...BOOL SetServi
2740: 63 65 53 74 61 74 75 73 28 53 45 52 56 49 43 45  ceStatus(SERVICE
2750: 5f 53 54 41 54 55 53 5f 48 41 4e 44 4c 45 2c 20  _STATUS_HANDLE, 
2760: 4c 50 53 45 52 56 49 43 45 5f 53 54 41 54 55 53  LPSERVICE_STATUS
2770: 29 3b 0d 0a 09 42 4f 4f 4c 20 53 74 61 72 74 53  );...BOOL StartS
2780: 65 72 76 69 63 65 41 28 53 43 5f 48 41 4e 44 4c  erviceA(SC_HANDL
2790: 45 2c 20 44 57 4f 52 44 2c 20 4c 50 43 53 54 52  E, DWORD, LPCSTR
27a0: 2a 29 3b 0d 0a 09 42 4f 4f 4c 20 53 74 61 72 74  *);...BOOL Start
27b0: 53 65 72 76 69 63 65 57 28 53 43 5f 48 41 4e 44  ServiceW(SC_HAND
27c0: 4c 45 2c 20 44 57 4f 52 44 2c 20 4c 50 43 57 53  LE, DWORD, LPCWS
27d0: 54 52 2a 29 3b 0d 0a 09 42 4f 4f 4c 20 53 74 61  TR*);...BOOL Sta
27e0: 72 74 53 65 72 76 69 63 65 43 74 72 6c 44 69 73  rtServiceCtrlDis
27f0: 70 61 74 63 68 65 72 41 28 4c 50 53 45 52 56 49  patcherA(LPSERVI
2800: 43 45 5f 54 41 42 4c 45 5f 45 4e 54 52 59 41 29  CE_TABLE_ENTRYA)
2810: 3b 0d 0a 09 42 4f 4f 4c 20 53 74 61 72 74 53 65  ;...BOOL StartSe
2820: 72 76 69 63 65 43 74 72 6c 44 69 73 70 61 74 63  rviceCtrlDispatc
2830: 68 65 72 57 28 4c 50 53 45 52 56 49 43 45 5f 54  herW(LPSERVICE_T
2840: 41 42 4c 45 5f 45 4e 54 52 59 57 29 3b 0d 0a 09  ABLE_ENTRYW);...
2850: 42 4f 4f 4c 20 55 6e 6c 6f 63 6b 53 65 72 76 69  BOOL UnlockServi
2860: 63 65 44 61 74 61 62 61 73 65 28 53 43 5f 4c 4f  ceDatabase(SC_LO
2870: 43 4b 29 3b 0d 0a 0d 0a 09 73 74 61 74 69 63 20  CK);.....static 
2880: 69 66 20 28 5f 57 49 4e 33 32 5f 57 49 4e 4e 54  if (_WIN32_WINNT
2890: 20 3e 3d 20 30 78 35 30 30 29 20 7b 0d 0a 09 09   >= 0x500) {....
28a0: 42 4f 4f 4c 20 45 6e 75 6d 53 65 72 76 69 63 65  BOOL EnumService
28b0: 73 53 74 61 74 75 73 45 78 41 28 53 43 5f 48 41  sStatusExA(SC_HA
28c0: 4e 44 4c 45 2c 20 53 43 5f 45 4e 55 4d 5f 54 59  NDLE, SC_ENUM_TY
28d0: 50 45 2c 20 44 57 4f 52 44 2c 20 44 57 4f 52 44  PE, DWORD, DWORD
28e0: 2c 20 4c 50 42 59 54 45 2c 0d 0a 09 09 20 20 44  , LPBYTE,....  D
28f0: 57 4f 52 44 2c 20 4c 50 44 57 4f 52 44 2c 20 4c  WORD, LPDWORD, L
2900: 50 44 57 4f 52 44 2c 20 4c 50 44 57 4f 52 44 2c  PDWORD, LPDWORD,
2910: 20 4c 50 43 53 54 52 29 3b 0d 0a 09 09 42 4f 4f   LPCSTR);....BOO
2920: 4c 20 45 6e 75 6d 53 65 72 76 69 63 65 73 53 74  L EnumServicesSt
2930: 61 74 75 73 45 78 57 28 53 43 5f 48 41 4e 44 4c  atusExW(SC_HANDL
2940: 45 2c 20 53 43 5f 45 4e 55 4d 5f 54 59 50 45 2c  E, SC_ENUM_TYPE,
2950: 20 44 57 4f 52 44 2c 20 44 57 4f 52 44 2c 20 4c   DWORD, DWORD, L
2960: 50 42 59 54 45 2c 0d 0a 09 09 20 20 44 57 4f 52  PBYTE,....  DWOR
2970: 44 2c 20 4c 50 44 57 4f 52 44 2c 20 4c 50 44 57  D, LPDWORD, LPDW
2980: 4f 52 44 2c 20 4c 50 44 57 4f 52 44 2c 20 4c 50  ORD, LPDWORD, LP
2990: 43 57 53 54 52 29 3b 0d 0a 09 09 42 4f 4f 4c 20  CWSTR);....BOOL 
29a0: 51 75 65 72 79 53 65 72 76 69 63 65 43 6f 6e 66  QueryServiceConf
29b0: 69 67 32 41 28 53 43 5f 48 41 4e 44 4c 45 2c 20  ig2A(SC_HANDLE, 
29c0: 44 57 4f 52 44 2c 20 4c 50 42 59 54 45 2c 20 44  DWORD, LPBYTE, D
29d0: 57 4f 52 44 2c 20 4c 50 44 57 4f 52 44 29 3b 0d  WORD, LPDWORD);.
29e0: 0a 09 09 42 4f 4f 4c 20 51 75 65 72 79 53 65 72  ...BOOL QuerySer
29f0: 76 69 63 65 43 6f 6e 66 69 67 32 57 28 53 43 5f  viceConfig2W(SC_
2a00: 48 41 4e 44 4c 45 2c 20 44 57 4f 52 44 2c 20 4c  HANDLE, DWORD, L
2a10: 50 42 59 54 45 2c 20 44 57 4f 52 44 2c 20 4c 50  PBYTE, DWORD, LP
2a20: 44 57 4f 52 44 29 3b 0d 0a 09 09 42 4f 4f 4c 20  DWORD);....BOOL 
2a30: 51 75 65 72 79 53 65 72 76 69 63 65 53 74 61 74  QueryServiceStat
2a40: 75 73 45 78 28 53 43 5f 48 41 4e 44 4c 45 2c 20  usEx(SC_HANDLE, 
2a50: 53 43 5f 53 54 41 54 55 53 5f 54 59 50 45 2c 20  SC_STATUS_TYPE, 
2a60: 4c 50 42 59 54 45 2c 20 44 57 4f 52 44 2c 0d 0a  LPBYTE, DWORD,..
2a70: 09 09 20 20 4c 50 44 57 4f 52 44 29 3b 0d 0a 09  ..  LPDWORD);...
2a80: 09 53 45 52 56 49 43 45 5f 53 54 41 54 55 53 5f  .SERVICE_STATUS_
2a90: 48 41 4e 44 4c 45 20 52 65 67 69 73 74 65 72 53  HANDLE RegisterS
2aa0: 65 72 76 69 63 65 43 74 72 6c 48 61 6e 64 6c 65  erviceCtrlHandle
2ab0: 72 45 78 41 28 4c 50 43 53 54 52 2c 0d 0a 09 09  rExA(LPCSTR,....
2ac0: 20 20 4c 50 48 41 4e 44 4c 45 52 5f 46 55 4e 43    LPHANDLER_FUNC
2ad0: 54 49 4f 4e 5f 45 58 2c 20 4c 50 56 4f 49 44 29  TION_EX, LPVOID)
2ae0: 3b 0d 0a 09 09 53 45 52 56 49 43 45 5f 53 54 41  ;....SERVICE_STA
2af0: 54 55 53 5f 48 41 4e 44 4c 45 20 52 65 67 69 73  TUS_HANDLE Regis
2b00: 74 65 72 53 65 72 76 69 63 65 43 74 72 6c 48 61  terServiceCtrlHa
2b10: 6e 64 6c 65 72 45 78 57 28 4c 50 43 57 53 54 52  ndlerExW(LPCWSTR
2b20: 2c 0d 0a 09 09 20 20 4c 50 48 41 4e 44 4c 45 52  ,....  LPHANDLER
2b30: 5f 46 55 4e 43 54 49 4f 4e 5f 45 58 2c 20 4c 50  _FUNCTION_EX, LP
2b40: 56 4f 49 44 29 3b 0d 0a 09 7d 0d 0a 0d 0a 09 73  VOID);...}.....s
2b50: 74 61 74 69 63 20 69 66 20 28 5f 57 49 4e 33 32  tatic if (_WIN32
2b60: 5f 57 49 4e 4e 54 20 3e 3d 20 30 78 35 30 31 29  _WINNT >= 0x501)
2b70: 20 7b 0d 0a 09 09 42 4f 4f 4c 20 43 68 61 6e 67   {....BOOL Chang
2b80: 65 53 65 72 76 69 63 65 43 6f 6e 66 69 67 32 41  eServiceConfig2A
2b90: 28 53 43 5f 48 41 4e 44 4c 45 2c 20 44 57 4f 52  (SC_HANDLE, DWOR
2ba0: 44 2c 20 4c 50 56 4f 49 44 29 3b 0d 0a 09 09 42  D, LPVOID);....B
2bb0: 4f 4f 4c 20 43 68 61 6e 67 65 53 65 72 76 69 63  OOL ChangeServic
2bc0: 65 43 6f 6e 66 69 67 32 57 28 53 43 5f 48 41 4e  eConfig2W(SC_HAN
2bd0: 44 4c 45 2c 20 44 57 4f 52 44 2c 20 4c 50 56 4f  DLE, DWORD, LPVO
2be0: 49 44 29 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 76  ID);...}..}....v
2bf0: 65 72 73 69 6f 6e 20 28 55 6e 69 63 6f 64 65 29  ersion (Unicode)
2c00: 20 7b 0d 0a 09 61 6c 69 61 73 20 45 4e 55 4d 5f   {...alias ENUM_
2c10: 53 45 52 56 49 43 45 5f 53 54 41 54 55 53 57 20  SERVICE_STATUSW 
2c20: 45 4e 55 4d 5f 53 45 52 56 49 43 45 5f 53 54 41  ENUM_SERVICE_STA
2c30: 54 55 53 3b 0d 0a 09 61 6c 69 61 73 20 51 55 45  TUS;...alias QUE
2c40: 52 59 5f 53 45 52 56 49 43 45 5f 43 4f 4e 46 49  RY_SERVICE_CONFI
2c50: 47 57 20 51 55 45 52 59 5f 53 45 52 56 49 43 45  GW QUERY_SERVICE
2c60: 5f 43 4f 4e 46 49 47 3b 0d 0a 09 61 6c 69 61 73  _CONFIG;...alias
2c70: 20 51 55 45 52 59 5f 53 45 52 56 49 43 45 5f 4c   QUERY_SERVICE_L
2c80: 4f 43 4b 5f 53 54 41 54 55 53 57 20 51 55 45 52  OCK_STATUSW QUER
2c90: 59 5f 53 45 52 56 49 43 45 5f 4c 4f 43 4b 5f 53  Y_SERVICE_LOCK_S
2ca0: 54 41 54 55 53 3b 0d 0a 09 61 6c 69 61 73 20 4c  TATUS;...alias L
2cb0: 50 53 45 52 56 49 43 45 5f 4d 41 49 4e 5f 46 55  PSERVICE_MAIN_FU
2cc0: 4e 43 54 49 4f 4e 57 20 4c 50 53 45 52 56 49 43  NCTIONW LPSERVIC
2cd0: 45 5f 4d 41 49 4e 5f 46 55 4e 43 54 49 4f 4e 3b  E_MAIN_FUNCTION;
2ce0: 0d 0a 09 61 6c 69 61 73 20 53 45 52 56 49 43 45  ...alias SERVICE
2cf0: 5f 54 41 42 4c 45 5f 45 4e 54 52 59 57 20 53 45  _TABLE_ENTRYW SE
2d00: 52 56 49 43 45 5f 54 41 42 4c 45 5f 45 4e 54 52  RVICE_TABLE_ENTR
2d10: 59 3b 0d 0a 09 61 6c 69 61 73 20 43 68 61 6e 67  Y;...alias Chang
2d20: 65 53 65 72 76 69 63 65 43 6f 6e 66 69 67 57 20  eServiceConfigW 
2d30: 43 68 61 6e 67 65 53 65 72 76 69 63 65 43 6f 6e  ChangeServiceCon
2d40: 66 69 67 3b 0d 0a 09 61 6c 69 61 73 20 43 72 65  fig;...alias Cre
2d50: 61 74 65 53 65 72 76 69 63 65 57 20 43 72 65 61  ateServiceW Crea
2d60: 74 65 53 65 72 76 69 63 65 3b 0d 0a 09 61 6c 69  teService;...ali
2d70: 61 73 20 45 6e 75 6d 44 65 70 65 6e 64 65 6e 74  as EnumDependent
2d80: 53 65 72 76 69 63 65 73 57 20 45 6e 75 6d 44 65  ServicesW EnumDe
2d90: 70 65 6e 64 65 6e 74 53 65 72 76 69 63 65 73 3b  pendentServices;
2da0: 0d 0a 09 61 6c 69 61 73 20 45 6e 75 6d 53 65 72  ...alias EnumSer
2db0: 76 69 63 65 73 53 74 61 74 75 73 57 20 45 6e 75  vicesStatusW Enu
2dc0: 6d 53 65 72 76 69 63 65 73 53 74 61 74 75 73 3b  mServicesStatus;
2dd0: 0d 0a 09 61 6c 69 61 73 20 47 65 74 53 65 72 76  ...alias GetServ
2de0: 69 63 65 44 69 73 70 6c 61 79 4e 61 6d 65 57 20  iceDisplayNameW 
2df0: 47 65 74 53 65 72 76 69 63 65 44 69 73 70 6c 61  GetServiceDispla
2e00: 79 4e 61 6d 65 3b 0d 0a 09 61 6c 69 61 73 20 47  yName;...alias G
2e10: 65 74 53 65 72 76 69 63 65 4b 65 79 4e 61 6d 65  etServiceKeyName
2e20: 57 20 47 65 74 53 65 72 76 69 63 65 4b 65 79 4e  W GetServiceKeyN
2e30: 61 6d 65 3b 0d 0a 09 61 6c 69 61 73 20 4f 70 65  ame;...alias Ope
2e40: 6e 53 43 4d 61 6e 61 67 65 72 57 20 4f 70 65 6e  nSCManagerW Open
2e50: 53 43 4d 61 6e 61 67 65 72 3b 0d 0a 09 61 6c 69  SCManager;...ali
2e60: 61 73 20 4f 70 65 6e 53 65 72 76 69 63 65 57 20  as OpenServiceW 
2e70: 4f 70 65 6e 53 65 72 76 69 63 65 3b 0d 0a 09 61  OpenService;...a
2e80: 6c 69 61 73 20 51 75 65 72 79 53 65 72 76 69 63  lias QueryServic
2e90: 65 43 6f 6e 66 69 67 57 20 51 75 65 72 79 53 65  eConfigW QuerySe
2ea0: 72 76 69 63 65 43 6f 6e 66 69 67 3b 0d 0a 09 61  rviceConfig;...a
2eb0: 6c 69 61 73 20 51 75 65 72 79 53 65 72 76 69 63  lias QueryServic
2ec0: 65 4c 6f 63 6b 53 74 61 74 75 73 57 20 51 75 65  eLockStatusW Que
2ed0: 72 79 53 65 72 76 69 63 65 4c 6f 63 6b 53 74 61  ryServiceLockSta
2ee0: 74 75 73 3b 0d 0a 09 61 6c 69 61 73 20 52 65 67  tus;...alias Reg
2ef0: 69 73 74 65 72 53 65 72 76 69 63 65 43 74 72 6c  isterServiceCtrl
2f00: 48 61 6e 64 6c 65 72 57 20 52 65 67 69 73 74 65  HandlerW Registe
2f10: 72 53 65 72 76 69 63 65 43 74 72 6c 48 61 6e 64  rServiceCtrlHand
2f20: 6c 65 72 3b 0d 0a 09 61 6c 69 61 73 20 53 74 61  ler;...alias Sta
2f30: 72 74 53 65 72 76 69 63 65 57 20 53 74 61 72 74  rtServiceW Start
2f40: 53 65 72 76 69 63 65 3b 0d 0a 09 61 6c 69 61 73  Service;...alias
2f50: 20 53 74 61 72 74 53 65 72 76 69 63 65 43 74 72   StartServiceCtr
2f60: 6c 44 69 73 70 61 74 63 68 65 72 57 20 53 74 61  lDispatcherW Sta
2f70: 72 74 53 65 72 76 69 63 65 43 74 72 6c 44 69 73  rtServiceCtrlDis
2f80: 70 61 74 63 68 65 72 3b 0d 0a 0d 0a 09 73 74 61  patcher;.....sta
2f90: 74 69 63 20 69 66 20 28 5f 57 49 4e 33 32 5f 57  tic if (_WIN32_W
2fa0: 49 4e 4e 54 20 3e 3d 20 30 78 35 30 30 29 20 7b  INNT >= 0x500) {
2fb0: 0d 0a 09 09 61 6c 69 61 73 20 45 4e 55 4d 5f 53  ....alias ENUM_S
2fc0: 45 52 56 49 43 45 5f 53 54 41 54 55 53 5f 50 52  ERVICE_STATUS_PR
2fd0: 4f 43 45 53 53 57 20 45 4e 55 4d 5f 53 45 52 56  OCESSW ENUM_SERV
2fe0: 49 43 45 5f 53 54 41 54 55 53 5f 50 52 4f 43 45  ICE_STATUS_PROCE
2ff0: 53 53 3b 0d 0a 09 09 61 6c 69 61 73 20 53 45 52  SS;....alias SER
3000: 56 49 43 45 5f 44 45 53 43 52 49 50 54 49 4f 4e  VICE_DESCRIPTION
3010: 57 20 53 45 52 56 49 43 45 5f 44 45 53 43 52 49  W SERVICE_DESCRI
3020: 50 54 49 4f 4e 3b 0d 0a 09 09 61 6c 69 61 73 20  PTION;....alias 
3030: 53 45 52 56 49 43 45 5f 46 41 49 4c 55 52 45 5f  SERVICE_FAILURE_
3040: 41 43 54 49 4f 4e 53 57 20 53 45 52 56 49 43 45  ACTIONSW SERVICE
3050: 5f 46 41 49 4c 55 52 45 5f 41 43 54 49 4f 4e 53  _FAILURE_ACTIONS
3060: 3b 0d 0a 09 09 61 6c 69 61 73 20 45 6e 75 6d 53  ;....alias EnumS
3070: 65 72 76 69 63 65 73 53 74 61 74 75 73 45 78 57  ervicesStatusExW
3080: 20 45 6e 75 6d 53 65 72 76 69 63 65 73 53 74 61   EnumServicesSta
3090: 74 75 73 45 78 3b 0d 0a 09 09 61 6c 69 61 73 20  tusEx;....alias 
30a0: 51 75 65 72 79 53 65 72 76 69 63 65 43 6f 6e 66  QueryServiceConf
30b0: 69 67 32 57 20 51 75 65 72 79 53 65 72 76 69 63  ig2W QueryServic
30c0: 65 43 6f 6e 66 69 67 32 3b 0d 0a 09 09 61 6c 69  eConfig2;....ali
30d0: 61 73 20 52 65 67 69 73 74 65 72 53 65 72 76 69  as RegisterServi
30e0: 63 65 43 74 72 6c 48 61 6e 64 6c 65 72 45 78 57  ceCtrlHandlerExW
30f0: 20 52 65 67 69 73 74 65 72 53 65 72 76 69 63 65   RegisterService
3100: 43 74 72 6c 48 61 6e 64 6c 65 72 45 78 3b 0d 0a  CtrlHandlerEx;..
3110: 09 7d 0d 0a 0d 0a 09 73 74 61 74 69 63 20 69 66  .}.....static if
3120: 20 28 5f 57 49 4e 33 32 5f 57 49 4e 4e 54 20 3e   (_WIN32_WINNT >
3130: 3d 20 30 78 35 30 31 29 20 7b 0d 0a 09 09 61 6c  = 0x501) {....al
3140: 69 61 73 20 43 68 61 6e 67 65 53 65 72 76 69 63  ias ChangeServic
3150: 65 43 6f 6e 66 69 67 32 57 20 43 68 61 6e 67 65  eConfig2W Change
3160: 53 65 72 76 69 63 65 43 6f 6e 66 69 67 32 3b 0d  ServiceConfig2;.
3170: 0a 09 7d 0d 0a 0d 0a 7d 20 65 6c 73 65 20 7b 0d  ..}....} else {.
3180: 0a 09 61 6c 69 61 73 20 45 4e 55 4d 5f 53 45 52  ..alias ENUM_SER
3190: 56 49 43 45 5f 53 54 41 54 55 53 41 20 45 4e 55  VICE_STATUSA ENU
31a0: 4d 5f 53 45 52 56 49 43 45 5f 53 54 41 54 55 53  M_SERVICE_STATUS
31b0: 3b 0d 0a 09 61 6c 69 61 73 20 51 55 45 52 59 5f  ;...alias QUERY_
31c0: 53 45 52 56 49 43 45 5f 43 4f 4e 46 49 47 41 20  SERVICE_CONFIGA 
31d0: 51 55 45 52 59 5f 53 45 52 56 49 43 45 5f 43 4f  QUERY_SERVICE_CO
31e0: 4e 46 49 47 3b 0d 0a 09 61 6c 69 61 73 20 51 55  NFIG;...alias QU
31f0: 45 52 59 5f 53 45 52 56 49 43 45 5f 4c 4f 43 4b  ERY_SERVICE_LOCK
3200: 5f 53 54 41 54 55 53 41 20 51 55 45 52 59 5f 53  _STATUSA QUERY_S
3210: 45 52 56 49 43 45 5f 4c 4f 43 4b 5f 53 54 41 54  ERVICE_LOCK_STAT
3220: 55 53 3b 0d 0a 09 61 6c 69 61 73 20 4c 50 53 45  US;...alias LPSE
3230: 52 56 49 43 45 5f 4d 41 49 4e 5f 46 55 4e 43 54  RVICE_MAIN_FUNCT
3240: 49 4f 4e 41 20 4c 50 53 45 52 56 49 43 45 5f 4d  IONA LPSERVICE_M
3250: 41 49 4e 5f 46 55 4e 43 54 49 4f 4e 3b 0d 0a 09  AIN_FUNCTION;...
3260: 61 6c 69 61 73 20 53 45 52 56 49 43 45 5f 54 41  alias SERVICE_TA
3270: 42 4c 45 5f 45 4e 54 52 59 41 20 53 45 52 56 49  BLE_ENTRYA SERVI
3280: 43 45 5f 54 41 42 4c 45 5f 45 4e 54 52 59 3b 0d  CE_TABLE_ENTRY;.
3290: 0a 09 61 6c 69 61 73 20 43 68 61 6e 67 65 53 65  ..alias ChangeSe
32a0: 72 76 69 63 65 43 6f 6e 66 69 67 41 20 43 68 61  rviceConfigA Cha
32b0: 6e 67 65 53 65 72 76 69 63 65 43 6f 6e 66 69 67  ngeServiceConfig
32c0: 3b 0d 0a 09 61 6c 69 61 73 20 43 72 65 61 74 65  ;...alias Create
32d0: 53 65 72 76 69 63 65 41 20 43 72 65 61 74 65 53  ServiceA CreateS
32e0: 65 72 76 69 63 65 3b 0d 0a 09 61 6c 69 61 73 20  ervice;...alias 
32f0: 45 6e 75 6d 44 65 70 65 6e 64 65 6e 74 53 65 72  EnumDependentSer
3300: 76 69 63 65 73 41 20 45 6e 75 6d 44 65 70 65 6e  vicesA EnumDepen
3310: 64 65 6e 74 53 65 72 76 69 63 65 73 3b 0d 0a 09  dentServices;...
3320: 61 6c 69 61 73 20 45 6e 75 6d 53 65 72 76 69 63  alias EnumServic
3330: 65 73 53 74 61 74 75 73 41 20 45 6e 75 6d 53 65  esStatusA EnumSe
3340: 72 76 69 63 65 73 53 74 61 74 75 73 3b 0d 0a 09  rvicesStatus;...
3350: 61 6c 69 61 73 20 47 65 74 53 65 72 76 69 63 65  alias GetService
3360: 44 69 73 70 6c 61 79 4e 61 6d 65 41 20 47 65 74  DisplayNameA Get
3370: 53 65 72 76 69 63 65 44 69 73 70 6c 61 79 4e 61  ServiceDisplayNa
3380: 6d 65 3b 0d 0a 09 61 6c 69 61 73 20 47 65 74 53  me;...alias GetS
3390: 65 72 76 69 63 65 4b 65 79 4e 61 6d 65 41 20 47  erviceKeyNameA G
33a0: 65 74 53 65 72 76 69 63 65 4b 65 79 4e 61 6d 65  etServiceKeyName
33b0: 3b 0d 0a 09 61 6c 69 61 73 20 4f 70 65 6e 53 43  ;...alias OpenSC
33c0: 4d 61 6e 61 67 65 72 41 20 4f 70 65 6e 53 43 4d  ManagerA OpenSCM
33d0: 61 6e 61 67 65 72 3b 0d 0a 09 61 6c 69 61 73 20  anager;...alias 
33e0: 4f 70 65 6e 53 65 72 76 69 63 65 41 20 4f 70 65  OpenServiceA Ope
33f0: 6e 53 65 72 76 69 63 65 3b 0d 0a 09 61 6c 69 61  nService;...alia
3400: 73 20 51 75 65 72 79 53 65 72 76 69 63 65 43 6f  s QueryServiceCo
3410: 6e 66 69 67 41 20 51 75 65 72 79 53 65 72 76 69  nfigA QueryServi
3420: 63 65 43 6f 6e 66 69 67 3b 0d 0a 09 61 6c 69 61  ceConfig;...alia
3430: 73 20 51 75 65 72 79 53 65 72 76 69 63 65 4c 6f  s QueryServiceLo
3440: 63 6b 53 74 61 74 75 73 41 20 51 75 65 72 79 53  ckStatusA QueryS
3450: 65 72 76 69 63 65 4c 6f 63 6b 53 74 61 74 75 73  erviceLockStatus
3460: 3b 0d 0a 09 61 6c 69 61 73 20 52 65 67 69 73 74  ;...alias Regist
3470: 65 72 53 65 72 76 69 63 65 43 74 72 6c 48 61 6e  erServiceCtrlHan
3480: 64 6c 65 72 41 20 52 65 67 69 73 74 65 72 53 65  dlerA RegisterSe
3490: 72 76 69 63 65 43 74 72 6c 48 61 6e 64 6c 65 72  rviceCtrlHandler
34a0: 3b 0d 0a 09 61 6c 69 61 73 20 53 74 61 72 74 53  ;...alias StartS
34b0: 65 72 76 69 63 65 41 20 53 74 61 72 74 53 65 72  erviceA StartSer
34c0: 76 69 63 65 3b 0d 0a 09 61 6c 69 61 73 20 53 74  vice;...alias St
34d0: 61 72 74 53 65 72 76 69 63 65 43 74 72 6c 44 69  artServiceCtrlDi
34e0: 73 70 61 74 63 68 65 72 41 20 53 74 61 72 74 53  spatcherA StartS
34f0: 65 72 76 69 63 65 43 74 72 6c 44 69 73 70 61 74  erviceCtrlDispat
3500: 63 68 65 72 3b 0d 0a 0d 0a 09 73 74 61 74 69 63  cher;.....static
3510: 20 69 66 20 28 5f 57 49 4e 33 32 5f 57 49 4e 4e   if (_WIN32_WINN
3520: 54 20 3e 3d 20 30 78 35 30 30 29 20 7b 0d 0a 09  T >= 0x500) {...
3530: 09 61 6c 69 61 73 20 45 4e 55 4d 5f 53 45 52 56  .alias ENUM_SERV
3540: 49 43 45 5f 53 54 41 54 55 53 5f 50 52 4f 43 45  ICE_STATUS_PROCE
3550: 53 53 41 20 45 4e 55 4d 5f 53 45 52 56 49 43 45  SSA ENUM_SERVICE
3560: 5f 53 54 41 54 55 53 5f 50 52 4f 43 45 53 53 3b  _STATUS_PROCESS;
3570: 0d 0a 09 09 61 6c 69 61 73 20 53 45 52 56 49 43  ....alias SERVIC
3580: 45 5f 44 45 53 43 52 49 50 54 49 4f 4e 41 20 53  E_DESCRIPTIONA S
3590: 45 52 56 49 43 45 5f 44 45 53 43 52 49 50 54 49  ERVICE_DESCRIPTI
35a0: 4f 4e 3b 0d 0a 09 09 61 6c 69 61 73 20 53 45 52  ON;....alias SER
35b0: 56 49 43 45 5f 46 41 49 4c 55 52 45 5f 41 43 54  VICE_FAILURE_ACT
35c0: 49 4f 4e 53 41 20 53 45 52 56 49 43 45 5f 46 41  IONSA SERVICE_FA
35d0: 49 4c 55 52 45 5f 41 43 54 49 4f 4e 53 3b 0d 0a  ILURE_ACTIONS;..
35e0: 09 09 61 6c 69 61 73 20 45 6e 75 6d 53 65 72 76  ..alias EnumServ
35f0: 69 63 65 73 53 74 61 74 75 73 45 78 41 20 45 6e  icesStatusExA En
3600: 75 6d 53 65 72 76 69 63 65 73 53 74 61 74 75 73  umServicesStatus
3610: 45 78 3b 0d 0a 09 09 61 6c 69 61 73 20 51 75 65  Ex;....alias Que
3620: 72 79 53 65 72 76 69 63 65 43 6f 6e 66 69 67 32  ryServiceConfig2
3630: 41 20 51 75 65 72 79 53 65 72 76 69 63 65 43 6f  A QueryServiceCo
3640: 6e 66 69 67 32 3b 0d 0a 09 09 61 6c 69 61 73 20  nfig2;....alias 
3650: 52 65 67 69 73 74 65 72 53 65 72 76 69 63 65 43  RegisterServiceC
3660: 74 72 6c 48 61 6e 64 6c 65 72 45 78 41 20 52 65  trlHandlerExA Re
3670: 67 69 73 74 65 72 53 65 72 76 69 63 65 43 74 72  gisterServiceCtr
3680: 6c 48 61 6e 64 6c 65 72 45 78 3b 0d 0a 09 7d 0d  lHandlerEx;...}.
3690: 0a 0d 0a 09 73 74 61 74 69 63 20 69 66 20 28 5f  ....static if (_
36a0: 57 49 4e 33 32 5f 57 49 4e 4e 54 20 3e 3d 20 30  WIN32_WINNT >= 0
36b0: 78 35 30 31 29 20 7b 0d 0a 09 09 61 6c 69 61 73  x501) {....alias
36c0: 20 43 68 61 6e 67 65 53 65 72 76 69 63 65 43 6f   ChangeServiceCo
36d0: 6e 66 69 67 32 41 20 43 68 61 6e 67 65 53 65 72  nfig2A ChangeSer
36e0: 76 69 63 65 43 6f 6e 66 69 67 32 3b 0d 0a 09 7d  viceConfig2;...}
36f0: 0d 0a 0d 0a 7d 0d 0a 0d 0a 61 6c 69 61 73 20 45  ....}....alias E
3700: 4e 55 4d 5f 53 45 52 56 49 43 45 5f 53 54 41 54  NUM_SERVICE_STAT
3710: 55 53 2a 20 4c 50 45 4e 55 4d 5f 53 45 52 56 49  US* LPENUM_SERVI
3720: 43 45 5f 53 54 41 54 55 53 3b 0d 0a 61 6c 69 61  CE_STATUS;..alia
3730: 73 20 51 55 45 52 59 5f 53 45 52 56 49 43 45 5f  s QUERY_SERVICE_
3740: 43 4f 4e 46 49 47 2a 20 4c 50 51 55 45 52 59 5f  CONFIG* LPQUERY_
3750: 53 45 52 56 49 43 45 5f 43 4f 4e 46 49 47 3b 0d  SERVICE_CONFIG;.
3760: 0a 61 6c 69 61 73 20 51 55 45 52 59 5f 53 45 52  .alias QUERY_SER
3770: 56 49 43 45 5f 4c 4f 43 4b 5f 53 54 41 54 55 53  VICE_LOCK_STATUS
3780: 2a 20 4c 50 51 55 45 52 59 5f 53 45 52 56 49 43  * LPQUERY_SERVIC
3790: 45 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 3b 0d 0a  E_LOCK_STATUS;..
37a0: 61 6c 69 61 73 20 53 45 52 56 49 43 45 5f 54 41  alias SERVICE_TA
37b0: 42 4c 45 5f 45 4e 54 52 59 2a 20 4c 50 53 45 52  BLE_ENTRY* LPSER
37c0: 56 49 43 45 5f 54 41 42 4c 45 5f 45 4e 54 52 59  VICE_TABLE_ENTRY
37d0: 3b 0d 0a 0d 0a 73 74 61 74 69 63 20 69 66 20 28  ;....static if (
37e0: 5f 57 49 4e 33 32 5f 57 49 4e 4e 54 20 3e 3d 20  _WIN32_WINNT >= 
37f0: 30 78 35 30 30 29 20 7b 0d 0a 09 61 6c 69 61 73  0x500) {...alias
3800: 20 45 4e 55 4d 5f 53 45 52 56 49 43 45 5f 53 54   ENUM_SERVICE_ST
3810: 41 54 55 53 5f 50 52 4f 43 45 53 53 2a 20 4c 50  ATUS_PROCESS* LP
3820: 45 4e 55 4d 5f 53 45 52 56 49 43 45 5f 53 54 41  ENUM_SERVICE_STA
3830: 54 55 53 5f 50 52 4f 43 45 53 53 3b 0d 0a 09 61  TUS_PROCESS;...a
3840: 6c 69 61 73 20 53 45 52 56 49 43 45 5f 44 45 53  lias SERVICE_DES
3850: 43 52 49 50 54 49 4f 4e 2a 20 4c 50 53 45 52 56  CRIPTION* LPSERV
3860: 49 43 45 5f 44 45 53 43 52 49 50 54 49 4f 4e 3b  ICE_DESCRIPTION;
3870: 0d 0a 09 61 6c 69 61 73 20 53 45 52 56 49 43 45  ...alias SERVICE
3880: 5f 46 41 49 4c 55 52 45 5f 41 43 54 49 4f 4e 53  _FAILURE_ACTIONS
3890: 2a 20 4c 50 53 45 52 56 49 43 45 5f 46 41 49 4c  * LPSERVICE_FAIL
38a0: 55 52 45 5f 41 43 54 49 4f 4e 53 3b 0d 0a 7d 0d  URE_ACTIONS;..}.
38b0: 0a                                               .