Merge amd64 NDK from amd64 branch:
[reactos.git] / reactos / base / system / services / services.h
1 /*
2 * services.h
3 */
4
5 #include <stdio.h>
6 #define WIN32_NO_STATUS
7 #include <windows.h>
8 #define NTOS_MODE_USER
9 #include <ndk/ntndk.h>
10 #include <services/services.h>
11
12
13 typedef struct _SERVICE_GROUP
14 {
15 LIST_ENTRY GroupListEntry;
16 LPWSTR lpGroupName;
17
18 DWORD dwRefCount;
19 BOOLEAN ServicesRunning;
20 ULONG TagCount;
21 PULONG TagArray;
22
23 WCHAR szGroupName[1];
24 } SERVICE_GROUP, *PSERVICE_GROUP;
25
26
27 typedef struct _SERVICE_IMAGE
28 {
29 DWORD dwServiceRefCount; // Number of running services of this image
30 DWORD Dummy;
31 } SERVICE_IMAGE, *PSERVICE_IMAGE;
32
33
34 typedef struct _SERVICE
35 {
36 LIST_ENTRY ServiceListEntry;
37 LPWSTR lpServiceName;
38 LPWSTR lpDisplayName;
39 PSERVICE_GROUP lpGroup;
40 PSERVICE_IMAGE lpImage;
41 BOOL bDeleted;
42 DWORD dwResumeCount;
43 DWORD dwRefCount;
44
45 CLIENT_HANDLE hClient;
46 SERVICE_STATUS Status;
47 DWORD dwStartType;
48 DWORD dwErrorControl;
49 DWORD dwTag;
50
51 ULONG Flags;
52
53 PSECURITY_DESCRIPTOR lpSecurityDescriptor;
54
55 BOOLEAN ServiceVisited;
56
57 HANDLE ControlPipeHandle;
58 ULONG ProcessId;
59 ULONG ThreadId;
60
61 WCHAR szServiceName[1];
62 } SERVICE, *PSERVICE;
63
64
65 /* VARIABLES ***************************************************************/
66
67 extern LIST_ENTRY ServiceListHead;
68 extern LIST_ENTRY GroupListHead;
69 extern BOOL ScmShutdown;
70
71
72 /* FUNCTIONS ***************************************************************/
73
74 /* config.c */
75
76 DWORD ScmOpenServiceKey(LPWSTR lpServiceName,
77 REGSAM samDesired,
78 PHKEY phKey);
79
80 DWORD ScmCreateServiceKey(LPCWSTR lpServiceName,
81 REGSAM samDesired,
82 PHKEY phKey);
83
84 DWORD ScmWriteDependencies(HKEY hServiceKey,
85 LPWSTR lpDependencies,
86 DWORD dwDependenciesLength);
87
88 DWORD ScmMarkServiceForDelete(PSERVICE pService);
89 BOOL ScmIsDeleteFlagSet(HKEY hServiceKey);
90
91 DWORD ScmReadString(HKEY hServiceKey,
92 LPWSTR lpValueName,
93 LPWSTR *lpValue);
94
95
96 /* database.c */
97
98 DWORD ScmCreateServiceDatabase(VOID);
99 VOID ScmShutdownServiceDatabase(VOID);
100 VOID ScmGetBootAndSystemDriverState(VOID);
101 VOID ScmAutoStartServices(VOID);
102 VOID ScmAutoShutdownServices(VOID);
103 DWORD ScmStartService(PSERVICE Service,
104 DWORD argc,
105 LPWSTR *argv);
106
107 PSERVICE ScmGetServiceEntryByName(LPCWSTR lpServiceName);
108 PSERVICE ScmGetServiceEntryByDisplayName(LPCWSTR lpDisplayName);
109 PSERVICE ScmGetServiceEntryByResumeCount(DWORD dwResumeCount);
110 PSERVICE ScmGetServiceEntryByClientHandle(HANDLE Handle);
111 DWORD ScmCreateNewServiceRecord(LPCWSTR lpServiceName,
112 PSERVICE *lpServiceRecord);
113 VOID ScmDeleteServiceRecord(PSERVICE lpService);
114 DWORD ScmMarkServiceForDelete(PSERVICE pService);
115
116 DWORD ScmControlService(PSERVICE Service,
117 DWORD dwControl,
118 LPSERVICE_STATUS lpServiceStatus);
119
120 /* driver.c */
121
122 DWORD ScmLoadDriver(PSERVICE lpService);
123 DWORD ScmUnloadDriver(PSERVICE lpService);
124 DWORD ScmControlDriver(PSERVICE lpService,
125 DWORD dwControl,
126 LPSERVICE_STATUS lpServiceStatus);
127
128
129 /* groupdb.c */
130
131 DWORD ScmCreateGroupList(VOID);
132 DWORD ScmSetServiceGroup(PSERVICE lpService,
133 LPCWSTR lpGroupName);
134
135
136 /* rpcserver.c */
137
138 VOID ScmStartRpcServer(VOID);
139
140
141 /* services.c */
142
143 VOID PrintString(LPCSTR fmt, ...);
144
145 /* EOF */
146