725 lines
31 KiB
C
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_ */
|