ReactOS 0.4.16-dev-1007-g2e85425
services.h
Go to the documentation of this file.
1/*
2 * services.h
3 */
4
5#ifndef _SERVICES_H
6#define _SERVICES_H
7
8#include <stdio.h>
9#include <stdlib.h>
10
11#define WIN32_NO_STATUS
12#define _INC_WINDOWS
13#define COM_NO_WINDOWS_H
14
15#include <windef.h>
16#include <winbase.h>
17#include <winsvc.h>
18#include <winreg.h>
19#include <winuser.h>
20#include <netevent.h>
21
22#define NTOS_MODE_USER
23#include <ndk/setypes.h>
24#include <ndk/obfuncs.h>
25#include <ndk/rtlfuncs.h>
26
27#include <services/services.h>
28#include <svcctl_s.h>
29
30#include "resource.h"
31
32typedef struct _SERVICE_GROUP
33{
36
41
44
45
46typedef struct _SERVICE_IMAGE
47{
52
59
60
61typedef struct _SERVICE
62{
71
76
79
81
83
85
88
89
90#define LOCK_TAG 0x4C697041 /* 'ApiL' */
91
92typedef struct _START_LOCK
93{
94 DWORD Tag; /* Must be LOCK_TAG */
95 DWORD TimeWhenLocked; /* Number of seconds since 1970 */
96 PSID LockOwnerSid; /* It is NULL if the SCM acquired the lock */
98
99
100/* VARIABLES ***************************************************************/
101
105extern BOOL ScmInitialize;
106extern BOOL ScmShutdown;
107extern BOOL ScmLiveSetup;
110
111
112/* FUNCTIONS ***************************************************************/
113
114/* config.c */
115
116DWORD ScmOpenServiceKey(LPWSTR lpServiceName,
117 REGSAM samDesired,
118 PHKEY phKey);
119
120DWORD ScmCreateServiceKey(LPCWSTR lpServiceName,
121 REGSAM samDesired,
122 PHKEY phKey);
123
125 LPCWSTR lpDependencies,
126 DWORD dwDependenciesLength);
127
129BOOL ScmIsDeleteFlagSet(HKEY hServiceKey);
130
131DWORD ScmReadString(HKEY hServiceKey,
132 LPCWSTR lpValueName,
133 LPWSTR *lpValue);
134
135DWORD
136ScmReadDependencies(HKEY hServiceKey,
137 LPWSTR *lpDependencies,
138 DWORD *lpdwDependenciesLength);
139
140DWORD
142 IN PCWSTR pszServiceName,
143 IN PCWSTR pszPassword);
144
145DWORD
147 _In_ HKEY hServiceKey,
148 _In_ PSECURITY_DESCRIPTOR pSecurityDescriptor);
149
150DWORD
152 _In_ HKEY hServiceKey,
153 _Out_ PSECURITY_DESCRIPTOR *ppSecurityDescriptor);
154
155DWORD
157 _In_ HKEY hKey,
158 _In_ PCWSTR pszSubKey);
159
160DWORD
162 _In_ PVOID ContextHandle,
163 _In_ PBYTE pPassword,
164 _In_ DWORD dwPasswordSize,
165 _Out_ PWSTR *pDecryptedPassword);
166
167
168/* controlset.c */
169
170DWORD
172
173DWORD
175
176DWORD
178
179
180/* database.c */
181
188 DWORD argc,
189 const PCWSTR* argv);
190
193
199 PSERVICE *lpServiceRecord,
200 DWORD dwServiceType,
201 DWORD dwStartType);
204
205DWORD
207 _In_ HANDLE hControlPipe,
208 _In_ PCWSTR pServiceName,
209 _In_ DWORD dwControl,
211
215
218
221
222DWORD ScmGenerateServiceTag(PSERVICE lpServiceRecord);
223
224/* driver.c */
225
226DWORD ScmStartDriver(PSERVICE lpService);
228 DWORD dwControl,
229 LPSERVICE_STATUS lpServiceStatus);
230
231
232/* groupdb.c */
233
236 _In_ LPCWSTR lpGroupName);
237
240 LPCWSTR lpGroupName);
241
242
243/* lock.c */
244
245DWORD ScmAcquireServiceStartLock(IN BOOL IsServiceController,
246 OUT LPSC_RPC_LOCK lpLock);
250
251
252/* rpcserver.c */
253
255
256
257/* security.c */
258
261
262DWORD
264 PSECURITY_DESCRIPTOR *ppSecurityDescriptor);
265
266
267/* services.c */
268
271VOID ScmLogEvent(DWORD dwEventId,
272 WORD wType,
273 WORD wStrings,
274 LPCWSTR *lpStrings);
276
277#endif /* _SERVICES_H */
static SERVICE_STATUS_HANDLE(WINAPI *pRegisterServiceCtrlHandlerExA)(LPCSTR
unsigned char BOOLEAN
static int argc
Definition: ServiceArgs.c:12
VOID ScmQueryServiceLockStatusW(OUT LPQUERY_SERVICE_LOCK_STATUSW lpLockStatus)
Definition: lock.c:127
DWORD ScmReadString(HKEY hServiceKey, LPCWSTR lpValueName, LPWSTR *lpValue)
Definition: config.c:270
DWORD ScmControlService(_In_ HANDLE hControlPipe, _In_ PCWSTR pServiceName, _In_ DWORD dwControl, _In_ SERVICE_STATUS_HANDLE hServiceStatus)
Definition: database.c:1569
DWORD ScmGetServiceNameFromTag(PTAG_INFO_NAME_FROM_TAG_IN_PARAMS InParams, PTAG_INFO_NAME_FROM_TAG_OUT_PARAMS *OutParams)
DWORD ScmRunLastKnownGood(VOID)
Definition: controlset.c:402
DWORD ScmStartDriver(PSERVICE lpService)
Definition: driver.c:314
DWORD ScmCreateLastKnownGoodControlSet(VOID)
Definition: controlset.c:275
VOID ScmAutoStartServices(VOID)
Definition: database.c:2065
PSERVICE ScmGetServiceEntryByResumeCount(DWORD dwResumeCount)
Definition: database.c:715
VOID ScmRemoveServiceImage(PSERVICE_IMAGE pServiceImage)
Definition: database.c:622
VOID PrintString(LPCSTR fmt,...)
Definition: services.c:39
DWORD ScmOpenServiceKey(LPWSTR lpServiceName, REGSAM samDesired, PHKEY phKey)
Definition: config.c:42
BOOL ScmIsDeleteFlagSet(HKEY hServiceKey)
Definition: config.c:251
VOID ScmUnlockDatabase(VOID)
Definition: database.c:2328
VOID ScmWaitForLsa(VOID)
Definition: services.c:207
DWORD ScmWriteSecurityDescriptor(_In_ HKEY hServiceKey, _In_ PSECURITY_DESCRIPTOR pSecurityDescriptor)
Definition: config.c:530
struct _SERVICE * PSERVICE
LIST_ENTRY ImageListHead
Definition: database.c:28
VOID ScmShutdownSecurity(VOID)
Definition: security.c:398
BOOL ScmShutdown
Definition: services.c:29
DWORD ScmSetServicePassword(IN PCWSTR pszServiceName, IN PCWSTR pszPassword)
Definition: config.c:469
DWORD ScmGenerateServiceTag(PSERVICE lpServiceRecord)
Definition: database.c:744
BOOL ScmInitialize
Definition: services.c:28
struct _SERVICE_IMAGE SERVICE_IMAGE
struct _SERVICE_GROUP * PSERVICE_GROUP
struct _START_LOCK * PSTART_LOCK
DWORD ScmWriteDependencies(HKEY hServiceKey, LPCWSTR lpDependencies, DWORD dwDependenciesLength)
Definition: config.c:117
LIST_ENTRY GroupListHead
Definition: groupdb.c:19
struct _SERVICE_GROUP SERVICE_GROUP
VOID ScmInitNamedPipeCriticalSection(VOID)
Definition: database.c:2335
DWORD ScmReferenceService(PSERVICE lpService)
Definition: database.c:931
VOID ScmQueryServiceLockStatusA(OUT LPQUERY_SERVICE_LOCK_STATUSA lpLockStatus)
Definition: lock.c:159
DWORD ScmCreateServiceDatabase(VOID)
Definition: database.c:1187
DWORD ScmStartService(PSERVICE Service, DWORD argc, const PCWSTR *argv)
Definition: database.c:2024
VOID ScmDeleteServiceRecord(PSERVICE lpService)
Definition: database.c:816
VOID ScmAutoShutdownServices(VOID)
Definition: database.c:2276
BOOL ScmLockDatabaseExclusive(VOID)
Definition: database.c:2314
DWORD ScmReadSecurityDescriptor(_In_ HKEY hServiceKey, _Out_ PSECURITY_DESCRIPTOR *ppSecurityDescriptor)
Definition: config.c:566
VOID ScmGetBootAndSystemDriverState(VOID)
Definition: database.c:1384
DWORD ScmAcquireServiceStartLock(IN BOOL IsServiceController, OUT LPSC_RPC_LOCK lpLock)
Definition: lock.c:31
DWORD ScmDereferenceService(PSERVICE lpService)
Definition: database.c:939
DWORD ScmCreateGroupList(VOID)
Definition: groupdb.c:235
DWORD ScmReleaseServiceStartLock(IN OUT LPSC_RPC_LOCK lpLock)
Definition: lock.c:82
DWORD ScmCreateNewServiceRecord(LPCWSTR lpServiceName, PSERVICE *lpServiceRecord, DWORD dwServiceType, DWORD dwStartType)
Definition: database.c:767
PSERVICE ScmGetServiceEntryByName(LPCWSTR lpServiceName)
Definition: database.c:657
DWORD ScmAcceptBoot(VOID)
Definition: controlset.c:336
VOID ScmStartRpcServer(VOID)
Definition: rpcserver.c:107
DWORD ScmInitializeSecurity(VOID)
Definition: security.c:373
PSECURITY_DESCRIPTOR pPipeSD
Definition: security.c:27
BOOL ScmLockDatabaseShared(VOID)
Definition: database.c:2321
struct _SERVICE_IMAGE * PSERVICE_IMAGE
LIST_ENTRY ServiceListHead
Definition: database.c:29
DWORD ScmReadDependencies(HKEY hServiceKey, LPWSTR *lpDependencies, DWORD *lpdwDependenciesLength)
Definition: config.c:349
DWORD SetSecurityServicesEvent(VOID)
Definition: services.c:142
PSERVICE_GROUP ScmGetServiceGroupByName(_In_ LPCWSTR lpGroupName)
Definition: groupdb.c:26
BOOL ScmLiveSetup
Definition: services.c:30
DWORD ScmMarkServiceForDelete(PSERVICE pService)
Definition: config.c:223
BOOL ScmSetupInProgress
Definition: services.c:31
DWORD ScmDeleteRegKey(_In_ HKEY hKey, _In_ PCWSTR pszSubKey)
Definition: config.c:646
VOID ScmDeleteNamedPipeCriticalSection(VOID)
Definition: database.c:2363
struct _SERVICE SERVICE
VOID ScmShutdownServiceDatabase(VOID)
Definition: database.c:1274
PSERVICE ScmGetServiceEntryByDisplayName(LPCWSTR lpDisplayName)
Definition: database.c:686
DWORD ScmCreateDefaultServiceSD(PSECURITY_DESCRIPTOR *ppSecurityDescriptor)
Definition: security.c:320
DWORD ScmSetServiceGroup(PSERVICE lpService, LPCWSTR lpGroupName)
Definition: groupdb.c:61
DWORD ScmCreateServiceKey(LPCWSTR lpServiceName, REGSAM samDesired, PHKEY phKey)
Definition: config.c:72
DWORD ScmControlDriver(PSERVICE lpService, DWORD dwControl, LPSERVICE_STATUS lpServiceStatus)
Definition: driver.c:335
struct _START_LOCK START_LOCK
VOID ScmLogEvent(DWORD dwEventId, WORD wType, WORD wStrings, LPCWSTR *lpStrings)
Definition: services.c:174
DWORD ScmDecryptPassword(_In_ PVOID ContextHandle, _In_ PBYTE pPassword, _In_ DWORD dwPasswordSize, _Out_ PWSTR *pDecryptedPassword)
Definition: config.c:708
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
FxAutoRegKey hKey
#define argv
Definition: mplay32.c:18
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
@ Service
Definition: ntsecapi.h:292
BYTE * PBYTE
Definition: pedump.c:66
long LONG
Definition: pedump.c:60
Definition: typedefs.h:120
DWORD dwRefCount
Definition: services.h:37
WCHAR szGroupName[1]
Definition: services.h:42
PULONG TagArray
Definition: services.h:40
BOOLEAN ServicesRunning
Definition: services.h:38
LIST_ENTRY GroupListEntry
Definition: services.h:34
ULONG TagCount
Definition: services.h:39
LPWSTR lpGroupName
Definition: services.h:35
HANDLE hControlPipe
Definition: services.h:53
LPWSTR pszImagePath
Definition: services.h:49
LIST_ENTRY ImageListEntry
Definition: services.h:48
HANDLE hProfile
Definition: services.h:57
LPWSTR pszAccountName
Definition: services.h:50
HANDLE hToken
Definition: services.h:56
DWORD dwProcessId
Definition: services.h:55
DWORD dwImageRunCount
Definition: services.h:51
HANDLE hProcess
Definition: services.h:54
BOOL bDeleted
Definition: services.h:68
DWORD dwServiceTag
Definition: services.h:78
ULONG Flags
Definition: services.h:80
DWORD dwServiceBits
Definition: services.h:77
PSERVICE_GROUP lpGroup
Definition: services.h:66
PSECURITY_DESCRIPTOR pSecurityDescriptor
Definition: services.h:82
DWORD dwErrorControl
Definition: services.h:74
LPWSTR lpDisplayName
Definition: services.h:65
LIST_ENTRY ServiceListEntry
Definition: services.h:63
DWORD dwResumeCount
Definition: services.h:69
SERVICE_STATUS Status
Definition: services.h:72
BOOLEAN ServiceVisited
Definition: services.h:84
DWORD dwStartType
Definition: services.h:73
WCHAR szServiceName[1]
Definition: services.h:86
LONG RefCount
Definition: services.h:70
DWORD dwTag
Definition: services.h:75
PSERVICE_IMAGE lpImage
Definition: services.h:67
LPWSTR lpServiceName
Definition: services.h:64
DWORD TimeWhenLocked
Definition: services.h:95
DWORD Tag
Definition: services.h:94
PSID LockOwnerSid
Definition: services.h:96
Definition: dsound.c:943
uint16_t * PWSTR
Definition: typedefs.h:56
uint32_t * PULONG
Definition: typedefs.h:59
const uint16_t * PCWSTR
Definition: typedefs.h:57
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
SERVICE_STATUS_HANDLE hServiceStatus
Definition: main.c:10
_In_ LPCSTR _Out_writes_to_opt_ cchDisplayName LPSTR lpDisplayName
Definition: winbase.h:2821
ACCESS_MASK REGSAM
Definition: winreg.h:69
const char * LPCSTR
Definition: xmlstorage.h:183
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185