6 #define WIN32_NO_STATUS
10 #include <ndk/ntndk.h>
11 #include <services/services.h>
14 typedef struct _SERVICE_GROUP
16 LIST_ENTRY GroupListEntry
;
20 BOOLEAN ServicesRunning
;
25 } SERVICE_GROUP
, *PSERVICE_GROUP
;
28 typedef struct _SERVICE_IMAGE
30 LIST_ENTRY ImageListEntry
;
31 DWORD dwImageRunCount
;
38 } SERVICE_IMAGE
, *PSERVICE_IMAGE
;
41 typedef struct _SERVICE
43 LIST_ENTRY ServiceListEntry
;
46 PSERVICE_GROUP lpGroup
;
47 PSERVICE_IMAGE lpImage
;
52 SERVICE_STATUS Status
;
59 PSECURITY_DESCRIPTOR lpSecurityDescriptor
;
61 BOOLEAN ServiceVisited
;
63 WCHAR szServiceName
[1];
67 /* VARIABLES ***************************************************************/
69 extern LIST_ENTRY ServiceListHead
;
70 extern LIST_ENTRY GroupListHead
;
71 extern LIST_ENTRY ImageListHead
;
72 extern BOOL ScmShutdown
;
75 /* FUNCTIONS ***************************************************************/
79 DWORD
ScmOpenServiceKey(LPWSTR lpServiceName
,
83 DWORD
ScmCreateServiceKey(LPCWSTR lpServiceName
,
87 DWORD
ScmWriteDependencies(HKEY hServiceKey
,
88 LPWSTR lpDependencies
,
89 DWORD dwDependenciesLength
);
91 DWORD
ScmMarkServiceForDelete(PSERVICE pService
);
92 BOOL
ScmIsDeleteFlagSet(HKEY hServiceKey
);
94 DWORD
ScmReadString(HKEY hServiceKey
,
99 ScmReadDependencies(HKEY hServiceKey
,
100 LPWSTR
*lpDependencies
,
101 DWORD
*lpdwDependenciesLength
);
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
,
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
);
123 DWORD
ScmControlService(PSERVICE Service
,
126 BOOL
ScmLockDatabaseExclusive(VOID
);
127 BOOL
ScmLockDatabaseShared(VOID
);
128 VOID
ScmUnlockDatabase(VOID
);
130 VOID
ScmInitNamedPipeCriticalSection(VOID
);
131 VOID
ScmDeleteNamedPipeCriticalSection(VOID
);
136 DWORD
ScmLoadDriver(PSERVICE lpService
);
137 DWORD
ScmUnloadDriver(PSERVICE lpService
);
138 DWORD
ScmControlDriver(PSERVICE lpService
,
140 LPSERVICE_STATUS lpServiceStatus
);
145 DWORD
ScmCreateGroupList(VOID
);
146 DWORD
ScmSetServiceGroup(PSERVICE lpService
,
147 LPCWSTR lpGroupName
);
152 VOID
ScmStartRpcServer(VOID
);
157 VOID
PrintString(LPCSTR fmt
, ...);
158 VOID
ScmLogError(DWORD dwEventId
,