Hex Artifact Content

Not logged in

Artifact 59233b3c2f66ba16924e8e44af759f7ab20262a2:


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 0a 2a 20 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 77 69 6e 73 76             winsv
0070: 63 2e 64 20 20 20 20 20 20 20 20 20 20 20 20 20  c.d             
0080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0090: 20 20 2a 0a 2a 20 20 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 2a 0a 2a 20              *.* 
00e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00f0: 20 20 20 20 20 20 57 69 6e 64 6f 77 73 20 41 50        Windows AP
0100: 49 20 68 65 61 64 65 72 20 6d 6f 64 75 6c 65 20  I header module 
0110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0120: 20 20 20 20 20 20 2a 0a 2a 20 20 20 20 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: 2a 0a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  *.*             
0180: 20 20 20 20 54 72 61 6e 73 6c 61 74 65 64 20 66      Translated f
0190: 72 6f 6d 20 4d 69 6e 47 57 20 57 69 6e 64 6f 77  rom MinGW Window
01a0: 73 20 68 65 61 64 65 72 73 20 20 20 20 20 20 20  s headers       
01b0: 20 20 20 20 20 20 20 20 20 20 2a 0a 2a 20 20 20            *.*   
01c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
01d0: 20 20 20 20 20 20 20 20 62 79 20 53 74 65 77 61          by Stewa
01e0: 72 74 20 47 6f 72 64 6f 6e 20 20 20 20 20 20 20  rt Gordon       
01f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0200: 20 20 20 20 2a 0a 2a 20 20 20 20 20 20 20 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 2a 0a                *.
0250: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
0260: 20 20 20 20 20 20 20 20 50 6c 61 63 65 64 20 69          Placed i
0270: 6e 74 6f 20 70 75 62 6c 69 63 20 64 6f 6d 61 69  nto public domai
0280: 6e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n               
0290: 20 20 20 20 20 20 20 20 2a 0a 5c 2a 2a 2a 2a 2a          *.\*****
02a0: 2a 2a 2a 2a 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 2f 0a 6d 6f 64 75 6c 65 20 77 69 6e 33 32  **/.module win32
02f0: 2e 77 69 6e 73 76 63 3b 0a 70 72 61 67 6d 61 28  .winsvc;.pragma(
0300: 6c 69 62 2c 20 22 61 64 76 61 70 69 33 32 2e 6c  lib, "advapi32.l
0310: 69 62 22 29 3b 0a 0a 70 72 69 76 61 74 65 20 69  ib");..private i
0320: 6d 70 6f 72 74 20 77 69 6e 33 32 2e 77 33 32 61  mport win32.w32a
0330: 70 69 2c 20 77 69 6e 33 32 2e 77 69 6e 64 65 66  pi, win32.windef
0340: 3b 0a 0a 73 74 61 74 69 63 20 61 73 73 65 72 74  ;..static assert
0350: 20 28 5f 57 49 4e 33 32 5f 57 49 4e 4e 54 5f 4f   (_WIN32_WINNT_O
0360: 4e 4c 59 2c 0a 09 22 77 69 6e 33 32 2e 77 69 6e  NLY,.."win32.win
0370: 73 76 63 20 69 73 20 61 76 61 69 6c 61 62 6c 65  svc is available
0380: 20 6f 6e 6c 79 20 69 66 20 76 65 72 73 69 6f 6e   only if version
0390: 20 57 69 6e 64 6f 77 73 4e 54 6f 6e 6c 79 2c 20   WindowsNTonly, 
03a0: 57 69 6e 64 6f 77 73 58 50 2c 20 22 0a 09 22 57  WindowsXP, ".."W
03b0: 69 6e 64 6f 77 73 32 30 30 33 20 6f 72 20 57 69  indows2003 or Wi
03c0: 6e 64 6f 77 73 56 69 73 74 61 20 69 73 20 73 65  ndowsVista is se
03d0: 74 22 29 3b 0a 0a 0a 2f 2f 20 46 49 58 4d 45 3a  t");...// FIXME:
03e0: 20 63 68 65 63 6b 20 57 69 6e 64 6f 77 73 20 76   check Windows v
03f0: 65 72 73 69 6f 6e 20 73 75 70 70 6f 72 74 0a 0a  ersion support..
0400: 63 6f 6e 73 74 20 54 43 48 41 52 5b 5d 0a 09 53  const TCHAR[]..S
0410: 45 52 56 49 43 45 53 5f 41 43 54 49 56 45 5f 44  ERVICES_ACTIVE_D
0420: 41 54 41 42 41 53 45 20 3d 20 22 53 65 72 76 69  ATABASE = "Servi
0430: 63 65 73 41 63 74 69 76 65 22 2c 0a 09 53 45 52  cesActive",..SER
0440: 56 49 43 45 53 5f 46 41 49 4c 45 44 5f 44 41 54  VICES_FAILED_DAT
0450: 41 42 41 53 45 20 3d 20 22 53 65 72 76 69 63 65  ABASE = "Service
0460: 73 46 61 69 6c 65 64 22 3b 0a 0a 63 6f 6e 73 74  sFailed";..const
0470: 20 54 43 48 41 52 20 53 43 5f 47 52 4f 55 50 5f   TCHAR SC_GROUP_
0480: 49 44 45 4e 54 49 46 49 45 52 20 3d 20 27 2b 27  IDENTIFIER = '+'
0490: 3b 0a 0a 63 6f 6e 73 74 20 44 57 4f 52 44 0a 09  ;..const DWORD..
04a0: 53 43 5f 4d 41 4e 41 47 45 52 5f 41 4c 4c 5f 41  SC_MANAGER_ALL_A
04b0: 43 43 45 53 53 20 20 20 20 20 20 20 20 20 3d 20  CCESS         = 
04c0: 30 78 66 30 30 33 66 2c 0a 09 53 43 5f 4d 41 4e  0xf003f,..SC_MAN
04d0: 41 47 45 52 5f 43 4f 4e 4e 45 43 54 20 20 20 20  AGER_CONNECT    
04e0: 20 20 20 20 20 20 20 20 3d 20 20 31 2c 0a 09 53          =  1,..S
04f0: 43 5f 4d 41 4e 41 47 45 52 5f 43 52 45 41 54 45  C_MANAGER_CREATE
0500: 5f 53 45 52 56 49 43 45 20 20 20 20 20 3d 20 20  _SERVICE     =  
0510: 32 2c 0a 09 53 43 5f 4d 41 4e 41 47 45 52 5f 45  2,..SC_MANAGER_E
0520: 4e 55 4d 45 52 41 54 45 5f 53 45 52 56 49 43 45  NUMERATE_SERVICE
0530: 20 20 3d 20 20 34 2c 0a 09 53 43 5f 4d 41 4e 41    =  4,..SC_MANA
0540: 47 45 52 5f 4c 4f 43 4b 20 20 20 20 20 20 20 20  GER_LOCK        
0550: 20 20 20 20 20 20 20 3d 20 20 38 2c 0a 09 53 43         =  8,..SC
0560: 5f 4d 41 4e 41 47 45 52 5f 51 55 45 52 59 5f 4c  _MANAGER_QUERY_L
0570: 4f 43 4b 5f 53 54 41 54 55 53 20 20 3d 20 31 36  OCK_STATUS  = 16
0580: 2c 0a 09 53 43 5f 4d 41 4e 41 47 45 52 5f 4d 4f  ,..SC_MANAGER_MO
0590: 44 49 46 59 5f 42 4f 4f 54 5f 43 4f 4e 46 49 47  DIFY_BOOT_CONFIG
05a0: 20 3d 20 33 32 3b 0a 0a 63 6f 6e 73 74 20 44 57   = 32;..const DW
05b0: 4f 52 44 20 53 45 52 56 49 43 45 5f 4e 4f 5f 43  ORD SERVICE_NO_C
05c0: 48 41 4e 47 45 20 3d 20 30 78 66 66 66 66 66 66  HANGE = 0xffffff
05d0: 66 66 3b 0a 0a 65 6e 75 6d 20 3a 20 44 57 4f 52  ff;..enum : DWOR
05e0: 44 20 7b 0a 09 53 45 52 56 49 43 45 5f 53 54 4f  D {..SERVICE_STO
05f0: 50 50 45 44 20 3d 20 31 2c 0a 09 53 45 52 56 49  PPED = 1,..SERVI
0600: 43 45 5f 53 54 41 52 54 5f 50 45 4e 44 49 4e 47  CE_START_PENDING
0610: 2c 0a 09 53 45 52 56 49 43 45 5f 53 54 4f 50 5f  ,..SERVICE_STOP_
0620: 50 45 4e 44 49 4e 47 2c 0a 09 53 45 52 56 49 43  PENDING,..SERVIC
0630: 45 5f 52 55 4e 4e 49 4e 47 2c 0a 09 53 45 52 56  E_RUNNING,..SERV
0640: 49 43 45 5f 43 4f 4e 54 49 4e 55 45 5f 50 45 4e  ICE_CONTINUE_PEN
0650: 44 49 4e 47 2c 0a 09 53 45 52 56 49 43 45 5f 50  DING,..SERVICE_P
0660: 41 55 53 45 5f 50 45 4e 44 49 4e 47 2c 0a 09 53  AUSE_PENDING,..S
0670: 45 52 56 49 43 45 5f 50 41 55 53 45 44 20 2f 2f  ERVICE_PAUSED //
0680: 20 3d 20 37 0a 7d 0a 0a 63 6f 6e 73 74 20 44 57   = 7.}..const DW
0690: 4f 52 44 0a 09 53 45 52 56 49 43 45 5f 41 43 43  ORD..SERVICE_ACC
06a0: 45 50 54 5f 53 54 4f 50 20 20 20 20 20 20 20 20  EPT_STOP        
06b0: 20 20 20 20 20 20 20 20 20 20 3d 20 20 20 31 2c            =   1,
06c0: 0a 09 53 45 52 56 49 43 45 5f 41 43 43 45 50 54  ..SERVICE_ACCEPT
06d0: 5f 50 41 55 53 45 5f 43 4f 4e 54 49 4e 55 45 20  _PAUSE_CONTINUE 
06e0: 20 20 20 20 20 20 20 3d 20 20 20 32 2c 0a 09 53         =   2,..S
06f0: 45 52 56 49 43 45 5f 41 43 43 45 50 54 5f 53 48  ERVICE_ACCEPT_SH
0700: 55 54 44 4f 57 4e 20 20 20 20 20 20 20 20 20 20  UTDOWN          
0710: 20 20 20 20 3d 20 20 20 34 2c 0a 09 53 45 52 56      =   4,..SERV
0720: 49 43 45 5f 41 43 43 45 50 54 5f 50 41 52 41 4d  ICE_ACCEPT_PARAM
0730: 43 48 41 4e 47 45 20 20 20 20 20 20 20 20 20 20  CHANGE          
0740: 20 3d 20 20 20 38 2c 0a 09 53 45 52 56 49 43 45   =   8,..SERVICE
0750: 5f 41 43 43 45 50 54 5f 4e 45 54 42 49 4e 44 43  _ACCEPT_NETBINDC
0760: 48 41 4e 47 45 20 20 20 20 20 20 20 20 20 3d 20  HANGE         = 
0770: 20 31 36 2c 0a 09 53 45 52 56 49 43 45 5f 41 43   16,..SERVICE_AC
0780: 43 45 50 54 5f 48 41 52 44 57 41 52 45 50 52 4f  CEPT_HARDWAREPRO
0790: 46 49 4c 45 43 48 41 4e 47 45 20 3d 20 20 33 32  FILECHANGE =  32
07a0: 2c 0a 09 53 45 52 56 49 43 45 5f 41 43 43 45 50  ,..SERVICE_ACCEP
07b0: 54 5f 50 4f 57 45 52 45 56 45 4e 54 20 20 20 20  T_POWEREVENT    
07c0: 20 20 20 20 20 20 20 20 3d 20 20 36 34 2c 0a 09          =  64,..
07d0: 53 45 52 56 49 43 45 5f 41 43 43 45 50 54 5f 53  SERVICE_ACCEPT_S
07e0: 45 53 53 49 4f 4e 43 48 41 4e 47 45 20 20 20 20  ESSIONCHANGE    
07f0: 20 20 20 20 20 3d 20 31 32 38 3b 0a 0a 65 6e 75       = 128;..enu
0800: 6d 20 3a 20 44 57 4f 52 44 20 7b 0a 09 53 45 52  m : DWORD {..SER
0810: 56 49 43 45 5f 43 4f 4e 54 52 4f 4c 5f 53 54 4f  VICE_CONTROL_STO
0820: 50 20 3d 20 31 2c 0a 09 53 45 52 56 49 43 45 5f  P = 1,..SERVICE_
0830: 43 4f 4e 54 52 4f 4c 5f 50 41 55 53 45 2c 0a 09  CONTROL_PAUSE,..
0840: 53 45 52 56 49 43 45 5f 43 4f 4e 54 52 4f 4c 5f  SERVICE_CONTROL_
0850: 43 4f 4e 54 49 4e 55 45 2c 0a 09 53 45 52 56 49  CONTINUE,..SERVI
0860: 43 45 5f 43 4f 4e 54 52 4f 4c 5f 49 4e 54 45 52  CE_CONTROL_INTER
0870: 52 4f 47 41 54 45 2c 0a 09 53 45 52 56 49 43 45  ROGATE,..SERVICE
0880: 5f 43 4f 4e 54 52 4f 4c 5f 53 48 55 54 44 4f 57  _CONTROL_SHUTDOW
0890: 4e 2c 0a 09 53 45 52 56 49 43 45 5f 43 4f 4e 54  N,..SERVICE_CONT
08a0: 52 4f 4c 5f 50 41 52 41 4d 43 48 41 4e 47 45 2c  ROL_PARAMCHANGE,
08b0: 0a 09 53 45 52 56 49 43 45 5f 43 4f 4e 54 52 4f  ..SERVICE_CONTRO
08c0: 4c 5f 4e 45 54 42 49 4e 44 41 44 44 2c 0a 09 53  L_NETBINDADD,..S
08d0: 45 52 56 49 43 45 5f 43 4f 4e 54 52 4f 4c 5f 4e  ERVICE_CONTROL_N
08e0: 45 54 42 49 4e 44 52 45 4d 4f 56 45 2c 0a 09 53  ETBINDREMOVE,..S
08f0: 45 52 56 49 43 45 5f 43 4f 4e 54 52 4f 4c 5f 4e  ERVICE_CONTROL_N
0900: 45 54 42 49 4e 44 45 4e 41 42 4c 45 2c 0a 09 53  ETBINDENABLE,..S
0910: 45 52 56 49 43 45 5f 43 4f 4e 54 52 4f 4c 5f 4e  ERVICE_CONTROL_N
0920: 45 54 42 49 4e 44 44 49 53 41 42 4c 45 2c 0a 09  ETBINDDISABLE,..
0930: 53 45 52 56 49 43 45 5f 43 4f 4e 54 52 4f 4c 5f  SERVICE_CONTROL_
0940: 44 45 56 49 43 45 45 56 45 4e 54 2c 0a 09 53 45  DEVICEEVENT,..SE
0950: 52 56 49 43 45 5f 43 4f 4e 54 52 4f 4c 5f 48 41  RVICE_CONTROL_HA
0960: 52 44 57 41 52 45 50 52 4f 46 49 4c 45 43 48 41  RDWAREPROFILECHA
0970: 4e 47 45 2c 0a 09 53 45 52 56 49 43 45 5f 43 4f  NGE,..SERVICE_CO
0980: 4e 54 52 4f 4c 5f 50 4f 57 45 52 45 56 45 4e 54  NTROL_POWEREVENT
0990: 2c 0a 09 53 45 52 56 49 43 45 5f 43 4f 4e 54 52  ,..SERVICE_CONTR
09a0: 4f 4c 5f 53 45 53 53 49 4f 4e 43 48 41 4e 47 45  OL_SESSIONCHANGE
09b0: 2c 20 2f 2f 20 3d 20 31 34 0a 7d 0a 0a 65 6e 75  , // = 14.}..enu
09c0: 6d 20 3a 20 44 57 4f 52 44 20 7b 0a 09 53 45 52  m : DWORD {..SER
09d0: 56 49 43 45 5f 41 43 54 49 56 45 20 3d 20 31 2c  VICE_ACTIVE = 1,
09e0: 0a 09 53 45 52 56 49 43 45 5f 49 4e 41 43 54 49  ..SERVICE_INACTI
09f0: 56 45 2c 0a 09 53 45 52 56 49 43 45 5f 53 54 41  VE,..SERVICE_STA
0a00: 54 45 5f 41 4c 4c 0a 7d 0a 0a 63 6f 6e 73 74 20  TE_ALL.}..const 
0a10: 44 57 4f 52 44 0a 09 53 45 52 56 49 43 45 5f 51  DWORD..SERVICE_Q
0a20: 55 45 52 59 5f 43 4f 4e 46 49 47 20 20 20 20 20  UERY_CONFIG     
0a30: 20 20 20 20 3d 20 30 78 30 30 30 31 2c 0a 09 53      = 0x0001,..S
0a40: 45 52 56 49 43 45 5f 43 48 41 4e 47 45 5f 43 4f  ERVICE_CHANGE_CO
0a50: 4e 46 49 47 20 20 20 20 20 20 20 20 3d 20 30 78  NFIG        = 0x
0a60: 30 30 30 32 2c 0a 09 53 45 52 56 49 43 45 5f 51  0002,..SERVICE_Q
0a70: 55 45 52 59 5f 53 54 41 54 55 53 20 20 20 20 20  UERY_STATUS     
0a80: 20 20 20 20 3d 20 30 78 30 30 30 34 2c 0a 09 53      = 0x0004,..S
0a90: 45 52 56 49 43 45 5f 45 4e 55 4d 45 52 41 54 45  ERVICE_ENUMERATE
0aa0: 5f 44 45 50 45 4e 44 45 4e 54 53 20 3d 20 30 78  _DEPENDENTS = 0x
0ab0: 30 30 30 38 2c 0a 09 53 45 52 56 49 43 45 5f 53  0008,..SERVICE_S
0ac0: 54 41 52 54 20 20 20 20 20 20 20 20 20 20 20 20  TART            
0ad0: 20 20 20 20 3d 20 30 78 30 30 31 30 2c 0a 09 53      = 0x0010,..S
0ae0: 45 52 56 49 43 45 5f 53 54 4f 50 20 20 20 20 20  ERVICE_STOP     
0af0: 20 20 20 20 20 20 20 20 20 20 20 20 3d 20 30 78              = 0x
0b00: 30 30 32 30 2c 0a 09 53 45 52 56 49 43 45 5f 50  0020,..SERVICE_P
0b10: 41 55 53 45 5f 43 4f 4e 54 49 4e 55 45 20 20 20  AUSE_CONTINUE   
0b20: 20 20 20 20 3d 20 30 78 30 30 34 30 2c 0a 09 53      = 0x0040,..S
0b30: 45 52 56 49 43 45 5f 49 4e 54 45 52 52 4f 47 41  ERVICE_INTERROGA
0b40: 54 45 20 20 20 20 20 20 20 20 20 20 3d 20 30 78  TE          = 0x
0b50: 30 30 38 30 2c 0a 09 53 45 52 56 49 43 45 5f 55  0080,..SERVICE_U
0b60: 53 45 52 5f 44 45 46 49 4e 45 44 5f 43 4f 4e 54  SER_DEFINED_CONT
0b70: 52 4f 4c 20 3d 20 30 78 30 31 30 30 2c 0a 09 53  ROL = 0x0100,..S
0b80: 45 52 56 49 43 45 5f 41 4c 4c 5f 41 43 43 45 53  ERVICE_ALL_ACCES
0b90: 53 20 20 20 20 20 20 20 20 20 20 20 3d 20 30 78  S           = 0x
0ba0: 30 31 46 46 20 7c 20 53 54 41 4e 44 41 52 44 5f  01FF | STANDARD_
0bb0: 52 49 47 48 54 53 5f 52 45 51 55 49 52 45 44 3b  RIGHTS_REQUIRED;
0bc0: 0a 0a 2f 2f 20 54 68 69 73 20 69 73 20 6e 6f 74  ..// This is not
0bd0: 20 64 6f 63 75 6d 65 6e 74 65 64 20 6f 6e 20 74   documented on t
0be0: 68 65 20 4d 53 44 4e 20 73 69 74 65 0a 63 6f 6e  he MSDN site.con
0bf0: 73 74 20 53 45 52 56 49 43 45 5f 52 55 4e 53 5f  st SERVICE_RUNS_
0c00: 49 4e 5f 53 59 53 54 45 4d 5f 50 52 4f 43 45 53  IN_SYSTEM_PROCES
0c10: 53 20 3d 20 31 3b 0a 0a 65 6e 75 6d 20 3a 20 44  S = 1;..enum : D
0c20: 57 4f 52 44 20 7b 0a 09 53 45 52 56 49 43 45 5f  WORD {..SERVICE_
0c30: 43 4f 4e 46 49 47 5f 44 45 53 43 52 49 50 54 49  CONFIG_DESCRIPTI
0c40: 4f 4e 20 20 20 20 20 20 20 20 20 3d 20 31 2c 0a  ON         = 1,.
0c50: 09 53 45 52 56 49 43 45 5f 43 4f 4e 46 49 47 5f  .SERVICE_CONFIG_
0c60: 46 41 49 4c 55 52 45 5f 41 43 54 49 4f 4e 53 2c  FAILURE_ACTIONS,
0c70: 0a 09 53 45 52 56 49 43 45 5f 43 4f 4e 46 49 47  ..SERVICE_CONFIG
0c80: 5f 44 45 4c 41 59 45 44 5f 41 55 54 4f 5f 53 54  _DELAYED_AUTO_ST
0c90: 41 52 54 5f 49 4e 46 4f 2c 0a 09 53 45 52 56 49  ART_INFO,..SERVI
0ca0: 43 45 5f 43 4f 4e 46 49 47 5f 46 41 49 4c 55 52  CE_CONFIG_FAILUR
0cb0: 45 5f 41 43 54 49 4f 4e 53 5f 46 4c 41 47 2c 0a  E_ACTIONS_FLAG,.
0cc0: 09 53 45 52 56 49 43 45 5f 43 4f 4e 46 49 47 5f  .SERVICE_CONFIG_
0cd0: 53 45 52 56 49 43 45 5f 53 49 44 5f 49 4e 46 4f  SERVICE_SID_INFO
0ce0: 2c 0a 09 53 45 52 56 49 43 45 5f 43 4f 4e 46 49  ,..SERVICE_CONFI
0cf0: 47 5f 52 45 51 55 49 52 45 44 5f 50 52 49 56 49  G_REQUIRED_PRIVI
0d00: 4c 45 47 45 53 5f 49 4e 46 4f 2c 0a 09 53 45 52  LEGES_INFO,..SER
0d10: 56 49 43 45 5f 43 4f 4e 46 49 47 5f 50 52 45 53  VICE_CONFIG_PRES
0d20: 48 55 54 44 4f 57 4e 5f 49 4e 46 4f 20 2f 2f 20  HUTDOWN_INFO // 
0d30: 3d 20 37 0a 7d 0a 0a 73 74 72 75 63 74 20 53 45  = 7.}..struct SE
0d40: 52 56 49 43 45 5f 53 54 41 54 55 53 20 7b 0a 09  RVICE_STATUS {..
0d50: 44 57 4f 52 44 20 64 77 53 65 72 76 69 63 65 54  DWORD dwServiceT
0d60: 79 70 65 3b 0a 09 44 57 4f 52 44 20 64 77 43 75  ype;..DWORD dwCu
0d70: 72 72 65 6e 74 53 74 61 74 65 3b 0a 09 44 57 4f  rrentState;..DWO
0d80: 52 44 20 64 77 43 6f 6e 74 72 6f 6c 73 41 63 63  RD dwControlsAcc
0d90: 65 70 74 65 64 3b 0a 09 44 57 4f 52 44 20 64 77  epted;..DWORD dw
0da0: 57 69 6e 33 32 45 78 69 74 43 6f 64 65 3b 0a 09  Win32ExitCode;..
0db0: 44 57 4f 52 44 20 64 77 53 65 72 76 69 63 65 53  DWORD dwServiceS
0dc0: 70 65 63 69 66 69 63 45 78 69 74 43 6f 64 65 3b  pecificExitCode;
0dd0: 0a 09 44 57 4f 52 44 20 64 77 43 68 65 63 6b 50  ..DWORD dwCheckP
0de0: 6f 69 6e 74 3b 0a 09 44 57 4f 52 44 20 64 77 57  oint;..DWORD dwW
0df0: 61 69 74 48 69 6e 74 3b 0a 7d 0a 61 6c 69 61 73  aitHint;.}.alias
0e00: 20 53 45 52 56 49 43 45 5f 53 54 41 54 55 53 2a   SERVICE_STATUS*
0e10: 20 4c 50 53 45 52 56 49 43 45 5f 53 54 41 54 55   LPSERVICE_STATU
0e20: 53 3b 0a 0a 73 74 72 75 63 74 20 45 4e 55 4d 5f  S;..struct ENUM_
0e30: 53 45 52 56 49 43 45 5f 53 54 41 54 55 53 41 20  SERVICE_STATUSA 
0e40: 7b 0a 09 4c 50 53 54 52 20 20 20 20 20 20 20 20  {..LPSTR        
0e50: 20 20 6c 70 53 65 72 76 69 63 65 4e 61 6d 65 3b    lpServiceName;
0e60: 0a 09 4c 50 53 54 52 20 20 20 20 20 20 20 20 20  ..LPSTR         
0e70: 20 6c 70 44 69 73 70 6c 61 79 4e 61 6d 65 3b 0a   lpDisplayName;.
0e80: 09 53 45 52 56 49 43 45 5f 53 54 41 54 55 53 20  .SERVICE_STATUS 
0e90: 53 65 72 76 69 63 65 53 74 61 74 75 73 3b 0a 7d  ServiceStatus;.}
0ea0: 0a 61 6c 69 61 73 20 45 4e 55 4d 5f 53 45 52 56  .alias ENUM_SERV
0eb0: 49 43 45 5f 53 54 41 54 55 53 41 2a 20 4c 50 45  ICE_STATUSA* LPE
0ec0: 4e 55 4d 5f 53 45 52 56 49 43 45 5f 53 54 41 54  NUM_SERVICE_STAT
0ed0: 55 53 41 3b 0a 0a 73 74 72 75 63 74 20 45 4e 55  USA;..struct ENU
0ee0: 4d 5f 53 45 52 56 49 43 45 5f 53 54 41 54 55 53  M_SERVICE_STATUS
0ef0: 57 20 7b 0a 09 4c 50 57 53 54 52 20 20 20 20 20  W {..LPWSTR     
0f00: 20 20 20 20 6c 70 53 65 72 76 69 63 65 4e 61 6d      lpServiceNam
0f10: 65 3b 0a 09 4c 50 57 53 54 52 20 20 20 20 20 20  e;..LPWSTR      
0f20: 20 20 20 6c 70 44 69 73 70 6c 61 79 4e 61 6d 65     lpDisplayName
0f30: 3b 0a 09 53 45 52 56 49 43 45 5f 53 54 41 54 55  ;..SERVICE_STATU
0f40: 53 20 53 65 72 76 69 63 65 53 74 61 74 75 73 3b  S ServiceStatus;
0f50: 0a 7d 0a 61 6c 69 61 73 20 45 4e 55 4d 5f 53 45  .}.alias ENUM_SE
0f60: 52 56 49 43 45 5f 53 54 41 54 55 53 57 2a 20 4c  RVICE_STATUSW* L
0f70: 50 45 4e 55 4d 5f 53 45 52 56 49 43 45 5f 53 54  PENUM_SERVICE_ST
0f80: 41 54 55 53 57 3b 0a 0a 73 74 72 75 63 74 20 51  ATUSW;..struct Q
0f90: 55 45 52 59 5f 53 45 52 56 49 43 45 5f 43 4f 4e  UERY_SERVICE_CON
0fa0: 46 49 47 41 20 7b 0a 09 44 57 4f 52 44 20 64 77  FIGA {..DWORD dw
0fb0: 53 65 72 76 69 63 65 54 79 70 65 3b 0a 09 44 57  ServiceType;..DW
0fc0: 4f 52 44 20 64 77 53 74 61 72 74 54 79 70 65 3b  ORD dwStartType;
0fd0: 0a 09 44 57 4f 52 44 20 64 77 45 72 72 6f 72 43  ..DWORD dwErrorC
0fe0: 6f 6e 74 72 6f 6c 3b 0a 09 4c 50 53 54 52 20 6c  ontrol;..LPSTR l
0ff0: 70 42 69 6e 61 72 79 50 61 74 68 4e 61 6d 65 3b  pBinaryPathName;
1000: 0a 09 4c 50 53 54 52 20 6c 70 4c 6f 61 64 4f 72  ..LPSTR lpLoadOr
1010: 64 65 72 47 72 6f 75 70 3b 0a 09 44 57 4f 52 44  derGroup;..DWORD
1020: 20 64 77 54 61 67 49 64 3b 0a 09 4c 50 53 54 52   dwTagId;..LPSTR
1030: 20 6c 70 44 65 70 65 6e 64 65 6e 63 69 65 73 3b   lpDependencies;
1040: 0a 09 4c 50 53 54 52 20 6c 70 53 65 72 76 69 63  ..LPSTR lpServic
1050: 65 53 74 61 72 74 4e 61 6d 65 3b 0a 09 4c 50 53  eStartName;..LPS
1060: 54 52 20 6c 70 44 69 73 70 6c 61 79 4e 61 6d 65  TR lpDisplayName
1070: 3b 0a 7d 0a 61 6c 69 61 73 20 51 55 45 52 59 5f  ;.}.alias QUERY_
1080: 53 45 52 56 49 43 45 5f 43 4f 4e 46 49 47 41 2a  SERVICE_CONFIGA*
1090: 20 4c 50 51 55 45 52 59 5f 53 45 52 56 49 43 45   LPQUERY_SERVICE
10a0: 5f 43 4f 4e 46 49 47 41 3b 0a 0a 73 74 72 75 63  _CONFIGA;..struc
10b0: 74 20 51 55 45 52 59 5f 53 45 52 56 49 43 45 5f  t QUERY_SERVICE_
10c0: 43 4f 4e 46 49 47 57 20 7b 0a 09 44 57 4f 52 44  CONFIGW {..DWORD
10d0: 20 20 64 77 53 65 72 76 69 63 65 54 79 70 65 3b    dwServiceType;
10e0: 0a 09 44 57 4f 52 44 20 20 64 77 53 74 61 72 74  ..DWORD  dwStart
10f0: 54 79 70 65 3b 0a 09 44 57 4f 52 44 20 20 64 77  Type;..DWORD  dw
1100: 45 72 72 6f 72 43 6f 6e 74 72 6f 6c 3b 0a 09 4c  ErrorControl;..L
1110: 50 57 53 54 52 20 6c 70 42 69 6e 61 72 79 50 61  PWSTR lpBinaryPa
1120: 74 68 4e 61 6d 65 3b 0a 09 4c 50 57 53 54 52 20  thName;..LPWSTR 
1130: 6c 70 4c 6f 61 64 4f 72 64 65 72 47 72 6f 75 70  lpLoadOrderGroup
1140: 3b 0a 09 44 57 4f 52 44 20 20 64 77 54 61 67 49  ;..DWORD  dwTagI
1150: 64 3b 0a 09 4c 50 57 53 54 52 20 6c 70 44 65 70  d;..LPWSTR lpDep
1160: 65 6e 64 65 6e 63 69 65 73 3b 0a 09 4c 50 57 53  endencies;..LPWS
1170: 54 52 20 6c 70 53 65 72 76 69 63 65 53 74 61 72  TR lpServiceStar
1180: 74 4e 61 6d 65 3b 0a 09 4c 50 57 53 54 52 20 6c  tName;..LPWSTR l
1190: 70 44 69 73 70 6c 61 79 4e 61 6d 65 3b 0a 7d 0a  pDisplayName;.}.
11a0: 61 6c 69 61 73 20 51 55 45 52 59 5f 53 45 52 56  alias QUERY_SERV
11b0: 49 43 45 5f 43 4f 4e 46 49 47 57 2a 20 4c 50 51  ICE_CONFIGW* LPQ
11c0: 55 45 52 59 5f 53 45 52 56 49 43 45 5f 43 4f 4e  UERY_SERVICE_CON
11d0: 46 49 47 57 3b 0a 0a 73 74 72 75 63 74 20 51 55  FIGW;..struct QU
11e0: 45 52 59 5f 53 45 52 56 49 43 45 5f 4c 4f 43 4b  ERY_SERVICE_LOCK
11f0: 5f 53 54 41 54 55 53 41 20 7b 0a 09 44 57 4f 52  _STATUSA {..DWOR
1200: 44 20 66 49 73 4c 6f 63 6b 65 64 3b 0a 09 4c 50  D fIsLocked;..LP
1210: 53 54 52 20 6c 70 4c 6f 63 6b 4f 77 6e 65 72 3b  STR lpLockOwner;
1220: 0a 09 44 57 4f 52 44 20 64 77 4c 6f 63 6b 44 75  ..DWORD dwLockDu
1230: 72 61 74 69 6f 6e 3b 0a 7d 0a 61 6c 69 61 73 20  ration;.}.alias 
1240: 51 55 45 52 59 5f 53 45 52 56 49 43 45 5f 4c 4f  QUERY_SERVICE_LO
1250: 43 4b 5f 53 54 41 54 55 53 41 2a 20 4c 50 51 55  CK_STATUSA* LPQU
1260: 45 52 59 5f 53 45 52 56 49 43 45 5f 4c 4f 43 4b  ERY_SERVICE_LOCK
1270: 5f 53 54 41 54 55 53 41 3b 0a 0a 73 74 72 75 63  _STATUSA;..struc
1280: 74 20 51 55 45 52 59 5f 53 45 52 56 49 43 45 5f  t QUERY_SERVICE_
1290: 4c 4f 43 4b 5f 53 54 41 54 55 53 57 20 7b 0a 09  LOCK_STATUSW {..
12a0: 44 57 4f 52 44 20 20 66 49 73 4c 6f 63 6b 65 64  DWORD  fIsLocked
12b0: 3b 0a 09 4c 50 57 53 54 52 20 6c 70 4c 6f 63 6b  ;..LPWSTR lpLock
12c0: 4f 77 6e 65 72 3b 0a 09 44 57 4f 52 44 20 20 64  Owner;..DWORD  d
12d0: 77 4c 6f 63 6b 44 75 72 61 74 69 6f 6e 3b 0a 7d  wLockDuration;.}
12e0: 0a 61 6c 69 61 73 20 51 55 45 52 59 5f 53 45 52  .alias QUERY_SER
12f0: 56 49 43 45 5f 4c 4f 43 4b 5f 53 54 41 54 55 53  VICE_LOCK_STATUS
1300: 57 2a 20 4c 50 51 55 45 52 59 5f 53 45 52 56 49  W* LPQUERY_SERVI
1310: 43 45 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 57 3b  CE_LOCK_STATUSW;
1320: 0a 0a 65 78 74 65 72 6e 20 28 57 69 6e 64 6f 77  ..extern (Window
1330: 73 29 20 7b 0a 09 61 6c 69 61 73 20 76 6f 69 64  s) {..alias void
1340: 20 66 75 6e 63 74 69 6f 6e 28 44 57 4f 52 44 2c   function(DWORD,
1350: 20 4c 50 53 54 52 2a 29 20 20 4c 50 53 45 52 56   LPSTR*)  LPSERV
1360: 49 43 45 5f 4d 41 49 4e 5f 46 55 4e 43 54 49 4f  ICE_MAIN_FUNCTIO
1370: 4e 41 3b 0a 09 61 6c 69 61 73 20 76 6f 69 64 20  NA;..alias void 
1380: 66 75 6e 63 74 69 6f 6e 28 44 57 4f 52 44 2c 20  function(DWORD, 
1390: 4c 50 57 53 54 52 2a 29 20 4c 50 53 45 52 56 49  LPWSTR*) LPSERVI
13a0: 43 45 5f 4d 41 49 4e 5f 46 55 4e 43 54 49 4f 4e  CE_MAIN_FUNCTION
13b0: 57 3b 0a 7d 0a 0a 73 74 72 75 63 74 20 53 45 52  W;.}..struct SER
13c0: 56 49 43 45 5f 54 41 42 4c 45 5f 45 4e 54 52 59  VICE_TABLE_ENTRY
13d0: 41 20 7b 0a 09 4c 50 53 54 52 20 20 20 20 20 20  A {..LPSTR      
13e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 70                lp
13f0: 53 65 72 76 69 63 65 4e 61 6d 65 3b 0a 09 4c 50  ServiceName;..LP
1400: 53 45 52 56 49 43 45 5f 4d 41 49 4e 5f 46 55 4e  SERVICE_MAIN_FUN
1410: 43 54 49 4f 4e 41 20 6c 70 53 65 72 76 69 63 65  CTIONA lpService
1420: 50 72 6f 63 3b 0a 7d 0a 61 6c 69 61 73 20 53 45  Proc;.}.alias SE
1430: 52 56 49 43 45 5f 54 41 42 4c 45 5f 45 4e 54 52  RVICE_TABLE_ENTR
1440: 59 41 2a 20 4c 50 53 45 52 56 49 43 45 5f 54 41  YA* LPSERVICE_TA
1450: 42 4c 45 5f 45 4e 54 52 59 41 3b 0a 0a 73 74 72  BLE_ENTRYA;..str
1460: 75 63 74 20 53 45 52 56 49 43 45 5f 54 41 42 4c  uct SERVICE_TABL
1470: 45 5f 45 4e 54 52 59 57 20 7b 0a 09 4c 50 57 53  E_ENTRYW {..LPWS
1480: 54 52 20 20 20 20 20 20 20 20 20 20 20 20 20 20  TR              
1490: 20 20 20 20 20 6c 70 53 65 72 76 69 63 65 4e 61       lpServiceNa
14a0: 6d 65 3b 0a 09 4c 50 53 45 52 56 49 43 45 5f 4d  me;..LPSERVICE_M
14b0: 41 49 4e 5f 46 55 4e 43 54 49 4f 4e 57 20 6c 70  AIN_FUNCTIONW lp
14c0: 53 65 72 76 69 63 65 50 72 6f 63 3b 0a 7d 0a 61  ServiceProc;.}.a
14d0: 6c 69 61 73 20 53 45 52 56 49 43 45 5f 54 41 42  lias SERVICE_TAB
14e0: 4c 45 5f 45 4e 54 52 59 57 2a 20 4c 50 53 45 52  LE_ENTRYW* LPSER
14f0: 56 49 43 45 5f 54 41 42 4c 45 5f 45 4e 54 52 59  VICE_TABLE_ENTRY
1500: 57 3b 0a 0a 61 6c 69 61 73 20 48 41 4e 44 4c 45  W;..alias HANDLE
1510: 20 53 43 5f 48 41 4e 44 4c 45 3b 0a 61 6c 69 61   SC_HANDLE;.alia
1520: 73 20 48 41 4e 44 4c 45 2a 20 4c 50 53 43 5f 48  s HANDLE* LPSC_H
1530: 41 4e 44 4c 45 3b 0a 61 6c 69 61 73 20 76 6f 69  ANDLE;.alias voi
1540: 64 2a 20 53 43 5f 4c 4f 43 4b 3b 0a 61 6c 69 61  d* SC_LOCK;.alia
1550: 73 20 44 57 4f 52 44 20 53 45 52 56 49 43 45 5f  s DWORD SERVICE_
1560: 53 54 41 54 55 53 5f 48 41 4e 44 4c 45 3b 0a 0a  STATUS_HANDLE;..
1570: 65 78 74 65 72 6e 20 28 57 69 6e 64 6f 77 73 29  extern (Windows)
1580: 20 7b 0a 09 61 6c 69 61 73 20 76 6f 69 64 20 66   {..alias void f
1590: 75 6e 63 74 69 6f 6e 28 44 57 4f 52 44 29 20 4c  unction(DWORD) L
15a0: 50 48 41 4e 44 4c 45 52 5f 46 55 4e 43 54 49 4f  PHANDLER_FUNCTIO
15b0: 4e 3b 0a 09 61 6c 69 61 73 20 44 57 4f 52 44 20  N;..alias DWORD 
15c0: 66 75 6e 63 74 69 6f 6e 28 44 57 4f 52 44 2c 20  function(DWORD, 
15d0: 44 57 4f 52 44 2c 20 4c 50 56 4f 49 44 2c 20 4c  DWORD, LPVOID, L
15e0: 50 56 4f 49 44 29 20 4c 50 48 41 4e 44 4c 45 52  PVOID) LPHANDLER
15f0: 5f 46 55 4e 43 54 49 4f 4e 5f 45 58 3b 0a 7d 0a  _FUNCTION_EX;.}.
1600: 0a 73 74 61 74 69 63 20 69 66 20 28 5f 57 49 4e  .static if (_WIN
1610: 33 32 5f 57 49 4e 4e 54 20 3e 3d 20 30 78 35 30  32_WINNT >= 0x50
1620: 30 29 20 7b 0a 09 73 74 72 75 63 74 20 53 45 52  0) {..struct SER
1630: 56 49 43 45 5f 53 54 41 54 55 53 5f 50 52 4f 43  VICE_STATUS_PROC
1640: 45 53 53 20 7b 0a 09 09 44 57 4f 52 44 20 64 77  ESS {...DWORD dw
1650: 53 65 72 76 69 63 65 54 79 70 65 3b 0a 09 09 44  ServiceType;...D
1660: 57 4f 52 44 20 64 77 43 75 72 72 65 6e 74 53 74  WORD dwCurrentSt
1670: 61 74 65 3b 0a 09 09 44 57 4f 52 44 20 64 77 43  ate;...DWORD dwC
1680: 6f 6e 74 72 6f 6c 73 41 63 63 65 70 74 65 64 3b  ontrolsAccepted;
1690: 0a 09 09 44 57 4f 52 44 20 64 77 57 69 6e 33 32  ...DWORD dwWin32
16a0: 45 78 69 74 43 6f 64 65 3b 0a 09 09 44 57 4f 52  ExitCode;...DWOR
16b0: 44 20 64 77 53 65 72 76 69 63 65 53 70 65 63 69  D dwServiceSpeci
16c0: 66 69 63 45 78 69 74 43 6f 64 65 3b 0a 09 09 44  ficExitCode;...D
16d0: 57 4f 52 44 20 64 77 43 68 65 63 6b 50 6f 69 6e  WORD dwCheckPoin
16e0: 74 3b 0a 09 09 44 57 4f 52 44 20 64 77 57 61 69  t;...DWORD dwWai
16f0: 74 48 69 6e 74 3b 0a 09 09 44 57 4f 52 44 20 64  tHint;...DWORD d
1700: 77 50 72 6f 63 65 73 73 49 64 3b 0a 09 09 44 57  wProcessId;...DW
1710: 4f 52 44 20 64 77 53 65 72 76 69 63 65 46 6c 61  ORD dwServiceFla
1720: 67 73 3b 0a 09 7d 0a 09 61 6c 69 61 73 20 53 45  gs;..}..alias SE
1730: 52 56 49 43 45 5f 53 54 41 54 55 53 5f 50 52 4f  RVICE_STATUS_PRO
1740: 43 45 53 53 2a 20 4c 50 53 45 52 56 49 43 45 5f  CESS* LPSERVICE_
1750: 53 54 41 54 55 53 5f 50 52 4f 43 45 53 53 3b 0a  STATUS_PROCESS;.
1760: 0a 09 65 6e 75 6d 20 53 43 5f 53 54 41 54 55 53  ..enum SC_STATUS
1770: 5f 54 59 50 45 20 7b 0a 09 09 53 43 5f 53 54 41  _TYPE {...SC_STA
1780: 54 55 53 5f 50 52 4f 43 45 53 53 5f 49 4e 46 4f  TUS_PROCESS_INFO
1790: 20 3d 20 30 0a 09 7d 0a 0a 09 65 6e 75 6d 20 53   = 0..}...enum S
17a0: 43 5f 45 4e 55 4d 5f 54 59 50 45 20 7b 0a 09 09  C_ENUM_TYPE {...
17b0: 53 43 5f 45 4e 55 4d 5f 50 52 4f 43 45 53 53 5f  SC_ENUM_PROCESS_
17c0: 49 4e 46 4f 20 3d 20 30 0a 09 7d 0a 0a 09 73 74  INFO = 0..}...st
17d0: 72 75 63 74 20 45 4e 55 4d 5f 53 45 52 56 49 43  ruct ENUM_SERVIC
17e0: 45 5f 53 54 41 54 55 53 5f 50 52 4f 43 45 53 53  E_STATUS_PROCESS
17f0: 41 20 7b 0a 09 09 4c 50 53 54 52 20 20 20 20 20  A {...LPSTR     
1800: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 70 53               lpS
1810: 65 72 76 69 63 65 4e 61 6d 65 3b 0a 09 09 4c 50  erviceName;...LP
1820: 53 54 52 20 20 20 20 20 20 20 20 20 20 20 20 20  STR             
1830: 20 20 20 20 20 6c 70 44 69 73 70 6c 61 79 4e 61       lpDisplayNa
1840: 6d 65 3b 0a 09 09 53 45 52 56 49 43 45 5f 53 54  me;...SERVICE_ST
1850: 41 54 55 53 5f 50 52 4f 43 45 53 53 20 53 65 72  ATUS_PROCESS Ser
1860: 76 69 63 65 53 74 61 74 75 73 50 72 6f 63 65 73  viceStatusProces
1870: 73 3b 0a 09 7d 0a 09 61 6c 69 61 73 20 45 4e 55  s;..}..alias ENU
1880: 4d 5f 53 45 52 56 49 43 45 5f 53 54 41 54 55 53  M_SERVICE_STATUS
1890: 5f 50 52 4f 43 45 53 53 41 2a 20 4c 50 45 4e 55  _PROCESSA* LPENU
18a0: 4d 5f 53 45 52 56 49 43 45 5f 53 54 41 54 55 53  M_SERVICE_STATUS
18b0: 5f 50 52 4f 43 45 53 53 41 3b 0a 0a 09 73 74 72  _PROCESSA;...str
18c0: 75 63 74 20 45 4e 55 4d 5f 53 45 52 56 49 43 45  uct ENUM_SERVICE
18d0: 5f 53 54 41 54 55 53 5f 50 52 4f 43 45 53 53 57  _STATUS_PROCESSW
18e0: 20 7b 0a 09 09 4c 50 57 53 54 52 20 20 20 20 20   {...LPWSTR     
18f0: 20 20 20 20 20 20 20 20 20 20 20 20 6c 70 53 65              lpSe
1900: 72 76 69 63 65 4e 61 6d 65 3b 0a 09 09 4c 50 57  rviceName;...LPW
1910: 53 54 52 20 20 20 20 20 20 20 20 20 20 20 20 20  STR             
1920: 20 20 20 20 6c 70 44 69 73 70 6c 61 79 4e 61 6d      lpDisplayNam
1930: 65 3b 0a 09 09 53 45 52 56 49 43 45 5f 53 54 41  e;...SERVICE_STA
1940: 54 55 53 5f 50 52 4f 43 45 53 53 20 53 65 72 76  TUS_PROCESS Serv
1950: 69 63 65 53 74 61 74 75 73 50 72 6f 63 65 73 73  iceStatusProcess
1960: 3b 0a 09 7d 0a 09 61 6c 69 61 73 20 45 4e 55 4d  ;..}..alias ENUM
1970: 5f 53 45 52 56 49 43 45 5f 53 54 41 54 55 53 5f  _SERVICE_STATUS_
1980: 50 52 4f 43 45 53 53 57 2a 20 4c 50 45 4e 55 4d  PROCESSW* LPENUM
1990: 5f 53 45 52 56 49 43 45 5f 53 54 41 54 55 53 5f  _SERVICE_STATUS_
19a0: 50 52 4f 43 45 53 53 57 3b 0a 0a 09 73 74 72 75  PROCESSW;...stru
19b0: 63 74 20 53 45 52 56 49 43 45 5f 44 45 53 43 52  ct SERVICE_DESCR
19c0: 49 50 54 49 4f 4e 41 20 7b 0a 09 09 4c 50 53 54  IPTIONA {...LPST
19d0: 52 20 6c 70 44 65 73 63 72 69 70 74 69 6f 6e 3b  R lpDescription;
19e0: 0a 09 7d 0a 09 61 6c 69 61 73 20 53 45 52 56 49  ..}..alias SERVI
19f0: 43 45 5f 44 45 53 43 52 49 50 54 49 4f 4e 41 2a  CE_DESCRIPTIONA*
1a00: 20 4c 50 53 45 52 56 49 43 45 5f 44 45 53 43 52   LPSERVICE_DESCR
1a10: 49 50 54 49 4f 4e 41 3b 0a 0a 09 73 74 72 75 63  IPTIONA;...struc
1a20: 74 20 53 45 52 56 49 43 45 5f 44 45 53 43 52 49  t SERVICE_DESCRI
1a30: 50 54 49 4f 4e 57 20 7b 0a 09 09 4c 50 57 53 54  PTIONW {...LPWST
1a40: 52 20 6c 70 44 65 73 63 72 69 70 74 69 6f 6e 3b  R lpDescription;
1a50: 0a 09 7d 0a 09 61 6c 69 61 73 20 53 45 52 56 49  ..}..alias SERVI
1a60: 43 45 5f 44 45 53 43 52 49 50 54 49 4f 4e 57 2a  CE_DESCRIPTIONW*
1a70: 20 4c 50 53 45 52 56 49 43 45 5f 44 45 53 43 52   LPSERVICE_DESCR
1a80: 49 50 54 49 4f 4e 57 3b 0a 0a 09 65 6e 75 6d 20  IPTIONW;...enum 
1a90: 53 43 5f 41 43 54 49 4f 4e 5f 54 59 50 45 20 7b  SC_ACTION_TYPE {
1aa0: 0a 09 09 53 43 5f 41 43 54 49 4f 4e 5f 4e 4f 4e  ...SC_ACTION_NON
1ab0: 45 2c 0a 09 09 53 43 5f 41 43 54 49 4f 4e 5f 52  E,...SC_ACTION_R
1ac0: 45 53 54 41 52 54 2c 0a 09 09 53 43 5f 41 43 54  ESTART,...SC_ACT
1ad0: 49 4f 4e 5f 52 45 42 4f 4f 54 2c 0a 09 09 53 43  ION_REBOOT,...SC
1ae0: 5f 41 43 54 49 4f 4e 5f 52 55 4e 5f 43 4f 4d 4d  _ACTION_RUN_COMM
1af0: 41 4e 44 0a 09 7d 0a 0a 09 73 74 72 75 63 74 20  AND..}...struct 
1b00: 53 43 5f 41 43 54 49 4f 4e 20 7b 0a 09 09 53 43  SC_ACTION {...SC
1b10: 5f 41 43 54 49 4f 4e 5f 54 59 50 45 20 54 79 70  _ACTION_TYPE Typ
1b20: 65 3b 0a 09 09 44 57 4f 52 44 20 20 20 20 20 20  e;...DWORD      
1b30: 20 20 20 20 44 65 6c 61 79 3b 0a 09 7d 0a 09 61      Delay;..}..a
1b40: 6c 69 61 73 20 53 43 5f 41 43 54 49 4f 4e 2a 20  lias SC_ACTION* 
1b50: 4c 50 53 43 5f 41 43 54 49 4f 4e 3b 0a 0a 09 73  LPSC_ACTION;...s
1b60: 74 72 75 63 74 20 53 45 52 56 49 43 45 5f 46 41  truct SERVICE_FA
1b70: 49 4c 55 52 45 5f 41 43 54 49 4f 4e 53 41 20 7b  ILURE_ACTIONSA {
1b80: 0a 09 09 44 57 4f 52 44 20 20 20 20 20 20 64 77  ...DWORD      dw
1b90: 52 65 73 65 74 50 65 72 69 6f 64 3b 0a 09 09 4c  ResetPeriod;...L
1ba0: 50 53 54 52 20 20 20 20 20 20 6c 70 52 65 62 6f  PSTR      lpRebo
1bb0: 6f 74 4d 73 67 3b 0a 09 09 4c 50 53 54 52 20 20  otMsg;...LPSTR  
1bc0: 20 20 20 20 6c 70 43 6f 6d 6d 61 6e 64 3b 0a 09      lpCommand;..
1bd0: 09 44 57 4f 52 44 20 20 20 20 20 20 63 41 63 74  .DWORD      cAct
1be0: 69 6f 6e 73 3b 0a 09 09 53 43 5f 41 43 54 49 4f  ions;...SC_ACTIO
1bf0: 4e 2a 20 6c 70 73 61 41 63 74 69 6f 6e 73 3b 0a  N* lpsaActions;.
1c00: 09 7d 0a 09 61 6c 69 61 73 20 53 45 52 56 49 43  .}..alias SERVIC
1c10: 45 5f 46 41 49 4c 55 52 45 5f 41 43 54 49 4f 4e  E_FAILURE_ACTION
1c20: 53 41 2a 20 4c 50 53 45 52 56 49 43 45 5f 46 41  SA* LPSERVICE_FA
1c30: 49 4c 55 52 45 5f 41 43 54 49 4f 4e 53 41 3b 0a  ILURE_ACTIONSA;.
1c40: 0a 09 73 74 72 75 63 74 20 53 45 52 56 49 43 45  ..struct SERVICE
1c50: 5f 46 41 49 4c 55 52 45 5f 41 43 54 49 4f 4e 53  _FAILURE_ACTIONS
1c60: 57 20 7b 0a 09 09 44 57 4f 52 44 20 20 20 20 20  W {...DWORD     
1c70: 20 64 77 52 65 73 65 74 50 65 72 69 6f 64 3b 0a   dwResetPeriod;.
1c80: 09 09 4c 50 57 53 54 52 20 20 20 20 20 6c 70 52  ..LPWSTR     lpR
1c90: 65 62 6f 6f 74 4d 73 67 3b 0a 09 09 4c 50 57 53  ebootMsg;...LPWS
1ca0: 54 52 20 20 20 20 20 6c 70 43 6f 6d 6d 61 6e 64  TR     lpCommand
1cb0: 3b 0a 09 09 44 57 4f 52 44 20 20 20 20 20 20 63  ;...DWORD      c
1cc0: 41 63 74 69 6f 6e 73 3b 0a 09 09 53 43 5f 41 43  Actions;...SC_AC
1cd0: 54 49 4f 4e 2a 20 6c 70 73 61 41 63 74 69 6f 6e  TION* lpsaAction
1ce0: 73 3b 0a 09 7d 0a 09 61 6c 69 61 73 20 53 45 52  s;..}..alias SER
1cf0: 56 49 43 45 5f 46 41 49 4c 55 52 45 5f 41 43 54  VICE_FAILURE_ACT
1d00: 49 4f 4e 53 57 2a 20 4c 50 53 45 52 56 49 43 45  IONSW* LPSERVICE
1d10: 5f 46 41 49 4c 55 52 45 5f 41 43 54 49 4f 4e 53  _FAILURE_ACTIONS
1d20: 57 3b 0a 7d 0a 0a 65 78 74 65 72 6e 20 28 57 69  W;.}..extern (Wi
1d30: 6e 64 6f 77 73 29 20 7b 0a 09 42 4f 4f 4c 20 43  ndows) {..BOOL C
1d40: 68 61 6e 67 65 53 65 72 76 69 63 65 43 6f 6e 66  hangeServiceConf
1d50: 69 67 41 28 53 43 5f 48 41 4e 44 4c 45 2c 20 44  igA(SC_HANDLE, D
1d60: 57 4f 52 44 2c 20 44 57 4f 52 44 2c 20 44 57 4f  WORD, DWORD, DWO
1d70: 52 44 2c 20 4c 50 43 53 54 52 2c 0a 09 20 20 4c  RD, LPCSTR,..  L
1d80: 50 43 53 54 52 2c 20 4c 50 44 57 4f 52 44 2c 20  PCSTR, LPDWORD, 
1d90: 4c 50 43 53 54 52 2c 20 4c 50 43 53 54 52 2c 20  LPCSTR, LPCSTR, 
1da0: 4c 50 43 53 54 52 2c 20 4c 50 43 53 54 52 29 3b  LPCSTR, LPCSTR);
1db0: 0a 09 42 4f 4f 4c 20 43 68 61 6e 67 65 53 65 72  ..BOOL ChangeSer
1dc0: 76 69 63 65 43 6f 6e 66 69 67 57 28 53 43 5f 48  viceConfigW(SC_H
1dd0: 41 4e 44 4c 45 2c 20 44 57 4f 52 44 2c 20 44 57  ANDLE, DWORD, DW
1de0: 4f 52 44 2c 20 44 57 4f 52 44 2c 20 4c 50 43 57  ORD, DWORD, LPCW
1df0: 53 54 52 2c 0a 09 20 20 4c 50 43 57 53 54 52 2c  STR,..  LPCWSTR,
1e00: 20 4c 50 44 57 4f 52 44 2c 20 4c 50 43 57 53 54   LPDWORD, LPCWST
1e10: 52 2c 20 4c 50 43 57 53 54 52 2c 20 4c 50 43 57  R, LPCWSTR, LPCW
1e20: 53 54 52 2c 20 4c 50 43 57 53 54 52 29 3b 0a 09  STR, LPCWSTR);..
1e30: 42 4f 4f 4c 20 43 6c 6f 73 65 53 65 72 76 69 63  BOOL CloseServic
1e40: 65 48 61 6e 64 6c 65 28 53 43 5f 48 41 4e 44 4c  eHandle(SC_HANDL
1e50: 45 29 3b 0a 09 42 4f 4f 4c 20 43 6f 6e 74 72 6f  E);..BOOL Contro
1e60: 6c 53 65 72 76 69 63 65 28 53 43 5f 48 41 4e 44  lService(SC_HAND
1e70: 4c 45 2c 20 44 57 4f 52 44 2c 20 4c 50 53 45 52  LE, DWORD, LPSER
1e80: 56 49 43 45 5f 53 54 41 54 55 53 29 3b 0a 09 53  VICE_STATUS);..S
1e90: 43 5f 48 41 4e 44 4c 45 20 43 72 65 61 74 65 53  C_HANDLE CreateS
1ea0: 65 72 76 69 63 65 41 28 53 43 5f 48 41 4e 44 4c  erviceA(SC_HANDL
1eb0: 45 2c 20 4c 50 43 53 54 52 2c 20 4c 50 43 53 54  E, LPCSTR, LPCST
1ec0: 52 2c 20 44 57 4f 52 44 2c 20 44 57 4f 52 44 2c  R, DWORD, DWORD,
1ed0: 0a 09 20 20 44 57 4f 52 44 2c 20 44 57 4f 52 44  ..  DWORD, DWORD
1ee0: 2c 20 4c 50 43 53 54 52 2c 20 4c 50 43 53 54 52  , LPCSTR, LPCSTR
1ef0: 2c 20 50 44 57 4f 52 44 2c 20 4c 50 43 53 54 52  , PDWORD, LPCSTR
1f00: 2c 20 4c 50 43 53 54 52 2c 20 4c 50 43 53 54 52  , LPCSTR, LPCSTR
1f10: 29 3b 0a 09 53 43 5f 48 41 4e 44 4c 45 20 43 72  );..SC_HANDLE Cr
1f20: 65 61 74 65 53 65 72 76 69 63 65 57 28 53 43 5f  eateServiceW(SC_
1f30: 48 41 4e 44 4c 45 2c 20 4c 50 43 57 53 54 52 2c  HANDLE, LPCWSTR,
1f40: 20 4c 50 43 57 53 54 52 2c 20 44 57 4f 52 44 2c   LPCWSTR, DWORD,
1f50: 20 44 57 4f 52 44 2c 0a 09 20 20 44 57 4f 52 44   DWORD,..  DWORD
1f60: 2c 20 44 57 4f 52 44 2c 20 4c 50 43 57 53 54 52  , DWORD, LPCWSTR
1f70: 2c 20 4c 50 43 57 53 54 52 2c 20 50 44 57 4f 52  , LPCWSTR, PDWOR
1f80: 44 2c 20 4c 50 43 57 53 54 52 2c 20 4c 50 43 57  D, LPCWSTR, LPCW
1f90: 53 54 52 2c 20 4c 50 43 57 53 54 52 29 3b 0a 09  STR, LPCWSTR);..
1fa0: 42 4f 4f 4c 20 44 65 6c 65 74 65 53 65 72 76 69  BOOL DeleteServi
1fb0: 63 65 28 53 43 5f 48 41 4e 44 4c 45 29 3b 0a 09  ce(SC_HANDLE);..
1fc0: 42 4f 4f 4c 20 45 6e 75 6d 44 65 70 65 6e 64 65  BOOL EnumDepende
1fd0: 6e 74 53 65 72 76 69 63 65 73 41 28 53 43 5f 48  ntServicesA(SC_H
1fe0: 41 4e 44 4c 45 2c 20 44 57 4f 52 44 2c 20 4c 50  ANDLE, DWORD, LP
1ff0: 45 4e 55 4d 5f 53 45 52 56 49 43 45 5f 53 54 41  ENUM_SERVICE_STA
2000: 54 55 53 41 2c 0a 09 20 20 44 57 4f 52 44 2c 20  TUSA,..  DWORD, 
2010: 50 44 57 4f 52 44 2c 20 50 44 57 4f 52 44 29 3b  PDWORD, PDWORD);
2020: 0a 09 42 4f 4f 4c 20 45 6e 75 6d 44 65 70 65 6e  ..BOOL EnumDepen
2030: 64 65 6e 74 53 65 72 76 69 63 65 73 57 28 53 43  dentServicesW(SC
2040: 5f 48 41 4e 44 4c 45 2c 20 44 57 4f 52 44 2c 20  _HANDLE, DWORD, 
2050: 4c 50 45 4e 55 4d 5f 53 45 52 56 49 43 45 5f 53  LPENUM_SERVICE_S
2060: 54 41 54 55 53 57 2c 0a 09 20 20 44 57 4f 52 44  TATUSW,..  DWORD
2070: 2c 20 50 44 57 4f 52 44 2c 20 50 44 57 4f 52 44  , PDWORD, PDWORD
2080: 29 3b 0a 09 42 4f 4f 4c 20 45 6e 75 6d 53 65 72  );..BOOL EnumSer
2090: 76 69 63 65 73 53 74 61 74 75 73 41 28 53 43 5f  vicesStatusA(SC_
20a0: 48 41 4e 44 4c 45 2c 20 44 57 4f 52 44 2c 20 44  HANDLE, DWORD, D
20b0: 57 4f 52 44 2c 20 4c 50 45 4e 55 4d 5f 53 45 52  WORD, LPENUM_SER
20c0: 56 49 43 45 5f 53 54 41 54 55 53 41 2c 0a 09 20  VICE_STATUSA,.. 
20d0: 20 44 57 4f 52 44 2c 20 50 44 57 4f 52 44 2c 20   DWORD, PDWORD, 
20e0: 50 44 57 4f 52 44 2c 20 50 44 57 4f 52 44 29 3b  PDWORD, PDWORD);
20f0: 0a 09 42 4f 4f 4c 20 45 6e 75 6d 53 65 72 76 69  ..BOOL EnumServi
2100: 63 65 73 53 74 61 74 75 73 57 28 53 43 5f 48 41  cesStatusW(SC_HA
2110: 4e 44 4c 45 2c 20 44 57 4f 52 44 2c 20 44 57 4f  NDLE, DWORD, DWO
2120: 52 44 2c 20 4c 50 45 4e 55 4d 5f 53 45 52 56 49  RD, LPENUM_SERVI
2130: 43 45 5f 53 54 41 54 55 53 57 2c 0a 09 20 20 44  CE_STATUSW,..  D
2140: 57 4f 52 44 2c 20 50 44 57 4f 52 44 2c 20 50 44  WORD, PDWORD, PD
2150: 57 4f 52 44 2c 20 50 44 57 4f 52 44 29 3b 0a 09  WORD, PDWORD);..
2160: 42 4f 4f 4c 20 47 65 74 53 65 72 76 69 63 65 44  BOOL GetServiceD
2170: 69 73 70 6c 61 79 4e 61 6d 65 41 28 53 43 5f 48  isplayNameA(SC_H
2180: 41 4e 44 4c 45 2c 20 4c 50 43 53 54 52 2c 20 4c  ANDLE, LPCSTR, L
2190: 50 53 54 52 2c 20 50 44 57 4f 52 44 29 3b 0a 09  PSTR, PDWORD);..
21a0: 42 4f 4f 4c 20 47 65 74 53 65 72 76 69 63 65 44  BOOL GetServiceD
21b0: 69 73 70 6c 61 79 4e 61 6d 65 57 28 53 43 5f 48  isplayNameW(SC_H
21c0: 41 4e 44 4c 45 2c 20 4c 50 43 57 53 54 52 2c 20  ANDLE, LPCWSTR, 
21d0: 4c 50 57 53 54 52 2c 20 50 44 57 4f 52 44 29 3b  LPWSTR, PDWORD);
21e0: 0a 09 42 4f 4f 4c 20 47 65 74 53 65 72 76 69 63  ..BOOL GetServic
21f0: 65 4b 65 79 4e 61 6d 65 41 28 53 43 5f 48 41 4e  eKeyNameA(SC_HAN
2200: 44 4c 45 2c 20 4c 50 43 53 54 52 2c 20 4c 50 53  DLE, LPCSTR, LPS
2210: 54 52 2c 20 50 44 57 4f 52 44 29 3b 0a 09 42 4f  TR, PDWORD);..BO
2220: 4f 4c 20 47 65 74 53 65 72 76 69 63 65 4b 65 79  OL GetServiceKey
2230: 4e 61 6d 65 57 28 53 43 5f 48 41 4e 44 4c 45 2c  NameW(SC_HANDLE,
2240: 20 4c 50 43 57 53 54 52 2c 20 4c 50 57 53 54 52   LPCWSTR, LPWSTR
2250: 2c 20 50 44 57 4f 52 44 29 3b 0a 09 53 43 5f 4c  , PDWORD);..SC_L
2260: 4f 43 4b 20 4c 6f 63 6b 53 65 72 76 69 63 65 44  OCK LockServiceD
2270: 61 74 61 62 61 73 65 28 53 43 5f 48 41 4e 44 4c  atabase(SC_HANDL
2280: 45 29 3b 0a 09 42 4f 4f 4c 20 4e 6f 74 69 66 79  E);..BOOL Notify
2290: 42 6f 6f 74 43 6f 6e 66 69 67 53 74 61 74 75 73  BootConfigStatus
22a0: 28 42 4f 4f 4c 29 3b 0a 09 53 43 5f 48 41 4e 44  (BOOL);..SC_HAND
22b0: 4c 45 20 4f 70 65 6e 53 43 4d 61 6e 61 67 65 72  LE OpenSCManager
22c0: 41 28 4c 50 43 53 54 52 2c 20 4c 50 43 53 54 52  A(LPCSTR, LPCSTR
22d0: 2c 20 44 57 4f 52 44 29 3b 0a 09 53 43 5f 48 41  , DWORD);..SC_HA
22e0: 4e 44 4c 45 20 4f 70 65 6e 53 43 4d 61 6e 61 67  NDLE OpenSCManag
22f0: 65 72 57 28 4c 50 43 57 53 54 52 2c 20 4c 50 43  erW(LPCWSTR, LPC
2300: 57 53 54 52 2c 20 44 57 4f 52 44 29 3b 0a 09 53  WSTR, DWORD);..S
2310: 43 5f 48 41 4e 44 4c 45 20 4f 70 65 6e 53 65 72  C_HANDLE OpenSer
2320: 76 69 63 65 41 28 53 43 5f 48 41 4e 44 4c 45 2c  viceA(SC_HANDLE,
2330: 20 4c 50 43 53 54 52 2c 20 44 57 4f 52 44 29 3b   LPCSTR, DWORD);
2340: 0a 09 53 43 5f 48 41 4e 44 4c 45 20 4f 70 65 6e  ..SC_HANDLE Open
2350: 53 65 72 76 69 63 65 57 28 53 43 5f 48 41 4e 44  ServiceW(SC_HAND
2360: 4c 45 2c 20 4c 50 43 57 53 54 52 2c 20 44 57 4f  LE, LPCWSTR, DWO
2370: 52 44 29 3b 0a 09 42 4f 4f 4c 20 51 75 65 72 79  RD);..BOOL Query
2380: 53 65 72 76 69 63 65 43 6f 6e 66 69 67 41 28 53  ServiceConfigA(S
2390: 43 5f 48 41 4e 44 4c 45 2c 20 4c 50 51 55 45 52  C_HANDLE, LPQUER
23a0: 59 5f 53 45 52 56 49 43 45 5f 43 4f 4e 46 49 47  Y_SERVICE_CONFIG
23b0: 41 2c 20 44 57 4f 52 44 2c 0a 09 20 20 50 44 57  A, DWORD,..  PDW
23c0: 4f 52 44 29 3b 0a 09 42 4f 4f 4c 20 51 75 65 72  ORD);..BOOL Quer
23d0: 79 53 65 72 76 69 63 65 43 6f 6e 66 69 67 57 28  yServiceConfigW(
23e0: 53 43 5f 48 41 4e 44 4c 45 2c 20 4c 50 51 55 45  SC_HANDLE, LPQUE
23f0: 52 59 5f 53 45 52 56 49 43 45 5f 43 4f 4e 46 49  RY_SERVICE_CONFI
2400: 47 57 2c 20 44 57 4f 52 44 2c 0a 09 20 20 50 44  GW, DWORD,..  PD
2410: 57 4f 52 44 29 3b 0a 09 42 4f 4f 4c 20 51 75 65  WORD);..BOOL Que
2420: 72 79 53 65 72 76 69 63 65 4c 6f 63 6b 53 74 61  ryServiceLockSta
2430: 74 75 73 41 28 53 43 5f 48 41 4e 44 4c 45 2c 20  tusA(SC_HANDLE, 
2440: 4c 50 51 55 45 52 59 5f 53 45 52 56 49 43 45 5f  LPQUERY_SERVICE_
2450: 4c 4f 43 4b 5f 53 54 41 54 55 53 41 2c 0a 09 20  LOCK_STATUSA,.. 
2460: 20 44 57 4f 52 44 2c 20 50 44 57 4f 52 44 29 3b   DWORD, PDWORD);
2470: 0a 09 42 4f 4f 4c 20 51 75 65 72 79 53 65 72 76  ..BOOL QueryServ
2480: 69 63 65 4c 6f 63 6b 53 74 61 74 75 73 57 28 53  iceLockStatusW(S
2490: 43 5f 48 41 4e 44 4c 45 2c 20 4c 50 51 55 45 52  C_HANDLE, LPQUER
24a0: 59 5f 53 45 52 56 49 43 45 5f 4c 4f 43 4b 5f 53  Y_SERVICE_LOCK_S
24b0: 54 41 54 55 53 57 2c 0a 09 20 20 44 57 4f 52 44  TATUSW,..  DWORD
24c0: 2c 20 50 44 57 4f 52 44 29 3b 0a 09 42 4f 4f 4c  , PDWORD);..BOOL
24d0: 20 51 75 65 72 79 53 65 72 76 69 63 65 4f 62 6a   QueryServiceObj
24e0: 65 63 74 53 65 63 75 72 69 74 79 28 53 43 5f 48  ectSecurity(SC_H
24f0: 41 4e 44 4c 45 2c 20 53 45 43 55 52 49 54 59 5f  ANDLE, SECURITY_
2500: 49 4e 46 4f 52 4d 41 54 49 4f 4e 2c 0a 09 20 20  INFORMATION,..  
2510: 50 53 45 43 55 52 49 54 59 5f 44 45 53 43 52 49  PSECURITY_DESCRI
2520: 50 54 4f 52 2c 20 44 57 4f 52 44 2c 20 4c 50 44  PTOR, DWORD, LPD
2530: 57 4f 52 44 29 3b 0a 09 42 4f 4f 4c 20 51 75 65  WORD);..BOOL Que
2540: 72 79 53 65 72 76 69 63 65 53 74 61 74 75 73 28  ryServiceStatus(
2550: 53 43 5f 48 41 4e 44 4c 45 2c 20 4c 50 53 45 52  SC_HANDLE, LPSER
2560: 56 49 43 45 5f 53 54 41 54 55 53 29 3b 0a 09 53  VICE_STATUS);..S
2570: 45 52 56 49 43 45 5f 53 54 41 54 55 53 5f 48 41  ERVICE_STATUS_HA
2580: 4e 44 4c 45 20 52 65 67 69 73 74 65 72 53 65 72  NDLE RegisterSer
2590: 76 69 63 65 43 74 72 6c 48 61 6e 64 6c 65 72 41  viceCtrlHandlerA
25a0: 28 4c 50 43 53 54 52 2c 0a 09 20 20 4c 50 48 41  (LPCSTR,..  LPHA
25b0: 4e 44 4c 45 52 5f 46 55 4e 43 54 49 4f 4e 29 3b  NDLER_FUNCTION);
25c0: 0a 09 53 45 52 56 49 43 45 5f 53 54 41 54 55 53  ..SERVICE_STATUS
25d0: 5f 48 41 4e 44 4c 45 20 52 65 67 69 73 74 65 72  _HANDLE Register
25e0: 53 65 72 76 69 63 65 43 74 72 6c 48 61 6e 64 6c  ServiceCtrlHandl
25f0: 65 72 57 28 4c 50 43 57 53 54 52 2c 0a 09 20 20  erW(LPCWSTR,..  
2600: 4c 50 48 41 4e 44 4c 45 52 5f 46 55 4e 43 54 49  LPHANDLER_FUNCTI
2610: 4f 4e 29 3b 0a 09 42 4f 4f 4c 20 53 65 74 53 65  ON);..BOOL SetSe
2620: 72 76 69 63 65 4f 62 6a 65 63 74 53 65 63 75 72  rviceObjectSecur
2630: 69 74 79 28 53 43 5f 48 41 4e 44 4c 45 2c 20 53  ity(SC_HANDLE, S
2640: 45 43 55 52 49 54 59 5f 49 4e 46 4f 52 4d 41 54  ECURITY_INFORMAT
2650: 49 4f 4e 2c 0a 09 20 20 50 53 45 43 55 52 49 54  ION,..  PSECURIT
2660: 59 5f 44 45 53 43 52 49 50 54 4f 52 29 3b 0a 09  Y_DESCRIPTOR);..
2670: 42 4f 4f 4c 20 53 65 74 53 65 72 76 69 63 65 53  BOOL SetServiceS
2680: 74 61 74 75 73 28 53 45 52 56 49 43 45 5f 53 54  tatus(SERVICE_ST
2690: 41 54 55 53 5f 48 41 4e 44 4c 45 2c 20 4c 50 53  ATUS_HANDLE, LPS
26a0: 45 52 56 49 43 45 5f 53 54 41 54 55 53 29 3b 0a  ERVICE_STATUS);.
26b0: 09 42 4f 4f 4c 20 53 74 61 72 74 53 65 72 76 69  .BOOL StartServi
26c0: 63 65 41 28 53 43 5f 48 41 4e 44 4c 45 2c 20 44  ceA(SC_HANDLE, D
26d0: 57 4f 52 44 2c 20 4c 50 43 53 54 52 2a 29 3b 0a  WORD, LPCSTR*);.
26e0: 09 42 4f 4f 4c 20 53 74 61 72 74 53 65 72 76 69  .BOOL StartServi
26f0: 63 65 57 28 53 43 5f 48 41 4e 44 4c 45 2c 20 44  ceW(SC_HANDLE, D
2700: 57 4f 52 44 2c 20 4c 50 43 57 53 54 52 2a 29 3b  WORD, LPCWSTR*);
2710: 0a 09 42 4f 4f 4c 20 53 74 61 72 74 53 65 72 76  ..BOOL StartServ
2720: 69 63 65 43 74 72 6c 44 69 73 70 61 74 63 68 65  iceCtrlDispatche
2730: 72 41 28 4c 50 53 45 52 56 49 43 45 5f 54 41 42  rA(LPSERVICE_TAB
2740: 4c 45 5f 45 4e 54 52 59 41 29 3b 0a 09 42 4f 4f  LE_ENTRYA);..BOO
2750: 4c 20 53 74 61 72 74 53 65 72 76 69 63 65 43 74  L StartServiceCt
2760: 72 6c 44 69 73 70 61 74 63 68 65 72 57 28 4c 50  rlDispatcherW(LP
2770: 53 45 52 56 49 43 45 5f 54 41 42 4c 45 5f 45 4e  SERVICE_TABLE_EN
2780: 54 52 59 57 29 3b 0a 09 42 4f 4f 4c 20 55 6e 6c  TRYW);..BOOL Unl
2790: 6f 63 6b 53 65 72 76 69 63 65 44 61 74 61 62 61  ockServiceDataba
27a0: 73 65 28 53 43 5f 4c 4f 43 4b 29 3b 0a 0a 09 73  se(SC_LOCK);...s
27b0: 74 61 74 69 63 20 69 66 20 28 5f 57 49 4e 33 32  tatic if (_WIN32
27c0: 5f 57 49 4e 4e 54 20 3e 3d 20 30 78 35 30 30 29  _WINNT >= 0x500)
27d0: 20 7b 0a 09 09 42 4f 4f 4c 20 45 6e 75 6d 53 65   {...BOOL EnumSe
27e0: 72 76 69 63 65 73 53 74 61 74 75 73 45 78 41 28  rvicesStatusExA(
27f0: 53 43 5f 48 41 4e 44 4c 45 2c 20 53 43 5f 45 4e  SC_HANDLE, SC_EN
2800: 55 4d 5f 54 59 50 45 2c 20 44 57 4f 52 44 2c 20  UM_TYPE, DWORD, 
2810: 44 57 4f 52 44 2c 20 4c 50 42 59 54 45 2c 0a 09  DWORD, LPBYTE,..
2820: 09 20 20 44 57 4f 52 44 2c 20 4c 50 44 57 4f 52  .  DWORD, LPDWOR
2830: 44 2c 20 4c 50 44 57 4f 52 44 2c 20 4c 50 44 57  D, LPDWORD, LPDW
2840: 4f 52 44 2c 20 4c 50 43 53 54 52 29 3b 0a 09 09  ORD, LPCSTR);...
2850: 42 4f 4f 4c 20 45 6e 75 6d 53 65 72 76 69 63 65  BOOL EnumService
2860: 73 53 74 61 74 75 73 45 78 57 28 53 43 5f 48 41  sStatusExW(SC_HA
2870: 4e 44 4c 45 2c 20 53 43 5f 45 4e 55 4d 5f 54 59  NDLE, SC_ENUM_TY
2880: 50 45 2c 20 44 57 4f 52 44 2c 20 44 57 4f 52 44  PE, DWORD, DWORD
2890: 2c 20 4c 50 42 59 54 45 2c 0a 09 09 20 20 44 57  , LPBYTE,...  DW
28a0: 4f 52 44 2c 20 4c 50 44 57 4f 52 44 2c 20 4c 50  ORD, LPDWORD, LP
28b0: 44 57 4f 52 44 2c 20 4c 50 44 57 4f 52 44 2c 20  DWORD, LPDWORD, 
28c0: 4c 50 43 57 53 54 52 29 3b 0a 09 09 42 4f 4f 4c  LPCWSTR);...BOOL
28d0: 20 51 75 65 72 79 53 65 72 76 69 63 65 43 6f 6e   QueryServiceCon
28e0: 66 69 67 32 41 28 53 43 5f 48 41 4e 44 4c 45 2c  fig2A(SC_HANDLE,
28f0: 20 44 57 4f 52 44 2c 20 4c 50 42 59 54 45 2c 20   DWORD, LPBYTE, 
2900: 44 57 4f 52 44 2c 20 4c 50 44 57 4f 52 44 29 3b  DWORD, LPDWORD);
2910: 0a 09 09 42 4f 4f 4c 20 51 75 65 72 79 53 65 72  ...BOOL QuerySer
2920: 76 69 63 65 43 6f 6e 66 69 67 32 57 28 53 43 5f  viceConfig2W(SC_
2930: 48 41 4e 44 4c 45 2c 20 44 57 4f 52 44 2c 20 4c  HANDLE, DWORD, L
2940: 50 42 59 54 45 2c 20 44 57 4f 52 44 2c 20 4c 50  PBYTE, DWORD, LP
2950: 44 57 4f 52 44 29 3b 0a 09 09 42 4f 4f 4c 20 51  DWORD);...BOOL Q
2960: 75 65 72 79 53 65 72 76 69 63 65 53 74 61 74 75  ueryServiceStatu
2970: 73 45 78 28 53 43 5f 48 41 4e 44 4c 45 2c 20 53  sEx(SC_HANDLE, S
2980: 43 5f 53 54 41 54 55 53 5f 54 59 50 45 2c 20 4c  C_STATUS_TYPE, L
2990: 50 42 59 54 45 2c 20 44 57 4f 52 44 2c 0a 09 09  PBYTE, DWORD,...
29a0: 20 20 4c 50 44 57 4f 52 44 29 3b 0a 09 09 53 45    LPDWORD);...SE
29b0: 52 56 49 43 45 5f 53 54 41 54 55 53 5f 48 41 4e  RVICE_STATUS_HAN
29c0: 44 4c 45 20 52 65 67 69 73 74 65 72 53 65 72 76  DLE RegisterServ
29d0: 69 63 65 43 74 72 6c 48 61 6e 64 6c 65 72 45 78  iceCtrlHandlerEx
29e0: 41 28 4c 50 43 53 54 52 2c 0a 09 09 20 20 4c 50  A(LPCSTR,...  LP
29f0: 48 41 4e 44 4c 45 52 5f 46 55 4e 43 54 49 4f 4e  HANDLER_FUNCTION
2a00: 5f 45 58 2c 20 4c 50 56 4f 49 44 29 3b 0a 09 09  _EX, LPVOID);...
2a10: 53 45 52 56 49 43 45 5f 53 54 41 54 55 53 5f 48  SERVICE_STATUS_H
2a20: 41 4e 44 4c 45 20 52 65 67 69 73 74 65 72 53 65  ANDLE RegisterSe
2a30: 72 76 69 63 65 43 74 72 6c 48 61 6e 64 6c 65 72  rviceCtrlHandler
2a40: 45 78 57 28 4c 50 43 57 53 54 52 2c 0a 09 09 20  ExW(LPCWSTR,... 
2a50: 20 4c 50 48 41 4e 44 4c 45 52 5f 46 55 4e 43 54   LPHANDLER_FUNCT
2a60: 49 4f 4e 5f 45 58 2c 20 4c 50 56 4f 49 44 29 3b  ION_EX, LPVOID);
2a70: 0a 09 7d 0a 0a 09 73 74 61 74 69 63 20 69 66 20  ..}...static if 
2a80: 28 5f 57 49 4e 33 32 5f 57 49 4e 4e 54 20 3e 3d  (_WIN32_WINNT >=
2a90: 20 30 78 35 30 31 29 20 7b 0a 09 09 42 4f 4f 4c   0x501) {...BOOL
2aa0: 20 43 68 61 6e 67 65 53 65 72 76 69 63 65 43 6f   ChangeServiceCo
2ab0: 6e 66 69 67 32 41 28 53 43 5f 48 41 4e 44 4c 45  nfig2A(SC_HANDLE
2ac0: 2c 20 44 57 4f 52 44 2c 20 4c 50 56 4f 49 44 29  , DWORD, LPVOID)
2ad0: 3b 0a 09 09 42 4f 4f 4c 20 43 68 61 6e 67 65 53  ;...BOOL ChangeS
2ae0: 65 72 76 69 63 65 43 6f 6e 66 69 67 32 57 28 53  erviceConfig2W(S
2af0: 43 5f 48 41 4e 44 4c 45 2c 20 44 57 4f 52 44 2c  C_HANDLE, DWORD,
2b00: 20 4c 50 56 4f 49 44 29 3b 0a 09 7d 0a 7d 0a 0a   LPVOID);..}.}..
2b10: 76 65 72 73 69 6f 6e 20 28 55 6e 69 63 6f 64 65  version (Unicode
2b20: 29 20 7b 0a 09 61 6c 69 61 73 20 45 4e 55 4d 5f  ) {..alias ENUM_
2b30: 53 45 52 56 49 43 45 5f 53 54 41 54 55 53 57 20  SERVICE_STATUSW 
2b40: 45 4e 55 4d 5f 53 45 52 56 49 43 45 5f 53 54 41  ENUM_SERVICE_STA
2b50: 54 55 53 3b 0a 09 61 6c 69 61 73 20 51 55 45 52  TUS;..alias QUER
2b60: 59 5f 53 45 52 56 49 43 45 5f 43 4f 4e 46 49 47  Y_SERVICE_CONFIG
2b70: 57 20 51 55 45 52 59 5f 53 45 52 56 49 43 45 5f  W QUERY_SERVICE_
2b80: 43 4f 4e 46 49 47 3b 0a 09 61 6c 69 61 73 20 51  CONFIG;..alias Q
2b90: 55 45 52 59 5f 53 45 52 56 49 43 45 5f 4c 4f 43  UERY_SERVICE_LOC
2ba0: 4b 5f 53 54 41 54 55 53 57 20 51 55 45 52 59 5f  K_STATUSW QUERY_
2bb0: 53 45 52 56 49 43 45 5f 4c 4f 43 4b 5f 53 54 41  SERVICE_LOCK_STA
2bc0: 54 55 53 3b 0a 09 61 6c 69 61 73 20 4c 50 53 45  TUS;..alias LPSE
2bd0: 52 56 49 43 45 5f 4d 41 49 4e 5f 46 55 4e 43 54  RVICE_MAIN_FUNCT
2be0: 49 4f 4e 57 20 4c 50 53 45 52 56 49 43 45 5f 4d  IONW LPSERVICE_M
2bf0: 41 49 4e 5f 46 55 4e 43 54 49 4f 4e 3b 0a 09 61  AIN_FUNCTION;..a
2c00: 6c 69 61 73 20 53 45 52 56 49 43 45 5f 54 41 42  lias SERVICE_TAB
2c10: 4c 45 5f 45 4e 54 52 59 57 20 53 45 52 56 49 43  LE_ENTRYW SERVIC
2c20: 45 5f 54 41 42 4c 45 5f 45 4e 54 52 59 3b 0a 09  E_TABLE_ENTRY;..
2c30: 61 6c 69 61 73 20 43 68 61 6e 67 65 53 65 72 76  alias ChangeServ
2c40: 69 63 65 43 6f 6e 66 69 67 57 20 43 68 61 6e 67  iceConfigW Chang
2c50: 65 53 65 72 76 69 63 65 43 6f 6e 66 69 67 3b 0a  eServiceConfig;.
2c60: 09 61 6c 69 61 73 20 43 72 65 61 74 65 53 65 72  .alias CreateSer
2c70: 76 69 63 65 57 20 43 72 65 61 74 65 53 65 72 76  viceW CreateServ
2c80: 69 63 65 3b 0a 09 61 6c 69 61 73 20 45 6e 75 6d  ice;..alias Enum
2c90: 44 65 70 65 6e 64 65 6e 74 53 65 72 76 69 63 65  DependentService
2ca0: 73 57 20 45 6e 75 6d 44 65 70 65 6e 64 65 6e 74  sW EnumDependent
2cb0: 53 65 72 76 69 63 65 73 3b 0a 09 61 6c 69 61 73  Services;..alias
2cc0: 20 45 6e 75 6d 53 65 72 76 69 63 65 73 53 74 61   EnumServicesSta
2cd0: 74 75 73 57 20 45 6e 75 6d 53 65 72 76 69 63 65  tusW EnumService
2ce0: 73 53 74 61 74 75 73 3b 0a 09 61 6c 69 61 73 20  sStatus;..alias 
2cf0: 47 65 74 53 65 72 76 69 63 65 44 69 73 70 6c 61  GetServiceDispla
2d00: 79 4e 61 6d 65 57 20 47 65 74 53 65 72 76 69 63  yNameW GetServic
2d10: 65 44 69 73 70 6c 61 79 4e 61 6d 65 3b 0a 09 61  eDisplayName;..a
2d20: 6c 69 61 73 20 47 65 74 53 65 72 76 69 63 65 4b  lias GetServiceK
2d30: 65 79 4e 61 6d 65 57 20 47 65 74 53 65 72 76 69  eyNameW GetServi
2d40: 63 65 4b 65 79 4e 61 6d 65 3b 0a 09 61 6c 69 61  ceKeyName;..alia
2d50: 73 20 4f 70 65 6e 53 43 4d 61 6e 61 67 65 72 57  s OpenSCManagerW
2d60: 20 4f 70 65 6e 53 43 4d 61 6e 61 67 65 72 3b 0a   OpenSCManager;.
2d70: 09 61 6c 69 61 73 20 4f 70 65 6e 53 65 72 76 69  .alias OpenServi
2d80: 63 65 57 20 4f 70 65 6e 53 65 72 76 69 63 65 3b  ceW OpenService;
2d90: 0a 09 61 6c 69 61 73 20 51 75 65 72 79 53 65 72  ..alias QuerySer
2da0: 76 69 63 65 43 6f 6e 66 69 67 57 20 51 75 65 72  viceConfigW Quer
2db0: 79 53 65 72 76 69 63 65 43 6f 6e 66 69 67 3b 0a  yServiceConfig;.
2dc0: 09 61 6c 69 61 73 20 51 75 65 72 79 53 65 72 76  .alias QueryServ
2dd0: 69 63 65 4c 6f 63 6b 53 74 61 74 75 73 57 20 51  iceLockStatusW Q
2de0: 75 65 72 79 53 65 72 76 69 63 65 4c 6f 63 6b 53  ueryServiceLockS
2df0: 74 61 74 75 73 3b 0a 09 61 6c 69 61 73 20 52 65  tatus;..alias Re
2e00: 67 69 73 74 65 72 53 65 72 76 69 63 65 43 74 72  gisterServiceCtr
2e10: 6c 48 61 6e 64 6c 65 72 57 20 52 65 67 69 73 74  lHandlerW Regist
2e20: 65 72 53 65 72 76 69 63 65 43 74 72 6c 48 61 6e  erServiceCtrlHan
2e30: 64 6c 65 72 3b 0a 09 61 6c 69 61 73 20 53 74 61  dler;..alias Sta
2e40: 72 74 53 65 72 76 69 63 65 57 20 53 74 61 72 74  rtServiceW Start
2e50: 53 65 72 76 69 63 65 3b 0a 09 61 6c 69 61 73 20  Service;..alias 
2e60: 53 74 61 72 74 53 65 72 76 69 63 65 43 74 72 6c  StartServiceCtrl
2e70: 44 69 73 70 61 74 63 68 65 72 57 20 53 74 61 72  DispatcherW Star
2e80: 74 53 65 72 76 69 63 65 43 74 72 6c 44 69 73 70  tServiceCtrlDisp
2e90: 61 74 63 68 65 72 3b 0a 0a 09 73 74 61 74 69 63  atcher;...static
2ea0: 20 69 66 20 28 5f 57 49 4e 33 32 5f 57 49 4e 4e   if (_WIN32_WINN
2eb0: 54 20 3e 3d 20 30 78 35 30 30 29 20 7b 0a 09 09  T >= 0x500) {...
2ec0: 61 6c 69 61 73 20 45 4e 55 4d 5f 53 45 52 56 49  alias ENUM_SERVI
2ed0: 43 45 5f 53 54 41 54 55 53 5f 50 52 4f 43 45 53  CE_STATUS_PROCES
2ee0: 53 57 20 45 4e 55 4d 5f 53 45 52 56 49 43 45 5f  SW ENUM_SERVICE_
2ef0: 53 54 41 54 55 53 5f 50 52 4f 43 45 53 53 3b 0a  STATUS_PROCESS;.
2f00: 09 09 61 6c 69 61 73 20 53 45 52 56 49 43 45 5f  ..alias SERVICE_
2f10: 44 45 53 43 52 49 50 54 49 4f 4e 57 20 53 45 52  DESCRIPTIONW SER
2f20: 56 49 43 45 5f 44 45 53 43 52 49 50 54 49 4f 4e  VICE_DESCRIPTION
2f30: 3b 0a 09 09 61 6c 69 61 73 20 53 45 52 56 49 43  ;...alias SERVIC
2f40: 45 5f 46 41 49 4c 55 52 45 5f 41 43 54 49 4f 4e  E_FAILURE_ACTION
2f50: 53 57 20 53 45 52 56 49 43 45 5f 46 41 49 4c 55  SW SERVICE_FAILU
2f60: 52 45 5f 41 43 54 49 4f 4e 53 3b 0a 09 09 61 6c  RE_ACTIONS;...al
2f70: 69 61 73 20 45 6e 75 6d 53 65 72 76 69 63 65 73  ias EnumServices
2f80: 53 74 61 74 75 73 45 78 57 20 45 6e 75 6d 53 65  StatusExW EnumSe
2f90: 72 76 69 63 65 73 53 74 61 74 75 73 45 78 3b 0a  rvicesStatusEx;.
2fa0: 09 09 61 6c 69 61 73 20 51 75 65 72 79 53 65 72  ..alias QuerySer
2fb0: 76 69 63 65 43 6f 6e 66 69 67 32 57 20 51 75 65  viceConfig2W Que
2fc0: 72 79 53 65 72 76 69 63 65 43 6f 6e 66 69 67 32  ryServiceConfig2
2fd0: 3b 0a 09 09 61 6c 69 61 73 20 52 65 67 69 73 74  ;...alias Regist
2fe0: 65 72 53 65 72 76 69 63 65 43 74 72 6c 48 61 6e  erServiceCtrlHan
2ff0: 64 6c 65 72 45 78 57 20 52 65 67 69 73 74 65 72  dlerExW Register
3000: 53 65 72 76 69 63 65 43 74 72 6c 48 61 6e 64 6c  ServiceCtrlHandl
3010: 65 72 45 78 3b 0a 09 7d 0a 0a 09 73 74 61 74 69  erEx;..}...stati
3020: 63 20 69 66 20 28 5f 57 49 4e 33 32 5f 57 49 4e  c if (_WIN32_WIN
3030: 4e 54 20 3e 3d 20 30 78 35 30 31 29 20 7b 0a 09  NT >= 0x501) {..
3040: 09 61 6c 69 61 73 20 43 68 61 6e 67 65 53 65 72  .alias ChangeSer
3050: 76 69 63 65 43 6f 6e 66 69 67 32 57 20 43 68 61  viceConfig2W Cha
3060: 6e 67 65 53 65 72 76 69 63 65 43 6f 6e 66 69 67  ngeServiceConfig
3070: 32 3b 0a 09 7d 0a 0a 7d 20 65 6c 73 65 20 7b 0a  2;..}..} else {.
3080: 09 61 6c 69 61 73 20 45 4e 55 4d 5f 53 45 52 56  .alias ENUM_SERV
3090: 49 43 45 5f 53 54 41 54 55 53 41 20 45 4e 55 4d  ICE_STATUSA ENUM
30a0: 5f 53 45 52 56 49 43 45 5f 53 54 41 54 55 53 3b  _SERVICE_STATUS;
30b0: 0a 09 61 6c 69 61 73 20 51 55 45 52 59 5f 53 45  ..alias QUERY_SE
30c0: 52 56 49 43 45 5f 43 4f 4e 46 49 47 41 20 51 55  RVICE_CONFIGA QU
30d0: 45 52 59 5f 53 45 52 56 49 43 45 5f 43 4f 4e 46  ERY_SERVICE_CONF
30e0: 49 47 3b 0a 09 61 6c 69 61 73 20 51 55 45 52 59  IG;..alias QUERY
30f0: 5f 53 45 52 56 49 43 45 5f 4c 4f 43 4b 5f 53 54  _SERVICE_LOCK_ST
3100: 41 54 55 53 41 20 51 55 45 52 59 5f 53 45 52 56  ATUSA QUERY_SERV
3110: 49 43 45 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 3b  ICE_LOCK_STATUS;
3120: 0a 09 61 6c 69 61 73 20 4c 50 53 45 52 56 49 43  ..alias LPSERVIC
3130: 45 5f 4d 41 49 4e 5f 46 55 4e 43 54 49 4f 4e 41  E_MAIN_FUNCTIONA
3140: 20 4c 50 53 45 52 56 49 43 45 5f 4d 41 49 4e 5f   LPSERVICE_MAIN_
3150: 46 55 4e 43 54 49 4f 4e 3b 0a 09 61 6c 69 61 73  FUNCTION;..alias
3160: 20 53 45 52 56 49 43 45 5f 54 41 42 4c 45 5f 45   SERVICE_TABLE_E
3170: 4e 54 52 59 41 20 53 45 52 56 49 43 45 5f 54 41  NTRYA SERVICE_TA
3180: 42 4c 45 5f 45 4e 54 52 59 3b 0a 09 61 6c 69 61  BLE_ENTRY;..alia
3190: 73 20 43 68 61 6e 67 65 53 65 72 76 69 63 65 43  s ChangeServiceC
31a0: 6f 6e 66 69 67 41 20 43 68 61 6e 67 65 53 65 72  onfigA ChangeSer
31b0: 76 69 63 65 43 6f 6e 66 69 67 3b 0a 09 61 6c 69  viceConfig;..ali
31c0: 61 73 20 43 72 65 61 74 65 53 65 72 76 69 63 65  as CreateService
31d0: 41 20 43 72 65 61 74 65 53 65 72 76 69 63 65 3b  A CreateService;
31e0: 0a 09 61 6c 69 61 73 20 45 6e 75 6d 44 65 70 65  ..alias EnumDepe
31f0: 6e 64 65 6e 74 53 65 72 76 69 63 65 73 41 20 45  ndentServicesA E
3200: 6e 75 6d 44 65 70 65 6e 64 65 6e 74 53 65 72 76  numDependentServ
3210: 69 63 65 73 3b 0a 09 61 6c 69 61 73 20 45 6e 75  ices;..alias Enu
3220: 6d 53 65 72 76 69 63 65 73 53 74 61 74 75 73 41  mServicesStatusA
3230: 20 45 6e 75 6d 53 65 72 76 69 63 65 73 53 74 61   EnumServicesSta
3240: 74 75 73 3b 0a 09 61 6c 69 61 73 20 47 65 74 53  tus;..alias GetS
3250: 65 72 76 69 63 65 44 69 73 70 6c 61 79 4e 61 6d  erviceDisplayNam
3260: 65 41 20 47 65 74 53 65 72 76 69 63 65 44 69 73  eA GetServiceDis
3270: 70 6c 61 79 4e 61 6d 65 3b 0a 09 61 6c 69 61 73  playName;..alias
3280: 20 47 65 74 53 65 72 76 69 63 65 4b 65 79 4e 61   GetServiceKeyNa
3290: 6d 65 41 20 47 65 74 53 65 72 76 69 63 65 4b 65  meA GetServiceKe
32a0: 79 4e 61 6d 65 3b 0a 09 61 6c 69 61 73 20 4f 70  yName;..alias Op
32b0: 65 6e 53 43 4d 61 6e 61 67 65 72 41 20 4f 70 65  enSCManagerA Ope
32c0: 6e 53 43 4d 61 6e 61 67 65 72 3b 0a 09 61 6c 69  nSCManager;..ali
32d0: 61 73 20 4f 70 65 6e 53 65 72 76 69 63 65 41 20  as OpenServiceA 
32e0: 4f 70 65 6e 53 65 72 76 69 63 65 3b 0a 09 61 6c  OpenService;..al
32f0: 69 61 73 20 51 75 65 72 79 53 65 72 76 69 63 65  ias QueryService
3300: 43 6f 6e 66 69 67 41 20 51 75 65 72 79 53 65 72  ConfigA QuerySer
3310: 76 69 63 65 43 6f 6e 66 69 67 3b 0a 09 61 6c 69  viceConfig;..ali
3320: 61 73 20 51 75 65 72 79 53 65 72 76 69 63 65 4c  as QueryServiceL
3330: 6f 63 6b 53 74 61 74 75 73 41 20 51 75 65 72 79  ockStatusA Query
3340: 53 65 72 76 69 63 65 4c 6f 63 6b 53 74 61 74 75  ServiceLockStatu
3350: 73 3b 0a 09 61 6c 69 61 73 20 52 65 67 69 73 74  s;..alias Regist
3360: 65 72 53 65 72 76 69 63 65 43 74 72 6c 48 61 6e  erServiceCtrlHan
3370: 64 6c 65 72 41 20 52 65 67 69 73 74 65 72 53 65  dlerA RegisterSe
3380: 72 76 69 63 65 43 74 72 6c 48 61 6e 64 6c 65 72  rviceCtrlHandler
3390: 3b 0a 09 61 6c 69 61 73 20 53 74 61 72 74 53 65  ;..alias StartSe
33a0: 72 76 69 63 65 41 20 53 74 61 72 74 53 65 72 76  rviceA StartServ
33b0: 69 63 65 3b 0a 09 61 6c 69 61 73 20 53 74 61 72  ice;..alias Star
33c0: 74 53 65 72 76 69 63 65 43 74 72 6c 44 69 73 70  tServiceCtrlDisp
33d0: 61 74 63 68 65 72 41 20 53 74 61 72 74 53 65 72  atcherA StartSer
33e0: 76 69 63 65 43 74 72 6c 44 69 73 70 61 74 63 68  viceCtrlDispatch
33f0: 65 72 3b 0a 0a 09 73 74 61 74 69 63 20 69 66 20  er;...static if 
3400: 28 5f 57 49 4e 33 32 5f 57 49 4e 4e 54 20 3e 3d  (_WIN32_WINNT >=
3410: 20 30 78 35 30 30 29 20 7b 0a 09 09 61 6c 69 61   0x500) {...alia
3420: 73 20 45 4e 55 4d 5f 53 45 52 56 49 43 45 5f 53  s ENUM_SERVICE_S
3430: 54 41 54 55 53 5f 50 52 4f 43 45 53 53 41 20 45  TATUS_PROCESSA E
3440: 4e 55 4d 5f 53 45 52 56 49 43 45 5f 53 54 41 54  NUM_SERVICE_STAT
3450: 55 53 5f 50 52 4f 43 45 53 53 3b 0a 09 09 61 6c  US_PROCESS;...al
3460: 69 61 73 20 53 45 52 56 49 43 45 5f 44 45 53 43  ias SERVICE_DESC
3470: 52 49 50 54 49 4f 4e 41 20 53 45 52 56 49 43 45  RIPTIONA SERVICE
3480: 5f 44 45 53 43 52 49 50 54 49 4f 4e 3b 0a 09 09  _DESCRIPTION;...
3490: 61 6c 69 61 73 20 53 45 52 56 49 43 45 5f 46 41  alias SERVICE_FA
34a0: 49 4c 55 52 45 5f 41 43 54 49 4f 4e 53 41 20 53  ILURE_ACTIONSA S
34b0: 45 52 56 49 43 45 5f 46 41 49 4c 55 52 45 5f 41  ERVICE_FAILURE_A
34c0: 43 54 49 4f 4e 53 3b 0a 09 09 61 6c 69 61 73 20  CTIONS;...alias 
34d0: 45 6e 75 6d 53 65 72 76 69 63 65 73 53 74 61 74  EnumServicesStat
34e0: 75 73 45 78 41 20 45 6e 75 6d 53 65 72 76 69 63  usExA EnumServic
34f0: 65 73 53 74 61 74 75 73 45 78 3b 0a 09 09 61 6c  esStatusEx;...al
3500: 69 61 73 20 51 75 65 72 79 53 65 72 76 69 63 65  ias QueryService
3510: 43 6f 6e 66 69 67 32 41 20 51 75 65 72 79 53 65  Config2A QuerySe
3520: 72 76 69 63 65 43 6f 6e 66 69 67 32 3b 0a 09 09  rviceConfig2;...
3530: 61 6c 69 61 73 20 52 65 67 69 73 74 65 72 53 65  alias RegisterSe
3540: 72 76 69 63 65 43 74 72 6c 48 61 6e 64 6c 65 72  rviceCtrlHandler
3550: 45 78 41 20 52 65 67 69 73 74 65 72 53 65 72 76  ExA RegisterServ
3560: 69 63 65 43 74 72 6c 48 61 6e 64 6c 65 72 45 78  iceCtrlHandlerEx
3570: 3b 0a 09 7d 0a 0a 09 73 74 61 74 69 63 20 69 66  ;..}...static if
3580: 20 28 5f 57 49 4e 33 32 5f 57 49 4e 4e 54 20 3e   (_WIN32_WINNT >
3590: 3d 20 30 78 35 30 31 29 20 7b 0a 09 09 61 6c 69  = 0x501) {...ali
35a0: 61 73 20 43 68 61 6e 67 65 53 65 72 76 69 63 65  as ChangeService
35b0: 43 6f 6e 66 69 67 32 41 20 43 68 61 6e 67 65 53  Config2A ChangeS
35c0: 65 72 76 69 63 65 43 6f 6e 66 69 67 32 3b 0a 09  erviceConfig2;..
35d0: 7d 0a 0a 7d 0a 0a 61 6c 69 61 73 20 45 4e 55 4d  }..}..alias ENUM
35e0: 5f 53 45 52 56 49 43 45 5f 53 54 41 54 55 53 2a  _SERVICE_STATUS*
35f0: 20 4c 50 45 4e 55 4d 5f 53 45 52 56 49 43 45 5f   LPENUM_SERVICE_
3600: 53 54 41 54 55 53 3b 0a 61 6c 69 61 73 20 51 55  STATUS;.alias QU
3610: 45 52 59 5f 53 45 52 56 49 43 45 5f 43 4f 4e 46  ERY_SERVICE_CONF
3620: 49 47 2a 20 4c 50 51 55 45 52 59 5f 53 45 52 56  IG* LPQUERY_SERV
3630: 49 43 45 5f 43 4f 4e 46 49 47 3b 0a 61 6c 69 61  ICE_CONFIG;.alia
3640: 73 20 51 55 45 52 59 5f 53 45 52 56 49 43 45 5f  s QUERY_SERVICE_
3650: 4c 4f 43 4b 5f 53 54 41 54 55 53 2a 20 4c 50 51  LOCK_STATUS* LPQ
3660: 55 45 52 59 5f 53 45 52 56 49 43 45 5f 4c 4f 43  UERY_SERVICE_LOC
3670: 4b 5f 53 54 41 54 55 53 3b 0a 61 6c 69 61 73 20  K_STATUS;.alias 
3680: 53 45 52 56 49 43 45 5f 54 41 42 4c 45 5f 45 4e  SERVICE_TABLE_EN
3690: 54 52 59 2a 20 4c 50 53 45 52 56 49 43 45 5f 54  TRY* LPSERVICE_T
36a0: 41 42 4c 45 5f 45 4e 54 52 59 3b 0a 0a 73 74 61  ABLE_ENTRY;..sta
36b0: 74 69 63 20 69 66 20 28 5f 57 49 4e 33 32 5f 57  tic if (_WIN32_W
36c0: 49 4e 4e 54 20 3e 3d 20 30 78 35 30 30 29 20 7b  INNT >= 0x500) {
36d0: 0a 09 61 6c 69 61 73 20 45 4e 55 4d 5f 53 45 52  ..alias ENUM_SER
36e0: 56 49 43 45 5f 53 54 41 54 55 53 5f 50 52 4f 43  VICE_STATUS_PROC
36f0: 45 53 53 2a 20 4c 50 45 4e 55 4d 5f 53 45 52 56  ESS* LPENUM_SERV
3700: 49 43 45 5f 53 54 41 54 55 53 5f 50 52 4f 43 45  ICE_STATUS_PROCE
3710: 53 53 3b 0a 09 61 6c 69 61 73 20 53 45 52 56 49  SS;..alias SERVI
3720: 43 45 5f 44 45 53 43 52 49 50 54 49 4f 4e 2a 20  CE_DESCRIPTION* 
3730: 4c 50 53 45 52 56 49 43 45 5f 44 45 53 43 52 49  LPSERVICE_DESCRI
3740: 50 54 49 4f 4e 3b 0a 09 61 6c 69 61 73 20 53 45  PTION;..alias SE
3750: 52 56 49 43 45 5f 46 41 49 4c 55 52 45 5f 41 43  RVICE_FAILURE_AC
3760: 54 49 4f 4e 53 2a 20 4c 50 53 45 52 56 49 43 45  TIONS* LPSERVICE
3770: 5f 46 41 49 4c 55 52 45 5f 41 43 54 49 4f 4e 53  _FAILURE_ACTIONS
3780: 3b 0a 7d 0a                                      ;.}.