This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/WATCOM/h/nt/winsvc.h

725 lines
31 KiB
C

/*
* winsvc.h Win32 service functions
*
* =========================================================================
*
* Open Watcom Project
*
* Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
*
* This file is automatically generated. Do not edit directly.
*
* =========================================================================
*/
#ifndef _WINSVC_
#define _WINSVC_
#ifndef _ENABLE_AUTODEPEND
#pragma read_only_file;
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* Service handles */
DECLARE_HANDLE( SC_HANDLE );
DECLARE_HANDLE( SERVICE_STATUS_HANDLE );
typedef SC_HANDLE *LPSC_HANDLE;
/* Service control lock data type */
typedef LPVOID SC_LOCK;
/* Service database names */
#define SERVICES_ACTIVE_DATABASEA "ServicesActive"
#define SERVICES_ACTIVE_DATABASEW L"ServicesActive"
#define SERVICES_FAILED_DATABASEA "ServicesFailed"
#define SERVICES_FAILED_DATABASEW L"ServicesFailed"
#ifdef UNICODE
#define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEW
#define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEW
#else
#define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEA
#define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEA
#endif
/* Service group identifier */
#define SC_GROUP_IDENTIFIERA "+"
#define SC_GROUP_IDENTIFIERW L"+"
#ifdef UNICODE
#define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERW
#else
#define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERA
#endif
/* Special value for optional parameters */
#define SERVICE_NO_CHANGE 0xFFFFFFFFL
/* Service state flags */
#define SERVICE_ACTIVE 0x00000001L
#define SERVICE_INACTIVE 0x00000002L
#define SERVICE_STATE_ALL (SERVICE_ACTIVE | SERVICE_INACTIVE)
/* Service control codes */
#define SERVICE_CONTROL_STOP 0x00000001L
#define SERVICE_CONTROL_PAUSE 0x00000002L
#define SERVICE_CONTROL_CONTINUE 0x00000003L
#define SERVICE_CONTROL_INTERROGATE 0x00000004L
#define SERVICE_CONTROL_SHUTDOWN 0x00000005L
#define SERVICE_CONTROL_PARAMCHANGE 0x00000006L
#define SERVICE_CONTROL_NETBINDADD 0x00000007L
#define SERVICE_CONTROL_NETBINDREMOVE 0x00000008L
#define SERVICE_CONTROL_NETBINDENABLE 0x00000009L
#define SERVICE_CONTROL_NETBINDDISABLE 0x0000000AL
#define SERVICE_CONTROL_DEVICEEVENT 0x0000000BL
#define SERVICE_CONTROL_HARDWAREPROFILECHANGE 0x0000000CL
#define SERVICE_CONTROL_POWEREVENT 0x0000000DL
#define SERVICE_CONTROL_SESSIONCHANGE 0x0000000EL
#define SERVICE_CONTROL_PRESHUTDOWN 0x0000000FL
#define SERVICE_CONTROL_TIMECHANGE 0x00000010L
#define SERVICE_CONTROL_TRIGGEREVENT 0x00000020L
/* Service states */
#define SERVICE_STOPPED 0x00000001L
#define SERVICE_START_PENDING 0x00000002L
#define SERVICE_STOP_PENDING 0x00000003L
#define SERVICE_RUNNING 0x00000004L
#define SERVICE_CONTINUE_PENDING 0x00000005L
#define SERVICE_PAUSE_PENDING 0x00000006L
#define SERVICE_PAUSED 0x00000007L
/* Service control acceptance flags */
#define SERVICE_ACCEPT_STOP 0x00000001L
#define SERVICE_ACCEPT_PAUSE_CONTINUE 0x00000002L
#define SERVICE_ACCEPT_SHUTDOWN 0x00000004L
#define SERVICE_ACCEPT_PARAMCHANGE 0x00000008L
#define SERVICE_ACCEPT_NETBINDCHANGE 0x00000010L
#define SERVICE_ACCEPT_HARDWAREPROFILECHANGE 0x00000020L
#define SERVICE_ACCEPT_POWEREVENT 0x00000040L
#define SERVICE_ACCEPT_SESSIONCHANGE 0x00000080L
#define SERVICE_ACCEPT_PRESHUTDOWN 0x00000100L
#define SERVICE_ACCEPT_TIMECHANGE 0x00000200L
#define SERVICE_ACCEPT_TRIGGEREVENT 0x00000400L
/* Service Control Manager access rights */
#define SC_MANAGER_CONNECT 0x0001L
#define SC_MANAGER_CREATE_SERVICE 0x0002L
#define SC_MANAGER_ENUMERATE_SERVICE 0x0004L
#define SC_MANAGER_LOCK 0x0008L
#define SC_MANAGER_QUERY_LOCK_STATUS 0x0010L
#define SC_MANAGER_MODIFY_BOOT_CONFIG 0x0020L
#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 access rights */
#define SERVICE_QUERY_CONFIG 0x0001L
#define SERVICE_CHANGE_CONFIG 0x0002L
#define SERVICE_QUERY_STATUS 0x0004L
#define SERVICE_ENUMERATE_DEPENDENTS 0x0008L
#define SERVICE_START 0x0010L
#define SERVICE_STOP 0x0020L
#define SERVICE_PAUSE_CONTINUE 0x0040L
#define SERVICE_INTERROGATE 0x0080L
#define SERVICE_USER_DEFINED_CONTROL 0x0100L
#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)
/* QueryServiceStatusEx() flags */
#define SERVICE_RUNS_IN_SYSTEM_PROCESS 0x00000001L
/* QueryServiceConfig2() information levels */
#define SERVICE_CONFIG_DESCRIPTION 1L
#define SERVICE_CONFIG_FAILURE_ACTIONS 2L
#define SERVICE_CONFIG_DELAYED_AUTO_START_INFO 3L
#define SERVICE_CONFIG_FAILURE_ACTIONS_FLAG 4L
#define SERVICE_CONFIG_SERVICE_SID_INFO 5L
#define SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO 6L
#define SERVICE_CONFIG_PRESHUTDOWN_INFO 7L
#define SERVICE_CONFIG_TRIGGER_INFO 8L
#define SERVICE_CONFIG_PREFERRED_NODE 9L
/* NotifyServiceStatusChange() information levels */
#define SERVICE_NOTIFY_STATUS_CHANGE_1 1L
#define SERVICE_NOTIFY_STATUS_CHANGE_2 2L
#define SERVICE_NOTIFY_STATUS_CHANGE SERVICE_NOTIFY_STATUS_CHANGE_2
/* Service notification flags */
#define SERVICE_NOTIFY_STOPPED 0x00000001L
#define SERVICE_NOTIFY_START_PENDING 0x00000002L
#define SERVICE_NOTIFY_STOP_PENDING 0x00000004L
#define SERVICE_NOTIFY_RUNNING 0x00000008L
#define SERVICE_NOTIFY_CONTINUE_PENDING 0x00000010L
#define SERVICE_NOTIFY_PAUSE_PENDING 0x00000020L
#define SERVICE_NOTIFY_PAUSED 0x00000040L
#define SERVICE_NOTIFY_CREATED 0x00000080L
#define SERVICE_NOTIFY_DELETED 0x00000100L
#define SERVICE_NOTIFY_DELETE_PENDING 0x00000200L
/* Service stop reason flags */
#define SERVICE_STOP_REASON_FLAG_MIN 0x00000000L
#define SERVICE_STOP_REASON_FLAG_UNPLANNED 0x10000000L
#define SERVICE_STOP_REASON_FLAG_CUSTOM 0x20000000L
#define SERVICE_STOP_REASON_FLAG_PLANNED 0x40000000L
#define SERVICE_STOP_REASON_FLAG_MAX 0x80000000L
/* Major service stop reasons */
#define SERVICE_STOP_REASON_MAJOR_MIN 0x00000000L
#define SERVICE_STOP_REASON_MAJOR_OTHER 0x00010000L
#define SERVICE_STOP_REASON_MAJOR_HARDWARE 0x00020000L
#define SERVICE_STOP_REASON_MAJOR_OPERATINGSYSTEM 0x00030000L
#define SERVICE_STOP_REASON_MAJOR_SOFTWARE 0x00040000L
#define SERVICE_STOP_REASON_MAJOR_APPLICATION 0x00050000L
#define SERVICE_STOP_REASON_MAJOR_NONE 0x00060000L
#define SERVICE_STOP_REASON_MAJOR_MAX 0x00070000L
#define SERVICE_STOP_REASON_MAJOR_MIN_CUSTOM 0x00400000L
#define SERVICE_STOP_REASON_MAJOR_MAX_CUSTOM 0x00FF0000L
/* Minor service stop reasons */
#define SERVICE_STOP_REASON_MINOR_MIN 0x00000000L
#define SERVICE_STOP_REASON_MINOR_OTHER 0x00000001L
#define SERVICE_STOP_REASON_MINOR_MAINTENANCE 0x00000002L
#define SERVICE_STOP_REASON_MINOR_INSTALLATION 0x00000003L
#define SERVICE_STOP_REASON_MINOR_UPGRADE 0x00000004L
#define SERVICE_STOP_REASON_MINOR_RECONFIG 0x00000005L
#define SERVICE_STOP_REASON_MINOR_HUNG 0x00000006L
#define SERVICE_STOP_REASON_MINOR_UNSTABLE 0x00000007L
#define SERVICE_STOP_REASON_MINOR_DISK 0x00000008L
#define SERVICE_STOP_REASON_MINOR_NETWORKCARD 0x00000009L
#define SERVICE_STOP_REASON_MINOR_ENVIRONMENT 0x0000000AL
#define SERVICE_STOP_REASON_MINOR_HARDWARE_DRIVER 0x0000000BL
#define SERVICE_STOP_REASON_MINOR_OTHERDRIVER 0x0000000CL
#define SERVICE_STOP_REASON_MINOR_SERVICEPACK 0x0000000DL
#define SERVICE_STOP_REASON_MINOR_SOFTWARE_UPDATE 0x0000000EL
#define SERVICE_STOP_REASON_MINOR_SECURITYFIX 0x0000000FL
#define SERVICE_STOP_REASON_MINOR_SECURITY 0x00000010L
#define SERVICE_STOP_REASON_MINOR_NETWORK_CONNECTIVITY 0x00000011L
#define SERVICE_STOP_REASON_MINOR_WMI 0x00000012L
#define SERVICE_STOP_REASON_MINOR_SERVICEPACK_UNINSTALL 0x00000013L
#define SERVICE_STOP_REASON_MINOR_SOFTWARE_UPDATE_UNINSTALL 0x00000014L
#define SERVICE_STOP_REASON_MINOR_SECURITYFIX_UNINSTALL 0x00000015L
#define SERVICE_STOP_REASON_MINOR_MMC 0x00000016L
#define SERVICE_STOP_REASON_MINOR_NONE 0x00000017L
#define SERVICE_STOP_REASON_MINOR_MAX 0x00000018L
#define SERVICE_STOP_REASON_MINOR_MIN_CUSTOM 0x00000100L
#define SERVICE_STOP_REASON_MINOR_MAX_CUSTOM 0x0000FFFFL
/* ControlServiceEx() information levels */
#define SERVICE_CONTROL_STATUS_REASON_INFO 1L
/* Service SID types */
#define SERVICE_SID_TYPE_NONE 0x00000000L
#define SERVICE_SID_TYPE_UNRESTRICTED 0x00000001L
#define SERVICE_SID_TYPE_RESTRICTED (0x00000002L | SERVICE_SID_TYPE_UNRESTRICTED)
/* Service trigger types */
#define SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL 1L
#define SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY 2L
#define SERVICE_TRIGGER_TYPE_DOMAIN_JOIN 3L
#define SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT 4L
#define SERVICE_TRIGGER_TYPE_GROUP_POLICY 5L
#define SERVICE_TRIGGER_TYPE_CUSTOM 20L
/* Service trigger data types */
#define SERVICE_TRIGGER_DATA_TYPE_BINARY 1L
#define SERVICE_TRIGGER_DATA_TYPE_STRING 2L
/* Service trigger actions */
#define SERVICE_TRIGGER_ACTION_SERVICE_START 1L
#define SERVICE_TRIGGER_ACTION_SERVICE_STOP 2L
/* Trigger-started service argument */
#define SERVICE_TRIGGER_STARTED_ARGUMENT L"TriggerStarted"
/* Service description */
typedef struct _SERVICE_DESCRIPTIONA {
LPSTR lpDescription;
} SERVICE_DESCRIPTIONA;
typedef SERVICE_DESCRIPTIONA *LPSERVICE_DESCRIPTIONA;
typedef struct _SERVICE_DESCRIPTIONW {
LPWSTR lpDescription;
} SERVICE_DESCRIPTIONW;
typedef SERVICE_DESCRIPTIONW *LPSERVICE_DESCRIPTIONW;
#ifdef UNICODE
typedef SERVICE_DESCRIPTIONW SERVICE_DESCRIPTION;
typedef LPSERVICE_DESCRIPTIONW LPSERVICE_DESCRIPTION;
#else
typedef SERVICE_DESCRIPTIONA SERVICE_DESCRIPTION;
typedef LPSERVICE_DESCRIPTIONA LPSERVICE_DESCRIPTION;
#endif
/* Service control action types */
typedef enum _SC_ACTION_TYPE {
SC_ACTION_NONE = 0,
SC_ACTION_RESTART = 1,
SC_ACTION_REBOOT = 2,
SC_ACTION_RUN_COMMAND = 3
} SC_ACTION_TYPE;
/* Service control action */
typedef struct _SC_ACTION {
SC_ACTION_TYPE Type;
DWORD Delay;
} SC_ACTION;
typedef SC_ACTION *LPSC_ACTION;
/* Service failure actions */
typedef struct _SERVICE_FAILURE_ACTIONSA {
DWORD dwResetPeriod;
LPSTR lpRebootMsg;
LPSTR lpCommand;
DWORD cActions;
SC_ACTION *lpsaActions;
} SERVICE_FAILURE_ACTIONSA;
typedef SERVICE_FAILURE_ACTIONSA *LPSERVICE_FAILURE_ACTIONSA;
typedef struct _SERVICE_FAILURE_ACTIONSW {
DWORD dwResetPeriod;
LPWSTR lpRebootMsg;
LPWSTR lpCommand;
DWORD cActions;
SC_ACTION *lpsaActions;
} SERVICE_FAILURE_ACTIONSW;
typedef SERVICE_FAILURE_ACTIONSW *LPSERVICE_FAILURE_ACTIONSW;
#ifdef UNICODE
typedef SERVICE_FAILURE_ACTIONSW SERVICE_FAILURE_ACTIONS;
typedef LPSERVICE_FAILURE_ACTIONSW LPSERVICE_FAILURE_ACTIONS;
#else
typedef SERVICE_FAILURE_ACTIONSA SERVICE_FAILURE_ACTIONS;
typedef LPSERVICE_FAILURE_ACTIONSA LPSERVICE_FAILURE_ACTIONS;
#endif
/* Service delayed automatic start information */
typedef struct _SERVICE_DELAYED_AUTO_START_INFO {
BOOL fDelayedAutoStart;
} SERVICE_DELAYED_AUTO_START_INFO;
typedef SERVICE_DELAYED_AUTO_START_INFO *LPSERVICE_DELAYED_AUTO_START_INFO;
/* Service failure actions flags */
typedef struct _SERVICE_FAILURE_ACTIONS_FLAG {
BOOL fFailureActionsOnNonCrashFailures;
} SERVICE_FAILURE_ACTIONS_FLAG;
typedef SERVICE_FAILURE_ACTIONS_FLAG *LPSERVICE_FAILURE_ACTIONS_FLAG;
/* Service SID information */
typedef struct _SERVICE_SID_INFO {
DWORD dwServiceSidType;
} SERVICE_SID_INFO;
typedef SERVICE_SID_INFO *LPSERVICE_SID_INFO;
/* Service required privileges information */
typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOA {
LPSTR pmszRequiredPrivileges;
} SERVICE_REQUIRED_PRIVILEGES_INFOA;
typedef SERVICE_REQUIRED_PRIVILEGES_INFOA *LPSERVICE_REQUIRED_PRIVILEGES_INFOA;
typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOW {
LPWSTR pmszRequiredPrivileges;
} SERVICE_REQUIRED_PRIVILEGES_INFOW;
typedef SERVICE_REQUIRED_PRIVILEGES_INFOW *LPSERVICE_REQUIRED_PRIVILEGES_INFOW;
#ifdef UNICODE
typedef SERVICE_REQUIRED_PRIVILEGES_INFOW SERVICE_REQUIRED_PRIVILEGES_INFOW;
typedef LPSERVICE_REQUIRED_PRIVILEGES_INFOW LPSERVICE_REQUIRED_PRIVILEGES_INFOW;
#else
typedef SERVICE_REQUIRED_PRIVILEGES_INFOA SERVICE_REQUIRED_PRIVILEGES_INFOA;
typedef LPSERVICE_REQUIRED_PRIVILEGES_INFOA LPSERVICE_REQUIRED_PRIVILEGES_INFOA;
#endif
/* Service preshutdown information */
typedef struct _SERVICE_PRESHUTDOWN_INFO {
DWORD dwPreshutdownTimeout;
} SERVICE_PRESHUTDOWN_INFO;
typedef SERVICE_PRESHUTDOWN_INFO *LPSERVICE_PRESHUTDOWN_INFO;
/* Service trigger-specific data item */
typedef struct _SERVICE_TRIGGER_SPECIFIC_DATA_ITEM {
DWORD dwDataType;
DWORD cbData;
PBYTE pData;
} SERVICE_TRIGGER_SPECIFIC_DATA_ITEM;
typedef SERVICE_TRIGGER_SPECIFIC_DATA_ITEM *PSERVICE_TRIGGER_SPECIFIC_DATA_ITEM;
/* Service trigger */
typedef struct _SERVICE_TRIGGER {
DWORD dwTriggerType;
DWORD dwAction;
GUID *pTriggerSubtype;
DWORD cDataItems;
PSERVICE_TRIGGER_SPECIFIC_DATA_ITEM pDataItems;
} SERVICE_TRIGGER;
typedef SERVICE_TRIGGER *PSERVICE_TRIGGER;
/* Service trigger information */
typedef struct _SERVICE_TRIGGER_INFO {
DWORD cTriggers;
PSERVICE_TRIGGER pTriggers;
PBYTE pReserved;
} SERVICE_TRIGGER_INFO;
typedef SERVICE_TRIGGER_INFO *PSERVICE_TRIGGER_INFO;
/* Service preferred node information */
typedef struct _SERVICE_PREFERRED_NODE_INFO {
USHORT usPreferredNode;
BOOLEAN fDelete;
} SERVICE_PREFERRED_NODE_INFO;
typedef SERVICE_PREFERRED_NODE_INFO *PSERVICE_PREFERRED_NODE_INFO;
/* Service time change information */
typedef struct _SERVICE_TIMECHANGE_INFO {
LARGE_INTEGER liNewTime;
LARGE_INTEGER liOldTime;
} SERVICE_TIMECHANGE_INFO;
typedef SERVICE_TIMECHANGE_INFO *PSERVICE_TIMECHANGE_INFO;
/* Service control status types */
typedef enum _SC_STATUS_TYPE {
SC_STATUS_PROCESS_INFO = 0
} SC_STATUS_TYPE;
/* Service control enumeration types */
typedef enum _SC_ENUM_TYPE {
SC_ENUM_PROCESS_INFO = 0
} SC_ENUM_TYPE;
/* Service status */
typedef struct _SERVICE_STATUS {
DWORD dwServiceType;
DWORD dwCurrentState;
DWORD dwControlsAccepted;
DWORD dwWin32ExitCode;
DWORD dwServiceSpecificExitCode;
DWORD dwCheckPoint;
DWORD dwWaitHint;
} SERVICE_STATUS;
typedef SERVICE_STATUS *LPSERVICE_STATUS;
/* Service status process */
typedef struct _SERVICE_STATUS_PROCESS {
DWORD dwServiceType;
DWORD dwCurrentState;
DWORD dwControlsAccepted;
DWORD dwWin32ExitCode;
DWORD dwServiceSpecificExitCode;
DWORD dwCheckpoint;
DWORD dwWaitHint;
DWORD dwProcessId;
DWORD dwServiceFlags;
} SERVICE_STATUS_PROCESS;
typedef SERVICE_STATUS_PROCESS *LPSERVICE_STATUS_PROCESS;
/* EnumServiceStatus() parameters */
typedef struct _ENUM_SERVICE_STATUSA {
LPSTR lpServiceName;
LPSTR lpDisplayName;
SERVICE_STATUS ServiceStatus;
} ENUM_SERVICE_STATUSA;
typedef ENUM_SERVICE_STATUSA *LPENUM_SERVICE_STATUSA;
typedef struct _ENUM_SERVICE_STATUSW {
LPWSTR lpServiceName;
LPWSTR lpDisplayName;
SERVICE_STATUS ServiceStatus;
} ENUM_SERVICE_STATUSW;
typedef 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
/* EnumServiceStatusEx() parameters */
typedef struct _ENUM_SERVICE_STATUS_PROCESSA {
LPSTR lpServiceName;
LPSTR lpDisplayName;
SERVICE_STATUS_PROCESS ServiceStatusProcess;
} ENUM_SERVICE_STATUS_PROCESSA;
typedef ENUM_SERVICE_STATUS_PROCESSA *LPENUM_SERVICE_STATUS_PROCESSA;
typedef struct _ENUM_SERVICE_STATUS_PROCESSW {
LPWSTR lpServiceName;
LPWSTR lpDisplayName;
SERVICE_STATUS_PROCESS ServiceStatusProcess;
} ENUM_SERVICE_STATUS_PROCESSW;
typedef ENUM_SERVICE_STATUS_PROCESSW *LPENUM_SERVICE_STATUS_PROCESSW;
#ifdef UNICODE
typedef ENUM_SERVICE_STATUS_PROCESSW ENUM_SERVICE_STATUS_PROCESS;
typedef LPENUM_SERVICE_STATUS_PROCESSW LPENUM_SERVICE_STATUS_PROCESS;
#else
typedef ENUM_SERVICE_STATUS_PROCESSA ENUM_SERVICE_STATUS_PROCESS;
typedef LPENUM_SERVICE_STATUS_PROCESSA LPENUM_SERVICE_STATUS_PROCESS;
#endif
/* QueryServiceLockStatus() parameters */
typedef struct _QUERY_SERVICE_LOCK_STATUSA {
DWORD fIsLocked;
LPSTR lpLockOwner;
DWORD dwLockDuration;
} QUERY_SERVICE_LOCK_STATUSA;
typedef QUERY_SERVICE_LOCK_STATUSA *LPQUERY_SERVICE_LOCK_STATUSA;
typedef struct _QUERY_SERVICE_LOCK_STATUSW {
DWORD fIsLocked;
LPWSTR lpLockOwner;
DWORD dwLockDuration;
} QUERY_SERVICE_LOCK_STATUSW;
typedef 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
/* QueryServiceConfig() parameters */
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;
typedef 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;
typedef 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
/* Service callbacks */
typedef VOID (WINAPI *LPSERVICE_MAIN_FUNCTIONA)( DWORD, LPSTR * );
typedef VOID (WINAPI *LPSERVICE_MAIN_FUNCTIONW)( DWORD, LPWSTR * );
typedef VOID (WINAPI *LPHANDLER_FUNCTION)( DWORD );
typedef DWORD (WINAPI *LPHANDLER_FUNCTION_EX)( DWORD, DWORD, LPVOID, LPVOID );
#ifdef UNICODE
#define LPSERVICE_MAIN_FUNCTION LPSERVICE_MAIN_FUNCTIONW
#else
#define LPSERVICE_MAIN_FUNCTION LPSERVICE_MAIN_FUNCTIONA
#endif
/* Service table entry */
typedef struct _SERVICE_TABLE_ENTRYA {
LPSTR lpServiceName;
LPSERVICE_MAIN_FUNCTIONA lpServiceProc;
} SERVICE_TABLE_ENTRYA;
typedef SERVICE_TABLE_ENTRYA *LPSERVICE_TABLE_ENTRYA;
typedef struct _SERVICE_TABLE_ENTRYW {
LPWSTR lpServiceName;
LPSERVICE_MAIN_FUNCTIONW lpServiceProc;
} SERVICE_TABLE_ENTRYW;
typedef 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
/* Service control notification callback */
typedef VOID (CALLBACK *PFN_SC_NOTIFY_CALLBACK)( PVOID );
/* Service notification information (level 1) */
typedef struct _SERVICE_NOTIFY_1 {
DWORD dwVersion;
PFN_SC_NOTIFY_CALLBACK pfnNotifyCallback;
PVOID pContext;
DWORD dwNotificationStatus;
SERVICE_STATUS_PROCESS ServiceStatus;
} SERVICE_NOTIFY_1;
typedef SERVICE_NOTIFY_1 *PSERVICE_NOTIFY_1;
/* Service notification information (level 2) */
typedef struct _SERVICE_NOTIFY_2A {
DWORD dwVersion;
PFN_SC_NOTIFY_CALLBACK pfnNotifyCallback;
PVOID pContext;
DWORD dwNotificationStatus;
SERVICE_STATUS_PROCESS ServiceStatus;
DWORD dwNotificationTriggered;
LPSTR pszServiceNames;
} SERVICE_NOTIFY_2A;
typedef SERVICE_NOTIFY_2A *PSERVICE_NOTIFY_2A;
typedef SERVICE_NOTIFY_2A SERVICE_NOTIFYA;
typedef SERVICE_NOTIFY_2A *PSERVICE_NOTIFYA;
typedef struct _SERVICE_NOTIFY_2W {
DWORD dwVersion;
PFN_SC_NOTIFY_CALLBACK pfnNotifyCallback;
PVOID pContext;
DWORD dwNotificationStatus;
SERVICE_STATUS_PROCESS ServiceStatus;
DWORD dwNotificationTriggered;
LPWSTR pszServiceNames;
} SERVICE_NOTIFY_2W;
typedef SERVICE_NOTIFY_2W *PSERVICE_NOTIFY_2W;
typedef SERVICE_NOTIFY_2W SERVICE_NOTIFYW;
typedef SERVICE_NOTIFY_2W *PSERVICE_NOTIFYW;
#ifdef UNICODE
typedef SERVICE_NOTIFY_2W SERVICE_NOTIFY_2;
typedef PSERVICE_NOTIFY_2W PSERVICE_NOTIFY_2;
typedef SERVICE_NOTIFYW SERVICE_NOTIFY;
typedef PSERVICE_NOTIFYW PSERVICE_NOTIFY;
#else
typedef SERVICE_NOTIFY_2A SERVICE_NOTIFY_2;
typedef PSERVICE_NOTIFY_2A PSERVICE_NOTIFY_2;
typedef SERVICE_NOTIFYA SERVICE_NOTIFY;
typedef PSERVICE_NOTIFYA PSERVICE_NOTIFY;
#endif
/* Service control status reason parameters */
typedef struct _SERVICE_CONTROL_STATUS_REASON_PARAMSA {
DWORD dwReason;
LPSTR pszComment;
SERVICE_STATUS_PROCESS ServiceStatus;
} SERVICE_CONTROL_STATUS_REASON_PARAMSA;
typedef SERVICE_CONTROL_STATUS_REASON_PARAMSA *PSERVICE_CONTROL_STATUS_REASON_PARAMSA;
typedef struct _SERVICE_CONTROL_STATUS_REASON_PARAMSW {
DWORD dwReason;
LPWSTR pszComment;
SERVICE_STATUS_PROCESS ServiceStatus;
} SERVICE_CONTROL_STATUS_REASON_PARAMSW;
typedef SERVICE_CONTROL_STATUS_REASON_PARAMSW *PSERVICE_CONTROL_STATUS_REASON_PARAMSW;
#ifdef UNICODE
typedef SERVICE_CONTROL_STATUS_REASON_PARAMSW SERVICE_CONTROL_STATUS_REASON_PARAMS;
typedef PSERVICE_CONTROL_STATUS_REASON_PARAMSW PSERVICE_CONTROL_STATUS_REASON_PARAMS;
#else
typedef SERVICE_CONTROL_STATUS_REASON_PARAMSA SERVICE_CONTROL_STATUS_REASON_PARAMS;
typedef PSERVICE_CONTROL_STATUS_REASON_PARAMSA PSERVICE_CONTROL_STATUS_REASON_PARAMS;
#endif
/* GUIDs */
EXTERN_C const GUID NETWORK_MANAGER_FIRST_IP_ADDRESS_ARRIVAL_GUID;
EXTERN_C const GUID NETWORK_MANAGER_LAST_IP_ADDRESS_REMOVAL_GUID;
EXTERN_C const GUID DOMAIN_JOIN_GUID;
EXTERN_C const GUID DOMAIN_LEAVE_GUID;
EXTERN_C const GUID FIREWALL_PORT_OPEN_GUID;
EXTERN_C const GUID FIREWALL_PORT_CLOSE_GUID;
EXTERN_C const GUID MACHINE_POLICY_PRESENT_GUID;
EXTERN_C const GUID USER_POLICY_PRESENT_GUID;
/* Functions in ADVAPI32.DLL */
WINADVAPI BOOL WINAPI ChangeServiceConfig2A( SC_HANDLE, DWORD, LPVOID );
WINADVAPI BOOL WINAPI ChangeServiceConfig2W( SC_HANDLE, DWORD, LPVOID );
WINADVAPI BOOL WINAPI ChangeServiceConfigA( SC_HANDLE, DWORD, DWORD, DWORD, LPCSTR, LPCSTR, LPDWORD, LPCSTR, LPCSTR, LPCSTR, LPCSTR );
WINADVAPI BOOL WINAPI ChangeServiceConfigW( SC_HANDLE, DWORD, DWORD, DWORD, LPCWSTR, LPCWSTR, LPDWORD, LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR );
WINADVAPI BOOL WINAPI CloseServiceHandle( SC_HANDLE );
WINADVAPI BOOL WINAPI ControlService( SC_HANDLE, DWORD, LPSERVICE_STATUS );
WINADVAPI SC_HANDLE WINAPI CreateServiceA( SC_HANDLE, LPCSTR, LPCSTR, DWORD, DWORD, DWORD, DWORD, LPCSTR, LPCSTR, LPDWORD, LPCSTR, LPCSTR, LPCSTR );
WINADVAPI SC_HANDLE WINAPI CreateServiceW( SC_HANDLE, LPCWSTR, LPCWSTR, DWORD, DWORD, DWORD, DWORD, LPCWSTR, LPCWSTR, LPDWORD, LPCWSTR, LPCWSTR, LPCWSTR );
WINADVAPI BOOL WINAPI DeleteService( SC_HANDLE );
WINADVAPI BOOL WINAPI EnumDependentServicesA( SC_HANDLE, DWORD, LPENUM_SERVICE_STATUSA, DWORD, LPDWORD, LPDWORD );
WINADVAPI BOOL WINAPI EnumDependentServicesW( SC_HANDLE, DWORD, LPENUM_SERVICE_STATUSW, DWORD, LPDWORD, LPDWORD );
WINADVAPI BOOL WINAPI EnumServicesStatusA( SC_HANDLE, DWORD, DWORD, LPENUM_SERVICE_STATUSA, DWORD, LPDWORD, LPDWORD, LPDWORD );
WINADVAPI BOOL WINAPI EnumServicesStatusExA( SC_HANDLE, SC_ENUM_TYPE, DWORD, DWORD, LPBYTE, DWORD, LPDWORD, LPDWORD, LPDWORD, LPCSTR );
WINADVAPI BOOL WINAPI EnumServicesStatusExW( SC_HANDLE, SC_ENUM_TYPE, DWORD, DWORD, LPBYTE, DWORD, LPDWORD, LPDWORD, LPDWORD, LPCWSTR );
WINADVAPI BOOL WINAPI EnumServicesStatusW( SC_HANDLE, DWORD, DWORD, LPENUM_SERVICE_STATUSW, DWORD, LPDWORD, LPDWORD, LPDWORD );
WINADVAPI BOOL WINAPI GetServiceDisplayNameA( SC_HANDLE, LPCSTR, LPSTR, LPDWORD );
WINADVAPI BOOL WINAPI GetServiceDisplayNameW( SC_HANDLE, LPCWSTR, LPWSTR, LPDWORD );
WINADVAPI BOOL WINAPI GetServiceKeyNameA( SC_HANDLE, LPCSTR, LPSTR, LPDWORD );
WINADVAPI BOOL WINAPI GetServiceKeyNameW( SC_HANDLE, LPCWSTR, LPWSTR, LPDWORD );
WINADVAPI SC_LOCK WINAPI LockServiceDatabase( SC_HANDLE );
WINADVAPI BOOL WINAPI NotifyBootConfigStatus( BOOL );
WINADVAPI SC_HANDLE WINAPI OpenSCManagerA( LPCSTR, LPCSTR, DWORD );
WINADVAPI SC_HANDLE WINAPI OpenSCManagerW( LPCWSTR, LPCWSTR, DWORD );
WINADVAPI SC_HANDLE WINAPI OpenServiceA( SC_HANDLE, LPCSTR, DWORD );
WINADVAPI SC_HANDLE WINAPI OpenServiceW( SC_HANDLE, LPCWSTR, DWORD );
WINADVAPI BOOL WINAPI QueryServiceConfig2A( SC_HANDLE, DWORD, LPBYTE, DWORD, LPDWORD );
WINADVAPI BOOL WINAPI QueryServiceConfig2W( SC_HANDLE, DWORD, LPBYTE, DWORD, LPDWORD );
WINADVAPI BOOL WINAPI QueryServiceConfigA( SC_HANDLE, LPQUERY_SERVICE_CONFIGA, DWORD, LPDWORD );
WINADVAPI BOOL WINAPI QueryServiceConfigW( SC_HANDLE, LPQUERY_SERVICE_CONFIGW, DWORD, LPDWORD );
WINADVAPI BOOL WINAPI QueryServiceLockStatusA( SC_HANDLE, LPQUERY_SERVICE_LOCK_STATUSA, DWORD, LPDWORD );
WINADVAPI BOOL WINAPI QueryServiceLockStatusW( SC_HANDLE, LPQUERY_SERVICE_LOCK_STATUSW, DWORD, LPDWORD );
WINADVAPI BOOL WINAPI QueryServiceObjectSecurity( SC_HANDLE, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR, DWORD, LPDWORD );
WINADVAPI BOOL WINAPI QueryServiceStatus( SC_HANDLE, LPSERVICE_STATUS );
WINADVAPI BOOL WINAPI QueryServiceStatusEx( SC_HANDLE, SC_STATUS_TYPE, LPBYTE, DWORD, LPDWORD );
WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerA( LPCSTR, LPHANDLER_FUNCTION );
WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExA( LPCSTR, LPHANDLER_FUNCTION_EX, LPVOID );
WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExW( LPCWSTR, LPHANDLER_FUNCTION_EX, LPVOID );
WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerW( LPCWSTR, LPHANDLER_FUNCTION );
WINADVAPI BOOL WINAPI SetServiceObjectSecurity( SC_HANDLE, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR );
WINADVAPI BOOL WINAPI SetServiceStatus( SERVICE_STATUS_HANDLE, LPSERVICE_STATUS );
WINADVAPI BOOL WINAPI StartServiceA( SC_HANDLE, DWORD, LPCSTR * );
WINADVAPI BOOL WINAPI StartServiceCtrlDispatcherA( CONST SERVICE_TABLE_ENTRYA * );
WINADVAPI BOOL WINAPI StartServiceCtrlDispatcherW( CONST SERVICE_TABLE_ENTRYW * );
WINADVAPI BOOL WINAPI StartServiceW( SC_HANDLE, DWORD, LPCWSTR * );
WINADVAPI BOOL WINAPI UnlockServiceDatabase( SC_LOCK );
#if (NTDDI_VERSION >= 0x06000000)
WINADVAPI BOOL WINAPI ControlServiceExA( SC_HANDLE, DWORD, DWORD, PVOID );
WINADVAPI BOOL WINAPI ControlServiceExW( SC_HANDLE, DWORD, DWORD, PVOID );
WINADVAPI DWORD WINAPI NotifyServiceStatusChangeA( SC_HANDLE, DWORD, PSERVICE_NOTIFYA );
WINADVAPI DWORD WINAPI NotifyServiceStatusChangeW( SC_HANDLE, DWORD, PSERVICE_NOTIFYW );
#endif
/* Map generic function names to the appropriate ANSI or Unicode version. */
#ifdef UNICODE
#define ChangeServiceConfig ChangeServiceConfigW
#define ChangeServiceConfig2 ChangeServiceConfig2W
#define CreateService CreateServiceW
#define EnumDependentServices EnumDependentServicesW
#define EnumServicesStatus EnumServicesStatusW
#define EnumServicesStatusEx EnumServicesStatusExW
#define GetServiceDisplayName GetServiceDisplayNameW
#define GetServiceKeyName GetServiceKeyNameW
#define OpenSCManager OpenSCManagerW
#define OpenService OpenServiceW
#define QueryServiceConfig QueryServiceConfigW
#define QueryServiceConfig2 QueryServiceConfig2W
#define QueryServiceLockStatus QueryServiceLockStatusW
#define RegisterServiceCtrlHandler RegisterServiceCtrlHandlerW
#define RegisterServiceCtrlHandlerEx RegisterServiceCtrlHandlerExW
#define StartService StartServiceW
#define StartServiceCtrlDispatcher StartServiceCtrlDispatcherW
#if (NTDDI_VERSION >= 0x06000000)
#define ControlServiceEx ControlServiceExW
#define NotifyServiceStatusChange NotifyServiceStatusChangeW
#endif
#else
#define ChangeServiceConfig ChangeServiceConfigA
#define ChangeServiceConfig2 ChangeServiceConfig2A
#define CreateService CreateServiceA
#define EnumDependentServices EnumDependentServicesA
#define EnumServicesStatus EnumServicesStatusA
#define EnumServicesStatusEx EnumServicesStatusExA
#define GetServiceDisplayName GetServiceDisplayNameA
#define GetServiceKeyName GetServiceKeyNameA
#define OpenSCManager OpenSCManagerA
#define OpenService OpenServiceA
#define QueryServiceConfig QueryServiceConfigA
#define QueryServiceConfig2 QueryServiceConfig2A
#define QueryServiceLockStatus QueryServiceLockStatusA
#define RegisterServiceCtrlHandler RegisterServiceCtrlHandlerA
#define RegisterServiceCtrlHandlerEx RegisterServiceCtrlHandlerExA
#define StartService StartServiceA
#define StartServiceCtrlDispatcher StartServiceCtrlDispatcherA
#if (NTDDI_VERSION >= 0x06000000)
#define ControlServiceEx ControlServiceExA
#define NotifyServiceStatusChange NotifyServiceStatusChangeA
#endif
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* _WINSVC_ */