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