6 #define WIN32_NO_STATUS
10 #include <services/services.h>
13 typedef struct _SERVICE_GROUP
15 LIST_ENTRY GroupListEntry
;
19 BOOLEAN ServicesRunning
;
24 } SERVICE_GROUP
, *PSERVICE_GROUP
;
27 typedef struct _SERVICE_IMAGE
29 DWORD dwServiceRefCount
; // Number of running services of this image
31 } SERVICE_IMAGE
, *PSERVICE_IMAGE
;
34 typedef struct _SERVICE
36 LIST_ENTRY ServiceListEntry
;
39 PSERVICE_GROUP lpGroup
;
40 PSERVICE_IMAGE lpImage
;
45 SERVICE_STATUS Status
;
52 PSECURITY_DESCRIPTOR lpSecurityDescriptor
;
54 BOOLEAN ServiceVisited
;
56 HANDLE ControlPipeHandle
;
60 WCHAR szServiceName
[1];
64 /* VARIABLES ***************************************************************/
66 extern LIST_ENTRY ServiceListHead
;
67 extern LIST_ENTRY GroupListHead
;
68 extern BOOL ScmShutdown
;
71 /* FUNCTIONS ***************************************************************/
75 DWORD
ScmOpenServiceKey(LPWSTR lpServiceName
,
79 DWORD
ScmCreateServiceKey(LPCWSTR lpServiceName
,
83 DWORD
ScmWriteDependencies(HKEY hServiceKey
,
84 LPWSTR lpDependencies
,
85 DWORD dwDependenciesLength
);
87 DWORD
ScmMarkServiceForDelete(PSERVICE pService
);
88 BOOL
ScmIsDeleteFlagSet(HKEY hServiceKey
);
90 DWORD
ScmReadString(HKEY hServiceKey
,
95 ScmReadDependencies(HKEY hServiceKey
,
96 LPWSTR
*lpDependencies
,
97 DWORD
*lpdwDependenciesLength
);
102 DWORD
ScmCreateServiceDatabase(VOID
);
103 VOID
ScmShutdownServiceDatabase(VOID
);
104 VOID
ScmGetBootAndSystemDriverState(VOID
);
105 VOID
ScmAutoStartServices(VOID
);
106 VOID
ScmAutoShutdownServices(VOID
);
107 DWORD
ScmStartService(PSERVICE Service
,
111 PSERVICE
ScmGetServiceEntryByName(LPCWSTR lpServiceName
);
112 PSERVICE
ScmGetServiceEntryByDisplayName(LPCWSTR lpDisplayName
);
113 PSERVICE
ScmGetServiceEntryByResumeCount(DWORD dwResumeCount
);
114 DWORD
ScmCreateNewServiceRecord(LPCWSTR lpServiceName
,
115 PSERVICE
*lpServiceRecord
);
116 VOID
ScmDeleteServiceRecord(PSERVICE lpService
);
117 DWORD
ScmMarkServiceForDelete(PSERVICE pService
);
119 DWORD
ScmControlService(PSERVICE Service
,
122 BOOL
ScmLockDatabaseExclusive(VOID
);
123 BOOL
ScmLockDatabaseShared(VOID
);
124 VOID
ScmUnlockDatabase(VOID
);
126 VOID
ScmInitNamedPipeCriticalSection(VOID
);
127 VOID
ScmDeleteNamedPipeCriticalSection(VOID
);
132 DWORD
ScmLoadDriver(PSERVICE lpService
);
133 DWORD
ScmUnloadDriver(PSERVICE lpService
);
134 DWORD
ScmControlDriver(PSERVICE lpService
,
136 LPSERVICE_STATUS lpServiceStatus
);
141 DWORD
ScmCreateGroupList(VOID
);
142 DWORD
ScmSetServiceGroup(PSERVICE lpService
,
143 LPCWSTR lpGroupName
);
148 VOID
ScmStartRpcServer(VOID
);
153 VOID
PrintString(LPCSTR fmt
, ...);