[SERVICES]
[reactos.git] / reactos / base / system / services / services.h
index 23022dc..dc9c609 100644 (file)
@@ -5,6 +5,7 @@
 #include <stdio.h>
 #define WIN32_NO_STATUS
 #include <windows.h>
+#include <netevent.h>
 #define NTOS_MODE_USER
 #include <ndk/ntndk.h>
 #include <services/services.h>
@@ -26,8 +27,14 @@ typedef struct _SERVICE_GROUP
 
 typedef struct _SERVICE_IMAGE
 {
-    DWORD dwServiceRefCount;  // Number of running services of this image
-    DWORD Dummy;
+    LIST_ENTRY ImageListEntry;
+    DWORD dwImageRunCount;
+
+    HANDLE hControlPipe;
+    HANDLE hProcess;
+    DWORD dwProcessId;
+
+    WCHAR szImagePath[1];
 } SERVICE_IMAGE, *PSERVICE_IMAGE;
 
 
@@ -42,7 +49,6 @@ typedef struct _SERVICE
     DWORD dwResumeCount;
     DWORD dwRefCount;
 
-    CLIENT_HANDLE hClient;
     SERVICE_STATUS Status;
     DWORD dwStartType;
     DWORD dwErrorControl;
@@ -54,10 +60,6 @@ typedef struct _SERVICE
 
     BOOLEAN ServiceVisited;
 
-    HANDLE ControlPipeHandle;
-    ULONG ProcessId;
-    ULONG ThreadId;
-
     WCHAR szServiceName[1];
 } SERVICE, *PSERVICE;
 
@@ -66,6 +68,7 @@ typedef struct _SERVICE
 
 extern LIST_ENTRY ServiceListHead;
 extern LIST_ENTRY GroupListHead;
+extern LIST_ENTRY ImageListHead;
 extern BOOL ScmShutdown;
 
 
@@ -112,15 +115,21 @@ DWORD ScmStartService(PSERVICE Service,
 PSERVICE ScmGetServiceEntryByName(LPCWSTR lpServiceName);
 PSERVICE ScmGetServiceEntryByDisplayName(LPCWSTR lpDisplayName);
 PSERVICE ScmGetServiceEntryByResumeCount(DWORD dwResumeCount);
-PSERVICE ScmGetServiceEntryByClientHandle(HANDLE Handle);
 DWORD ScmCreateNewServiceRecord(LPCWSTR lpServiceName,
                                 PSERVICE *lpServiceRecord);
 VOID ScmDeleteServiceRecord(PSERVICE lpService);
 DWORD ScmMarkServiceForDelete(PSERVICE pService);
 
 DWORD ScmControlService(PSERVICE Service,
-                        DWORD dwControl,
-                        LPSERVICE_STATUS lpServiceStatus);
+                        DWORD dwControl);
+
+BOOL ScmLockDatabaseExclusive(VOID);
+BOOL ScmLockDatabaseShared(VOID);
+VOID ScmUnlockDatabase(VOID);
+
+VOID ScmInitNamedPipeCriticalSection(VOID);
+VOID ScmDeleteNamedPipeCriticalSection(VOID);
+
 
 /* driver.c */
 
@@ -146,6 +155,9 @@ VOID ScmStartRpcServer(VOID);
 /* services.c */
 
 VOID PrintString(LPCSTR fmt, ...);
+VOID ScmLogError(DWORD dwEventId,
+                 WORD wStrings,
+                 LPCWSTR *lpStrings);
 
 /* EOF */