- Move NCI generated files to arch-specific directories
[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
44 SERVICE_STATUS Status;
45 DWORD dwStartType;
46 DWORD dwErrorControl;
47 DWORD dwTag;
48
49 ULONG Flags;
50
51 PSECURITY_DESCRIPTOR lpSecurityDescriptor;
52
53 BOOLEAN ServiceVisited;
54
55 HANDLE ControlPipeHandle;
56 ULONG ProcessId;
57 ULONG ThreadId;
58
59 WCHAR szServiceName[1];
60 } SERVICE, *PSERVICE;
61
62
63 /* VARIABLES ***************************************************************/
64
65 extern LIST_ENTRY ServiceListHead;
66 extern LIST_ENTRY GroupListHead;
67 extern BOOL ScmShutdown;
68
69
70 /* FUNCTIONS ***************************************************************/
71
72 /* config.c */
73
74 DWORD ScmOpenServiceKey(LPWSTR lpServiceName,
75 REGSAM samDesired,
76 PHKEY phKey);
77
78 DWORD ScmCreateServiceKey(LPWSTR lpServiceName,
79 REGSAM samDesired,
80 PHKEY phKey);
81
82 DWORD ScmWriteDependencies(HKEY hServiceKey,
83 LPWSTR lpDependencies,
84 DWORD dwDependenciesLength);
85
86 DWORD ScmMarkServiceForDelete(PSERVICE pService);
87 BOOL ScmIsDeleteFlagSet(HKEY hServiceKey);
88
89 DWORD ScmReadString(HKEY hServiceKey,
90 LPWSTR lpValueName,
91 LPWSTR *lpValue);
92
93
94 /* database.c */
95
96 DWORD ScmCreateServiceDatabase(VOID);
97 VOID ScmGetBootAndSystemDriverState(VOID);
98 VOID ScmAutoStartServices(VOID);
99 DWORD ScmStartService(PSERVICE Service,
100 LPWSTR lpArgs);
101
102 PSERVICE ScmGetServiceEntryByName(LPWSTR lpServiceName);
103 PSERVICE ScmGetServiceEntryByDisplayName(LPWSTR lpDisplayName);
104 PSERVICE ScmGetServiceEntryByResumeCount(DWORD dwResumeCount);
105 DWORD ScmCreateNewServiceRecord(LPWSTR lpServiceName,
106 PSERVICE *lpServiceRecord);
107 DWORD ScmMarkServiceForDelete(PSERVICE pService);
108
109 DWORD ScmControlService(PSERVICE Service,
110 DWORD dwControl,
111 LPSERVICE_STATUS lpServiceStatus);
112
113 /* driver.c */
114
115 DWORD ScmLoadDriver(PSERVICE lpService);
116 DWORD ScmUnloadDriver(PSERVICE lpService);
117 DWORD ScmControlDriver(PSERVICE lpService,
118 DWORD dwControl,
119 LPSERVICE_STATUS lpServiceStatus);
120
121
122 /* groupdb.c */
123
124 DWORD ScmCreateGroupList(VOID);
125 DWORD ScmSetServiceGroup(PSERVICE lpService,
126 LPWSTR lpGroupName);
127
128
129 /* rpcserver.c */
130
131 VOID ScmStartRpcServer(VOID);
132
133
134 /* services.c */
135
136 VOID PrintString(LPCSTR fmt, ...);
137
138 /* EOF */
139