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