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 ;.}.