[SERVICES]
[reactos.git] / reactos / base / system / services / services.h
index 210f8db..604e7e4 100644 (file)
@@ -2,16 +2,25 @@
  * services.h
  */
 
+#ifndef _SERVICES_H
+#define _SERVICES_H
+
 #include <stdio.h>
+
 #define WIN32_NO_STATUS
-#include <windows.h>
+#define _INC_WINDOWS
+#define COM_NO_WINDOWS_H
+
+#include <windef.h>
+#include <winbase.h>
+#include <winsvc.h>
+#include <winreg.h>
 #include <netevent.h>
 #define NTOS_MODE_USER
-#include <ndk/iofuncs.h>
 #include <ndk/obfuncs.h>
 #include <ndk/rtlfuncs.h>
 #include <services/services.h>
-
+#include <svcctl_s.h>
 
 typedef struct _SERVICE_GROUP
 {
@@ -66,11 +75,22 @@ typedef struct _SERVICE
 } SERVICE, *PSERVICE;
 
 
+#define LOCK_TAG 0x4C697041 /* 'ApiL' */
+
+typedef struct _START_LOCK
+{
+    DWORD Tag;             /* Must be LOCK_TAG */
+    DWORD TimeWhenLocked;  /* Number of seconds since 1970 */
+    PSID LockOwnerSid;     /* It is NULL if the SCM aquired the lock */
+} START_LOCK, *PSTART_LOCK;
+
+
 /* VARIABLES ***************************************************************/
 
 extern LIST_ENTRY ServiceListHead;
 extern LIST_ENTRY GroupListHead;
 extern LIST_ENTRY ImageListHead;
+extern BOOL ScmInitialize;
 extern BOOL ScmShutdown;
 
 
@@ -87,14 +107,14 @@ DWORD ScmCreateServiceKey(LPCWSTR lpServiceName,
                           PHKEY phKey);
 
 DWORD ScmWriteDependencies(HKEY hServiceKey,
-                           LPWSTR lpDependencies,
+                           LPCWSTR lpDependencies,
                            DWORD dwDependenciesLength);
 
 DWORD ScmMarkServiceForDelete(PSERVICE pService);
 BOOL ScmIsDeleteFlagSet(HKEY hServiceKey);
 
 DWORD ScmReadString(HKEY hServiceKey,
-                    LPWSTR lpValueName,
+                    LPCWSTR lpValueName,
                     LPWSTR *lpValue);
 
 DWORD
@@ -103,6 +123,11 @@ ScmReadDependencies(HKEY hServiceKey,
                     DWORD *lpdwDependenciesLength);
 
 
+/* controlset.c */
+
+BOOL ScmGetControlSetValues(VOID);
+
+
 /* database.c */
 
 DWORD ScmCreateServiceDatabase(VOID);
@@ -149,6 +174,15 @@ DWORD ScmSetServiceGroup(PSERVICE lpService,
                          LPCWSTR lpGroupName);
 
 
+/* lock.c */
+
+DWORD ScmAcquireServiceStartLock(IN BOOL IsServiceController,
+                                 OUT LPSC_RPC_LOCK lpLock);
+DWORD ScmReleaseServiceStartLock(IN OUT LPSC_RPC_LOCK lpLock);
+VOID ScmQueryServiceLockStatusW(OUT LPQUERY_SERVICE_LOCK_STATUSW lpLockStatus);
+VOID ScmQueryServiceLockStatusA(OUT LPQUERY_SERVICE_LOCK_STATUSA lpLockStatus);
+
+
 /* rpcserver.c */
 
 VOID ScmStartRpcServer(VOID);
@@ -157,9 +191,10 @@ VOID ScmStartRpcServer(VOID);
 /* services.c */
 
 VOID PrintString(LPCSTR fmt, ...);
-VOID ScmLogError(DWORD dwEventId,
+VOID ScmLogEvent(DWORD dwEventId,
+                 WORD wType,
                  WORD wStrings,
                  LPCWSTR *lpStrings);
+VOID ScmWaitForLsa(VOID);
 
-/* EOF */
-
+#endif /* _SERVICES_H */