6 #define WIN32_NO_STATUS
10 #include <ndk/iofuncs.h>
11 #include <ndk/obfuncs.h>
12 #include <ndk/rtlfuncs.h>
13 #include <services/services.h>
17 typedef struct _SERVICE_GROUP
19 LIST_ENTRY GroupListEntry
;
23 BOOLEAN ServicesRunning
;
28 } SERVICE_GROUP
, *PSERVICE_GROUP
;
31 typedef struct _SERVICE_IMAGE
33 LIST_ENTRY ImageListEntry
;
34 DWORD dwImageRunCount
;
41 } SERVICE_IMAGE
, *PSERVICE_IMAGE
;
44 typedef struct _SERVICE
46 LIST_ENTRY ServiceListEntry
;
49 PSERVICE_GROUP lpGroup
;
50 PSERVICE_IMAGE lpImage
;
55 SERVICE_STATUS Status
;
62 PSECURITY_DESCRIPTOR lpSecurityDescriptor
;
64 BOOLEAN ServiceVisited
;
66 WCHAR szServiceName
[1];
70 /* VARIABLES ***************************************************************/
72 extern LIST_ENTRY ServiceListHead
;
73 extern LIST_ENTRY GroupListHead
;
74 extern LIST_ENTRY ImageListHead
;
75 extern BOOL ScmShutdown
;
78 /* FUNCTIONS ***************************************************************/
82 DWORD
ScmOpenServiceKey(LPWSTR lpServiceName
,
86 DWORD
ScmCreateServiceKey(LPCWSTR lpServiceName
,
90 DWORD
ScmWriteDependencies(HKEY hServiceKey
,
91 LPCWSTR lpDependencies
,
92 DWORD dwDependenciesLength
);
94 DWORD
ScmMarkServiceForDelete(PSERVICE pService
);
95 BOOL
ScmIsDeleteFlagSet(HKEY hServiceKey
);
97 DWORD
ScmReadString(HKEY hServiceKey
,
102 ScmReadDependencies(HKEY hServiceKey
,
103 LPWSTR
*lpDependencies
,
104 DWORD
*lpdwDependenciesLength
);
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
,
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
);
126 DWORD
ScmControlService(PSERVICE Service
,
129 BOOL
ScmLockDatabaseExclusive(VOID
);
130 BOOL
ScmLockDatabaseShared(VOID
);
131 VOID
ScmUnlockDatabase(VOID
);
133 VOID
ScmInitNamedPipeCriticalSection(VOID
);
134 VOID
ScmDeleteNamedPipeCriticalSection(VOID
);
139 DWORD
ScmLoadDriver(PSERVICE lpService
);
140 DWORD
ScmUnloadDriver(PSERVICE lpService
);
141 DWORD
ScmControlDriver(PSERVICE lpService
,
143 LPSERVICE_STATUS lpServiceStatus
);
148 DWORD
ScmCreateGroupList(VOID
);
149 DWORD
ScmSetServiceGroup(PSERVICE lpService
,
150 LPCWSTR lpGroupName
);
155 VOID
ScmStartRpcServer(VOID
);
160 VOID
PrintString(LPCSTR fmt
, ...);
161 VOID
ScmLogError(DWORD dwEventId
,