/* * Service Control Manager (SCM) interface definition */ //#include //#include #define DWORD unsigned long #define BOOL unsigned long #define SC_HANDLE unsigned int #define SC_LOCK unsigned int #define LPCSTR char* #define LPCWSTR wchar_t* #define LPDWORD unsigned long* [ uuid(367abb81-9844-35f1-ad32-98f038001003), version(2.0), pointer_default(unique), explicit_handle ] interface svcctl { cpp_quote("#if 0") typedef struct _SERVICE_STATUS { DWORD dwServiceType; DWORD dwCurrentState; DWORD dwControlsAccepted; DWORD dwWin32ExitCode; DWORD dwServiceSpecificExitCode; DWORD dwCheckPoint; DWORD dwWaitHint; } SERVICE_STATUS, *LPSERVICE_STATUS; cpp_quote("#endif") /* Function 0 */ DWORD ScmrCloseServiceHandle([in] handle_t BindingHandle, [in] SC_HANDLE hSCObject); /* Function 1 */ BOOL ScmrControlService([in] handle_t BindingHandle, [in] SC_HANDLE hService, [in] DWORD dwControl, [out] LPSERVICE_STATUS lpServiceStatus); /* Function 2 */ DWORD ScmrDeleteService([in] handle_t BindingHandle, [in] SC_HANDLE hService); /* Function 3 */ DWORD ScmrLockServiceDatabase([in] handle_t BindingHandle, [in] SC_HANDLE hSCManager, [out] SC_LOCK *hLock); /* Function 4 */ DWORD ScmrQueryServiceObjectSecurity([in] handle_t BindingHandle); /* FIXME */ /* Function 5 */ DWORD ScmrSetServiceObjectSecurity([in] handle_t BindingHandle); /* FIXME */ /* Function 6 */ DWORD ScmrQueryServiceStatus([in] handle_t BindingHandle, [in] SC_HANDLE hSCManager, [out] LPSERVICE_STATUS lpServiceStatus); /* Function 7 */ DWORD ScmrSetServiceStatus([in] handle_t BindingHandle); /* FIXME */ /* Function 8 */ DWORD ScmrUnlockServiceDatabase([in] handle_t BindingHandle, [in] SC_LOCK hLock); /* Function 9 */ DWORD ScmrNotifyBootConfigStatus([in] handle_t BindingHandle, [in] BOOL BootAcceptable); /* Function 11 */ DWORD ScmrChangeServiceConfigW([in] handle_t BindingHandle, [in] SC_HANDLE hSCManager, [in] DWORD dwServiceType, [in] DWORD dwStartType, [in] DWORD dwErrorControl, [in, string, unique] LPCWSTR lpBinaryPathName, [in, string, unique] LPCWSTR lpLoadOrderGroup, [in, out, unique] LPDWORD lpdwTagId, [in, size_is(dwDependenciesLength), unique] LPCWSTR lpDependencies, [in] DWORD dwDependenciesLength, [in, string, unique] LPCWSTR lpServiceStartName, [in, size_is(dwPasswordLength), unique] LPCWSTR lpPassword, [in] DWORD dwPasswordLength, [in, string, unique] LPCWSTR lpDisplayName); /* Function 12 */ DWORD ScmrCreateServiceW([in] handle_t BindingHandle, [in] SC_HANDLE hSCManager, [in, string, ref] LPCWSTR lpServiceName, [in, string, unique] LPCWSTR lpDisplayName, [in] DWORD dwDesiredAccess, [in] DWORD dwServiceType, [in] DWORD dwStartType, [in] DWORD dwErrorControl, [in, string, ref] LPCWSTR lpBinaryPathName, [in, string, unique] LPCWSTR lpLoadOrderGroup, [in, out, unique] LPDWORD lpdwTagId, [in, size_is(dwDependenciesLength), unique] LPCWSTR lpDependencies, [in] DWORD dwDependenciesLength, [in, string, unique] LPCWSTR lpServiceStartName, [in, size_is(dwPasswordLength), unique] LPCWSTR lpPassword, [in] DWORD dwPasswordLength, [out] SC_HANDLE *hService); /* Function 15 */ DWORD ScmrOpenSCManagerW([in] handle_t BindingHandle, [in, string, unique] LPCWSTR lpMachineName, [in, string, unique] LPCWSTR lpDatabaseName, [in] DWORD dwDesiredAccess, [out] SC_HANDLE *hScm); /* Function 16 */ SC_HANDLE ScmrOpenServiceW([in] handle_t BindingHandle, [in] SC_HANDLE hSCManager, [in, string] LPCWSTR lpServiceName, [in] DWORD dwDesiredAccess, [out] SC_HANDLE *hScm); /* Function 27 */ DWORD ScmrOpenSCManagerA([in] handle_t BindingHandle, [in, string, unique] LPCSTR lpMachineName, [in, string, unique] LPCSTR lpDatabaseName, [in] DWORD dwDesiredAccess, [out] SC_HANDLE *hScm); /* Function 28 */ SC_HANDLE ScmrOpenServiceA([in] handle_t BindingHandle, [in] SC_HANDLE hSCManager, [in, string] LPCSTR lpServiceName, [in] DWORD dwDesiredAccess, [out] SC_HANDLE *hScm); }