X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=base%2Fsystem%2Fservices%2Fservices.h;h=ce1b46eafa4d0704ef34b1a54aeac2317dbd72a5;hp=dde3d12c8f603181a3e3e09d7aebca175228729a;hb=5e2c4657ca10dea1154cb43f16ee6962999ac7a4;hpb=609ba8d717a023afd92609eaffce2aafd4c1d774 diff --git a/base/system/services/services.h b/base/system/services/services.h index dde3d12c8f6..ce1b46eafa4 100644 --- a/base/system/services/services.h +++ b/base/system/services/services.h @@ -16,6 +16,7 @@ #include #include #include +#include #include #define NTOS_MODE_USER #include @@ -23,6 +24,8 @@ #include #include +#include "resource.h" + typedef struct _SERVICE_GROUP { LIST_ENTRY GroupListEntry; @@ -40,13 +43,15 @@ typedef struct _SERVICE_GROUP typedef struct _SERVICE_IMAGE { LIST_ENTRY ImageListEntry; + LPWSTR pszImagePath; + LPWSTR pszAccountName; DWORD dwImageRunCount; HANDLE hControlPipe; HANDLE hProcess; DWORD dwProcessId; - - WCHAR szImagePath[1]; + HANDLE hToken; + HANDLE hProfile; } SERVICE_IMAGE, *PSERVICE_IMAGE; @@ -66,9 +71,11 @@ typedef struct _SERVICE DWORD dwErrorControl; DWORD dwTag; + DWORD dwServiceBits; + ULONG Flags; - PSECURITY_DESCRIPTOR lpSecurityDescriptor; + PSECURITY_DESCRIPTOR pSecurityDescriptor; BOOLEAN ServiceVisited; @@ -82,7 +89,7 @@ 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 */ + PSID LockOwnerSid; /* It is NULL if the SCM acquired the lock */ } START_LOCK, *PSTART_LOCK; @@ -123,6 +130,32 @@ ScmReadDependencies(HKEY hServiceKey, LPWSTR *lpDependencies, DWORD *lpdwDependenciesLength); +DWORD +ScmSetServicePassword( + IN PCWSTR pszServiceName, + IN PCWSTR pszPassword); + +DWORD +ScmWriteSecurityDescriptor( + _In_ HKEY hServiceKey, + _In_ PSECURITY_DESCRIPTOR pSecurityDescriptor); + +DWORD +ScmReadSecurityDescriptor( + _In_ HKEY hServiceKey, + _Out_ PSECURITY_DESCRIPTOR *ppSecurityDescriptor); + +DWORD +ScmDeleteRegKey( + _In_ HKEY hKey, + _In_ PCWSTR pszSubKey); + +DWORD +ScmDecryptPassword( + _In_ PBYTE pPassword, + _In_ DWORD dwPasswordSize, + _Out_ PWSTR *pDecryptedPassword); + /* controlset.c */ @@ -140,15 +173,20 @@ DWORD ScmStartService(PSERVICE Service, DWORD argc, LPWSTR *argv); +VOID ScmRemoveServiceImage(PSERVICE_IMAGE pServiceImage); PSERVICE ScmGetServiceEntryByName(LPCWSTR lpServiceName); PSERVICE ScmGetServiceEntryByDisplayName(LPCWSTR lpDisplayName); PSERVICE ScmGetServiceEntryByResumeCount(DWORD dwResumeCount); DWORD ScmCreateNewServiceRecord(LPCWSTR lpServiceName, - PSERVICE *lpServiceRecord); + PSERVICE *lpServiceRecord, + DWORD dwServiceType, + DWORD dwStartType); VOID ScmDeleteServiceRecord(PSERVICE lpService); DWORD ScmMarkServiceForDelete(PSERVICE pService); -DWORD ScmControlService(PSERVICE Service, +DWORD ScmControlService(HANDLE hControlPipe, + PWSTR pServiceName, + SERVICE_STATUS_HANDLE hServiceStatus, DWORD dwControl); BOOL ScmLockDatabaseExclusive(VOID); @@ -161,8 +199,7 @@ VOID ScmDeleteNamedPipeCriticalSection(VOID); /* driver.c */ -DWORD ScmLoadDriver(PSERVICE lpService); -DWORD ScmUnloadDriver(PSERVICE lpService); +DWORD ScmStartDriver(PSERVICE lpService); DWORD ScmControlDriver(PSERVICE lpService, DWORD dwControl, LPSERVICE_STATUS lpServiceStatus); @@ -170,6 +207,10 @@ DWORD ScmControlDriver(PSERVICE lpService, /* groupdb.c */ +PSERVICE_GROUP +ScmGetServiceGroupByName( + _In_ LPCWSTR lpGroupName); + DWORD ScmCreateGroupList(VOID); DWORD ScmSetServiceGroup(PSERVICE lpService, LPCWSTR lpGroupName); @@ -189,6 +230,16 @@ VOID ScmQueryServiceLockStatusA(OUT LPQUERY_SERVICE_LOCK_STATUSA lpLockStatus); VOID ScmStartRpcServer(VOID); +/* security.c */ + +DWORD ScmInitializeSecurity(VOID); +VOID ScmShutdownSecurity(VOID); + +DWORD +ScmCreateDefaultServiceSD( + PSECURITY_DESCRIPTOR *ppSecurityDescriptor); + + /* services.c */ VOID PrintString(LPCSTR fmt, ...);