2005-10-09 20:24:00 +00:00
|
|
|
/*
|
|
|
|
* services.h
|
|
|
|
*/
|
|
|
|
|
2005-07-26 14:00:45 +00:00
|
|
|
#include <stdio.h>
|
2005-10-19 17:03:38 +00:00
|
|
|
#define WIN32_NO_STATUS
|
2005-06-20 21:04:03 +00:00
|
|
|
#include <windows.h>
|
2011-05-26 10:50:26 +00:00
|
|
|
#include <netevent.h>
|
2005-06-20 21:04:03 +00:00
|
|
|
#define NTOS_MODE_USER
|
2011-08-14 12:59:05 +00:00
|
|
|
#include <ndk/iofuncs.h>
|
|
|
|
#include <ndk/obfuncs.h>
|
|
|
|
#include <ndk/rtlfuncs.h>
|
2005-10-19 17:03:38 +00:00
|
|
|
#include <services/services.h>
|
2011-08-21 15:35:19 +00:00
|
|
|
#include "svcctl_s.h"
|
2005-06-20 21:04:03 +00:00
|
|
|
|
2005-12-31 18:56:34 +00:00
|
|
|
|
|
|
|
typedef struct _SERVICE_GROUP
|
|
|
|
{
|
|
|
|
LIST_ENTRY GroupListEntry;
|
|
|
|
LPWSTR lpGroupName;
|
|
|
|
|
|
|
|
DWORD dwRefCount;
|
|
|
|
BOOLEAN ServicesRunning;
|
|
|
|
ULONG TagCount;
|
|
|
|
PULONG TagArray;
|
|
|
|
|
|
|
|
WCHAR szGroupName[1];
|
|
|
|
} SERVICE_GROUP, *PSERVICE_GROUP;
|
|
|
|
|
|
|
|
|
2006-12-26 01:29:22 +00:00
|
|
|
typedef struct _SERVICE_IMAGE
|
|
|
|
{
|
2011-07-17 15:45:03 +00:00
|
|
|
LIST_ENTRY ImageListEntry;
|
|
|
|
DWORD dwImageRunCount;
|
|
|
|
|
|
|
|
HANDLE hControlPipe;
|
|
|
|
HANDLE hProcess;
|
|
|
|
DWORD dwProcessId;
|
|
|
|
|
|
|
|
WCHAR szImagePath[1];
|
2006-12-26 01:29:22 +00:00
|
|
|
} SERVICE_IMAGE, *PSERVICE_IMAGE;
|
|
|
|
|
|
|
|
|
2005-04-23 00:01:37 +00:00
|
|
|
typedef struct _SERVICE
|
|
|
|
{
|
2005-10-22 18:59:39 +00:00
|
|
|
LIST_ENTRY ServiceListEntry;
|
|
|
|
LPWSTR lpServiceName;
|
2005-10-30 13:13:53 +00:00
|
|
|
LPWSTR lpDisplayName;
|
2005-12-31 22:42:41 +00:00
|
|
|
PSERVICE_GROUP lpGroup;
|
2006-12-26 01:29:22 +00:00
|
|
|
PSERVICE_IMAGE lpImage;
|
2005-10-30 21:52:23 +00:00
|
|
|
BOOL bDeleted;
|
2005-12-18 19:50:53 +00:00
|
|
|
DWORD dwResumeCount;
|
2008-08-29 20:43:12 +00:00
|
|
|
DWORD dwRefCount;
|
2005-10-22 18:59:39 +00:00
|
|
|
|
|
|
|
SERVICE_STATUS Status;
|
|
|
|
DWORD dwStartType;
|
|
|
|
DWORD dwErrorControl;
|
|
|
|
DWORD dwTag;
|
|
|
|
|
|
|
|
ULONG Flags;
|
|
|
|
|
2005-12-23 15:56:51 +00:00
|
|
|
PSECURITY_DESCRIPTOR lpSecurityDescriptor;
|
|
|
|
|
2005-10-22 18:59:39 +00:00
|
|
|
BOOLEAN ServiceVisited;
|
|
|
|
|
|
|
|
WCHAR szServiceName[1];
|
2005-04-23 00:01:37 +00:00
|
|
|
} SERVICE, *PSERVICE;
|
2002-06-07 20:11:03 +00:00
|
|
|
|
2005-04-15 22:02:37 +00:00
|
|
|
|
2005-10-30 13:13:53 +00:00
|
|
|
/* VARIABLES ***************************************************************/
|
|
|
|
|
2005-12-25 14:45:30 +00:00
|
|
|
extern LIST_ENTRY ServiceListHead;
|
2005-12-31 18:56:34 +00:00
|
|
|
extern LIST_ENTRY GroupListHead;
|
2011-07-17 15:45:03 +00:00
|
|
|
extern LIST_ENTRY ImageListHead;
|
2005-10-30 13:13:53 +00:00
|
|
|
extern BOOL ScmShutdown;
|
|
|
|
|
|
|
|
|
|
|
|
/* FUNCTIONS ***************************************************************/
|
|
|
|
|
2005-10-23 19:50:05 +00:00
|
|
|
/* config.c */
|
2002-06-07 20:11:03 +00:00
|
|
|
|
2005-11-01 13:52:22 +00:00
|
|
|
DWORD ScmOpenServiceKey(LPWSTR lpServiceName,
|
|
|
|
REGSAM samDesired,
|
|
|
|
PHKEY phKey);
|
|
|
|
|
2009-01-06 07:53:04 +00:00
|
|
|
DWORD ScmCreateServiceKey(LPCWSTR lpServiceName,
|
2005-11-06 11:56:56 +00:00
|
|
|
REGSAM samDesired,
|
|
|
|
PHKEY phKey);
|
|
|
|
|
2005-10-23 19:50:05 +00:00
|
|
|
DWORD ScmWriteDependencies(HKEY hServiceKey,
|
|
|
|
LPWSTR lpDependencies,
|
|
|
|
DWORD dwDependenciesLength);
|
2002-06-07 20:11:03 +00:00
|
|
|
|
2005-11-06 11:56:56 +00:00
|
|
|
DWORD ScmMarkServiceForDelete(PSERVICE pService);
|
|
|
|
BOOL ScmIsDeleteFlagSet(HKEY hServiceKey);
|
|
|
|
|
|
|
|
DWORD ScmReadString(HKEY hServiceKey,
|
|
|
|
LPWSTR lpValueName,
|
|
|
|
LPWSTR *lpValue);
|
|
|
|
|
2009-12-25 15:08:03 +00:00
|
|
|
DWORD
|
|
|
|
ScmReadDependencies(HKEY hServiceKey,
|
|
|
|
LPWSTR *lpDependencies,
|
|
|
|
DWORD *lpdwDependenciesLength);
|
|
|
|
|
2002-06-07 20:11:03 +00:00
|
|
|
|
|
|
|
/* database.c */
|
|
|
|
|
2005-11-06 11:56:56 +00:00
|
|
|
DWORD ScmCreateServiceDatabase(VOID);
|
2007-09-06 14:51:38 +00:00
|
|
|
VOID ScmShutdownServiceDatabase(VOID);
|
2002-06-07 20:11:03 +00:00
|
|
|
VOID ScmGetBootAndSystemDriverState(VOID);
|
|
|
|
VOID ScmAutoStartServices(VOID);
|
2007-09-06 14:51:38 +00:00
|
|
|
VOID ScmAutoShutdownServices(VOID);
|
2010-10-31 10:00:21 +00:00
|
|
|
DWORD ScmStartService(PSERVICE Service,
|
|
|
|
DWORD argc,
|
|
|
|
LPWSTR *argv);
|
2002-06-07 20:11:03 +00:00
|
|
|
|
2009-01-06 07:53:04 +00:00
|
|
|
PSERVICE ScmGetServiceEntryByName(LPCWSTR lpServiceName);
|
|
|
|
PSERVICE ScmGetServiceEntryByDisplayName(LPCWSTR lpDisplayName);
|
2005-12-18 19:50:53 +00:00
|
|
|
PSERVICE ScmGetServiceEntryByResumeCount(DWORD dwResumeCount);
|
2009-01-06 07:53:04 +00:00
|
|
|
DWORD ScmCreateNewServiceRecord(LPCWSTR lpServiceName,
|
2005-10-23 06:19:15 +00:00
|
|
|
PSERVICE *lpServiceRecord);
|
2008-08-29 20:43:12 +00:00
|
|
|
VOID ScmDeleteServiceRecord(PSERVICE lpService);
|
2005-10-09 20:24:00 +00:00
|
|
|
DWORD ScmMarkServiceForDelete(PSERVICE pService);
|
2005-04-23 00:01:37 +00:00
|
|
|
|
2010-10-31 10:00:21 +00:00
|
|
|
DWORD ScmControlService(PSERVICE Service,
|
|
|
|
DWORD dwControl);
|
|
|
|
|
2010-02-27 21:47:59 +00:00
|
|
|
BOOL ScmLockDatabaseExclusive(VOID);
|
|
|
|
BOOL ScmLockDatabaseShared(VOID);
|
|
|
|
VOID ScmUnlockDatabase(VOID);
|
|
|
|
|
2011-02-27 19:25:14 +00:00
|
|
|
VOID ScmInitNamedPipeCriticalSection(VOID);
|
|
|
|
VOID ScmDeleteNamedPipeCriticalSection(VOID);
|
|
|
|
|
2010-02-27 21:47:59 +00:00
|
|
|
|
2005-11-20 20:18:00 +00:00
|
|
|
/* driver.c */
|
|
|
|
|
2006-08-31 17:16:19 +00:00
|
|
|
DWORD ScmLoadDriver(PSERVICE lpService);
|
2005-11-20 20:18:00 +00:00
|
|
|
DWORD ScmUnloadDriver(PSERVICE lpService);
|
|
|
|
DWORD ScmControlDriver(PSERVICE lpService,
|
|
|
|
DWORD dwControl,
|
|
|
|
LPSERVICE_STATUS lpServiceStatus);
|
|
|
|
|
|
|
|
|
2005-12-31 18:56:34 +00:00
|
|
|
/* groupdb.c */
|
|
|
|
|
|
|
|
DWORD ScmCreateGroupList(VOID);
|
2005-12-31 22:42:41 +00:00
|
|
|
DWORD ScmSetServiceGroup(PSERVICE lpService,
|
2009-01-06 07:53:04 +00:00
|
|
|
LPCWSTR lpGroupName);
|
2005-12-31 18:56:34 +00:00
|
|
|
|
|
|
|
|
2005-04-15 22:02:37 +00:00
|
|
|
/* rpcserver.c */
|
|
|
|
|
|
|
|
VOID ScmStartRpcServer(VOID);
|
|
|
|
|
|
|
|
|
2005-10-23 19:50:05 +00:00
|
|
|
/* services.c */
|
|
|
|
|
|
|
|
VOID PrintString(LPCSTR fmt, ...);
|
2011-05-26 10:50:26 +00:00
|
|
|
VOID ScmLogError(DWORD dwEventId,
|
|
|
|
WORD wStrings,
|
|
|
|
LPCWSTR *lpStrings);
|
2005-10-23 19:50:05 +00:00
|
|
|
|
2002-06-07 20:11:03 +00:00
|
|
|
/* EOF */
|
|
|
|
|