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>
16 typedef struct _SERVICE_GROUP
18 LIST_ENTRY GroupListEntry
;
22 BOOLEAN ServicesRunning
;
27 } SERVICE_GROUP
, *PSERVICE_GROUP
;
30 typedef struct _SERVICE_IMAGE
32 LIST_ENTRY ImageListEntry
;
33 DWORD dwImageRunCount
;
40 } SERVICE_IMAGE
, *PSERVICE_IMAGE
;
43 typedef struct _SERVICE
45 LIST_ENTRY ServiceListEntry
;
48 PSERVICE_GROUP lpGroup
;
49 PSERVICE_IMAGE lpImage
;
54 SERVICE_STATUS Status
;
61 PSECURITY_DESCRIPTOR lpSecurityDescriptor
;
63 BOOLEAN ServiceVisited
;
65 WCHAR szServiceName
[1];
69 /* VARIABLES ***************************************************************/
71 extern LIST_ENTRY ServiceListHead
;
72 extern LIST_ENTRY GroupListHead
;
73 extern LIST_ENTRY ImageListHead
;
74 extern BOOL ScmShutdown
;
77 /* FUNCTIONS ***************************************************************/
81 DWORD
ScmOpenServiceKey(LPWSTR lpServiceName
,
85 DWORD
ScmCreateServiceKey(LPCWSTR lpServiceName
,
89 DWORD
ScmWriteDependencies(HKEY hServiceKey
,
90 LPWSTR lpDependencies
,
91 DWORD dwDependenciesLength
);
93 DWORD
ScmMarkServiceForDelete(PSERVICE pService
);
94 BOOL
ScmIsDeleteFlagSet(HKEY hServiceKey
);
96 DWORD
ScmReadString(HKEY hServiceKey
,
101 ScmReadDependencies(HKEY hServiceKey
,
102 LPWSTR
*lpDependencies
,
103 DWORD
*lpdwDependenciesLength
);
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
,
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
);
125 DWORD
ScmControlService(PSERVICE Service
,
128 BOOL
ScmLockDatabaseExclusive(VOID
);
129 BOOL
ScmLockDatabaseShared(VOID
);
130 VOID
ScmUnlockDatabase(VOID
);
132 VOID
ScmInitNamedPipeCriticalSection(VOID
);
133 VOID
ScmDeleteNamedPipeCriticalSection(VOID
);
138 DWORD
ScmLoadDriver(PSERVICE lpService
);
139 DWORD
ScmUnloadDriver(PSERVICE lpService
);
140 DWORD
ScmControlDriver(PSERVICE lpService
,
142 LPSERVICE_STATUS lpServiceStatus
);
147 DWORD
ScmCreateGroupList(VOID
);
148 DWORD
ScmSetServiceGroup(PSERVICE lpService
,
149 LPCWSTR lpGroupName
);
154 VOID
ScmStartRpcServer(VOID
);
159 VOID
PrintString(LPCSTR fmt
, ...);
160 VOID
ScmLogError(DWORD dwEventId
,