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
29 LIST_ENTRY ServiceListEntry
;
32 PSERVICE_GROUP lpGroup
;
36 SERVICE_STATUS Status
;
43 PSECURITY_DESCRIPTOR lpSecurityDescriptor
;
45 BOOLEAN ServiceVisited
;
47 HANDLE ControlPipeHandle
;
51 WCHAR szServiceName
[1];
55 /* VARIABLES ***************************************************************/
57 extern LIST_ENTRY ServiceListHead
;
58 extern LIST_ENTRY GroupListHead
;
59 extern BOOL ScmShutdown
;
62 /* FUNCTIONS ***************************************************************/
66 DWORD
ScmOpenServiceKey(LPWSTR lpServiceName
,
70 DWORD
ScmCreateServiceKey(LPWSTR lpServiceName
,
74 DWORD
ScmWriteDependencies(HKEY hServiceKey
,
75 LPWSTR lpDependencies
,
76 DWORD dwDependenciesLength
);
78 DWORD
ScmMarkServiceForDelete(PSERVICE pService
);
79 BOOL
ScmIsDeleteFlagSet(HKEY hServiceKey
);
81 DWORD
ScmReadString(HKEY hServiceKey
,
88 DWORD
ScmCreateServiceDatabase(VOID
);
89 VOID
ScmGetBootAndSystemDriverState(VOID
);
90 VOID
ScmAutoStartServices(VOID
);
92 PSERVICE
ScmGetServiceEntryByName(LPWSTR lpServiceName
);
93 PSERVICE
ScmGetServiceEntryByDisplayName(LPWSTR lpDisplayName
);
94 PSERVICE
ScmGetServiceEntryByResumeCount(DWORD dwResumeCount
);
95 DWORD
ScmCreateNewServiceRecord(LPWSTR lpServiceName
,
96 PSERVICE
*lpServiceRecord
);
97 DWORD
ScmMarkServiceForDelete(PSERVICE pService
);
102 NTSTATUS
ScmLoadDriver(PSERVICE lpService
);
103 DWORD
ScmUnloadDriver(PSERVICE lpService
);
104 DWORD
ScmControlDriver(PSERVICE lpService
,
106 LPSERVICE_STATUS lpServiceStatus
);
111 DWORD
ScmCreateGroupList(VOID
);
112 DWORD
ScmSetServiceGroup(PSERVICE lpService
,
118 VOID
ScmStartRpcServer(VOID
);
123 VOID
PrintString(LPCSTR fmt
, ...);