* Include NDK headers on-demand.
[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 #include <netevent.h>
9 #define NTOS_MODE_USER
10 #include <ndk/iofuncs.h>
11 #include <ndk/obtypes.h>
12 #include <ndk/obfuncs.h>
13 #include <ndk/rtlfuncs.h>
14 #include <services/services.h>
15
16
17 typedef struct _SERVICE_GROUP
18 {
19 LIST_ENTRY GroupListEntry;
20 LPWSTR lpGroupName;
21
22 DWORD dwRefCount;
23 BOOLEAN ServicesRunning;
24 ULONG TagCount;
25 PULONG TagArray;
26
27 WCHAR szGroupName[1];
28 } SERVICE_GROUP, *PSERVICE_GROUP;
29
30
31 typedef struct _SERVICE_IMAGE
32 {
33 LIST_ENTRY ImageListEntry;
34 DWORD dwImageRunCount;
35
36 HANDLE hControlPipe;
37 HANDLE hProcess;
38 DWORD dwProcessId;
39
40 WCHAR szImagePath[1];
41 } SERVICE_IMAGE, *PSERVICE_IMAGE;
42
43
44 typedef struct _SERVICE
45 {
46 LIST_ENTRY ServiceListEntry;
47 LPWSTR lpServiceName;
48 LPWSTR lpDisplayName;
49 PSERVICE_GROUP lpGroup;
50 PSERVICE_IMAGE lpImage;
51 BOOL bDeleted;
52 DWORD dwResumeCount;
53 DWORD dwRefCount;
54
55 SERVICE_STATUS Status;
56 DWORD dwStartType;
57 DWORD dwErrorControl;
58 DWORD dwTag;
59
60 ULONG Flags;
61
62 PSECURITY_DESCRIPTOR lpSecurityDescriptor;
63
64 BOOLEAN ServiceVisited;
65
66 WCHAR szServiceName[1];
67 } SERVICE, *PSERVICE;
68
69
70 /* VARIABLES ***************************************************************/
71
72 extern LIST_ENTRY ServiceListHead;
73 extern LIST_ENTRY GroupListHead;
74 extern LIST_ENTRY ImageListHead;
75 extern BOOL ScmShutdown;
76
77
78 /* FUNCTIONS ***************************************************************/
79
80 /* config.c */
81
82 DWORD ScmOpenServiceKey(LPWSTR lpServiceName,
83 REGSAM samDesired,
84 PHKEY phKey);
85
86 DWORD ScmCreateServiceKey(LPCWSTR lpServiceName,
87 REGSAM samDesired,
88 PHKEY phKey);
89
90 DWORD ScmWriteDependencies(HKEY hServiceKey,
91 LPWSTR lpDependencies,
92 DWORD dwDependenciesLength);
93
94 DWORD ScmMarkServiceForDelete(PSERVICE pService);
95 BOOL ScmIsDeleteFlagSet(HKEY hServiceKey);
96
97 DWORD ScmReadString(HKEY hServiceKey,
98 LPWSTR lpValueName,
99 LPWSTR *lpValue);
100
101 DWORD
102 ScmReadDependencies(HKEY hServiceKey,
103 LPWSTR *lpDependencies,
104 DWORD *lpdwDependenciesLength);
105
106
107 /* database.c */
108
109 DWORD ScmCreateServiceDatabase(VOID);
110 VOID ScmShutdownServiceDatabase(VOID);
111 VOID ScmGetBootAndSystemDriverState(VOID);
112 VOID ScmAutoStartServices(VOID);
113 VOID ScmAutoShutdownServices(VOID);
114 DWORD ScmStartService(PSERVICE Service,
115 DWORD argc,
116 LPWSTR *argv);
117
118 PSERVICE ScmGetServiceEntryByName(LPCWSTR lpServiceName);
119 PSERVICE ScmGetServiceEntryByDisplayName(LPCWSTR lpDisplayName);
120 PSERVICE ScmGetServiceEntryByResumeCount(DWORD dwResumeCount);
121 DWORD ScmCreateNewServiceRecord(LPCWSTR lpServiceName,
122 PSERVICE *lpServiceRecord);
123 VOID ScmDeleteServiceRecord(PSERVICE lpService);
124 DWORD ScmMarkServiceForDelete(PSERVICE pService);
125
126 DWORD ScmControlService(PSERVICE Service,
127 DWORD dwControl);
128
129 BOOL ScmLockDatabaseExclusive(VOID);
130 BOOL ScmLockDatabaseShared(VOID);
131 VOID ScmUnlockDatabase(VOID);
132
133 VOID ScmInitNamedPipeCriticalSection(VOID);
134 VOID ScmDeleteNamedPipeCriticalSection(VOID);
135
136
137 /* driver.c */
138
139 DWORD ScmLoadDriver(PSERVICE lpService);
140 DWORD ScmUnloadDriver(PSERVICE lpService);
141 DWORD ScmControlDriver(PSERVICE lpService,
142 DWORD dwControl,
143 LPSERVICE_STATUS lpServiceStatus);
144
145
146 /* groupdb.c */
147
148 DWORD ScmCreateGroupList(VOID);
149 DWORD ScmSetServiceGroup(PSERVICE lpService,
150 LPCWSTR lpGroupName);
151
152
153 /* rpcserver.c */
154
155 VOID ScmStartRpcServer(VOID);
156
157
158 /* services.c */
159
160 VOID PrintString(LPCSTR fmt, ...);
161 VOID ScmLogError(DWORD dwEventId,
162 WORD wStrings,
163 LPCWSTR *lpStrings);
164
165 /* EOF */
166