diff options
Diffstat (limited to '')
-rw-r--r-- | public/sdk/inc/winsvc.h | 751 |
1 files changed, 751 insertions, 0 deletions
diff --git a/public/sdk/inc/winsvc.h b/public/sdk/inc/winsvc.h new file mode 100644 index 000000000..56039e2d9 --- /dev/null +++ b/public/sdk/inc/winsvc.h @@ -0,0 +1,751 @@ +/*++ BUILD Version: 0010 // Increment this if a change has global effects + +Copyright (c) 1995-1996 Microsoft Corporation + +Module Name: + + winsvc.h + +Abstract: + + Header file for the Service Control Manager + +Environment: + + User Mode - Win32 + +--*/ +#ifndef _WINSVC_ +#define _WINSVC_ + +// +// Define API decoration for direct importing of DLL references. +// + +#if !defined(WINADVAPI) +#if !defined(_ADVAPI32_) +#define WINADVAPI DECLSPEC_IMPORT +#else +#define WINADVAPI +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +// +// Constants +// + +// +// Service database names +// + +#define SERVICES_ACTIVE_DATABASEW L"ServicesActive" +#define SERVICES_FAILED_DATABASEW L"ServicesFailed" + +#define SERVICES_ACTIVE_DATABASEA "ServicesActive" +#define SERVICES_FAILED_DATABASEA "ServicesFailed" + +// +// Character to designate that a name is a group +// + +#define SC_GROUP_IDENTIFIERW L'+' +#define SC_GROUP_IDENTIFIERA '+' + +#ifdef UNICODE + +#define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEW +#define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEW + + +#define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERW + +#else // ndef UNICODE + +#define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEA +#define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEA + +#define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERA +#endif // ndef UNICODE + + +// +// Value to indicate no change to an optional parameter +// +#define SERVICE_NO_CHANGE 0xffffffff + +// +// Service State -- for Enum Requests (Bit Mask) +// +#define SERVICE_ACTIVE 0x00000001 +#define SERVICE_INACTIVE 0x00000002 +#define SERVICE_STATE_ALL (SERVICE_ACTIVE | \ + SERVICE_INACTIVE) + +// +// Controls +// +#define SERVICE_CONTROL_STOP 0x00000001 +#define SERVICE_CONTROL_PAUSE 0x00000002 +#define SERVICE_CONTROL_CONTINUE 0x00000003 +#define SERVICE_CONTROL_INTERROGATE 0x00000004 +#define SERVICE_CONTROL_SHUTDOWN 0x00000005 + +// +// Service State -- for CurrentState +// +#define SERVICE_STOPPED 0x00000001 +#define SERVICE_START_PENDING 0x00000002 +#define SERVICE_STOP_PENDING 0x00000003 +#define SERVICE_RUNNING 0x00000004 +#define SERVICE_CONTINUE_PENDING 0x00000005 +#define SERVICE_PAUSE_PENDING 0x00000006 +#define SERVICE_PAUSED 0x00000007 + +// +// Controls Accepted (Bit Mask) +// +#define SERVICE_ACCEPT_STOP 0x00000001 +#define SERVICE_ACCEPT_PAUSE_CONTINUE 0x00000002 +#define SERVICE_ACCEPT_SHUTDOWN 0x00000004 + +// +// Service Control Manager object specific access types +// +#define SC_MANAGER_CONNECT 0x0001 +#define SC_MANAGER_CREATE_SERVICE 0x0002 +#define SC_MANAGER_ENUMERATE_SERVICE 0x0004 +#define SC_MANAGER_LOCK 0x0008 +#define SC_MANAGER_QUERY_LOCK_STATUS 0x0010 +#define SC_MANAGER_MODIFY_BOOT_CONFIG 0x0020 + +#define SC_MANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ + SC_MANAGER_CONNECT | \ + SC_MANAGER_CREATE_SERVICE | \ + SC_MANAGER_ENUMERATE_SERVICE | \ + SC_MANAGER_LOCK | \ + SC_MANAGER_QUERY_LOCK_STATUS | \ + SC_MANAGER_MODIFY_BOOT_CONFIG) + + + +// +// Service object specific access type +// +#define SERVICE_QUERY_CONFIG 0x0001 +#define SERVICE_CHANGE_CONFIG 0x0002 +#define SERVICE_QUERY_STATUS 0x0004 +#define SERVICE_ENUMERATE_DEPENDENTS 0x0008 +#define SERVICE_START 0x0010 +#define SERVICE_STOP 0x0020 +#define SERVICE_PAUSE_CONTINUE 0x0040 +#define SERVICE_INTERROGATE 0x0080 +#define SERVICE_USER_DEFINED_CONTROL 0x0100 + +#define SERVICE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ + SERVICE_QUERY_CONFIG | \ + SERVICE_CHANGE_CONFIG | \ + SERVICE_QUERY_STATUS | \ + SERVICE_ENUMERATE_DEPENDENTS | \ + SERVICE_START | \ + SERVICE_STOP | \ + SERVICE_PAUSE_CONTINUE | \ + SERVICE_INTERROGATE | \ + SERVICE_USER_DEFINED_CONTROL) + + +// +// Handle Types +// + +typedef HANDLE SC_HANDLE; +typedef SC_HANDLE *LPSC_HANDLE; + +typedef DWORD SERVICE_STATUS_HANDLE; + +// +// Service Status Structure +// + +typedef struct _SERVICE_STATUS { + DWORD dwServiceType; + DWORD dwCurrentState; + DWORD dwControlsAccepted; + DWORD dwWin32ExitCode; + DWORD dwServiceSpecificExitCode; + DWORD dwCheckPoint; + DWORD dwWaitHint; +} SERVICE_STATUS, *LPSERVICE_STATUS; + + + +// +// Service Status Enumeration Structure +// + +typedef struct _ENUM_SERVICE_STATUSA { + LPSTR lpServiceName; + LPSTR lpDisplayName; + SERVICE_STATUS ServiceStatus; +} ENUM_SERVICE_STATUSA, *LPENUM_SERVICE_STATUSA; +typedef struct _ENUM_SERVICE_STATUSW { + LPWSTR lpServiceName; + LPWSTR lpDisplayName; + SERVICE_STATUS ServiceStatus; +} ENUM_SERVICE_STATUSW, *LPENUM_SERVICE_STATUSW; +#ifdef UNICODE +typedef ENUM_SERVICE_STATUSW ENUM_SERVICE_STATUS; +typedef LPENUM_SERVICE_STATUSW LPENUM_SERVICE_STATUS; +#else +typedef ENUM_SERVICE_STATUSA ENUM_SERVICE_STATUS; +typedef LPENUM_SERVICE_STATUSA LPENUM_SERVICE_STATUS; +#endif // UNICODE + + +// +// Structures for the Lock API functions +// + +typedef LPVOID SC_LOCK; + +typedef struct _QUERY_SERVICE_LOCK_STATUSA { + DWORD fIsLocked; + LPSTR lpLockOwner; + DWORD dwLockDuration; +} QUERY_SERVICE_LOCK_STATUSA, *LPQUERY_SERVICE_LOCK_STATUSA; +typedef struct _QUERY_SERVICE_LOCK_STATUSW { + DWORD fIsLocked; + LPWSTR lpLockOwner; + DWORD dwLockDuration; +} QUERY_SERVICE_LOCK_STATUSW, *LPQUERY_SERVICE_LOCK_STATUSW; +#ifdef UNICODE +typedef QUERY_SERVICE_LOCK_STATUSW QUERY_SERVICE_LOCK_STATUS; +typedef LPQUERY_SERVICE_LOCK_STATUSW LPQUERY_SERVICE_LOCK_STATUS; +#else +typedef QUERY_SERVICE_LOCK_STATUSA QUERY_SERVICE_LOCK_STATUS; +typedef LPQUERY_SERVICE_LOCK_STATUSA LPQUERY_SERVICE_LOCK_STATUS; +#endif // UNICODE + + + +// +// Query Service Configuration Structure +// + +typedef struct _QUERY_SERVICE_CONFIGA { + DWORD dwServiceType; + DWORD dwStartType; + DWORD dwErrorControl; + LPSTR lpBinaryPathName; + LPSTR lpLoadOrderGroup; + DWORD dwTagId; + LPSTR lpDependencies; + LPSTR lpServiceStartName; + LPSTR lpDisplayName; +} QUERY_SERVICE_CONFIGA, *LPQUERY_SERVICE_CONFIGA; +typedef struct _QUERY_SERVICE_CONFIGW { + DWORD dwServiceType; + DWORD dwStartType; + DWORD dwErrorControl; + LPWSTR lpBinaryPathName; + LPWSTR lpLoadOrderGroup; + DWORD dwTagId; + LPWSTR lpDependencies; + LPWSTR lpServiceStartName; + LPWSTR lpDisplayName; +} QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW; +#ifdef UNICODE +typedef QUERY_SERVICE_CONFIGW QUERY_SERVICE_CONFIG; +typedef LPQUERY_SERVICE_CONFIGW LPQUERY_SERVICE_CONFIG; +#else +typedef QUERY_SERVICE_CONFIGA QUERY_SERVICE_CONFIG; +typedef LPQUERY_SERVICE_CONFIGA LPQUERY_SERVICE_CONFIG; +#endif // UNICODE + + + +// +// Function Prototype for the Service Main Function +// + +typedef VOID (WINAPI *LPSERVICE_MAIN_FUNCTIONW)( + DWORD dwNumServicesArgs, + LPWSTR *lpServiceArgVectors + ); + +typedef VOID (WINAPI *LPSERVICE_MAIN_FUNCTIONA)( + DWORD dwNumServicesArgs, + LPSTR *lpServiceArgVectors + ); + +#ifdef UNICODE +#define LPSERVICE_MAIN_FUNCTION LPSERVICE_MAIN_FUNCTIONW +#else +#define LPSERVICE_MAIN_FUNCTION LPSERVICE_MAIN_FUNCTIONA +#endif //UNICODE + + +// +// Service Start Table +// + +typedef struct _SERVICE_TABLE_ENTRYA { + LPSTR lpServiceName; + LPSERVICE_MAIN_FUNCTIONA lpServiceProc; +}SERVICE_TABLE_ENTRYA, *LPSERVICE_TABLE_ENTRYA; +typedef struct _SERVICE_TABLE_ENTRYW { + LPWSTR lpServiceName; + LPSERVICE_MAIN_FUNCTIONW lpServiceProc; +}SERVICE_TABLE_ENTRYW, *LPSERVICE_TABLE_ENTRYW; +#ifdef UNICODE +typedef SERVICE_TABLE_ENTRYW SERVICE_TABLE_ENTRY; +typedef LPSERVICE_TABLE_ENTRYW LPSERVICE_TABLE_ENTRY; +#else +typedef SERVICE_TABLE_ENTRYA SERVICE_TABLE_ENTRY; +typedef LPSERVICE_TABLE_ENTRYA LPSERVICE_TABLE_ENTRY; +#endif // UNICODE + +// +// Prototype for the Service Control Handler Function +// + +typedef VOID (WINAPI *LPHANDLER_FUNCTION)( + DWORD dwControl + ); + + + +/////////////////////////////////////////////////////////////////////////// +// API Function Prototypes +/////////////////////////////////////////////////////////////////////////// + +WINADVAPI +BOOL +WINAPI +ChangeServiceConfigA( + SC_HANDLE hService, + DWORD dwServiceType, + DWORD dwStartType, + DWORD dwErrorControl, + LPCSTR lpBinaryPathName, + LPCSTR lpLoadOrderGroup, + LPDWORD lpdwTagId, + LPCSTR lpDependencies, + LPCSTR lpServiceStartName, + LPCSTR lpPassword, + LPCSTR lpDisplayName + ); +WINADVAPI +BOOL +WINAPI +ChangeServiceConfigW( + SC_HANDLE hService, + DWORD dwServiceType, + DWORD dwStartType, + DWORD dwErrorControl, + LPCWSTR lpBinaryPathName, + LPCWSTR lpLoadOrderGroup, + LPDWORD lpdwTagId, + LPCWSTR lpDependencies, + LPCWSTR lpServiceStartName, + LPCWSTR lpPassword, + LPCWSTR lpDisplayName + ); +#ifdef UNICODE +#define ChangeServiceConfig ChangeServiceConfigW +#else +#define ChangeServiceConfig ChangeServiceConfigA +#endif // !UNICODE + +WINADVAPI +BOOL +WINAPI +CloseServiceHandle( + SC_HANDLE hSCObject + ); + +WINADVAPI +BOOL +WINAPI +ControlService( + SC_HANDLE hService, + DWORD dwControl, + LPSERVICE_STATUS lpServiceStatus + ); + +WINADVAPI +SC_HANDLE +WINAPI +CreateServiceA( + SC_HANDLE hSCManager, + LPCSTR lpServiceName, + LPCSTR lpDisplayName, + DWORD dwDesiredAccess, + DWORD dwServiceType, + DWORD dwStartType, + DWORD dwErrorControl, + LPCSTR lpBinaryPathName, + LPCSTR lpLoadOrderGroup, + LPDWORD lpdwTagId, + LPCSTR lpDependencies, + LPCSTR lpServiceStartName, + LPCSTR lpPassword + ); +WINADVAPI +SC_HANDLE +WINAPI +CreateServiceW( + SC_HANDLE hSCManager, + LPCWSTR lpServiceName, + LPCWSTR lpDisplayName, + DWORD dwDesiredAccess, + DWORD dwServiceType, + DWORD dwStartType, + DWORD dwErrorControl, + LPCWSTR lpBinaryPathName, + LPCWSTR lpLoadOrderGroup, + LPDWORD lpdwTagId, + LPCWSTR lpDependencies, + LPCWSTR lpServiceStartName, + LPCWSTR lpPassword + ); +#ifdef UNICODE +#define CreateService CreateServiceW +#else +#define CreateService CreateServiceA +#endif // !UNICODE + +WINADVAPI +BOOL +WINAPI +DeleteService( + SC_HANDLE hService + ); + +WINADVAPI +BOOL +WINAPI +EnumDependentServicesA( + SC_HANDLE hService, + DWORD dwServiceState, + LPENUM_SERVICE_STATUSA lpServices, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded, + LPDWORD lpServicesReturned + ); +WINADVAPI +BOOL +WINAPI +EnumDependentServicesW( + SC_HANDLE hService, + DWORD dwServiceState, + LPENUM_SERVICE_STATUSW lpServices, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded, + LPDWORD lpServicesReturned + ); +#ifdef UNICODE +#define EnumDependentServices EnumDependentServicesW +#else +#define EnumDependentServices EnumDependentServicesA +#endif // !UNICODE + +WINADVAPI +BOOL +WINAPI +EnumServicesStatusA( + SC_HANDLE hSCManager, + DWORD dwServiceType, + DWORD dwServiceState, + LPENUM_SERVICE_STATUSA lpServices, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded, + LPDWORD lpServicesReturned, + LPDWORD lpResumeHandle + ); +WINADVAPI +BOOL +WINAPI +EnumServicesStatusW( + SC_HANDLE hSCManager, + DWORD dwServiceType, + DWORD dwServiceState, + LPENUM_SERVICE_STATUSW lpServices, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded, + LPDWORD lpServicesReturned, + LPDWORD lpResumeHandle + ); +#ifdef UNICODE +#define EnumServicesStatus EnumServicesStatusW +#else +#define EnumServicesStatus EnumServicesStatusA +#endif // !UNICODE + +WINADVAPI +BOOL +WINAPI +GetServiceKeyNameA( + SC_HANDLE hSCManager, + LPCSTR lpDisplayName, + LPSTR lpServiceName, + LPDWORD lpcchBuffer + ); +WINADVAPI +BOOL +WINAPI +GetServiceKeyNameW( + SC_HANDLE hSCManager, + LPCWSTR lpDisplayName, + LPWSTR lpServiceName, + LPDWORD lpcchBuffer + ); +#ifdef UNICODE +#define GetServiceKeyName GetServiceKeyNameW +#else +#define GetServiceKeyName GetServiceKeyNameA +#endif // !UNICODE + +WINADVAPI +BOOL +WINAPI +GetServiceDisplayNameA( + SC_HANDLE hSCManager, + LPCSTR lpServiceName, + LPSTR lpDisplayName, + LPDWORD lpcchBuffer + ); +WINADVAPI +BOOL +WINAPI +GetServiceDisplayNameW( + SC_HANDLE hSCManager, + LPCWSTR lpServiceName, + LPWSTR lpDisplayName, + LPDWORD lpcchBuffer + ); +#ifdef UNICODE +#define GetServiceDisplayName GetServiceDisplayNameW +#else +#define GetServiceDisplayName GetServiceDisplayNameA +#endif // !UNICODE + +WINADVAPI +SC_LOCK +WINAPI +LockServiceDatabase( + SC_HANDLE hSCManager + ); + +WINADVAPI +BOOL +WINAPI +NotifyBootConfigStatus( + BOOL BootAcceptable + ); + +WINADVAPI +SC_HANDLE +WINAPI +OpenSCManagerA( + LPCSTR lpMachineName, + LPCSTR lpDatabaseName, + DWORD dwDesiredAccess + ); +WINADVAPI +SC_HANDLE +WINAPI +OpenSCManagerW( + LPCWSTR lpMachineName, + LPCWSTR lpDatabaseName, + DWORD dwDesiredAccess + ); +#ifdef UNICODE +#define OpenSCManager OpenSCManagerW +#else +#define OpenSCManager OpenSCManagerA +#endif // !UNICODE + +WINADVAPI +SC_HANDLE +WINAPI +OpenServiceA( + SC_HANDLE hSCManager, + LPCSTR lpServiceName, + DWORD dwDesiredAccess + ); +WINADVAPI +SC_HANDLE +WINAPI +OpenServiceW( + SC_HANDLE hSCManager, + LPCWSTR lpServiceName, + DWORD dwDesiredAccess + ); +#ifdef UNICODE +#define OpenService OpenServiceW +#else +#define OpenService OpenServiceA +#endif // !UNICODE + +WINADVAPI +BOOL +WINAPI +QueryServiceConfigA( + SC_HANDLE hService, + LPQUERY_SERVICE_CONFIGA lpServiceConfig, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded + ); +WINADVAPI +BOOL +WINAPI +QueryServiceConfigW( + SC_HANDLE hService, + LPQUERY_SERVICE_CONFIGW lpServiceConfig, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded + ); +#ifdef UNICODE +#define QueryServiceConfig QueryServiceConfigW +#else +#define QueryServiceConfig QueryServiceConfigA +#endif // !UNICODE + +WINADVAPI +BOOL +WINAPI +QueryServiceLockStatusA( + SC_HANDLE hSCManager, + LPQUERY_SERVICE_LOCK_STATUSA lpLockStatus, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded + ); +WINADVAPI +BOOL +WINAPI +QueryServiceLockStatusW( + SC_HANDLE hSCManager, + LPQUERY_SERVICE_LOCK_STATUSW lpLockStatus, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded + ); +#ifdef UNICODE +#define QueryServiceLockStatus QueryServiceLockStatusW +#else +#define QueryServiceLockStatus QueryServiceLockStatusA +#endif // !UNICODE + +WINADVAPI +BOOL +WINAPI +QueryServiceObjectSecurity( + SC_HANDLE hService, + SECURITY_INFORMATION dwSecurityInformation, + PSECURITY_DESCRIPTOR lpSecurityDescriptor, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded + ); + +WINADVAPI +BOOL +WINAPI +QueryServiceStatus( + SC_HANDLE hService, + LPSERVICE_STATUS lpServiceStatus + ); + +WINADVAPI +SERVICE_STATUS_HANDLE +WINAPI +RegisterServiceCtrlHandlerA( + LPCSTR lpServiceName, + LPHANDLER_FUNCTION lpHandlerProc + ); +WINADVAPI +SERVICE_STATUS_HANDLE +WINAPI +RegisterServiceCtrlHandlerW( + LPCWSTR lpServiceName, + LPHANDLER_FUNCTION lpHandlerProc + ); +#ifdef UNICODE +#define RegisterServiceCtrlHandler RegisterServiceCtrlHandlerW +#else +#define RegisterServiceCtrlHandler RegisterServiceCtrlHandlerA +#endif // !UNICODE + +WINADVAPI +BOOL +WINAPI +SetServiceObjectSecurity( + SC_HANDLE hService, + SECURITY_INFORMATION dwSecurityInformation, + PSECURITY_DESCRIPTOR lpSecurityDescriptor + ); + +WINADVAPI +BOOL +WINAPI +SetServiceStatus( + SERVICE_STATUS_HANDLE hServiceStatus, + LPSERVICE_STATUS lpServiceStatus + ); + +WINADVAPI +BOOL +WINAPI +StartServiceCtrlDispatcherA( + LPSERVICE_TABLE_ENTRYA lpServiceStartTable + ); +WINADVAPI +BOOL +WINAPI +StartServiceCtrlDispatcherW( + LPSERVICE_TABLE_ENTRYW lpServiceStartTable + ); +#ifdef UNICODE +#define StartServiceCtrlDispatcher StartServiceCtrlDispatcherW +#else +#define StartServiceCtrlDispatcher StartServiceCtrlDispatcherA +#endif // !UNICODE + + +WINADVAPI +BOOL +WINAPI +StartServiceA( + SC_HANDLE hService, + DWORD dwNumServiceArgs, + LPCSTR *lpServiceArgVectors + ); +WINADVAPI +BOOL +WINAPI +StartServiceW( + SC_HANDLE hService, + DWORD dwNumServiceArgs, + LPCWSTR *lpServiceArgVectors + ); +#ifdef UNICODE +#define StartService StartServiceW +#else +#define StartService StartServiceA +#endif // !UNICODE + +WINADVAPI +BOOL +WINAPI +UnlockServiceDatabase( + SC_LOCK ScLock + ); + + +#ifdef __cplusplus +} +#endif + +#endif // _WINSVC_ |