ReactOS 0.4.16-dev-2331-gc9e73b6
winsvc.h File Reference

Go to the source code of this file.

Classes

struct  _SERVICE_STATUS
 
struct  _SERVICE_STATUS_PROCESS
 
struct  _SERVICE_NOTIFY_2A
 
struct  _SERVICE_NOTIFY_2W
 
struct  _SERVICE_TABLE_ENTRYA
 
struct  _SERVICE_TABLE_ENTRYW
 
struct  _ENUM_SERVICE_STATUSA
 
struct  _ENUM_SERVICE_STATUSW
 
struct  _ENUM_SERVICE_STATUS_PROCESSA
 
struct  _ENUM_SERVICE_STATUS_PROCESSW
 
struct  _QUERY_SERVICE_CONFIGA
 
struct  _QUERY_SERVICE_CONFIGW
 
struct  _SERVICE_DESCRIPTIONA
 
struct  _SERVICE_DESCRIPTIONW
 
struct  _SC_ACTION
 
struct  _SERVICE_FAILURE_ACTIONSA
 
struct  _SERVICE_FAILURE_ACTIONSW
 
struct  _SERVICE_DELAYED_AUTO_START_INFO
 
struct  _SERVICE_FAILURE_ACTIONS_FLAG
 
struct  _SERVICE_SID_INFO
 
struct  _SERVICE_REQUIRED_PRIVILEGES_INFOA
 
struct  _SERVICE_REQUIRED_PRIVILEGES_INFOW
 
struct  _SERVICE_PRESHUTDOWN_INFO
 
struct  _QUERY_SERVICE_LOCK_STATUSA
 
struct  _QUERY_SERVICE_LOCK_STATUSW
 

Macros

#define WINADVAPI   DECLSPEC_IMPORT
 
#define SERVICES_ACTIVE_DATABASEA   "ServicesActive"
 
#define SERVICES_FAILED_DATABASEA   "ServicesFailed"
 
#define SERVICES_ACTIVE_DATABASE   WINELIB_NAME_AW( SERVICES_ACTIVE_DATABASE )
 
#define SERVICES_FAILED_DATABASE   WINELIB_NAME_AW( SERVICES_FAILED_DATABASE )
 
#define SERVICE_ACTIVE   0x00000001
 
#define SERVICE_INACTIVE   0x00000002
 
#define SERVICE_STATE_ALL   (SERVICE_ACTIVE | SERVICE_INACTIVE)
 
#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
 
#define SERVICE_CONTROL_PARAMCHANGE   0x00000006
 
#define SERVICE_CONTROL_NETBINDADD   0x00000007
 
#define SERVICE_CONTROL_NETBINDREMOVE   0x00000008
 
#define SERVICE_CONTROL_NETBINDENABLE   0x00000009
 
#define SERVICE_CONTROL_NETBINDDISABLE   0x0000000A
 
#define SERVICE_CONTROL_DEVICEEVENT   0x0000000B
 
#define SERVICE_CONTROL_HARDWAREPROFILECHANGE   0x0000000C
 
#define SERVICE_CONTROL_POWEREVENT   0x0000000D
 
#define SERVICE_CONTROL_SESSIONCHANGE   0x0000000E
 
#define SERVICE_CONTROL_PRESHUTDOWN   0x0000000F
 
#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
 
#define SERVICE_ACCEPT_STOP   0x00000001
 
#define SERVICE_ACCEPT_PAUSE_CONTINUE   0x00000002
 
#define SERVICE_ACCEPT_SHUTDOWN   0x00000004
 
#define SERVICE_ACCEPT_PARAMCHANGE   0x00000008
 
#define SERVICE_ACCEPT_NETBINDCHANGE   0x00000010
 
#define SERVICE_ACCEPT_HARDWAREPROFILECHANGE   0x00000020
 
#define SERVICE_ACCEPT_POWEREVENT   0x00000040
 
#define SERVICE_ACCEPT_SESSIONCHANGE   0x00000080
 
#define SERVICE_ACCEPT_PRESHUTDOWN   0x00000100
 
#define SERVICE_ACCEPT_TIMECHANGE   0x00000200
 
#define SERVICE_ACCEPT_TRIGGEREVENT   0x00000400
 
#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
 
#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
 
#define SERVICE_NO_CHANGE   0xffffffff
 
#define SERVICE_RUNS_IN_SYSTEM_PROCESS   0x00000001
 
#define SERVICE_NOTIFY_STATUS_CHANGE   2
 
#define SERVICE_NOTIFY_STOPPED   0x1
 
#define SERVICE_NOTIFY_START_PENDING   0x2
 
#define SERVICE_NOTIFY_STOP_PENDING   0x4
 
#define SERVICE_NOTIFY_RUNNING   0x8
 
#define SERVICE_NOTIFY_CONTINUE_PENDING   0x10
 
#define SERVICE_NOTIFY_PAUSE_PENDING   0x20
 
#define SERVICE_NOTIFY_PAUSED   0x40
 
#define SERVICE_NOTIFY_CREATED   0x80
 
#define SERVICE_NOTIFY_DELETED   0x100
 
#define SERVICE_NOTIFY_DELETE_PENDING   0x200
 
#define SERVICE_CONFIG_DESCRIPTION   1
 
#define SERVICE_CONFIG_FAILURE_ACTIONS   2
 
#define SERVICE_CONFIG_DELAYED_AUTO_START_INFO   3
 
#define SERVICE_CONFIG_FAILURE_ACTIONS_FLAG   4
 
#define SERVICE_CONFIG_SERVICE_SID_INFO   5
 
#define SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO   6
 
#define SERVICE_CONFIG_PRESHUTDOWN_INFO   7
 
#define ChangeServiceConfig   WINELIB_NAME_AW(ChangeServiceConfig)
 
#define ChangeServiceConfig2   WINELIB_NAME_AW(ChangeServiceConfig2)
 
#define CreateService   WINELIB_NAME_AW(CreateService)
 
#define EnumDependentServices   WINELIB_NAME_AW(EnumDependentServices)
 
#define EnumServicesStatus   WINELIB_NAME_AW(EnumServicesStatus)
 
#define EnumServicesStatus   WINELIB_NAME_AW(EnumServicesStatus)
 
#define GetServiceDisplayName   WINELIB_NAME_AW(GetServiceDisplayName)
 
#define GetServiceKeyName   WINELIB_NAME_AW(GetServiceKeyName)
 
#define OpenSCManager   WINELIB_NAME_AW(OpenSCManager)
 
#define OpenService   WINELIB_NAME_AW(OpenService)
 
#define QueryServiceConfig   WINELIB_NAME_AW(QueryServiceConfig)
 
#define QueryServiceConfig2   WINELIB_NAME_AW(QueryServiceConfig2)
 
#define QueryServiceLockStatus   WINELIB_NAME_AW(QueryServiceLockStatus)
 
#define RegisterServiceCtrlHandler   WINELIB_NAME_AW(RegisterServiceCtrlHandler)
 
#define RegisterServiceCtrlHandlerEx   WINELIB_NAME_AW(RegisterServiceCtrlHandlerEx)
 
#define StartService   WINELIB_NAME_AW(StartService)
 
#define StartServiceCtrlDispatcher   WINELIB_NAME_AW(StartServiceCtrlDispatcher)
 

Typedefs

typedef SC_HANDLE * LPSC_HANDLE
 
typedef LPVOID SC_LOCK
 
typedef struct _SERVICE_STATUS SERVICE_STATUS
 
typedef struct _SERVICE_STATUSLPSERVICE_STATUS
 
typedef struct _SERVICE_STATUS_PROCESS SERVICE_STATUS_PROCESS
 
typedef struct _SERVICE_STATUS_PROCESSLPSERVICE_STATUS_PROCESS
 
typedef void(CALLBACKPFN_SC_NOTIFY_CALLBACK) (void *)
 
typedef struct _SERVICE_NOTIFY_2A SERVICE_NOTIFY_2A
 
typedef struct _SERVICE_NOTIFY_2A SERVICE_NOTIFYA
 
typedef struct _SERVICE_NOTIFY_2W SERVICE_NOTIFY_2W
 
typedef struct _SERVICE_NOTIFY_2W SERVICE_NOTIFYW
 
typedef enum _SC_STATUS_TYPE SC_STATUS_TYPE
 
typedef VOID(CALLBACKLPSERVICE_MAIN_FUNCTIONA) (DWORD, LPSTR *)
 
typedef VOID(CALLBACKLPSERVICE_MAIN_FUNCTIONW) (DWORD, LPWSTR *)
 
typedef struct _SERVICE_TABLE_ENTRYA SERVICE_TABLE_ENTRYA
 
typedef struct _SERVICE_TABLE_ENTRYALPSERVICE_TABLE_ENTRYA
 
typedef struct _SERVICE_TABLE_ENTRYW SERVICE_TABLE_ENTRYW
 
typedef struct _SERVICE_TABLE_ENTRYWLPSERVICE_TABLE_ENTRYW
 
typedef struct _ENUM_SERVICE_STATUSA ENUM_SERVICE_STATUSA
 
typedef struct _ENUM_SERVICE_STATUSALPENUM_SERVICE_STATUSA
 
typedef struct _ENUM_SERVICE_STATUSW ENUM_SERVICE_STATUSW
 
typedef struct _ENUM_SERVICE_STATUSWLPENUM_SERVICE_STATUSW
 
typedef struct _ENUM_SERVICE_STATUS_PROCESSA ENUM_SERVICE_STATUS_PROCESSA
 
typedef struct _ENUM_SERVICE_STATUS_PROCESSALPENUM_SERVICE_STATUS_PROCESSA
 
typedef struct _ENUM_SERVICE_STATUS_PROCESSW ENUM_SERVICE_STATUS_PROCESSW
 
typedef struct _ENUM_SERVICE_STATUS_PROCESSWLPENUM_SERVICE_STATUS_PROCESSW
 
typedef enum _SC_ENUM_TYPE SC_ENUM_TYPE
 
typedef struct _QUERY_SERVICE_CONFIGA QUERY_SERVICE_CONFIGA
 
typedef struct _QUERY_SERVICE_CONFIGALPQUERY_SERVICE_CONFIGA
 
typedef struct _QUERY_SERVICE_CONFIGW QUERY_SERVICE_CONFIGW
 
typedef struct _QUERY_SERVICE_CONFIGWLPQUERY_SERVICE_CONFIGW
 
typedef struct _SERVICE_DESCRIPTIONA SERVICE_DESCRIPTIONA
 
typedef struct _SERVICE_DESCRIPTIONALPSERVICE_DESCRIPTIONA
 
typedef struct _SERVICE_DESCRIPTIONW SERVICE_DESCRIPTIONW
 
typedef struct _SERVICE_DESCRIPTIONWLPSERVICE_DESCRIPTIONW
 
typedef enum _SC_ACTION_TYPE SC_ACTION_TYPE
 
typedef struct _SC_ACTION SC_ACTION
 
typedef struct _SC_ACTIONLPSC_ACTION
 
typedef struct _SERVICE_FAILURE_ACTIONSA SERVICE_FAILURE_ACTIONSA
 
typedef struct _SERVICE_FAILURE_ACTIONSALPSERVICE_FAILURE_ACTIONSA
 
typedef struct _SERVICE_FAILURE_ACTIONSW SERVICE_FAILURE_ACTIONSW
 
typedef struct _SERVICE_FAILURE_ACTIONSWLPSERVICE_FAILURE_ACTIONSW
 
typedef struct _SERVICE_DELAYED_AUTO_START_INFO SERVICE_DELAYED_AUTO_START_INFO
 
typedef struct _SERVICE_DELAYED_AUTO_START_INFOLPSERVICE_DELAYED_AUTO_START_INFO
 
typedef struct _SERVICE_FAILURE_ACTIONS_FLAG SERVICE_FAILURE_ACTIONS_FLAG
 
typedef struct _SERVICE_FAILURE_ACTIONS_FLAGLPSERVICE_FAILURE_ACTIONS_FLAG
 
typedef struct _SERVICE_SID_INFO SERVICE_SID_INFO
 
typedef struct _SERVICE_SID_INFOLPSERVICE_SID_INFO
 
typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOA SERVICE_REQUIRED_PRIVILEGES_INFOA
 
typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOALPSERVICE_REQUIRED_PRIVILEGES_INFOA
 
typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOW SERVICE_REQUIRED_PRIVILEGES_INFOW
 
typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOWLPSERVICE_REQUIRED_PRIVILEGES_INFOW
 
typedef struct _SERVICE_PRESHUTDOWN_INFO SERVICE_PRESHUTDOWN_INFO
 
typedef struct _SERVICE_PRESHUTDOWN_INFOLPSERVICE_PRESHUTDOWN_INFO
 
typedef struct _QUERY_SERVICE_LOCK_STATUSA QUERY_SERVICE_LOCK_STATUSA
 
typedef struct _QUERY_SERVICE_LOCK_STATUSALPQUERY_SERVICE_LOCK_STATUSA
 
typedef struct _QUERY_SERVICE_LOCK_STATUSW QUERY_SERVICE_LOCK_STATUSW
 
typedef struct _QUERY_SERVICE_LOCK_STATUSWLPQUERY_SERVICE_LOCK_STATUSW
 
typedef VOID(WINAPILPHANDLER_FUNCTION) (DWORD)
 
typedef DWORD(WINAPILPHANDLER_FUNCTION_EX) (DWORD, DWORD, LPVOID, LPVOID)
 

Enumerations

enum  _SC_STATUS_TYPE { SC_STATUS_PROCESS_INFO = 0 , SC_STATUS_PROCESS_INFO = 0 , SC_STATUS_PROCESS_INFO = 0 }
 
enum  _SC_ENUM_TYPE { SC_ENUM_PROCESS_INFO = 0 , SC_ENUM_PROCESS_INFO = 0 , SC_ENUM_PROCESS_INFO = 0 }
 
enum  _SC_ACTION_TYPE {
  SC_ACTION_NONE = 0 , SC_ACTION_RESTART = 1 , SC_ACTION_REBOOT = 2 , SC_ACTION_RUN_COMMAND = 3 ,
  SC_ACTION_NONE = 0 , SC_ACTION_RESTART = 1 , SC_ACTION_REBOOT = 2 , SC_ACTION_RUN_COMMAND = 3 ,
  SC_ACTION_NONE = 0 , SC_ACTION_RESTART = 1 , SC_ACTION_REBOOT = 2 , SC_ACTION_RUN_COMMAND = 3
}
 

Functions

 DECLARE_HANDLE (SC_HANDLE)
 
 DECLARE_HANDLE (SERVICE_STATUS_HANDLE)
 
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 ChangeServiceConfig2A (SC_HANDLE, DWORD, LPVOID)
 
WINADVAPI BOOL WINAPI ChangeServiceConfig2W (SC_HANDLE, DWORD, LPVOID)
 
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 EnumServicesStatusW (SC_HANDLE, DWORD, DWORD, LPENUM_SERVICE_STATUSW, 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 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 DWORD WINAPI NotifyServiceStatusChangeW (SC_HANDLE, DWORD, SERVICE_NOTIFYW *)
 
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 QueryServiceStatus (SC_HANDLE, LPSERVICE_STATUS)
 
WINADVAPI BOOL WINAPI QueryServiceStatusEx (SC_HANDLE, SC_STATUS_TYPE, 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 QueryServiceConfig2A (SC_HANDLE, DWORD, LPBYTE, DWORD, LPDWORD)
 
WINADVAPI BOOL WINAPI QueryServiceConfig2W (SC_HANDLE, DWORD, LPBYTE, 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 SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerA (LPCSTR, LPHANDLER_FUNCTION)
 
WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerW (LPCWSTR, 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 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 StartServiceW (SC_HANDLE, DWORD, LPCWSTR *)
 
WINADVAPI BOOL WINAPI StartServiceCtrlDispatcherA (const SERVICE_TABLE_ENTRYA *)
 
WINADVAPI BOOL WINAPI StartServiceCtrlDispatcherW (const SERVICE_TABLE_ENTRYW *)
 
WINADVAPI BOOL WINAPI UnlockServiceDatabase (SC_LOCK)
 

Variables

static const WCHAR SERVICES_ACTIVE_DATABASEW [] = { 'S','e','r','v','i','c','e','s','A','c','t','i','v','e',0 }
 
static const WCHAR SERVICES_FAILED_DATABASEW [] = { 'S','e','r','v','i','c','e','s','F','a','i','l','e','d',0 }
 

Macro Definition Documentation

◆ ChangeServiceConfig

#define ChangeServiceConfig   WINELIB_NAME_AW(ChangeServiceConfig)

Definition at line 391 of file winsvc.h.

◆ ChangeServiceConfig2

#define ChangeServiceConfig2   WINELIB_NAME_AW(ChangeServiceConfig2)

Definition at line 394 of file winsvc.h.

◆ CreateService

#define CreateService   WINELIB_NAME_AW(CreateService)

Definition at line 399 of file winsvc.h.

◆ EnumDependentServices

#define EnumDependentServices   WINELIB_NAME_AW(EnumDependentServices)

Definition at line 403 of file winsvc.h.

◆ EnumServicesStatus [1/2]

#define EnumServicesStatus   WINELIB_NAME_AW(EnumServicesStatus)

Definition at line 409 of file winsvc.h.

◆ EnumServicesStatus [2/2]

#define EnumServicesStatus   WINELIB_NAME_AW(EnumServicesStatus)

Definition at line 409 of file winsvc.h.

◆ GetServiceDisplayName

#define GetServiceDisplayName   WINELIB_NAME_AW(GetServiceDisplayName)

Definition at line 412 of file winsvc.h.

◆ GetServiceKeyName

#define GetServiceKeyName   WINELIB_NAME_AW(GetServiceKeyName)

Definition at line 415 of file winsvc.h.

◆ OpenSCManager

#define OpenSCManager   WINELIB_NAME_AW(OpenSCManager)

Definition at line 421 of file winsvc.h.

◆ OpenService

#define OpenService   WINELIB_NAME_AW(OpenService)

Definition at line 424 of file winsvc.h.

◆ QueryServiceConfig

#define QueryServiceConfig   WINELIB_NAME_AW(QueryServiceConfig)

Definition at line 429 of file winsvc.h.

◆ QueryServiceConfig2

#define QueryServiceConfig2   WINELIB_NAME_AW(QueryServiceConfig2)

Definition at line 432 of file winsvc.h.

◆ QueryServiceLockStatus

#define QueryServiceLockStatus   WINELIB_NAME_AW(QueryServiceLockStatus)

Definition at line 435 of file winsvc.h.

◆ RegisterServiceCtrlHandler

#define RegisterServiceCtrlHandler   WINELIB_NAME_AW(RegisterServiceCtrlHandler)

Definition at line 439 of file winsvc.h.

◆ RegisterServiceCtrlHandlerEx

#define RegisterServiceCtrlHandlerEx   WINELIB_NAME_AW(RegisterServiceCtrlHandlerEx)

Definition at line 442 of file winsvc.h.

◆ SC_MANAGER_ALL_ACCESS

#define SC_MANAGER_ALL_ACCESS
Value:
#define STANDARD_RIGHTS_REQUIRED
Definition: nt_native.h:63
#define SC_MANAGER_LOCK
Definition: winsvc.h:97
#define SC_MANAGER_QUERY_LOCK_STATUS
Definition: winsvc.h:98
#define SC_MANAGER_MODIFY_BOOT_CONFIG
Definition: winsvc.h:99
#define SC_MANAGER_ENUMERATE_SERVICE
Definition: winsvc.h:96
#define SC_MANAGER_CREATE_SERVICE
Definition: winsvc.h:95
#define SC_MANAGER_CONNECT
Definition: winsvc.h:94

Definition at line 100 of file winsvc.h.

◆ SC_MANAGER_CONNECT

#define SC_MANAGER_CONNECT   0x0001

Definition at line 94 of file winsvc.h.

◆ SC_MANAGER_CREATE_SERVICE

#define SC_MANAGER_CREATE_SERVICE   0x0002

Definition at line 95 of file winsvc.h.

◆ SC_MANAGER_ENUMERATE_SERVICE

#define SC_MANAGER_ENUMERATE_SERVICE   0x0004

Definition at line 96 of file winsvc.h.

◆ SC_MANAGER_LOCK

#define SC_MANAGER_LOCK   0x0008

Definition at line 97 of file winsvc.h.

◆ SC_MANAGER_MODIFY_BOOT_CONFIG

#define SC_MANAGER_MODIFY_BOOT_CONFIG   0x0020

Definition at line 99 of file winsvc.h.

◆ SC_MANAGER_QUERY_LOCK_STATUS

#define SC_MANAGER_QUERY_LOCK_STATUS   0x0010

Definition at line 98 of file winsvc.h.

◆ SERVICE_ACCEPT_HARDWAREPROFILECHANGE

#define SERVICE_ACCEPT_HARDWAREPROFILECHANGE   0x00000020

Definition at line 86 of file winsvc.h.

◆ SERVICE_ACCEPT_NETBINDCHANGE

#define SERVICE_ACCEPT_NETBINDCHANGE   0x00000010

Definition at line 85 of file winsvc.h.

◆ SERVICE_ACCEPT_PARAMCHANGE

#define SERVICE_ACCEPT_PARAMCHANGE   0x00000008

Definition at line 84 of file winsvc.h.

◆ SERVICE_ACCEPT_PAUSE_CONTINUE

#define SERVICE_ACCEPT_PAUSE_CONTINUE   0x00000002

Definition at line 82 of file winsvc.h.

◆ SERVICE_ACCEPT_POWEREVENT

#define SERVICE_ACCEPT_POWEREVENT   0x00000040

Definition at line 87 of file winsvc.h.

◆ SERVICE_ACCEPT_PRESHUTDOWN

#define SERVICE_ACCEPT_PRESHUTDOWN   0x00000100

Definition at line 89 of file winsvc.h.

◆ SERVICE_ACCEPT_SESSIONCHANGE

#define SERVICE_ACCEPT_SESSIONCHANGE   0x00000080

Definition at line 88 of file winsvc.h.

◆ SERVICE_ACCEPT_SHUTDOWN

#define SERVICE_ACCEPT_SHUTDOWN   0x00000004

Definition at line 83 of file winsvc.h.

◆ SERVICE_ACCEPT_STOP

#define SERVICE_ACCEPT_STOP   0x00000001

Definition at line 81 of file winsvc.h.

◆ SERVICE_ACCEPT_TIMECHANGE

#define SERVICE_ACCEPT_TIMECHANGE   0x00000200

Definition at line 90 of file winsvc.h.

◆ SERVICE_ACCEPT_TRIGGEREVENT

#define SERVICE_ACCEPT_TRIGGEREVENT   0x00000400

Definition at line 91 of file winsvc.h.

◆ SERVICE_ACTIVE

#define SERVICE_ACTIVE   0x00000001

Definition at line 50 of file winsvc.h.

◆ SERVICE_ALL_ACCESS

#define SERVICE_ALL_ACCESS
Value:
#define SERVICE_START
Definition: winsvc.h:112
#define SERVICE_QUERY_STATUS
Definition: winsvc.h:110
#define SERVICE_USER_DEFINED_CONTROL
Definition: winsvc.h:116
#define SERVICE_CHANGE_CONFIG
Definition: winsvc.h:109
#define SERVICE_PAUSE_CONTINUE
Definition: winsvc.h:114
#define SERVICE_INTERROGATE
Definition: winsvc.h:115
#define SERVICE_STOP
Definition: winsvc.h:113
#define SERVICE_ENUMERATE_DEPENDENTS
Definition: winsvc.h:111
#define SERVICE_QUERY_CONFIG
Definition: winsvc.h:108

Definition at line 118 of file winsvc.h.

◆ SERVICE_CHANGE_CONFIG

#define SERVICE_CHANGE_CONFIG   0x0002

Definition at line 109 of file winsvc.h.

◆ SERVICE_CONFIG_DELAYED_AUTO_START_INFO

#define SERVICE_CONFIG_DELAYED_AUTO_START_INFO   3

Definition at line 290 of file winsvc.h.

◆ SERVICE_CONFIG_DESCRIPTION

#define SERVICE_CONFIG_DESCRIPTION   1

Definition at line 288 of file winsvc.h.

◆ SERVICE_CONFIG_FAILURE_ACTIONS

#define SERVICE_CONFIG_FAILURE_ACTIONS   2

Definition at line 289 of file winsvc.h.

◆ SERVICE_CONFIG_FAILURE_ACTIONS_FLAG

#define SERVICE_CONFIG_FAILURE_ACTIONS_FLAG   4

Definition at line 291 of file winsvc.h.

◆ SERVICE_CONFIG_PRESHUTDOWN_INFO

#define SERVICE_CONFIG_PRESHUTDOWN_INFO   7

Definition at line 294 of file winsvc.h.

◆ SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO

#define SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO   6

Definition at line 293 of file winsvc.h.

◆ SERVICE_CONFIG_SERVICE_SID_INFO

#define SERVICE_CONFIG_SERVICE_SID_INFO   5

Definition at line 292 of file winsvc.h.

◆ SERVICE_CONTINUE_PENDING

#define SERVICE_CONTINUE_PENDING   0x00000005

Definition at line 76 of file winsvc.h.

◆ SERVICE_CONTROL_CONTINUE

#define SERVICE_CONTROL_CONTINUE   0x00000003

Definition at line 57 of file winsvc.h.

◆ SERVICE_CONTROL_DEVICEEVENT

#define SERVICE_CONTROL_DEVICEEVENT   0x0000000B

Definition at line 65 of file winsvc.h.

◆ SERVICE_CONTROL_HARDWAREPROFILECHANGE

#define SERVICE_CONTROL_HARDWAREPROFILECHANGE   0x0000000C

Definition at line 66 of file winsvc.h.

◆ SERVICE_CONTROL_INTERROGATE

#define SERVICE_CONTROL_INTERROGATE   0x00000004

Definition at line 58 of file winsvc.h.

◆ SERVICE_CONTROL_NETBINDADD

#define SERVICE_CONTROL_NETBINDADD   0x00000007

Definition at line 61 of file winsvc.h.

◆ SERVICE_CONTROL_NETBINDDISABLE

#define SERVICE_CONTROL_NETBINDDISABLE   0x0000000A

Definition at line 64 of file winsvc.h.

◆ SERVICE_CONTROL_NETBINDENABLE

#define SERVICE_CONTROL_NETBINDENABLE   0x00000009

Definition at line 63 of file winsvc.h.

◆ SERVICE_CONTROL_NETBINDREMOVE

#define SERVICE_CONTROL_NETBINDREMOVE   0x00000008

Definition at line 62 of file winsvc.h.

◆ SERVICE_CONTROL_PARAMCHANGE

#define SERVICE_CONTROL_PARAMCHANGE   0x00000006

Definition at line 60 of file winsvc.h.

◆ SERVICE_CONTROL_PAUSE

#define SERVICE_CONTROL_PAUSE   0x00000002

Definition at line 56 of file winsvc.h.

◆ SERVICE_CONTROL_POWEREVENT

#define SERVICE_CONTROL_POWEREVENT   0x0000000D

Definition at line 67 of file winsvc.h.

◆ SERVICE_CONTROL_PRESHUTDOWN

#define SERVICE_CONTROL_PRESHUTDOWN   0x0000000F

Definition at line 69 of file winsvc.h.

◆ SERVICE_CONTROL_SESSIONCHANGE

#define SERVICE_CONTROL_SESSIONCHANGE   0x0000000E

Definition at line 68 of file winsvc.h.

◆ SERVICE_CONTROL_SHUTDOWN

#define SERVICE_CONTROL_SHUTDOWN   0x00000005

Definition at line 59 of file winsvc.h.

◆ SERVICE_CONTROL_STOP

#define SERVICE_CONTROL_STOP   0x00000001

Definition at line 55 of file winsvc.h.

◆ SERVICE_ENUMERATE_DEPENDENTS

#define SERVICE_ENUMERATE_DEPENDENTS   0x0008

Definition at line 111 of file winsvc.h.

◆ SERVICE_INACTIVE

#define SERVICE_INACTIVE   0x00000002

Definition at line 51 of file winsvc.h.

◆ SERVICE_INTERROGATE

#define SERVICE_INTERROGATE   0x0080

Definition at line 115 of file winsvc.h.

◆ SERVICE_NO_CHANGE

#define SERVICE_NO_CHANGE   0xffffffff

Definition at line 129 of file winsvc.h.

◆ SERVICE_NOTIFY_CONTINUE_PENDING

#define SERVICE_NOTIFY_CONTINUE_PENDING   0x10

Definition at line 173 of file winsvc.h.

◆ SERVICE_NOTIFY_CREATED

#define SERVICE_NOTIFY_CREATED   0x80

Definition at line 176 of file winsvc.h.

◆ SERVICE_NOTIFY_DELETE_PENDING

#define SERVICE_NOTIFY_DELETE_PENDING   0x200

Definition at line 178 of file winsvc.h.

◆ SERVICE_NOTIFY_DELETED

#define SERVICE_NOTIFY_DELETED   0x100

Definition at line 177 of file winsvc.h.

◆ SERVICE_NOTIFY_PAUSE_PENDING

#define SERVICE_NOTIFY_PAUSE_PENDING   0x20

Definition at line 174 of file winsvc.h.

◆ SERVICE_NOTIFY_PAUSED

#define SERVICE_NOTIFY_PAUSED   0x40

Definition at line 175 of file winsvc.h.

◆ SERVICE_NOTIFY_RUNNING

#define SERVICE_NOTIFY_RUNNING   0x8

Definition at line 172 of file winsvc.h.

◆ SERVICE_NOTIFY_START_PENDING

#define SERVICE_NOTIFY_START_PENDING   0x2

Definition at line 170 of file winsvc.h.

◆ SERVICE_NOTIFY_STATUS_CHANGE

#define SERVICE_NOTIFY_STATUS_CHANGE   2

Definition at line 167 of file winsvc.h.

◆ SERVICE_NOTIFY_STOP_PENDING

#define SERVICE_NOTIFY_STOP_PENDING   0x4

Definition at line 171 of file winsvc.h.

◆ SERVICE_NOTIFY_STOPPED

#define SERVICE_NOTIFY_STOPPED   0x1

Definition at line 169 of file winsvc.h.

◆ SERVICE_PAUSE_CONTINUE

#define SERVICE_PAUSE_CONTINUE   0x0040

Definition at line 114 of file winsvc.h.

◆ SERVICE_PAUSE_PENDING

#define SERVICE_PAUSE_PENDING   0x00000006

Definition at line 77 of file winsvc.h.

◆ SERVICE_PAUSED

#define SERVICE_PAUSED   0x00000007

Definition at line 78 of file winsvc.h.

◆ SERVICE_QUERY_CONFIG

#define SERVICE_QUERY_CONFIG   0x0001

Definition at line 108 of file winsvc.h.

◆ SERVICE_QUERY_STATUS

#define SERVICE_QUERY_STATUS   0x0004

Definition at line 110 of file winsvc.h.

◆ SERVICE_RUNNING

#define SERVICE_RUNNING   0x00000004

Definition at line 75 of file winsvc.h.

◆ SERVICE_RUNS_IN_SYSTEM_PROCESS

#define SERVICE_RUNS_IN_SYSTEM_PROCESS   0x00000001

Definition at line 131 of file winsvc.h.

◆ SERVICE_START

#define SERVICE_START   0x0010

Definition at line 112 of file winsvc.h.

◆ SERVICE_START_PENDING

#define SERVICE_START_PENDING   0x00000002

Definition at line 73 of file winsvc.h.

◆ SERVICE_STATE_ALL

#define SERVICE_STATE_ALL   (SERVICE_ACTIVE | SERVICE_INACTIVE)

Definition at line 52 of file winsvc.h.

◆ SERVICE_STOP

#define SERVICE_STOP   0x0020

Definition at line 113 of file winsvc.h.

◆ SERVICE_STOP_PENDING

#define SERVICE_STOP_PENDING   0x00000003

Definition at line 74 of file winsvc.h.

◆ SERVICE_STOPPED

#define SERVICE_STOPPED   0x00000001

Definition at line 72 of file winsvc.h.

◆ SERVICE_USER_DEFINED_CONTROL

#define SERVICE_USER_DEFINED_CONTROL   0x0100

Definition at line 116 of file winsvc.h.

◆ SERVICES_ACTIVE_DATABASE

#define SERVICES_ACTIVE_DATABASE   WINELIB_NAME_AW( SERVICES_ACTIVE_DATABASE )

Definition at line 46 of file winsvc.h.

◆ SERVICES_ACTIVE_DATABASEA

#define SERVICES_ACTIVE_DATABASEA   "ServicesActive"

Definition at line 35 of file winsvc.h.

◆ SERVICES_FAILED_DATABASE

#define SERVICES_FAILED_DATABASE   WINELIB_NAME_AW( SERVICES_FAILED_DATABASE )

Definition at line 47 of file winsvc.h.

◆ SERVICES_FAILED_DATABASEA

#define SERVICES_FAILED_DATABASEA   "ServicesFailed"

Definition at line 36 of file winsvc.h.

◆ StartService

#define StartService   WINELIB_NAME_AW(StartService)

Definition at line 447 of file winsvc.h.

◆ StartServiceCtrlDispatcher

#define StartServiceCtrlDispatcher   WINELIB_NAME_AW(StartServiceCtrlDispatcher)

Definition at line 450 of file winsvc.h.

◆ WINADVAPI

#define WINADVAPI   DECLSPEC_IMPORT

Definition at line 30 of file winsvc.h.

Typedef Documentation

◆ ENUM_SERVICE_STATUS_PROCESSA

◆ ENUM_SERVICE_STATUS_PROCESSW

◆ ENUM_SERVICE_STATUSA

◆ ENUM_SERVICE_STATUSW

◆ LPENUM_SERVICE_STATUS_PROCESSA

◆ LPENUM_SERVICE_STATUS_PROCESSW

◆ LPENUM_SERVICE_STATUSA

◆ LPENUM_SERVICE_STATUSW

◆ LPHANDLER_FUNCTION

typedef VOID(WINAPI * LPHANDLER_FUNCTION) (DWORD)

Definition at line 384 of file winsvc.h.

◆ LPHANDLER_FUNCTION_EX

typedef DWORD(WINAPI * LPHANDLER_FUNCTION_EX) (DWORD, DWORD, LPVOID, LPVOID)

Definition at line 385 of file winsvc.h.

◆ LPQUERY_SERVICE_CONFIGA

◆ LPQUERY_SERVICE_CONFIGW

◆ LPQUERY_SERVICE_LOCK_STATUSA

◆ LPQUERY_SERVICE_LOCK_STATUSW

◆ LPSC_ACTION

◆ LPSC_HANDLE

typedef SC_HANDLE* LPSC_HANDLE

Definition at line 136 of file winsvc.h.

◆ LPSERVICE_DELAYED_AUTO_START_INFO

◆ LPSERVICE_DESCRIPTIONA

◆ LPSERVICE_DESCRIPTIONW

◆ LPSERVICE_FAILURE_ACTIONS_FLAG

◆ LPSERVICE_FAILURE_ACTIONSA

◆ LPSERVICE_FAILURE_ACTIONSW

◆ LPSERVICE_MAIN_FUNCTIONA

typedef VOID(CALLBACK * LPSERVICE_MAIN_FUNCTIONA) (DWORD, LPSTR *)

Definition at line 208 of file winsvc.h.

◆ LPSERVICE_MAIN_FUNCTIONW

typedef VOID(CALLBACK * LPSERVICE_MAIN_FUNCTIONW) (DWORD, LPWSTR *)

Definition at line 209 of file winsvc.h.

◆ LPSERVICE_PRESHUTDOWN_INFO

◆ LPSERVICE_REQUIRED_PRIVILEGES_INFOA

◆ LPSERVICE_REQUIRED_PRIVILEGES_INFOW

◆ LPSERVICE_SID_INFO

◆ LPSERVICE_STATUS

◆ LPSERVICE_STATUS_PROCESS

◆ LPSERVICE_TABLE_ENTRYA

◆ LPSERVICE_TABLE_ENTRYW

◆ PFN_SC_NOTIFY_CALLBACK

typedef void(CALLBACK * PFN_SC_NOTIFY_CALLBACK) (void *)

Definition at line 180 of file winsvc.h.

◆ QUERY_SERVICE_CONFIGA

◆ QUERY_SERVICE_CONFIGW

◆ QUERY_SERVICE_LOCK_STATUSA

◆ QUERY_SERVICE_LOCK_STATUSW

◆ SC_ACTION

◆ SC_ACTION_TYPE

◆ SC_ENUM_TYPE

◆ SC_LOCK

typedef LPVOID SC_LOCK

Definition at line 138 of file winsvc.h.

◆ SC_STATUS_TYPE

◆ SERVICE_DELAYED_AUTO_START_INFO

◆ SERVICE_DESCRIPTIONA

◆ SERVICE_DESCRIPTIONW

◆ SERVICE_FAILURE_ACTIONS_FLAG

◆ SERVICE_FAILURE_ACTIONSA

◆ SERVICE_FAILURE_ACTIONSW

◆ SERVICE_NOTIFY_2A

◆ SERVICE_NOTIFY_2W

◆ SERVICE_NOTIFYA

◆ SERVICE_NOTIFYW

◆ SERVICE_PRESHUTDOWN_INFO

◆ SERVICE_REQUIRED_PRIVILEGES_INFOA

◆ SERVICE_REQUIRED_PRIVILEGES_INFOW

◆ SERVICE_SID_INFO

◆ SERVICE_STATUS

◆ SERVICE_STATUS_PROCESS

◆ SERVICE_TABLE_ENTRYA

◆ SERVICE_TABLE_ENTRYW

Enumeration Type Documentation

◆ _SC_ACTION_TYPE

Enumerator
SC_ACTION_NONE 
SC_ACTION_RESTART 
SC_ACTION_REBOOT 
SC_ACTION_RUN_COMMAND 
SC_ACTION_NONE 
SC_ACTION_RESTART 
SC_ACTION_REBOOT 
SC_ACTION_RUN_COMMAND 
SC_ACTION_NONE 
SC_ACTION_RESTART 
SC_ACTION_REBOOT 
SC_ACTION_RUN_COMMAND 

Definition at line 308 of file winsvc.h.

308 {
309 SC_ACTION_NONE = 0,
@ SC_ACTION_RUN_COMMAND
Definition: winsvc.h:208
@ SC_ACTION_REBOOT
Definition: winsvc.h:207
@ SC_ACTION_RESTART
Definition: winsvc.h:206
@ SC_ACTION_NONE
Definition: winsvc.h:205
enum _SC_ACTION_TYPE SC_ACTION_TYPE

◆ _SC_ENUM_TYPE

Enumerator
SC_ENUM_PROCESS_INFO 
SC_ENUM_PROCESS_INFO 
SC_ENUM_PROCESS_INFO 

Definition at line 259 of file winsvc.h.

259 {
@ SC_ENUM_PROCESS_INFO
Definition: winsvc.h:128
enum _SC_ENUM_TYPE SC_ENUM_TYPE
Definition: service.c:45

◆ _SC_STATUS_TYPE

Enumerator
SC_STATUS_PROCESS_INFO 
SC_STATUS_PROCESS_INFO 
SC_STATUS_PROCESS_INFO 

Definition at line 202 of file winsvc.h.

202 {
@ SC_STATUS_PROCESS_INFO
Definition: winsvc.h:125
enum _SC_STATUS_TYPE SC_STATUS_TYPE

Function Documentation

◆ ChangeServiceConfig2A()

WINADVAPI BOOL WINAPI ChangeServiceConfig2A ( SC_HANDLE  hService,
DWORD  dwInfoLevel,
LPVOID  lpInfo 
)

Definition at line 247 of file scm.c.

250{
252 DWORD dwError;
253
254 TRACE("ChangeServiceConfig2A(%p %lu %p)\n",
255 hService, dwInfoLevel, lpInfo);
256
257 if (lpInfo == NULL) return TRUE;
258
259 /* Fill relevant field of the Info structure */
260 Info.dwInfoLevel = dwInfoLevel;
261 switch (dwInfoLevel)
262 {
264 Info.psd = lpInfo;
265 break;
266
268 Info.psfa = lpInfo;
269 break;
270
271 default:
272 WARN("Unknown info level 0x%lx\n", dwInfoLevel);
274 return FALSE;
275 }
276
278 {
279 dwError = RChangeServiceConfig2A((SC_RPC_HANDLE)hService,
280 Info);
281 }
283 {
285 }
287
288 if (dwError != ERROR_SUCCESS)
289 {
290 TRACE("RChangeServiceConfig2A() failed (Error %lu)\n", dwError);
291 SetLastError(dwError);
292 return FALSE;
293 }
294
295 return TRUE;
296}
#define WARN(fmt,...)
Definition: precomp.h:61
DWORD WINAPI RChangeServiceConfig2A(SC_RPC_HANDLE hService, SC_RPC_CONFIG_INFOA Info)
Definition: rpcserver.c:5034
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define SetLastError(x)
Definition: compat.h:752
unsigned long DWORD
Definition: ntddk_ex.h:95
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:90
#define SERVICE_CONFIG_DESCRIPTION
Definition: winsvc.h:71
_In_ DWORD dwInfoLevel
Definition: winsvc.h:428
#define SERVICE_CONFIG_FAILURE_ACTIONS
Definition: winsvc.h:72
DWORD ScmRpcStatusToWinError(RPC_STATUS Status)
Definition: scm.c:146
#define RpcEndExcept
Definition: rpc.h:123
#define RpcTryExcept
Definition: rpc.h:121
#define RpcExcept(expr)
Definition: rpc.h:122
#define RpcExceptionCode()
Definition: rpc.h:127
#define TRACE(s)
Definition: solgame.cpp:4
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690

◆ ChangeServiceConfig2W()

WINADVAPI BOOL WINAPI ChangeServiceConfig2W ( SC_HANDLE  hService,
DWORD  dwInfoLevel,
LPVOID  lpInfo 
)

Definition at line 305 of file scm.c.

308{
310 DWORD dwError;
311
312 TRACE("ChangeServiceConfig2W(%p %lu %p)\n",
313 hService, dwInfoLevel, lpInfo);
314
315 if (lpInfo == NULL) return TRUE;
316
317 /* Fill relevant field of the Info structure */
318 Info.dwInfoLevel = dwInfoLevel;
319 switch (dwInfoLevel)
320 {
322 Info.psd = lpInfo;
323 break;
324
326 Info.psfa = lpInfo;
327 break;
328
329 default:
330 WARN("Unknown info level 0x%lx\n", dwInfoLevel);
332 return FALSE;
333 }
334
336 {
337 dwError = RChangeServiceConfig2W((SC_RPC_HANDLE)hService,
338 Info);
339 }
341 {
343 }
345
346 if (dwError != ERROR_SUCCESS)
347 {
348 TRACE("RChangeServiceConfig2W() failed (Error %lu)\n", dwError);
349 SetLastError(dwError);
350 return FALSE;
351 }
352
353 return TRUE;
354}
DWORD WINAPI RChangeServiceConfig2W(SC_RPC_HANDLE hService, SC_RPC_CONFIG_INFOW Info)
Definition: rpcserver.c:5435

Referenced by ITERATE_InstallService(), RegisterService(), and SetServiceDescription().

◆ ChangeServiceConfigA()

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 
)

Definition at line 363 of file scm.c.

374{
375 DWORD dwError;
376 DWORD dwDependenciesLength = 0;
377 SIZE_T cchLength;
378 LPCSTR lpStr;
379 DWORD dwPasswordSize = 0;
380 LPWSTR lpPasswordW = NULL;
381 LPBYTE lpEncryptedPassword = NULL;
382
383 TRACE("ChangeServiceConfigA(%p %lu %lu %lu %s %s %p %s %s %s %s)\n",
384 hService, dwServiceType, dwStartType, dwErrorControl, debugstr_a(lpBinaryPathName),
385 debugstr_a(lpLoadOrderGroup), lpdwTagId, debugstr_a(lpDependencies),
386 debugstr_a(lpServiceStartName), debugstr_a(lpPassword), debugstr_a(lpDisplayName));
387
388 /* Calculate the Dependencies length*/
389 if (lpDependencies != NULL)
390 {
391 lpStr = lpDependencies;
392 while (*lpStr)
393 {
394 cchLength = strlen(lpStr) + 1;
395 dwDependenciesLength += (DWORD)cchLength;
396 lpStr = lpStr + cchLength;
397 }
398 dwDependenciesLength++;
399 }
400
401 if (lpPassword != NULL)
402 {
403 /* Convert the password to unicode */
404 lpPasswordW = HeapAlloc(GetProcessHeap(),
406 (strlen(lpPassword) + 1) * sizeof(WCHAR));
407 if (lpPasswordW == NULL)
408 {
410 return FALSE;
411 }
412
414 0,
415 lpPassword,
416 -1,
417 lpPasswordW,
418 (int)(strlen(lpPassword) + 1));
419
420 /* Encrypt the unicode password */
421 dwError = ScmEncryptPassword(hService,
422 lpPasswordW,
423 &lpEncryptedPassword,
424 &dwPasswordSize);
425 if (dwError != ERROR_SUCCESS)
426 goto done;
427 }
428
430 {
431 dwError = RChangeServiceConfigA((SC_RPC_HANDLE)hService,
432 dwServiceType,
433 dwStartType,
434 dwErrorControl,
435 (LPSTR)lpBinaryPathName,
436 (LPSTR)lpLoadOrderGroup,
437 lpdwTagId,
438 (LPBYTE)lpDependencies,
439 dwDependenciesLength,
440 (LPSTR)lpServiceStartName,
441 lpEncryptedPassword,
442 dwPasswordSize,
444 }
446 {
448 }
450
451done:
452 if (lpPasswordW != NULL)
453 {
454 /* Wipe and release the password buffers */
455 SecureZeroMemory(lpPasswordW, (wcslen(lpPasswordW) + 1) * sizeof(WCHAR));
456 HeapFree(GetProcessHeap(), 0, lpPasswordW);
457
458 if (lpEncryptedPassword != NULL)
459 {
460 SecureZeroMemory(lpEncryptedPassword, dwPasswordSize);
461 HeapFree(GetProcessHeap(), 0, lpEncryptedPassword);
462 }
463 }
464
465 if (dwError != ERROR_SUCCESS)
466 {
467 TRACE("RChangeServiceConfigA() failed (Error %lu)\n", dwError);
468 SetLastError(dwError);
469 return FALSE;
470 }
471
472 return TRUE;
473}
DWORD WINAPI RChangeServiceConfigA(SC_RPC_HANDLE hService, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPSTR lpBinaryPathName, LPSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPBYTE lpDependencies, DWORD dwDependSize, LPSTR lpServiceStartName, LPBYTE lpPassword, DWORD dwPwSize, LPSTR lpDisplayName)
Definition: rpcserver.c:3476
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define GetProcessHeap()
Definition: compat.h:736
#define CP_ACP
Definition: compat.h:109
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define MultiByteToWideChar
Definition: compat.h:110
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2983
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1592
#define debugstr_a
Definition: kernel32.h:31
#define DWORD
Definition: nt_native.h:44
static DWORD ScmEncryptPassword(_In_ PVOID ContextHandle, _In_ PCWSTR pClearTextPassword, _Out_ PBYTE *pEncryptedPassword, _Out_ PDWORD pEncryptedPasswordSize)
Definition: scm.c:173
unsigned char * LPBYTE
Definition: typedefs.h:53
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define SecureZeroMemory
Definition: winbase.h:1465
_In_ LPCSTR _Out_writes_to_opt_ cchDisplayName LPSTR lpDisplayName
Definition: winbase.h:2544
const char * LPCSTR
Definition: xmlstorage.h:183
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
char * LPSTR
Definition: xmlstorage.h:182

Referenced by test_sequence(), and test_start_stop().

◆ ChangeServiceConfigW()

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 
)

Definition at line 482 of file scm.c.

493{
494 DWORD dwError;
495 DWORD dwDependenciesLength = 0;
496 SIZE_T cchLength;
497 LPCWSTR lpStr;
498 DWORD dwPasswordSize = 0;
499 LPBYTE lpEncryptedPassword = NULL;
500
501 TRACE("ChangeServiceConfigW(%p %lu %lu %lu %s %s %p %s %s %s %s)\n",
502 hService, dwServiceType, dwStartType, dwErrorControl, debugstr_w(lpBinaryPathName),
503 debugstr_w(lpLoadOrderGroup), lpdwTagId, debugstr_w(lpDependencies),
504 debugstr_w(lpServiceStartName), debugstr_w(lpPassword), debugstr_w(lpDisplayName));
505
506 /* Calculate the Dependencies length*/
507 if (lpDependencies != NULL)
508 {
509 lpStr = lpDependencies;
510 while (*lpStr)
511 {
512 cchLength = wcslen(lpStr) + 1;
513 dwDependenciesLength += (DWORD)cchLength;
514 lpStr = lpStr + cchLength;
515 }
516 dwDependenciesLength++;
517 dwDependenciesLength *= sizeof(WCHAR);
518 }
519
520 if (lpPassword != NULL)
521 {
522 dwError = ScmEncryptPassword(hService,
523 lpPassword,
524 &lpEncryptedPassword,
525 &dwPasswordSize);
526 if (dwError != ERROR_SUCCESS)
527 {
528 ERR("ScmEncryptPassword failed (Error %lu)\n", dwError);
529 goto done;
530 }
531 }
532
534 {
535 dwError = RChangeServiceConfigW((SC_RPC_HANDLE)hService,
536 dwServiceType,
537 dwStartType,
538 dwErrorControl,
539 (LPWSTR)lpBinaryPathName,
540 (LPWSTR)lpLoadOrderGroup,
541 lpdwTagId,
542 (LPBYTE)lpDependencies,
543 dwDependenciesLength,
544 (LPWSTR)lpServiceStartName,
545 lpEncryptedPassword,
546 dwPasswordSize,
548 }
550 {
552 }
554
555done:
556 if (lpEncryptedPassword != NULL)
557 {
558 /* Wipe and release the password buffer */
559 SecureZeroMemory(lpEncryptedPassword, dwPasswordSize);
560 HeapFree(GetProcessHeap(), 0, lpEncryptedPassword);
561 }
562
563 if (dwError != ERROR_SUCCESS)
564 {
565 TRACE("RChangeServiceConfigW() failed (Error %lu)\n", dwError);
566 SetLastError(dwError);
567 return FALSE;
568 }
569
570 return TRUE;
571}
#define ERR(fmt,...)
Definition: precomp.h:57
DWORD WINAPI RChangeServiceConfigW(SC_RPC_HANDLE hService, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPWSTR lpBinaryPathName, LPWSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPBYTE lpDependencies, DWORD dwDependSize, LPWSTR lpServiceStartName, LPBYTE lpPassword, DWORD dwPwSize, LPWSTR lpDisplayName)
Definition: rpcserver.c:1935
#define debugstr_w
Definition: kernel32.h:32
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by EnableUserModePnpManager(), InstallOneService(), MMSYS_InstallDevice(), my_test_server(), RpcSsConfigureAsNetworkService(), ServicesPageWndProc(), SetServiceAccount(), SetServiceConfig(), SHELL32_ControlService(), and Test_LockUnlockServiceDatabaseWithServiceStart().

◆ CloseServiceHandle()

WINADVAPI BOOL WINAPI CloseServiceHandle ( SC_HANDLE  hSCObject)

Definition at line 580 of file scm.c.

581{
582 DWORD dwError;
583
584 TRACE("CloseServiceHandle(%p)\n",
585 hSCObject);
586
587 if (!hSCObject)
588 {
590 return FALSE;
591 }
592
594 {
595 dwError = RCloseServiceHandle((LPSC_RPC_HANDLE)&hSCObject);
596 }
598 {
600 }
602
603 if (dwError)
604 {
605 TRACE("RCloseServiceHandle() failed (Error %lu)\n", dwError);
606 SetLastError(dwError);
607 return FALSE;
608 }
609
610 TRACE("CloseServiceHandle() done\n");
611
612 return TRUE;
613}
DWORD WINAPI RCloseServiceHandle(LPSC_RPC_HANDLE hSCObject)
Definition: rpcserver.c:935
#define ERROR_INVALID_HANDLE
Definition: compat.h:98

Referenced by _RunRemoteTest(), AccpCloseObjectHandle(), AccpOpenNamedObject(), AddService(), CShellDispatch::CanStartStopService(), cmdContinue(), CmdInstallService(), cmdPause(), CmdRemoveService(), cmdStop(), Control(), control_service(), Create(), Delete(), delete_test_service(), DestroyService(), DoControlService(), DoCreate(), DoDeleteService(), DoRegServer(), DoStartService(), DoStopService(), DoUnregServer(), EnableUserModePnpManager(), EnumDepend(), EnumerateRunningServices(), EnumServices(), fill_service(), GetDisplayName(), GetKeyName(), GetServiceConfig(), GetServiceDescription(), GetServiceFailure(), GetServiceList(), GetServices(), GetThemeServiceProcessHandle(), I_ScQueryServiceTagInfo(), I_ScValidatePnpService(), InstallOneService(), installService(), CShellDispatch::IsServiceRunning(), ITERATE_DeleteService(), ITERATE_InstallService(), ITERATE_StartService(), ITERATE_StopService(), KmtCloseService(), KmtDeleteService(), KmtServiceCleanup(), main(), MMSYS_InstallDevice(), my_test_server(), OpenServiceHelper(), PlayLogonSoundThread(), query_service_config(), QueryConfig(), QueryDescription(), QueryDriverInfo(), QueryFailure(), QueryService(), RegisterDriver(), RegisterService(), RpcSsConfigureAsNetworkService(), RunTest(), SchedEventLogoff(), SchedStartShell(), sds_absent(), sds_present(), SdSet(), SdShow(), ServiceInfo(), ServicesPageWndProc(), ServiceStart(), SetConfig(), SetDescription(), SetFailure(), SetServiceAccount(), SetServiceConfig(), SetServiceDescription(), SetupStartService(), SHELL32_ControlService(), sis_absent(), sis_present(), sss_started(), sss_stopped(), Start(), start_local_service(), start_rpcss(), start_service(), START_TEST(), StartAudioService(), StartDriver(), StartNetworkServices(), StartOneService(), StartSystemAudioServices(), stop_service(), stop_service_dependents(), StopDriver(), test_close(), test_create_delete_svc(), Test_CreateService(), test_delete_services(), test_driver_install(), test_enum_svc(), test_enum_svc_ex(), test_EventLog(), test_get_displayname(), test_get_servicekeyname(), test_install_services(), test_install_svc_from(), Test_LockUnlockServiceDatabase(), Test_LockUnlockServiceDatabaseWithServiceStart(), test_no_stop(), test_open_scm(), test_open_svc(), test_query_svc(), test_queryconfig2(), Test_QueryLockStatusA(), Test_QueryLockStatusW(), Test_QueryServiceConfig2A(), Test_QueryServiceConfig2W(), test_refcount(), test_regconnectregistry(), test_runner(), test_sequence(), test_service(), test_servicenotify(), test_SetupDiInstallClassExA(), test_SetupInstallServicesFromInfSectionExA(), test_SetupInstallServicesFromInfSectionExW(), test_start_stop(), test_start_stop_services(), test_wow64(), ThemeWaitForServiceReady(), TV1_AddDependantsToTree(), TV2_GetDependants(), TV2_HasDependantServices(), uninstallService(), UnregisterDriver(), UpdateServiceStatus(), VfdConfigDriver(), VfdGetDriverConfig(), VfdGetDriverState(), VfdInstallDriver(), VfdRemoveDriver(), VfdStartDriver(), VfdStopDriver(), and WahDisableNonIFSHandleSupport().

◆ ControlService()

WINADVAPI BOOL WINAPI ControlService ( SC_HANDLE  hService,
DWORD  dwControl,
LPSERVICE_STATUS  lpServiceStatus 
)

Definition at line 622 of file scm.c.

625{
626 DWORD dwError;
627
628 TRACE("ControlService(%p %lu %p)\n",
629 hService, dwControl, lpServiceStatus);
630
632 {
633 dwError = RControlService((SC_RPC_HANDLE)hService,
634 dwControl,
635 lpServiceStatus);
636 }
638 {
640 }
642
643 if (dwError != ERROR_SUCCESS)
644 {
645 TRACE("RControlService() failed (Error %lu)\n", dwError);
646 SetLastError(dwError);
647 return FALSE;
648 }
649
650 TRACE("ControlService() done\n");
651
652 return TRUE;
653}
DWORD WINAPI RControlService(SC_RPC_HANDLE hService, DWORD dwControl, LPSERVICE_STATUS lpServiceStatus)
Definition: rpcserver.c:1005

Referenced by cmdContinue(), cmdPause(), CmdRemoveService(), cmdStop(), Control(), control_service(), DoControlService(), DoStopService(), KmtStopService(), my_test_server(), RequestAddition(), RunTest(), SchedEventLogoff(), SchedStartShell(), SetupInstallServicesFromInfSectionExW(), SHELL32_ControlService(), stop_service(), stop_service_dependents(), StopDriver(), stopService(), Test_LockUnlockServiceDatabaseWithServiceStart(), test_no_stop(), test_service(), test_servicenotify(), test_start_stop_services(), try_start_stop(), and VfdStopDriver().

◆ CreateServiceA()

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 
)

Definition at line 680 of file scm.c.

693{
694 SC_HANDLE hService = NULL;
695 DWORD dwDependenciesLength = 0;
696 DWORD dwError;
697 SIZE_T cchLength;
698 LPCSTR lpStr;
699 DWORD dwPasswordSize = 0;
700 LPWSTR lpPasswordW = NULL;
701 LPBYTE lpEncryptedPassword = NULL;
702
703 TRACE("CreateServiceA(%p %s %s %lx %lu %lu %lu %s %s %p %s %s %s)\n",
705 dwDesiredAccess, dwServiceType, dwStartType, dwErrorControl,
706 debugstr_a(lpBinaryPathName), debugstr_a(lpLoadOrderGroup), lpdwTagId,
707 debugstr_a(lpDependencies), debugstr_a(lpServiceStartName), debugstr_a(lpPassword));
708
709 if (!hSCManager)
710 {
712 return NULL;
713 }
714
715 /* Calculate the Dependencies length */
716 if (lpDependencies != NULL)
717 {
718 lpStr = lpDependencies;
719 while (*lpStr)
720 {
721 cchLength = strlen(lpStr) + 1;
722 dwDependenciesLength += (DWORD)cchLength;
723 lpStr = lpStr + cchLength;
724 }
725 dwDependenciesLength++;
726 }
727
728 if (lpPassword != NULL)
729 {
730 /* Convert the password to unicode */
731 lpPasswordW = HeapAlloc(GetProcessHeap(),
733 (strlen(lpPassword) + 1) * sizeof(WCHAR));
734 if (lpPasswordW == NULL)
735 {
737 return FALSE;
738 }
739
741 0,
742 lpPassword,
743 -1,
744 lpPasswordW,
745 (int)(strlen(lpPassword) + 1));
746
747 /* Encrypt the password */
749 lpPasswordW,
750 &lpEncryptedPassword,
751 &dwPasswordSize);
752 if (dwError != ERROR_SUCCESS)
753 goto done;
754 }
755
757 {
759 (LPSTR)lpServiceName,
761 dwDesiredAccess,
762 dwServiceType,
763 dwStartType,
764 dwErrorControl,
765 (LPSTR)lpBinaryPathName,
766 (LPSTR)lpLoadOrderGroup,
767 lpdwTagId,
768 (LPBYTE)lpDependencies,
769 dwDependenciesLength,
770 (LPSTR)lpServiceStartName,
771 lpEncryptedPassword,
772 dwPasswordSize,
773 (SC_RPC_HANDLE *)&hService);
774 }
776 {
778 }
780
781done:
782 if (lpPasswordW != NULL)
783 {
784 /* Wipe and release the password buffers */
785 SecureZeroMemory(lpPasswordW, (wcslen(lpPasswordW) + 1) * sizeof(WCHAR));
786 HeapFree(GetProcessHeap(), 0, lpPasswordW);
787
788 if (lpEncryptedPassword != NULL)
789 {
790 SecureZeroMemory(lpEncryptedPassword, dwPasswordSize);
791 HeapFree(GetProcessHeap(), 0, lpEncryptedPassword);
792 }
793 }
794
795 SetLastError(dwError);
796 if (dwError != ERROR_SUCCESS)
797 {
798 TRACE("RCreateServiceA() failed (Error %lu)\n", dwError);
799 return NULL;
800 }
801
802 return hService;
803}
DWORD WINAPI RCreateServiceA(SC_RPC_HANDLE hSCManager, LPSTR lpServiceName, LPSTR lpDisplayName, DWORD dwDesiredAccess, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPSTR lpBinaryPathName, LPSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPBYTE lpDependencies, DWORD dwDependSize, LPSTR lpServiceStartName, LPBYTE lpPassword, DWORD dwPwSize, LPSC_RPC_HANDLE lpServiceHandle)
Definition: rpcserver.c:3607
SC_HANDLE hSCManager
Definition: sc.c:12

Referenced by InstallService(), register_service(), register_service_exA(), test_create_delete_svc(), test_delete_services(), test_get_displayname(), test_queryconfig2(), test_refcount(), test_sequence(), test_start_stop(), and test_wow64().

◆ CreateServiceW()

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 
)

Definition at line 812 of file scm.c.

825{
826 SC_HANDLE hService = NULL;
827 DWORD dwDependenciesLength = 0;
828 DWORD dwError;
829 SIZE_T cchLength;
830 LPCWSTR lpStr;
831 DWORD dwPasswordSize = 0;
832 LPBYTE lpEncryptedPassword = NULL;
833
834 TRACE("CreateServiceW(%p %s %s %lx %lu %lu %lu %s %s %p %s %s %s)\n",
836 dwDesiredAccess, dwServiceType, dwStartType, dwErrorControl,
837 debugstr_w(lpBinaryPathName), debugstr_w(lpLoadOrderGroup), lpdwTagId,
838 debugstr_w(lpDependencies), debugstr_w(lpServiceStartName), debugstr_w(lpPassword));
839
840 if (!hSCManager)
841 {
843 return NULL;
844 }
845
846 /* Calculate the Dependencies length */
847 if (lpDependencies != NULL)
848 {
849 lpStr = lpDependencies;
850 while (*lpStr)
851 {
852 cchLength = wcslen(lpStr) + 1;
853 dwDependenciesLength += (DWORD)cchLength;
854 lpStr = lpStr + cchLength;
855 }
856 dwDependenciesLength++;
857 dwDependenciesLength *= sizeof(WCHAR);
858 }
859
860 if (lpPassword != NULL)
861 {
862 /* Encrypt the password */
864 lpPassword,
865 &lpEncryptedPassword,
866 &dwPasswordSize);
867 if (dwError != ERROR_SUCCESS)
868 goto done;
869 }
870
872 {
874 lpServiceName,
876 dwDesiredAccess,
877 dwServiceType,
878 dwStartType,
879 dwErrorControl,
880 lpBinaryPathName,
881 lpLoadOrderGroup,
882 lpdwTagId,
883 (LPBYTE)lpDependencies,
884 dwDependenciesLength,
885 lpServiceStartName,
886 lpEncryptedPassword,
887 dwPasswordSize,
888 (SC_RPC_HANDLE *)&hService);
889 }
891 {
893 }
895
896done:
897 if (lpEncryptedPassword != NULL)
898 {
899 /* Wipe and release the password buffers */
900 SecureZeroMemory(lpEncryptedPassword, dwPasswordSize);
901 HeapFree(GetProcessHeap(), 0, lpEncryptedPassword);
902 }
903
904 SetLastError(dwError);
905 if (dwError != ERROR_SUCCESS)
906 {
907 TRACE("RCreateServiceW() failed (Error %lu)\n", dwError);
908 return NULL;
909 }
910
911 return hService;
912}
DWORD WINAPI RCreateServiceW(SC_RPC_HANDLE hSCManager, LPCWSTR lpServiceName, LPCWSTR lpDisplayName, DWORD dwDesiredAccess, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPCWSTR lpBinaryPathName, LPCWSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPBYTE lpDependencies, DWORD dwDependSize, LPCWSTR lpServiceStartName, LPBYTE lpPassword, DWORD dwPwSize, LPSC_RPC_HANDLE lpServiceHandle)
Definition: rpcserver.c:2287

Referenced by _RunRemoteTest(), DoCreate(), DoRegServer(), InstallOneService(), ITERATE_InstallService(), MakeService(), register_service(), register_service_exW(), RegisterDriver(), RegisterService(), and Test_CreateService().

◆ DECLARE_HANDLE() [1/2]

DECLARE_HANDLE ( SC_HANDLE  )

◆ DECLARE_HANDLE() [2/2]

DECLARE_HANDLE ( SERVICE_STATUS_HANDLE  )

◆ DeleteService()

◆ EnumDependentServicesA()

WINADVAPI BOOL WINAPI EnumDependentServicesA ( SC_HANDLE  hService,
DWORD  dwServiceState,
LPENUM_SERVICE_STATUSA  lpServices,
DWORD  cbBufSize,
LPDWORD  pcbBytesNeeded,
LPDWORD  lpServicesReturned 
)

Definition at line 955 of file scm.c.

961{
963 LPENUM_SERVICE_STATUSA lpStatusPtr;
964 DWORD dwBufferSize;
965 DWORD dwError;
966 DWORD dwCount;
967
968 TRACE("EnumDependentServicesA(%p %lu %p %lu %p %p)\n",
969 hService, dwServiceState, lpServices, cbBufSize,
970 pcbBytesNeeded, lpServicesReturned);
971
972 if (lpServices == NULL || cbBufSize < sizeof(ENUM_SERVICE_STATUSA))
973 {
974 lpStatusPtr = &ServiceStatus;
975 dwBufferSize = sizeof(ENUM_SERVICE_STATUSA);
976 }
977 else
978 {
979 lpStatusPtr = lpServices;
980 dwBufferSize = cbBufSize;
981 }
982
984 {
985 dwError = REnumDependentServicesA((SC_RPC_HANDLE)hService,
986 dwServiceState,
987 (LPBYTE)lpStatusPtr,
988 dwBufferSize,
990 lpServicesReturned);
991 }
993 {
995 }
997
998 if (dwError == ERROR_SUCCESS || dwError == ERROR_MORE_DATA)
999 {
1000 for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
1001 {
1002 if (lpStatusPtr->lpServiceName)
1003 lpStatusPtr->lpServiceName =
1004 (LPSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpServiceName);
1005
1006 if (lpStatusPtr->lpDisplayName)
1007 lpStatusPtr->lpDisplayName =
1008 (LPSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpDisplayName);
1009
1010 lpStatusPtr++;
1011 }
1012 }
1013
1014 if (dwError != ERROR_SUCCESS)
1015 {
1016 TRACE("REnumDependentServicesA() failed (Error %lu)\n", dwError);
1017 SetLastError(dwError);
1018 return FALSE;
1019 }
1020
1021 TRACE("EnumDependentServicesA() done\n");
1022
1023 return TRUE;
1024}
static SERVICE_STATUS ServiceStatus
Definition: browser.c:23
DWORD WINAPI REnumDependentServicesA(SC_RPC_HANDLE hService, DWORD dwServiceState, LPBYTE lpServices, DWORD cbBufSize, LPBOUNDED_DWORD_256K pcbBytesNeeded, LPBOUNDED_DWORD_256K lpServicesReturned)
Definition: rpcserver.c:3760
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define ULONG_PTR
Definition: config.h:101
_In_ DWORD _In_ DWORD _Out_ LPDWORD pcbBytesNeeded
Definition: winsvc.h:431
_In_ DWORD _In_ DWORD cbBufSize
Definition: winsvc.h:430
struct _ENUM_SERVICE_STATUSA ENUM_SERVICE_STATUSA
uint32_t ULONG_PTR
Definition: typedefs.h:65

◆ EnumDependentServicesW()

WINADVAPI BOOL WINAPI EnumDependentServicesW ( SC_HANDLE  hService,
DWORD  dwServiceState,
LPENUM_SERVICE_STATUSW  lpServices,
DWORD  cbBufSize,
LPDWORD  pcbBytesNeeded,
LPDWORD  lpServicesReturned 
)

Definition at line 1033 of file scm.c.

1039{
1041 LPENUM_SERVICE_STATUSW lpStatusPtr;
1042 DWORD dwBufferSize;
1043 DWORD dwError;
1044 DWORD dwCount;
1045
1046 TRACE("EnumDependentServicesW(%p %lu %p %lu %p %p)\n",
1047 hService, dwServiceState, lpServices, cbBufSize,
1048 pcbBytesNeeded, lpServicesReturned);
1049
1050 if (lpServices == NULL || cbBufSize < sizeof(ENUM_SERVICE_STATUSW))
1051 {
1052 lpStatusPtr = &ServiceStatus;
1053 dwBufferSize = sizeof(ENUM_SERVICE_STATUSW);
1054 }
1055 else
1056 {
1057 lpStatusPtr = lpServices;
1058 dwBufferSize = cbBufSize;
1059 }
1060
1062 {
1063 dwError = REnumDependentServicesW((SC_RPC_HANDLE)hService,
1064 dwServiceState,
1065 (LPBYTE)lpStatusPtr,
1066 dwBufferSize,
1068 lpServicesReturned);
1069 }
1071 {
1073 }
1075
1076 if (dwError == ERROR_SUCCESS || dwError == ERROR_MORE_DATA)
1077 {
1078 for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
1079 {
1080 if (lpStatusPtr->lpServiceName)
1081 lpStatusPtr->lpServiceName =
1082 (LPWSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpServiceName);
1083
1084 if (lpStatusPtr->lpDisplayName)
1085 lpStatusPtr->lpDisplayName =
1086 (LPWSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpDisplayName);
1087
1088 lpStatusPtr++;
1089 }
1090 }
1091
1092 if (dwError != ERROR_SUCCESS)
1093 {
1094 TRACE("REnumDependentServicesW() failed (Error %lu)\n", dwError);
1095 SetLastError(dwError);
1096 return FALSE;
1097 }
1098
1099 TRACE("EnumDependentServicesW() done\n");
1100
1101 return TRUE;
1102}
DWORD WINAPI REnumDependentServicesW(SC_RPC_HANDLE hService, DWORD dwServiceState, LPBYTE lpServices, DWORD cbBufSize, LPBOUNDED_DWORD_256K pcbBytesNeeded, LPBOUNDED_DWORD_256K lpServicesReturned)
Definition: rpcserver.c:2722
struct _ENUM_SERVICE_STATUSW ENUM_SERVICE_STATUSW
LPWSTR lpDisplayName
Definition: winsvc.h:137
LPWSTR lpServiceName
Definition: winsvc.h:136

Referenced by stop_service_dependents(), and TV2_GetDependants().

◆ EnumServicesStatusA()

WINADVAPI BOOL WINAPI EnumServicesStatusA ( SC_HANDLE  hSCManager,
DWORD  dwServiceType,
DWORD  dwServiceState,
LPENUM_SERVICE_STATUSA  lpServices,
DWORD  cbBufSize,
LPDWORD  pcbBytesNeeded,
LPDWORD  lpServicesReturned,
LPDWORD  lpResumeHandle 
)

Definition at line 1222 of file scm.c.

1230{
1232 LPENUM_SERVICE_STATUSA lpStatusPtr;
1233 DWORD dwBufferSize;
1234 DWORD dwError;
1235 DWORD dwCount;
1236
1237 TRACE("EnumServicesStatusA(%p %lu %lu %p %lu %p %p %p)\n",
1238 hSCManager, dwServiceType, dwServiceState, lpServices,
1239 cbBufSize, pcbBytesNeeded, lpServicesReturned, lpResumeHandle);
1240
1241 if (!hSCManager)
1242 {
1244 return FALSE;
1245 }
1246
1247 if (pcbBytesNeeded == NULL || lpServicesReturned == NULL)
1248 {
1250 return FALSE;
1251 }
1252
1253 if (lpServices == NULL || cbBufSize < sizeof(ENUM_SERVICE_STATUSA))
1254 {
1255 lpStatusPtr = &ServiceStatus;
1256 dwBufferSize = sizeof(ENUM_SERVICE_STATUSA);
1257 }
1258 else
1259 {
1260 lpStatusPtr = lpServices;
1261 dwBufferSize = cbBufSize;
1262 }
1263
1265 {
1267 dwServiceType,
1268 dwServiceState,
1269 (LPBYTE)lpStatusPtr,
1270 dwBufferSize,
1272 lpServicesReturned,
1273 lpResumeHandle);
1274 }
1276 {
1278 }
1280
1281 if (dwError == ERROR_SUCCESS || dwError == ERROR_MORE_DATA)
1282 {
1283 for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
1284 {
1285 if (lpStatusPtr->lpServiceName)
1286 lpStatusPtr->lpServiceName =
1287 (LPSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpServiceName);
1288
1289 if (lpStatusPtr->lpDisplayName)
1290 lpStatusPtr->lpDisplayName =
1291 (LPSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpDisplayName);
1292
1293 lpStatusPtr++;
1294 }
1295 }
1296
1297 if (dwError != ERROR_SUCCESS)
1298 {
1299 TRACE("REnumServicesStatusA() failed (Error %lu)\n", dwError);
1300 SetLastError(dwError);
1301 return FALSE;
1302 }
1303
1304 TRACE("EnumServicesStatusA() done\n");
1305
1306 return TRUE;
1307}
DWORD WINAPI REnumServicesStatusA(SC_RPC_HANDLE hSCManager, DWORD dwServiceType, DWORD dwServiceState, LPBYTE lpBuffer, DWORD dwBufSize, LPBOUNDED_DWORD_256K pcbBytesNeeded, LPBOUNDED_DWORD_256K lpServicesReturned, LPBOUNDED_DWORD_256K lpResumeHandle)
Definition: rpcserver.c:3914
#define ERROR_INVALID_ADDRESS
Definition: compat.h:106

Referenced by test_enum_svc().

◆ EnumServicesStatusExA()

WINADVAPI BOOL WINAPI EnumServicesStatusExA ( SC_HANDLE  hSCManager,
SC_ENUM_TYPE  InfoLevel,
DWORD  dwServiceType,
DWORD  dwServiceState,
LPBYTE  lpServices,
DWORD  cbBufSize,
LPDWORD  pcbBytesNeeded,
LPDWORD  lpServicesReturned,
LPDWORD  lpResumeHandle,
LPCSTR  pszGroupName 
)

Definition at line 1410 of file scm.c.

1420{
1423 DWORD dwBufferSize;
1424 DWORD dwError;
1425 DWORD dwCount;
1426
1427 TRACE("EnumServicesStatusExA(%p %lu %lu %p %lu %p %p %p %s)\n",
1428 hSCManager, dwServiceType, dwServiceState, lpServices,
1429 cbBufSize, pcbBytesNeeded, lpServicesReturned, lpResumeHandle,
1430 debugstr_a(pszGroupName));
1431
1432 if (InfoLevel != SC_ENUM_PROCESS_INFO)
1433 {
1435 return FALSE;
1436 }
1437
1438 if (!hSCManager)
1439 {
1441 return FALSE;
1442 }
1443
1444 if (pcbBytesNeeded == NULL || lpServicesReturned == NULL)
1445 {
1447 return FALSE;
1448 }
1449
1450 if (lpServices == NULL || cbBufSize < sizeof(ENUM_SERVICE_STATUS_PROCESSA))
1451 {
1452 lpStatusPtr = &ServiceStatus;
1453 dwBufferSize = sizeof(ENUM_SERVICE_STATUS_PROCESSA);
1454 }
1455 else
1456 {
1457 lpStatusPtr = (LPENUM_SERVICE_STATUS_PROCESSA)lpServices;
1458 dwBufferSize = cbBufSize;
1459 }
1460
1462 {
1464 InfoLevel,
1465 dwServiceType,
1466 dwServiceState,
1467 (LPBYTE)lpStatusPtr,
1468 dwBufferSize,
1470 lpServicesReturned,
1471 lpResumeHandle,
1472 (LPSTR)pszGroupName);
1473 }
1475 {
1477 }
1479
1480 if (dwError == ERROR_SUCCESS || dwError == ERROR_MORE_DATA)
1481 {
1482 if (InfoLevel == SC_ENUM_PROCESS_INFO)
1483 {
1484 for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
1485 {
1486 if (lpStatusPtr->lpServiceName)
1487 lpStatusPtr->lpServiceName =
1488 (LPSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpServiceName);
1489
1490 if (lpStatusPtr->lpDisplayName)
1491 lpStatusPtr->lpDisplayName =
1492 (LPSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpDisplayName);
1493
1494 lpStatusPtr++;
1495 }
1496 }
1497 }
1498
1499 if (dwError != ERROR_SUCCESS)
1500 {
1501 TRACE("REnumServicesStatusExA() failed (Error %lu)\n", dwError);
1502 SetLastError(dwError);
1503 return FALSE;
1504 }
1505
1506 TRACE("EnumServicesStatusExA() done\n");
1507
1508 return TRUE;
1509}
DWORD WINAPI REnumServicesStatusExA(SC_RPC_HANDLE hSCManager, SC_ENUM_TYPE InfoLevel, DWORD dwServiceType, DWORD dwServiceState, LPBYTE lpBuffer, DWORD cbBufSize, LPBOUNDED_DWORD_256K pcbBytesNeeded, LPBOUNDED_DWORD_256K lpServicesReturned, LPBOUNDED_DWORD_256K lpResumeIndex, LPCSTR pszGroupName)
Definition: rpcserver.c:6111
struct _ENUM_SERVICE_STATUS_PROCESSA ENUM_SERVICE_STATUS_PROCESSA
struct _ENUM_SERVICE_STATUS_PROCESSA * LPENUM_SERVICE_STATUS_PROCESSA
#define ERROR_INVALID_LEVEL
Definition: winerror.h:318

◆ EnumServicesStatusExW()

WINADVAPI BOOL WINAPI EnumServicesStatusExW ( SC_HANDLE  hSCManager,
SC_ENUM_TYPE  InfoLevel,
DWORD  dwServiceType,
DWORD  dwServiceState,
LPBYTE  lpServices,
DWORD  cbBufSize,
LPDWORD  pcbBytesNeeded,
LPDWORD  lpServicesReturned,
LPDWORD  lpResumeHandle,
LPCWSTR  pszGroupName 
)

Definition at line 1518 of file scm.c.

1528{
1531 DWORD dwBufferSize;
1532 DWORD dwError;
1533 DWORD dwCount;
1534
1535 TRACE("EnumServicesStatusExW(%p %lu %lu %p %lu %p %p %p %s)\n",
1536 hSCManager, dwServiceType, dwServiceState, lpServices,
1537 cbBufSize, pcbBytesNeeded, lpServicesReturned, lpResumeHandle,
1538 debugstr_w(pszGroupName));
1539
1540 if (InfoLevel != SC_ENUM_PROCESS_INFO)
1541 {
1543 return FALSE;
1544 }
1545
1546 if (!hSCManager)
1547 {
1549 return FALSE;
1550 }
1551
1552 if (pcbBytesNeeded == NULL || lpServicesReturned == NULL)
1553 {
1555 return FALSE;
1556 }
1557
1558 if (lpServices == NULL || cbBufSize < sizeof(ENUM_SERVICE_STATUS_PROCESSW))
1559 {
1560 lpStatusPtr = &ServiceStatus;
1561 dwBufferSize = sizeof(ENUM_SERVICE_STATUS_PROCESSW);
1562 }
1563 else
1564 {
1565 lpStatusPtr = (LPENUM_SERVICE_STATUS_PROCESSW)lpServices;
1566 dwBufferSize = cbBufSize;
1567 }
1568
1570 {
1572 InfoLevel,
1573 dwServiceType,
1574 dwServiceState,
1575 (LPBYTE)lpStatusPtr,
1576 dwBufferSize,
1578 lpServicesReturned,
1579 lpResumeHandle,
1580 (LPWSTR)pszGroupName);
1581 }
1583 {
1585 }
1587
1588 if (dwError == ERROR_SUCCESS || dwError == ERROR_MORE_DATA)
1589 {
1590 if (InfoLevel == SC_ENUM_PROCESS_INFO)
1591 {
1592 for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
1593 {
1594 if (lpStatusPtr->lpServiceName)
1595 lpStatusPtr->lpServiceName =
1596 (LPWSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpServiceName);
1597
1598 if (lpStatusPtr->lpDisplayName)
1599 lpStatusPtr->lpDisplayName =
1600 (LPWSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpDisplayName);
1601
1602 lpStatusPtr++;
1603 }
1604 }
1605 }
1606
1607 if (dwError != ERROR_SUCCESS)
1608 {
1609 TRACE("REnumServicesStatusExW() failed (Error %lu)\n", dwError);
1610 SetLastError(dwError);
1611 return FALSE;
1612 }
1613
1614 TRACE("EnumServicesStatusExW() done\n");
1615
1616 return TRUE;
1617}
DWORD WINAPI REnumServicesStatusExW(SC_RPC_HANDLE hSCManager, SC_ENUM_TYPE InfoLevel, DWORD dwServiceType, DWORD dwServiceState, LPBYTE lpBuffer, DWORD cbBufSize, LPBOUNDED_DWORD_256K pcbBytesNeeded, LPBOUNDED_DWORD_256K lpServicesReturned, LPBOUNDED_DWORD_256K lpResumeIndex, LPCWSTR pszGroupName)
Definition: rpcserver.c:6250
struct _ENUM_SERVICE_STATUS_PROCESSW * LPENUM_SERVICE_STATUS_PROCESSW
struct _ENUM_SERVICE_STATUS_PROCESSW ENUM_SERVICE_STATUS_PROCESSW

Referenced by fill_service(), and GetServices().

◆ EnumServicesStatusW()

WINADVAPI BOOL WINAPI EnumServicesStatusW ( SC_HANDLE  hSCManager,
DWORD  dwServiceType,
DWORD  dwServiceState,
LPENUM_SERVICE_STATUSW  lpServices,
DWORD  cbBufSize,
LPDWORD  pcbBytesNeeded,
LPDWORD  lpServicesReturned,
LPDWORD  lpResumeHandle 
)

Definition at line 1316 of file scm.c.

1324{
1326 LPENUM_SERVICE_STATUSW lpStatusPtr;
1327 DWORD dwBufferSize;
1328 DWORD dwError;
1329 DWORD dwCount;
1330
1331 TRACE("EnumServicesStatusW(%p %lu %lu %p %lu %p %p %p)\n",
1332 hSCManager, dwServiceType, dwServiceState, lpServices,
1333 cbBufSize, pcbBytesNeeded, lpServicesReturned, lpResumeHandle);
1334
1335 if (!hSCManager)
1336 {
1338 return FALSE;
1339 }
1340
1341 if (pcbBytesNeeded == NULL || lpServicesReturned == NULL)
1342 {
1344 return FALSE;
1345 }
1346
1347 if (lpServices == NULL || cbBufSize < sizeof(ENUM_SERVICE_STATUSW))
1348 {
1349 lpStatusPtr = &ServiceStatus;
1350 dwBufferSize = sizeof(ENUM_SERVICE_STATUSW);
1351 }
1352 else
1353 {
1354 lpStatusPtr = lpServices;
1355 dwBufferSize = cbBufSize;
1356 }
1357
1359 {
1361 dwServiceType,
1362 dwServiceState,
1363 (LPBYTE)lpStatusPtr,
1364 dwBufferSize,
1366 lpServicesReturned,
1367 lpResumeHandle);
1368 }
1370 {
1372 }
1374
1375 if (dwError == ERROR_SUCCESS || dwError == ERROR_MORE_DATA)
1376 {
1377 for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
1378 {
1379 if (lpStatusPtr->lpServiceName)
1380 lpStatusPtr->lpServiceName =
1381 (LPWSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpServiceName);
1382
1383 if (lpStatusPtr->lpDisplayName)
1384 lpStatusPtr->lpDisplayName =
1385 (LPWSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpDisplayName);
1386
1387 lpStatusPtr++;
1388 }
1389 }
1390
1391 if (dwError != ERROR_SUCCESS)
1392 {
1393 TRACE("REnumServicesStatusW() failed (Error %lu)\n", dwError);
1394 SetLastError(dwError);
1395 return FALSE;
1396 }
1397
1398 TRACE("EnumServicesStatusW() done\n");
1399
1400 return TRUE;
1401}
DWORD WINAPI REnumServicesStatusW(SC_RPC_HANDLE hSCManager, DWORD dwServiceType, DWORD dwServiceState, LPBYTE lpBuffer, DWORD dwBufSize, LPBOUNDED_DWORD_256K pcbBytesNeeded, LPBOUNDED_DWORD_256K lpServicesReturned, LPBOUNDED_DWORD_256K lpResumeHandle)
Definition: rpcserver.c:2857

Referenced by EnumerateRunningServices(), test_enum_svc(), and test_enum_svc_ex().

◆ GetServiceDisplayNameA()

WINADVAPI BOOL WINAPI GetServiceDisplayNameA ( SC_HANDLE  hSCManager,
LPCSTR  lpServiceName,
LPSTR  lpDisplayName,
LPDWORD  lpcchBuffer 
)

Definition at line 1665 of file scm.c.

1669{
1670 DWORD dwError;
1672 CHAR szEmptyName[] = "";
1673
1674 TRACE("GetServiceDisplayNameA(%p %s %p %p)\n",
1675 hSCManager, debugstr_a(lpServiceName), lpDisplayName, lpcchBuffer);
1676
1677 if (!hSCManager)
1678 {
1680 return FALSE;
1681 }
1682
1683 if (!lpDisplayName || *lpcchBuffer < sizeof(CHAR))
1684 {
1685 lpNameBuffer = szEmptyName;
1686 *lpcchBuffer = sizeof(CHAR);
1687 }
1688 else
1689 {
1691 }
1692
1694 {
1696 lpServiceName,
1698 lpcchBuffer);
1699 }
1701 {
1703 }
1705
1706 if (dwError != ERROR_SUCCESS)
1707 {
1708 TRACE("RGetServiceDisplayNameA() failed (Error %lu)\n", dwError);
1709 SetLastError(dwError);
1710 return FALSE;
1711 }
1712
1713 return TRUE;
1714}
#define CHAR(Char)
DWORD WINAPI RGetServiceDisplayNameA(SC_RPC_HANDLE hSCManager, LPCSTR lpServiceName, LPSTR lpDisplayName, LPBOUNDED_DWORD_4K lpcchBuffer)
Definition: rpcserver.c:4475
static LPSTR lpNameBuffer
Definition: secur32.c:50
char CHAR
Definition: xmlstorage.h:175

Referenced by test_get_displayname(), test_get_servicekeyname(), and test_open_svc().

◆ GetServiceDisplayNameW()

WINADVAPI BOOL WINAPI GetServiceDisplayNameW ( SC_HANDLE  hSCManager,
LPCWSTR  lpServiceName,
LPWSTR  lpDisplayName,
LPDWORD  lpcchBuffer 
)

Definition at line 1723 of file scm.c.

1727{
1728 DWORD dwError;
1730 WCHAR szEmptyName[] = L"";
1731
1732 TRACE("GetServiceDisplayNameW(%p %s %p %p)\n",
1733 hSCManager, debugstr_w(lpServiceName), lpDisplayName, lpcchBuffer);
1734
1735 if (!hSCManager)
1736 {
1738 return FALSE;
1739 }
1740
1741 /*
1742 * NOTE: A size of 1 character would be enough, but tests show that
1743 * Windows returns 2 characters instead, certainly due to a WCHAR/bytes
1744 * mismatch in their code.
1745 */
1746 if (!lpDisplayName || *lpcchBuffer < sizeof(WCHAR))
1747 {
1748 lpNameBuffer = szEmptyName;
1749 *lpcchBuffer = sizeof(WCHAR);
1750 }
1751 else
1752 {
1754 }
1755
1757 {
1759 lpServiceName,
1761 lpcchBuffer);
1762 }
1764 {
1766 }
1768
1769 if (dwError != ERROR_SUCCESS)
1770 {
1771 TRACE("RGetServiceDisplayNameW() failed (Error %lu)\n", dwError);
1772 SetLastError(dwError);
1773 return FALSE;
1774 }
1775
1776 return TRUE;
1777}
DWORD WINAPI RGetServiceDisplayNameW(SC_RPC_HANDLE hSCManager, LPCWSTR lpServiceName, LPWSTR lpDisplayName, DWORD *lpcchBuffer)
Definition: rpcserver.c:3332
#define L(x)
Definition: resources.c:13

Referenced by ITERATE_DeleteService(), ITERATE_StartService(), ITERATE_StopService(), and test_get_displayname().

◆ GetServiceKeyNameA()

WINADVAPI BOOL WINAPI GetServiceKeyNameA ( SC_HANDLE  hSCManager,
LPCSTR  lpDisplayName,
LPSTR  lpServiceName,
LPDWORD  lpcchBuffer 
)

Definition at line 1786 of file scm.c.

1790{
1791 DWORD dwError;
1793 CHAR szEmptyName[] = "";
1794
1795 TRACE("GetServiceKeyNameA(%p %s %p %p)\n",
1796 hSCManager, debugstr_a(lpDisplayName), lpServiceName, lpcchBuffer);
1797
1798 if (!hSCManager)
1799 {
1801 return FALSE;
1802 }
1803
1804 if (!lpServiceName || *lpcchBuffer < sizeof(CHAR))
1805 {
1806 lpNameBuffer = szEmptyName;
1807 *lpcchBuffer = sizeof(CHAR);
1808 }
1809 else
1810 {
1811 lpNameBuffer = lpServiceName;
1812 }
1813
1815 {
1819 lpcchBuffer);
1820 }
1822 {
1823 /* HACK: because of a problem with rpcrt4, rpcserver is hacked to return 6 for ERROR_SERVICE_DOES_NOT_EXIST */
1825 }
1827
1828 if (dwError != ERROR_SUCCESS)
1829 {
1830 TRACE("RGetServiceKeyNameA() failed (Error %lu)\n", dwError);
1831 SetLastError(dwError);
1832 return FALSE;
1833 }
1834
1835 return TRUE;
1836}
DWORD WINAPI RGetServiceKeyNameA(SC_RPC_HANDLE hSCManager, LPCSTR lpDisplayName, LPSTR lpServiceName, LPBOUNDED_DWORD_4K lpcchBuffer)
Definition: rpcserver.c:4597

Referenced by test_create_delete_svc(), and test_get_servicekeyname().

◆ GetServiceKeyNameW()

WINADVAPI BOOL WINAPI GetServiceKeyNameW ( SC_HANDLE  hSCManager,
LPCWSTR  lpDisplayName,
LPWSTR  lpServiceName,
LPDWORD  lpcchBuffer 
)

Definition at line 1845 of file scm.c.

1849{
1850 DWORD dwError;
1852 WCHAR szEmptyName[] = L"";
1853
1854 TRACE("GetServiceKeyNameW(%p %s %p %p)\n",
1855 hSCManager, debugstr_w(lpDisplayName), lpServiceName, lpcchBuffer);
1856
1857 if (!hSCManager)
1858 {
1860 return FALSE;
1861 }
1862
1863 /*
1864 * NOTE: A size of 1 character would be enough, but tests show that
1865 * Windows returns 2 characters instead, certainly due to a WCHAR/bytes
1866 * mismatch in their code.
1867 */
1868 if (!lpServiceName || *lpcchBuffer < sizeof(WCHAR))
1869 {
1870 lpNameBuffer = szEmptyName;
1871 *lpcchBuffer = sizeof(WCHAR);
1872 }
1873 else
1874 {
1875 lpNameBuffer = lpServiceName;
1876 }
1877
1879 {
1883 lpcchBuffer);
1884 }
1886 {
1888 }
1890
1891 if (dwError != ERROR_SUCCESS)
1892 {
1893 TRACE("RGetServiceKeyNameW() failed (Error %lu)\n", dwError);
1894 SetLastError(dwError);
1895 return FALSE;
1896 }
1897
1898 return TRUE;
1899}
DWORD WINAPI RGetServiceKeyNameW(SC_RPC_HANDLE hSCManager, LPCWSTR lpDisplayName, LPWSTR lpServiceName, DWORD *lpcchBuffer)
Definition: rpcserver.c:3395

Referenced by test_get_servicekeyname().

◆ LockServiceDatabase()

WINADVAPI SC_LOCK WINAPI LockServiceDatabase ( SC_HANDLE  hSCManager)

Definition at line 1997 of file scm.c.

1998{
1999 SC_LOCK hLock;
2000 DWORD dwError;
2001
2002 TRACE("LockServiceDatabase(%p)\n",
2003 hSCManager);
2004
2006 {
2008 (SC_RPC_LOCK *)&hLock);
2009 }
2011 {
2013 }
2015
2016 if (dwError != ERROR_SUCCESS)
2017 {
2018 TRACE("RLockServiceDatabase() failed (Error %lu)\n", dwError);
2019 SetLastError(dwError);
2020 return NULL;
2021 }
2022
2023 TRACE("hLock = %p\n", hLock);
2024
2025 return hLock;
2026}
DWORD WINAPI RLockServiceDatabase(SC_RPC_HANDLE hSCManager, LPSC_RPC_LOCK lpLock)
Definition: rpcserver.c:1298

Referenced by SetServiceAccount(), SetServiceConfig(), SetServiceDescription(), Test_LockUnlockServiceDatabase(), Test_LockUnlockServiceDatabaseWithServiceStart(), Test_QueryLockStatusA(), and Test_QueryLockStatusW().

◆ NotifyBootConfigStatus()

WINADVAPI BOOL WINAPI NotifyBootConfigStatus ( BOOL  BootAcceptable)

Definition at line 3094 of file scm.c.

3095{
3096 DWORD dwError;
3097
3098 TRACE("NotifyBootConfigStatus(%u)\n",
3099 BootAcceptable);
3100
3102 {
3103 dwError = RNotifyBootConfigStatus(NULL,
3104 BootAcceptable);
3105 }
3107 {
3109 }
3111
3112 if (dwError != ERROR_SUCCESS)
3113 {
3114 TRACE("NotifyBootConfigStatus() failed (Error %lu)\n", dwError);
3115 SetLastError(dwError);
3116 return FALSE;
3117 }
3118
3119 return TRUE;
3120}
DWORD WINAPI RNotifyBootConfigStatus(SVCCTL_HANDLEW lpMachineName, DWORD BootAcceptable)
Definition: rpcserver.c:1864

Referenced by _tmain().

◆ NotifyServiceStatusChangeW()

WINADVAPI DWORD WINAPI NotifyServiceStatusChangeW ( SC_HANDLE  ,
DWORD  ,
SERVICE_NOTIFYW  
)

◆ OpenSCManagerA()

WINADVAPI SC_HANDLE WINAPI OpenSCManagerA ( LPCSTR  lpMachineName,
LPCSTR  lpDatabaseName,
DWORD  dwDesiredAccess 
)

Definition at line 2063 of file scm.c.

2066{
2067 SC_HANDLE hScm = NULL;
2068 DWORD dwError;
2069
2070 TRACE("OpenSCManagerA(%s %s %lx)\n",
2071 debugstr_a(lpMachineName), debugstr_a(lpDatabaseName), dwDesiredAccess);
2072
2074
2076 {
2077 dwError = ROpenSCManagerA((LPSTR)lpMachineName,
2078 (LPSTR)lpDatabaseName,
2079 dwDesiredAccess,
2080 (SC_RPC_HANDLE *)&hScm);
2081 }
2083 {
2085 }
2087
2088 SetLastError(dwError);
2089 if (dwError != ERROR_SUCCESS)
2090 {
2091 TRACE("ROpenSCManagerA() failed (Error %lu)\n", dwError);
2092 return NULL;
2093 }
2094
2095 TRACE("hScm = %p\n", hScm);
2096
2097 return hScm;
2098}
DWORD WINAPI ROpenSCManagerA(LPSTR lpMachineName, LPSTR lpDatabaseName, DWORD dwDesiredAccess, LPSC_RPC_HANDLE lpScHandle)
Definition: rpcserver.c:4021
static VOID WaitForSCManager(VOID)
Definition: scm.c:2030

Referenced by delete_test_service(), RunTest(), sds_absent(), sds_present(), sis_absent(), sis_present(), sss_started(), sss_stopped(), START_TEST(), test_close(), test_create_delete_svc(), test_delete_services(), test_driver_install(), test_enum_svc(), test_enum_svc_ex(), test_EventLog(), test_get_displayname(), test_get_servicekeyname(), test_install_services(), test_install_svc_from(), test_open_scm(), test_open_svc(), test_query_svc(), test_queryconfig2(), Test_QueryLockStatusA(), Test_QueryServiceConfig2A(), test_refcount(), test_regconnectregistry(), test_sequence(), test_SetupDiInstallClassExA(), test_SetupInstallServicesFromInfSectionExA(), test_start_stop(), test_start_stop_services(), and test_wow64().

◆ OpenSCManagerW()

WINADVAPI SC_HANDLE WINAPI OpenSCManagerW ( LPCWSTR  lpMachineName,
LPCWSTR  lpDatabaseName,
DWORD  dwDesiredAccess 
)

Definition at line 2107 of file scm.c.

2110{
2111 SC_HANDLE hScm = NULL;
2112 DWORD dwError;
2113
2114 TRACE("OpenSCManagerW(%s %s %lx)\n",
2115 debugstr_w(lpMachineName), debugstr_w(lpDatabaseName), dwDesiredAccess);
2116
2118
2120 {
2121 dwError = ROpenSCManagerW((LPWSTR)lpMachineName,
2122 (LPWSTR)lpDatabaseName,
2123 dwDesiredAccess,
2124 (SC_RPC_HANDLE *)&hScm);
2125 }
2127 {
2129 }
2131
2132 SetLastError(dwError);
2133 if (dwError != ERROR_SUCCESS)
2134 {
2135 TRACE("ROpenSCManagerW() failed (Error %lu)\n", dwError);
2136 return NULL;
2137 }
2138
2139 TRACE("hScm = %p\n", hScm);
2140
2141 return hScm;
2142}
DWORD WINAPI ROpenSCManagerW(LPWSTR lpMachineName, LPWSTR lpDatabaseName, DWORD dwDesiredAccess, LPSC_RPC_HANDLE lpScHandle)
Definition: rpcserver.c:2883

Referenced by _RunRemoteTest(), cmdStop(), control_service(), DoControlService(), DoCreate(), DoDeleteService(), DoRegServer(), DoStartService(), DoStopService(), DoUnregServer(), EnableUserModePnpManager(), EnumerateRunningServices(), fill_service(), GetServiceConfig(), GetServiceDescription(), GetServiceList(), GetServices(), GetThemeServiceProcessHandle(), I_ScQueryServiceTagInfo(), I_ScValidatePnpService(), InstallOneService(), CShellDispatch::IsServiceRunning(), ITERATE_DeleteService(), ITERATE_InstallService(), ITERATE_StartService(), ITERATE_StopService(), MMSYS_InstallDevice(), my_test_server(), OpenServiceHelper(), RegisterDriver(), RegisterService(), RpcSsConfigureAsNetworkService(), SchedEventLogoff(), SchedStartShell(), ServicesPageWndProc(), SetServiceAccount(), SetServiceConfig(), SetServiceDescription(), SetupStartService(), start_local_service(), start_rpcss(), start_service(), START_TEST(), StartDriver(), StartNetworkServices(), StartOneService(), stop_service(), StopDriver(), Test_CreateService(), Test_LockUnlockServiceDatabase(), Test_LockUnlockServiceDatabaseWithServiceStart(), Test_QueryLockStatusW(), Test_QueryServiceConfig2W(), test_service(), test_SetupInstallServicesFromInfSectionExW(), ThemeWaitForServiceReady(), TV1_AddDependantsToTree(), TV2_GetDependants(), TV2_HasDependantServices(), UnregisterDriver(), and UpdateServiceStatus().

◆ OpenServiceA()

WINADVAPI SC_HANDLE WINAPI OpenServiceA ( SC_HANDLE  hSCManager,
LPCSTR  lpServiceName,
DWORD  dwDesiredAccess 
)

Definition at line 2151 of file scm.c.

2154{
2155 SC_HANDLE hService = NULL;
2156 DWORD dwError;
2157
2158 TRACE("OpenServiceA(%p %s %lx)\n",
2159 hSCManager, debugstr_a(lpServiceName), dwDesiredAccess);
2160
2161 if (!hSCManager)
2162 {
2164 return NULL;
2165 }
2166
2168 {
2170 (LPSTR)lpServiceName,
2171 dwDesiredAccess,
2172 (SC_RPC_HANDLE *)&hService);
2173 }
2175 {
2177 }
2179
2180 SetLastError(dwError);
2181 if (dwError != ERROR_SUCCESS)
2182 {
2183 TRACE("ROpenServiceA() failed (Error %lu)\n", dwError);
2184 return NULL;
2185 }
2186
2187 TRACE("hService = %p\n", hService);
2188
2189 return hService;
2190}
DWORD WINAPI ROpenServiceA(SC_RPC_HANDLE hSCManager, LPSTR lpServiceName, DWORD dwDesiredAccess, LPSC_RPC_HANDLE lpServiceHandle)
Definition: rpcserver.c:4059

Referenced by delete_test_service(), sds_absent(), sds_present(), sis_absent(), sis_present(), sss_started(), sss_stopped(), test_create_delete_svc(), test_delete_services(), test_driver_install(), test_EventLog(), test_get_displayname(), test_get_servicekeyname(), test_install_services(), test_install_svc_from(), test_open_svc(), test_query_svc(), test_queryconfig2(), Test_QueryServiceConfig2A(), test_refcount(), test_sequence(), test_servicenotify(), test_SetupDiInstallClassExA(), test_SetupInstallServicesFromInfSectionExA(), test_start_stop(), and test_start_stop_services().

◆ OpenServiceW()

WINADVAPI SC_HANDLE WINAPI OpenServiceW ( SC_HANDLE  hSCManager,
LPCWSTR  lpServiceName,
DWORD  dwDesiredAccess 
)

Definition at line 2199 of file scm.c.

2202{
2203 SC_HANDLE hService = NULL;
2204 DWORD dwError;
2205
2206 TRACE("OpenServiceW(%p %s %lx)\n",
2207 hSCManager, debugstr_w(lpServiceName), dwDesiredAccess);
2208
2209 if (!hSCManager)
2210 {
2212 return NULL;
2213 }
2214
2216 {
2218 (LPWSTR)lpServiceName,
2219 dwDesiredAccess,
2220 (SC_RPC_HANDLE *)&hService);
2221 }
2223 {
2225 }
2227
2228 SetLastError(dwError);
2229 if (dwError != ERROR_SUCCESS)
2230 {
2231 TRACE("ROpenServiceW() failed (Error %lu)\n", dwError);
2232 return NULL;
2233 }
2234
2235 TRACE("hService = %p\n", hService);
2236
2237 return hService;
2238}
DWORD WINAPI ROpenServiceW(SC_RPC_HANDLE hSCManager, LPWSTR lpServiceName, DWORD dwDesiredAccess, LPSC_RPC_HANDLE lpServiceHandle)
Definition: rpcserver.c:2935

Referenced by _RunRemoteTest(), AddService(), cmdStop(), control_service(), DoControlService(), DoDeleteService(), DoStartService(), DoStopService(), DoUnregServer(), EnableUserModePnpManager(), GetServiceConfig(), GetServiceDescription(), GetThemeServiceProcessHandle(), InstallOneService(), CShellDispatch::IsServiceRunning(), ITERATE_DeleteService(), ITERATE_StartService(), MMSYS_InstallDevice(), OpenServiceHelper(), PlayLogonSoundThread(), query_service_config(), RpcSsConfigureAsNetworkService(), SchedEventLogoff(), SchedStartShell(), ServicesPageWndProc(), SetServiceAccount(), SetServiceConfig(), SetServiceDescription(), SetupStartService(), start_local_service(), start_rpcss(), start_service(), StartDriver(), StartNetworkServices(), StartOneService(), stop_service(), stop_service_dependents(), StopDriver(), Test_LockUnlockServiceDatabaseWithServiceStart(), Test_QueryServiceConfig2W(), test_service(), test_SetupInstallServicesFromInfSectionExW(), ThemeWaitForServiceReady(), TV1_AddDependantsToTree(), TV2_GetDependants(), TV2_HasDependantServices(), UnregisterDriver(), and UpdateServiceStatus().

◆ QueryServiceConfig2A()

WINADVAPI BOOL WINAPI QueryServiceConfig2A ( SC_HANDLE  hService,
DWORD  dwInfoLevel,
LPBYTE  lpBuffer,
DWORD  cbBufSize,
LPDWORD  pcbBytesNeeded 
)

Definition at line 2413 of file scm.c.

2418{
2419 SERVICE_DESCRIPTIONA ServiceDescription;
2420 SERVICE_FAILURE_ACTIONSA ServiceFailureActions;
2421 LPBYTE lpTempBuffer;
2422 BOOL bUseTempBuffer = FALSE;
2423 DWORD dwBufferSize;
2424 DWORD dwError;
2425
2426 TRACE("QueryServiceConfig2A(%p %lu %p %lu %p)\n",
2428
2429 lpTempBuffer = lpBuffer;
2430 dwBufferSize = cbBufSize;
2431
2432 switch (dwInfoLevel)
2433 {
2435 if ((lpBuffer == NULL) || (cbBufSize < sizeof(SERVICE_DESCRIPTIONA)))
2436 {
2437 lpTempBuffer = (LPBYTE)&ServiceDescription;
2438 dwBufferSize = sizeof(SERVICE_DESCRIPTIONA);
2439 bUseTempBuffer = TRUE;
2440 }
2441 break;
2442
2444 if ((lpBuffer == NULL) || (cbBufSize < sizeof(SERVICE_FAILURE_ACTIONSA)))
2445 {
2446 lpTempBuffer = (LPBYTE)&ServiceFailureActions;
2447 dwBufferSize = sizeof(SERVICE_FAILURE_ACTIONSA);
2448 bUseTempBuffer = TRUE;
2449 }
2450 break;
2451
2452 default:
2453 WARN("Unknown info level 0x%lx\n", dwInfoLevel);
2455 return FALSE;
2456 }
2457
2459 {
2460 dwError = RQueryServiceConfig2A((SC_RPC_HANDLE)hService,
2462 lpTempBuffer,
2463 dwBufferSize,
2465 }
2467 {
2469 }
2471
2472 if (dwError != ERROR_SUCCESS)
2473 {
2474 TRACE("RQueryServiceConfig2A() failed (Error %lu)\n", dwError);
2475 SetLastError(dwError);
2476 return FALSE;
2477 }
2478
2479 if (bUseTempBuffer != FALSE)
2480 {
2481 TRACE("RQueryServiceConfig2A() returns ERROR_INSUFFICIENT_BUFFER\n");
2482 *pcbBytesNeeded = dwBufferSize;
2484 return FALSE;
2485 }
2486
2487 switch (dwInfoLevel)
2488 {
2490 {
2491 LPSERVICE_DESCRIPTIONA lpPtr = (LPSERVICE_DESCRIPTIONA)lpTempBuffer;
2492
2493 if (lpPtr->lpDescription != NULL)
2494 lpPtr->lpDescription =
2495 (LPSTR)((ULONG_PTR)lpPtr + (ULONG_PTR)lpPtr->lpDescription);
2496 }
2497 break;
2498
2500 {
2502
2503 if (lpPtr->lpRebootMsg != NULL)
2504 lpPtr->lpRebootMsg =
2505 (LPSTR)((ULONG_PTR)lpPtr + (ULONG_PTR)lpPtr->lpRebootMsg);
2506
2507 if (lpPtr->lpCommand != NULL)
2508 lpPtr->lpCommand =
2509 (LPSTR)((ULONG_PTR)lpPtr + (ULONG_PTR)lpPtr->lpCommand);
2510
2511 if (lpPtr->lpsaActions != NULL)
2512 lpPtr->lpsaActions =
2513 (LPSC_ACTION)((ULONG_PTR)lpPtr + (ULONG_PTR)lpPtr->lpsaActions);
2514 }
2515 break;
2516 }
2517
2518 TRACE("QueryServiceConfig2A() done\n");
2519
2520 return TRUE;
2521}
DWORD WINAPI RQueryServiceConfig2A(SC_RPC_HANDLE hService, DWORD dwInfoLevel, LPBYTE lpBuffer, DWORD cbBufSize, LPBOUNDED_DWORD_8K pcbBytesNeeded)
Definition: rpcserver.c:5567
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
unsigned int BOOL
Definition: ntddk_ex.h:94
_Out_ LPWSTR lpBuffer
Definition: netsh.h:68
struct _SERVICE_DESCRIPTIONA SERVICE_DESCRIPTIONA
struct _SERVICE_FAILURE_ACTIONSA * LPSERVICE_FAILURE_ACTIONSA
struct _SC_ACTION * LPSC_ACTION
struct _SERVICE_DESCRIPTIONA * LPSERVICE_DESCRIPTIONA
struct _SERVICE_FAILURE_ACTIONSA SERVICE_FAILURE_ACTIONSA
SC_ACTION * lpsaActions
Definition: winsvc.h:219

Referenced by QueryConfig2A().

◆ QueryServiceConfig2W()

WINADVAPI BOOL WINAPI QueryServiceConfig2W ( SC_HANDLE  hService,
DWORD  dwInfoLevel,
LPBYTE  lpBuffer,
DWORD  cbBufSize,
LPDWORD  pcbBytesNeeded 
)

Definition at line 2530 of file scm.c.

2535{
2536 SERVICE_DESCRIPTIONW ServiceDescription;
2537 SERVICE_FAILURE_ACTIONSW ServiceFailureActions;
2538 LPBYTE lpTempBuffer;
2539 BOOL bUseTempBuffer = FALSE;
2540 DWORD dwBufferSize;
2541 DWORD dwError;
2542
2543 TRACE("QueryServiceConfig2W(%p %lu %p %lu %p)\n",
2545
2546 lpTempBuffer = lpBuffer;
2547 dwBufferSize = cbBufSize;
2548
2549 switch (dwInfoLevel)
2550 {
2552 if ((lpBuffer == NULL) || (cbBufSize < sizeof(SERVICE_DESCRIPTIONW)))
2553 {
2554 lpTempBuffer = (LPBYTE)&ServiceDescription;
2555 dwBufferSize = sizeof(SERVICE_DESCRIPTIONW);
2556 bUseTempBuffer = TRUE;
2557 }
2558 break;
2559
2561 if ((lpBuffer == NULL) || (cbBufSize < sizeof(SERVICE_FAILURE_ACTIONSW)))
2562 {
2563 lpTempBuffer = (LPBYTE)&ServiceFailureActions;
2564 dwBufferSize = sizeof(SERVICE_FAILURE_ACTIONSW);
2565 bUseTempBuffer = TRUE;
2566 }
2567 break;
2568
2569 default:
2570 WARN("Unknown info level 0x%lx\n", dwInfoLevel);
2572 return FALSE;
2573 }
2574
2576 {
2577 dwError = RQueryServiceConfig2W((SC_RPC_HANDLE)hService,
2579 lpTempBuffer,
2580 dwBufferSize,
2582 }
2584 {
2586 }
2588
2589 if (dwError != ERROR_SUCCESS)
2590 {
2591 TRACE("RQueryServiceConfig2W() failed (Error %lu)\n", dwError);
2592 SetLastError(dwError);
2593 return FALSE;
2594 }
2595
2596 if (bUseTempBuffer != FALSE)
2597 {
2598 TRACE("RQueryServiceConfig2W() returns ERROR_INSUFFICIENT_BUFFER\n");
2599 *pcbBytesNeeded = dwBufferSize;
2601 return FALSE;
2602 }
2603
2604 switch (dwInfoLevel)
2605 {
2607 {
2608 LPSERVICE_DESCRIPTIONW lpPtr = (LPSERVICE_DESCRIPTIONW)lpTempBuffer;
2609
2610 if (lpPtr->lpDescription != NULL)
2611 lpPtr->lpDescription =
2612 (LPWSTR)((ULONG_PTR)lpPtr + (ULONG_PTR)lpPtr->lpDescription);
2613 }
2614 break;
2615
2617 {
2619
2620 if (lpPtr->lpRebootMsg != NULL)
2621 lpPtr->lpRebootMsg =
2622 (LPWSTR)((ULONG_PTR)lpPtr + (ULONG_PTR)lpPtr->lpRebootMsg);
2623
2624 if (lpPtr->lpCommand != NULL)
2625 lpPtr->lpCommand =
2626 (LPWSTR)((ULONG_PTR)lpPtr + (ULONG_PTR)lpPtr->lpCommand);
2627
2628 if (lpPtr->lpsaActions != NULL)
2629 lpPtr->lpsaActions =
2630 (LPSC_ACTION)((ULONG_PTR)lpPtr + (ULONG_PTR)lpPtr->lpsaActions);
2631 }
2632 break;
2633 }
2634
2635 TRACE("QueryServiceConfig2W() done\n");
2636
2637 return TRUE;
2638}
DWORD WINAPI RQueryServiceConfig2W(SC_RPC_HANDLE hService, DWORD dwInfoLevel, LPBYTE lpBuffer, DWORD cbBufSize, LPBOUNDED_DWORD_8K pcbBytesNeeded)
Definition: rpcserver.c:5814
struct _SERVICE_FAILURE_ACTIONSW SERVICE_FAILURE_ACTIONSW
struct _SERVICE_DESCRIPTIONW SERVICE_DESCRIPTIONW
struct _SERVICE_DESCRIPTIONW * LPSERVICE_DESCRIPTIONW
struct _SERVICE_FAILURE_ACTIONSW * LPSERVICE_FAILURE_ACTIONSW
LPWSTR lpDescription
Definition: winsvc.h:202
SC_ACTION * lpsaActions
Definition: winsvc.h:226

Referenced by GetServiceDescription(), and QueryConfig2W().

◆ QueryServiceConfigA()

WINADVAPI BOOL WINAPI QueryServiceConfigA ( SC_HANDLE  hService,
LPQUERY_SERVICE_CONFIGA  lpServiceConfig,
DWORD  cbBufSize,
LPDWORD  pcbBytesNeeded 
)

Definition at line 2247 of file scm.c.

2251{
2252 QUERY_SERVICE_CONFIGA ServiceConfig;
2253 LPQUERY_SERVICE_CONFIGA lpConfigPtr;
2254 DWORD dwBufferSize;
2255 DWORD dwError;
2256
2257 TRACE("QueryServiceConfigA(%p %p %lu %p)\n",
2258 hService, lpServiceConfig, cbBufSize, pcbBytesNeeded);
2259
2260 if (lpServiceConfig == NULL ||
2262 {
2263 lpConfigPtr = &ServiceConfig;
2264 dwBufferSize = sizeof(QUERY_SERVICE_CONFIGA);
2265 }
2266 else
2267 {
2268 lpConfigPtr = lpServiceConfig;
2269 dwBufferSize = cbBufSize;
2270 }
2271
2273 {
2274 dwError = RQueryServiceConfigA((SC_RPC_HANDLE)hService,
2275 (LPBYTE)lpConfigPtr,
2276 dwBufferSize,
2278 }
2280 {
2282 }
2284
2285 if (dwError != ERROR_SUCCESS)
2286 {
2287 TRACE("RQueryServiceConfigA() failed (Error %lu)\n", dwError);
2288 SetLastError(dwError);
2289 return FALSE;
2290 }
2291
2292 /* Adjust the pointers */
2293 if (lpConfigPtr->lpBinaryPathName)
2294 lpConfigPtr->lpBinaryPathName =
2295 (LPSTR)((ULONG_PTR)lpConfigPtr +
2296 (ULONG_PTR)lpConfigPtr->lpBinaryPathName);
2297
2298 if (lpConfigPtr->lpLoadOrderGroup)
2299 lpConfigPtr->lpLoadOrderGroup =
2300 (LPSTR)((ULONG_PTR)lpConfigPtr +
2301 (ULONG_PTR)lpConfigPtr->lpLoadOrderGroup);
2302
2303 if (lpConfigPtr->lpDependencies)
2304 lpConfigPtr->lpDependencies =
2305 (LPSTR)((ULONG_PTR)lpConfigPtr +
2306 (ULONG_PTR)lpConfigPtr->lpDependencies);
2307
2308 if (lpConfigPtr->lpServiceStartName)
2309 lpConfigPtr->lpServiceStartName =
2310 (LPSTR)((ULONG_PTR)lpConfigPtr +
2311 (ULONG_PTR)lpConfigPtr->lpServiceStartName);
2312
2313 if (lpConfigPtr->lpDisplayName)
2314 lpConfigPtr->lpDisplayName =
2315 (LPSTR)((ULONG_PTR)lpConfigPtr +
2316 (ULONG_PTR)lpConfigPtr->lpDisplayName);
2317
2318 TRACE("QueryServiceConfigA() done\n");
2319
2320 return TRUE;
2321}
DWORD WINAPI RQueryServiceConfigA(SC_RPC_HANDLE hService, LPBYTE lpBuf, DWORD cbBufSize, LPBOUNDED_DWORD_8K pcbBytesNeeded)
Definition: rpcserver.c:4089
struct _QUERY_SERVICE_CONFIGA QUERY_SERVICE_CONFIGA
LPSTR lpServiceStartName
Definition: winsvc.h:158

Referenced by test_EventLog(), and test_sequence().

◆ QueryServiceConfigW()

WINADVAPI BOOL WINAPI QueryServiceConfigW ( SC_HANDLE  hService,
LPQUERY_SERVICE_CONFIGW  lpServiceConfig,
DWORD  cbBufSize,
LPDWORD  pcbBytesNeeded 
)

Definition at line 2330 of file scm.c.

2334{
2335 QUERY_SERVICE_CONFIGW ServiceConfig;
2336 LPQUERY_SERVICE_CONFIGW lpConfigPtr;
2337 DWORD dwBufferSize;
2338 DWORD dwError;
2339
2340 TRACE("QueryServiceConfigW(%p %p %lu %p)\n",
2341 hService, lpServiceConfig, cbBufSize, pcbBytesNeeded);
2342
2343 if (lpServiceConfig == NULL ||
2345 {
2346 lpConfigPtr = &ServiceConfig;
2347 dwBufferSize = sizeof(QUERY_SERVICE_CONFIGW);
2348 }
2349 else
2350 {
2351 lpConfigPtr = lpServiceConfig;
2352 dwBufferSize = cbBufSize;
2353 }
2354
2356 {
2357 dwError = RQueryServiceConfigW((SC_RPC_HANDLE)hService,
2358 (LPBYTE)lpConfigPtr,
2359 dwBufferSize,
2361 }
2363 {
2365 }
2367
2368 if (dwError != ERROR_SUCCESS)
2369 {
2370 TRACE("RQueryServiceConfigW() failed (Error %lu)\n", dwError);
2371 SetLastError(dwError);
2372 return FALSE;
2373 }
2374
2375 /* Adjust the pointers */
2376 if (lpConfigPtr->lpBinaryPathName)
2377 lpConfigPtr->lpBinaryPathName =
2378 (LPWSTR)((ULONG_PTR)lpConfigPtr +
2379 (ULONG_PTR)lpConfigPtr->lpBinaryPathName);
2380
2381 if (lpConfigPtr->lpLoadOrderGroup)
2382 lpConfigPtr->lpLoadOrderGroup =
2383 (LPWSTR)((ULONG_PTR)lpConfigPtr +
2384 (ULONG_PTR)lpConfigPtr->lpLoadOrderGroup);
2385
2386 if (lpConfigPtr->lpDependencies)
2387 lpConfigPtr->lpDependencies =
2388 (LPWSTR)((ULONG_PTR)lpConfigPtr +
2389 (ULONG_PTR)lpConfigPtr->lpDependencies);
2390
2391 if (lpConfigPtr->lpServiceStartName)
2392 lpConfigPtr->lpServiceStartName =
2393 (LPWSTR)((ULONG_PTR)lpConfigPtr +
2394 (ULONG_PTR)lpConfigPtr->lpServiceStartName);
2395
2396 if (lpConfigPtr->lpDisplayName)
2397 lpConfigPtr->lpDisplayName =
2398 (LPWSTR)((ULONG_PTR)lpConfigPtr +
2399 (ULONG_PTR)lpConfigPtr->lpDisplayName);
2400
2401 TRACE("QueryServiceConfigW() done\n");
2402
2403 return TRUE;
2404}
DWORD WINAPI RQueryServiceConfigW(SC_RPC_HANDLE hService, LPBYTE lpBuf, DWORD cbBufSize, LPBOUNDED_DWORD_8K pcbBytesNeeded)
Definition: rpcserver.c:3018
struct _QUERY_SERVICE_CONFIGW QUERY_SERVICE_CONFIGW
LPWSTR lpServiceStartName
Definition: winsvc.h:169
LPWSTR lpBinaryPathName
Definition: winsvc.h:165
LPWSTR lpLoadOrderGroup
Definition: winsvc.h:166

Referenced by AddService(), GetServiceConfig(), InstallOneService(), query_service_config(), ServicesPageWndProc(), Test_LockUnlockServiceDatabaseWithServiceStart(), and TV1_GetDependants().

◆ QueryServiceLockStatusA()

WINADVAPI BOOL WINAPI QueryServiceLockStatusA ( SC_HANDLE  hSCManager,
LPQUERY_SERVICE_LOCK_STATUSA  lpLockStatus,
DWORD  cbBufSize,
LPDWORD  pcbBytesNeeded 
)

Definition at line 2647 of file scm.c.

2651{
2652 QUERY_SERVICE_LOCK_STATUSA LockStatus;
2653 LPQUERY_SERVICE_LOCK_STATUSA lpStatusPtr;
2654 DWORD dwBufferSize;
2655 DWORD dwError;
2656
2657 TRACE("QueryServiceLockStatusA(%p %p %lu %p)\n",
2658 hSCManager, lpLockStatus, cbBufSize, pcbBytesNeeded);
2659
2660 if (lpLockStatus == NULL || cbBufSize < sizeof(QUERY_SERVICE_LOCK_STATUSA))
2661 {
2662 lpStatusPtr = &LockStatus;
2663 dwBufferSize = sizeof(QUERY_SERVICE_LOCK_STATUSA);
2664 }
2665 else
2666 {
2667 lpStatusPtr = lpLockStatus;
2668 dwBufferSize = cbBufSize;
2669 }
2670
2672 {
2674 (LPBYTE)lpStatusPtr,
2675 dwBufferSize,
2677 }
2679 {
2681 }
2683
2684 if (dwError != ERROR_SUCCESS)
2685 {
2686 TRACE("RQueryServiceLockStatusA() failed (Error %lu)\n", dwError);
2687 SetLastError(dwError);
2688 return FALSE;
2689 }
2690
2691 if (lpStatusPtr->lpLockOwner != NULL)
2692 {
2693 lpStatusPtr->lpLockOwner =
2694 (LPSTR)((ULONG_PTR)lpStatusPtr + (ULONG_PTR)lpStatusPtr->lpLockOwner);
2695 }
2696
2697 TRACE("QueryServiceLockStatusA() done\n");
2698
2699 return TRUE;
2700}
DWORD WINAPI RQueryServiceLockStatusA(SC_RPC_HANDLE hSCManager, LPBYTE lpBuf, DWORD cbBufSize, LPBOUNDED_DWORD_4K pcbBytesNeeded)
Definition: rpcserver.c:4330
struct _QUERY_SERVICE_LOCK_STATUSA QUERY_SERVICE_LOCK_STATUSA

Referenced by Test_QueryLockStatusA().

◆ QueryServiceLockStatusW()

WINADVAPI BOOL WINAPI QueryServiceLockStatusW ( SC_HANDLE  hSCManager,
LPQUERY_SERVICE_LOCK_STATUSW  lpLockStatus,
DWORD  cbBufSize,
LPDWORD  pcbBytesNeeded 
)

Definition at line 2709 of file scm.c.

2713{
2714 QUERY_SERVICE_LOCK_STATUSW LockStatus;
2715 LPQUERY_SERVICE_LOCK_STATUSW lpStatusPtr;
2716 DWORD dwBufferSize;
2717 DWORD dwError;
2718
2719 TRACE("QueryServiceLockStatusW(%p %p %lu %p)\n",
2720 hSCManager, lpLockStatus, cbBufSize, pcbBytesNeeded);
2721
2722 if (lpLockStatus == NULL || cbBufSize < sizeof(QUERY_SERVICE_LOCK_STATUSW))
2723 {
2724 lpStatusPtr = &LockStatus;
2725 dwBufferSize = sizeof(QUERY_SERVICE_LOCK_STATUSW);
2726 }
2727 else
2728 {
2729 lpStatusPtr = lpLockStatus;
2730 dwBufferSize = cbBufSize;
2731 }
2732
2734 {
2736 (LPBYTE)lpStatusPtr,
2737 dwBufferSize,
2739 }
2741 {
2743 }
2745
2746 if (dwError != ERROR_SUCCESS)
2747 {
2748 TRACE("RQueryServiceLockStatusW() failed (Error %lu)\n", dwError);
2749 SetLastError(dwError);
2750 return FALSE;
2751 }
2752
2753 if (lpStatusPtr->lpLockOwner != NULL)
2754 {
2755 lpStatusPtr->lpLockOwner =
2756 (LPWSTR)((ULONG_PTR)lpStatusPtr + (ULONG_PTR)lpStatusPtr->lpLockOwner);
2757 }
2758
2759 TRACE("QueryServiceLockStatusW() done\n");
2760
2761 return TRUE;
2762}
DWORD WINAPI RQueryServiceLockStatusW(SC_RPC_HANDLE hSCManager, LPBYTE lpBuf, DWORD cbBufSize, LPBOUNDED_DWORD_4K pcbBytesNeeded)
Definition: rpcserver.c:3226
struct _QUERY_SERVICE_LOCK_STATUSW QUERY_SERVICE_LOCK_STATUSW

Referenced by Test_QueryLockStatusW().

◆ QueryServiceObjectSecurity()

WINADVAPI BOOL WINAPI QueryServiceObjectSecurity ( SC_HANDLE  hService,
SECURITY_INFORMATION  dwSecurityInformation,
PSECURITY_DESCRIPTOR  lpSecurityDescriptor,
DWORD  cbBufSize,
LPDWORD  pcbBytesNeeded 
)

Definition at line 2771 of file scm.c.

2776{
2777 DWORD dwError;
2778
2779 TRACE("QueryServiceObjectSecurity(%p %lu %p)\n",
2780 hService, dwSecurityInformation, lpSecurityDescriptor);
2781
2783 {
2784 dwError = RQueryServiceObjectSecurity((SC_RPC_HANDLE)hService,
2785 dwSecurityInformation,
2786 (LPBYTE)lpSecurityDescriptor,
2787 cbBufSize,
2789 }
2791 {
2793 }
2795
2796 if (dwError != ERROR_SUCCESS)
2797 {
2798 TRACE("QueryServiceObjectSecurity() failed (Error %lu)\n", dwError);
2799 SetLastError(dwError);
2800 return FALSE;
2801 }
2802
2803 return TRUE;
2804}
DWORD WINAPI RQueryServiceObjectSecurity(SC_RPC_HANDLE hService, SECURITY_INFORMATION dwSecurityInformation, LPBYTE lpSecurityDescriptor, DWORD cbBufSize, LPBOUNDED_DWORD_256K pcbBytesNeeded)
Definition: rpcserver.c:1326

Referenced by AccRewriteGetHandleRights(), and SdShow().

◆ QueryServiceStatus()

WINADVAPI BOOL WINAPI QueryServiceStatus ( SC_HANDLE  hService,
LPSERVICE_STATUS  lpServiceStatus 
)

Definition at line 2884 of file scm.c.

2886{
2887 DWORD dwError;
2888
2889 TRACE("QueryServiceStatus(%p %p)\n",
2890 hService, lpServiceStatus);
2891
2892 if (!hService)
2893 {
2895 return FALSE;
2896 }
2897
2899 {
2900 dwError = RQueryServiceStatus((SC_RPC_HANDLE)hService,
2901 lpServiceStatus);
2902 }
2904 {
2906 }
2908
2909 if (dwError != ERROR_SUCCESS)
2910 {
2911 TRACE("RQueryServiceStatus() failed (Error %lu)\n", dwError);
2912 SetLastError(dwError);
2913 return FALSE;
2914 }
2915
2916 return TRUE;
2917}
DWORD WINAPI RQueryServiceStatus(SC_RPC_HANDLE hService, LPSERVICE_STATUS lpServiceStatus)
Definition: rpcserver.c:1544

Referenced by _RunRemoteTest(), CmdRemoveService(), KmtEnsureServiceState(), my_test_server(), QueryDriverInfo(), ServiceInfo(), ServiceStart(), sss_started(), sss_stopped(), stopService(), Test_LockUnlockServiceDatabaseWithServiceStart(), test_no_stop(), test_query_svc(), test_service(), test_startA(), test_startW(), VfdGetDriverState(), VfdStartDriver(), and VfdStopDriver().

◆ QueryServiceStatusEx()

WINADVAPI BOOL WINAPI QueryServiceStatusEx ( SC_HANDLE  hService,
SC_STATUS_TYPE  InfoLevel,
LPBYTE  lpBuffer,
DWORD  cbBufSize,
LPDWORD  pcbBytesNeeded 
)

Definition at line 2926 of file scm.c.

2931{
2932 DWORD dwError;
2933
2934 TRACE("QueryServiceStatusEx(%p %lu %p %lu %p)\n",
2935 hService, InfoLevel, lpBuffer, cbBufSize, pcbBytesNeeded);
2936
2937 if (InfoLevel != SC_STATUS_PROCESS_INFO)
2938 {
2940 return FALSE;
2941 }
2942
2943 if (cbBufSize < sizeof(SERVICE_STATUS_PROCESS))
2944 {
2947 return FALSE;
2948 }
2949
2951 {
2952 dwError = RQueryServiceStatusEx((SC_RPC_HANDLE)hService,
2953 InfoLevel,
2954 lpBuffer,
2955 cbBufSize,
2957 }
2959 {
2961 }
2963
2964 if (dwError != ERROR_SUCCESS)
2965 {
2966 TRACE("RQueryServiceStatusEx() failed (Error %lu)\n", dwError);
2967 SetLastError(dwError);
2968 return FALSE;
2969 }
2970
2971 return TRUE;
2972}
DWORD WINAPI RQueryServiceStatusEx(SC_RPC_HANDLE hService, SC_STATUS_TYPE InfoLevel, LPBYTE lpBuffer, DWORD cbBufSize, LPBOUNDED_DWORD_8K pcbBytesNeeded)
Definition: rpcserver.c:6038
struct _SERVICE_STATUS_PROCESS SERVICE_STATUS_PROCESS

Referenced by DoControlService(), DoStartService(), DoStopService(), EnableUserModePnpManager(), GetThemeServiceProcessHandle(), CShellDispatch::IsServiceRunning(), ITERATE_StartService(), PlayLogonSoundThread(), QueryService(), start_rpcss(), stop_service(), test_EventLog(), test_no_stop(), test_service(), ThemeWaitForServiceReady(), UpdateServiceStatus(), WaitForService(), and WaitService().

◆ RegisterServiceCtrlHandlerA()

WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerA ( LPCSTR  lpServiceName,
LPHANDLER_FUNCTION  lpHandlerProc 
)

Definition at line 729 of file sctrl.c.

731{
732 ANSI_STRING ServiceNameA;
733 UNICODE_STRING ServiceNameU;
735
736 TRACE("RegisterServiceCtrlHandlerA(%s %p)\n",
737 debugstr_a(lpServiceName), lpHandlerProc);
738
739 RtlInitAnsiString(&ServiceNameA, lpServiceName);
740 if (!NT_SUCCESS(RtlAnsiStringToUnicodeString(&ServiceNameU, &ServiceNameA, TRUE)))
741 {
743 return NULL;
744 }
745
747 lpHandlerProc);
748
749 RtlFreeUnicodeString(&ServiceNameU);
750
751 return hServiceStatus;
752}
static SERVICE_STATUS_HANDLE(WINAPI *pRegisterServiceCtrlHandlerExA)(LPCSTR
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerW(LPCWSTR lpServiceName, LPHANDLER_FUNCTION lpHandlerProc)
Definition: sctrl.c:761
SERVICE_STATUS_HANDLE hServiceStatus
Definition: main.c:10

Referenced by ServiceMain().

◆ RegisterServiceCtrlHandlerExA()

WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExA ( LPCSTR  lpServiceName,
LPHANDLER_FUNCTION_EX  lpHandlerProc,
LPVOID  lpContext 
)

Definition at line 797 of file sctrl.c.

800{
801 ANSI_STRING ServiceNameA;
802 UNICODE_STRING ServiceNameU;
804
805 TRACE("RegisterServiceCtrlHandlerExA(%s %p %p)\n",
806 debugstr_a(lpServiceName), lpHandlerProc, lpContext);
807
808 RtlInitAnsiString(&ServiceNameA, lpServiceName);
809 if (!NT_SUCCESS(RtlAnsiStringToUnicodeString(&ServiceNameU, &ServiceNameA, TRUE)))
810 {
812 return NULL;
813 }
814
816 lpHandlerProc,
817 lpContext);
818
819 RtlFreeUnicodeString(&ServiceNameU);
820
821 return hServiceStatus;
822}
SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExW(LPCWSTR lpServiceName, LPHANDLER_FUNCTION_EX lpHandlerProc, LPVOID lpContext)
Definition: sctrl.c:831

Referenced by service_main().

◆ RegisterServiceCtrlHandlerExW()

WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExW ( LPCWSTR  lpServiceName,
LPHANDLER_FUNCTION_EX  lpHandlerProc,
LPVOID  lpContext 
)

Definition at line 831 of file sctrl.c.

834{
836
837 TRACE("RegisterServiceCtrlHandlerExW(%s %p %p)\n",
838 debugstr_w(lpServiceName), lpHandlerProc, lpContext);
839
840 Service = ScLookupServiceByServiceName(lpServiceName);
841 if (Service == NULL)
842 {
844 return NULL;
845 }
846
847 if (!lpHandlerProc)
848 {
850 return NULL;
851 }
852
853 Service->HandlerFunction = NULL;
854 Service->HandlerFunctionEx = lpHandlerProc;
855 Service->HandlerContext = lpContext;
856
857 TRACE("RegisterServiceCtrlHandlerEx returning %p\n", Service->hServiceStatus);
858
859 return Service->hServiceStatus;
860}
@ Service
Definition: ntsecapi.h:292
static PACTIVE_SERVICE ScLookupServiceByServiceName(LPCWSTR lpServiceName)
Definition: sctrl.c:145
#define ERROR_SERVICE_NOT_IN_EXE
Definition: winerror.h:958

Referenced by _ServiceMain(), NlNetlogonMain(), RegisterServiceCtrlHandlerExA(), SchedServiceMain(), serv_main(), ServiceMain(), SvcEntry_Seclogon(), and ThemeServiceMain().

◆ RegisterServiceCtrlHandlerW()

WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerW ( LPCWSTR  lpServiceName,
LPHANDLER_FUNCTION  lpHandlerProc 
)

Definition at line 761 of file sctrl.c.

763{
765
766 TRACE("RegisterServiceCtrlHandlerW(%s %p)\n",
767 debugstr_w(lpServiceName), lpHandlerProc);
768
769 Service = ScLookupServiceByServiceName(lpServiceName);
770 if (Service == NULL)
771 {
773 return NULL;
774 }
775
776 if (!lpHandlerProc)
777 {
779 return NULL;
780 }
781
782 Service->HandlerFunction = lpHandlerProc;
783 Service->HandlerFunctionEx = NULL;
784
785 TRACE("RegisterServiceCtrlHandler returning %p\n", Service->hServiceStatus);
786
787 return Service->hServiceStatus;
788}

Referenced by AbortSvchostService(), RegisterServiceCtrlHandlerA(), SamSsServiceMain(), service_main(), service_main_common(), and W32TmServiceMain().

◆ SetServiceObjectSecurity()

WINADVAPI BOOL WINAPI SetServiceObjectSecurity ( SC_HANDLE  hService,
SECURITY_INFORMATION  dwSecurityInformation,
PSECURITY_DESCRIPTOR  lpSecurityDescriptor 
)

Definition at line 2813 of file scm.c.

2816{
2817 PSECURITY_DESCRIPTOR SelfRelativeSD = NULL;
2818 ULONG Length;
2820 DWORD dwError;
2821
2822 TRACE("SetServiceObjectSecurity(%p %lu %p)\n",
2823 hService, dwSecurityInformation, lpSecurityDescriptor);
2824
2825 Length = 0;
2826 Status = RtlMakeSelfRelativeSD(lpSecurityDescriptor,
2827 SelfRelativeSD,
2828 &Length);
2830 {
2832 return FALSE;
2833 }
2834
2835 SelfRelativeSD = HeapAlloc(GetProcessHeap(), 0, Length);
2836 if (SelfRelativeSD == NULL)
2837 {
2839 return FALSE;
2840 }
2841
2842 Status = RtlMakeSelfRelativeSD(lpSecurityDescriptor,
2843 SelfRelativeSD,
2844 &Length);
2845 if (!NT_SUCCESS(Status))
2846 {
2847 HeapFree(GetProcessHeap(), 0, SelfRelativeSD);
2849 return FALSE;
2850 }
2851
2853 {
2854 dwError = RSetServiceObjectSecurity((SC_RPC_HANDLE)hService,
2855 dwSecurityInformation,
2856 (LPBYTE)SelfRelativeSD,
2857 Length);
2858 }
2860 {
2862 }
2864
2865 HeapFree(GetProcessHeap(), 0, SelfRelativeSD);
2866
2867 if (dwError != ERROR_SUCCESS)
2868 {
2869 TRACE("RServiceObjectSecurity() failed (Error %lu)\n", dwError);
2870 SetLastError(dwError);
2871 return FALSE;
2872 }
2873
2874 return TRUE;
2875}
LONG NTSTATUS
Definition: precomp.h:26
DWORD WINAPI RSetServiceObjectSecurity(SC_RPC_HANDLE hService, DWORD dwSecurityInformation, LPBYTE lpSecurityDescriptor, DWORD dwSecurityDescriptorSize)
Definition: rpcserver.c:1410
Status
Definition: gdiplustypes.h:25
NTSYSAPI NTSTATUS NTAPI RtlMakeSelfRelativeSD(_In_ PSECURITY_DESCRIPTOR AbsoluteSD, _Out_ PSECURITY_DESCRIPTOR SelfRelativeSD, _Inout_ PULONG BufferLength)
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
#define STATUS_BUFFER_TOO_SMALL
Definition: shellext.h:69
uint32_t ULONG
Definition: typedefs.h:59
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)

Referenced by AccRewriteSetHandleRights(), InstallOneService(), and SdSet().

◆ SetServiceStatus()

WINADVAPI BOOL WINAPI SetServiceStatus ( SERVICE_STATUS_HANDLE  hServiceStatus,
LPSERVICE_STATUS  lpServiceStatus 
)

Definition at line 1016 of file sctrl.c.

1018{
1019 DWORD dwError;
1020
1021 TRACE("SetServiceStatus(%lu %p)\n",
1022 hServiceStatus, lpServiceStatus);
1023
1025 {
1027 lpServiceStatus);
1028 }
1030 {
1032 }
1034
1035 if (dwError != ERROR_SUCCESS)
1036 {
1037 ERR("RSetServiceStatus() failed (Error %lu)\n", dwError);
1038 SetLastError(dwError);
1039 return FALSE;
1040 }
1041
1042 TRACE("SetServiceStatus() done\n");
1043
1044 return TRUE;
1045}
DWORD ScmRpcStatusToWinError(RPC_STATUS Status)
Definition: scm.c:146
DWORD WINAPI RSetServiceStatus(RPC_SERVICE_STATUS_HANDLE hServiceStatus, LPSERVICE_STATUS lpServiceStatus)
Definition: rpcserver.c:1690
ULONG_PTR RPC_SERVICE_STATUS_HANDLE
Definition: svcctl.idl:20

Referenced by _ServiceMain(), _UpdateServiceStatus(), AbortSvchostService(), ControlHandler(), no_stop_handler(), no_stop_main(), report_service_status(), ReportStatusToSCMgr(), SamSsServiceMain(), serv_main(), ServerCtrlHandler(), service_handler(), service_main(), service_main_common(), ServiceControlHandler(), ServiceControlHandlerEx(), ServiceMain(), UpdateSCMStatus(), UpdateServiceStatus(), UpdateStatus(), and W32TmServiceMain().

◆ StartServiceA()

WINADVAPI BOOL WINAPI StartServiceA ( SC_HANDLE  hService,
DWORD  dwNumServiceArgs,
LPCSTR lpServiceArgVectors 
)

Definition at line 2981 of file scm.c.

2984{
2985 DWORD dwError;
2986
2987 TRACE("StartServiceA(%p %lu %p)\n",
2988 hService, dwNumServiceArgs, lpServiceArgVectors);
2989
2991 {
2992 dwError = RStartServiceA((SC_RPC_HANDLE)hService,
2993 dwNumServiceArgs,
2994 (LPSTRING_PTRSA)lpServiceArgVectors);
2995 }
2997 {
2999 }
3001
3002 if (dwError != ERROR_SUCCESS)
3003 {
3004 ERR("RStartServiceA() failed (Error %lu)\n", dwError);
3005 SetLastError(dwError);
3006 return FALSE;
3007 }
3008
3009 return TRUE;
3010}
DWORD WINAPI RStartServiceA(SC_RPC_HANDLE hService, DWORD argc, LPSTRING_PTRSA argv)
Definition: rpcserver.c:4373

Referenced by RunTest(), test_no_stop(), test_service(), test_servicenotify(), test_start_stop_services(), test_startA(), test_wow64(), and try_start_stop().

◆ StartServiceCtrlDispatcherA()

WINADVAPI BOOL WINAPI StartServiceCtrlDispatcherA ( const SERVICE_TABLE_ENTRYA lpServiceStartTable)

Definition at line 1054 of file sctrl.c.

1055{
1056 ULONG i;
1057 HANDLE hPipe;
1058 DWORD dwError;
1059 PSCM_CONTROL_PACKET ControlPacket;
1060 DWORD dwBufSize;
1061 BOOL bRet = TRUE;
1062
1063 TRACE("StartServiceCtrlDispatcherA(%p)\n",
1064 lpServiceStartTable);
1065
1066 i = 0;
1067 while (lpServiceStartTable[i].lpServiceProc != NULL)
1068 {
1069 i++;
1070 }
1071
1073
1074 /* Allocate the service table */
1075 lpActiveServices = RtlAllocateHeap(RtlGetProcessHeap(),
1078 if (lpActiveServices == NULL)
1079 {
1081 return FALSE;
1082 }
1083
1084 /* Copy service names and start procedure */
1085 for (i = 0; i < dwActiveServiceCount; i++)
1086 {
1088 lpServiceStartTable[i].lpServiceName);
1089 lpActiveServices[i].ServiceMain.A = lpServiceStartTable[i].lpServiceProc;
1093 }
1094
1095 /* Connect to the SCM */
1096 dwError = ScConnectControlPipe(&hPipe);
1097 if (dwError != ERROR_SUCCESS)
1098 {
1099 bRet = FALSE;
1100 goto done;
1101 }
1102
1103 dwBufSize = sizeof(SCM_CONTROL_PACKET) +
1104 (MAX_SERVICE_NAME_LENGTH + 1) * sizeof(WCHAR);
1105
1106 ControlPacket = RtlAllocateHeap(RtlGetProcessHeap(),
1108 dwBufSize);
1109 if (ControlPacket == NULL)
1110 {
1111 dwError = ERROR_NOT_ENOUGH_MEMORY;
1112 bRet = FALSE;
1113 goto done;
1114 }
1115
1117
1118 /* Call the dispatcher loop */
1119 ScServiceDispatcher(hPipe, ControlPacket, dwBufSize);
1120
1121
1123
1124 /* Close the connection */
1125 CloseHandle(hPipe);
1126
1127 /* Free the control packet */
1128 RtlFreeHeap(RtlGetProcessHeap(), 0, ControlPacket);
1129
1130done:
1131 /* Free the service table */
1132 for (i = 0; i < dwActiveServiceCount; i++)
1133 {
1135 }
1136 RtlFreeHeap(RtlGetProcessHeap(), 0, lpActiveServices);
1139
1140 if (!bRet)
1141 SetLastError(dwError);
1142
1143 return bRet;
1144}
static WCHAR ServiceName[]
Definition: browser.c:20
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
Definition: heap.c:616
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
Definition: heap.c:634
#define CloseHandle
Definition: compat.h:739
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz(_Out_ PUNICODE_STRING Destination, _In_ PCSZ Source)
static DWORD ScConnectControlPipe(HANDLE *hPipe)
Definition: sctrl.c:229
static BOOL ScServiceDispatcher(HANDLE hPipe, PSCM_CONTROL_PACKET ControlPacket, DWORD dwBufferSize)
Definition: sctrl.c:628
static RPC_STATUS ScDestroyStatusBinding(VOID)
Definition: sctrl.c:121
static DWORD dwActiveServiceCount
Definition: sctrl.c:60
static RPC_STATUS ScCreateStatusBinding(VOID)
Definition: sctrl.c:83
static PACTIVE_SERVICE lpActiveServices
Definition: sctrl.c:61
struct _SCM_CONTROL_PACKET SCM_CONTROL_PACKET
BOOL bOwnProcess
Definition: sctrl.c:53
SERVICE_STATUS_HANDLE hServiceStatus
Definition: sctrl.c:42
LPSERVICE_MAIN_FUNCTIONA A
Definition: sctrl.c:46
union _ACTIVE_SERVICE::@308 ServiceMain
BOOL bUnicode
Definition: sctrl.c:52
LPSERVICE_MAIN_FUNCTIONA lpServiceProc
Definition: winsvc.h:186
const unsigned int MAX_SERVICE_NAME_LENGTH
Definition: svcctl.idl:7

Referenced by DoService(), run_service(), service_process(), and START_TEST().

◆ StartServiceCtrlDispatcherW()

WINADVAPI BOOL WINAPI StartServiceCtrlDispatcherW ( const SERVICE_TABLE_ENTRYW lpServiceStartTable)

Definition at line 1153 of file sctrl.c.

1154{
1155 ULONG i;
1156 HANDLE hPipe;
1157 DWORD dwError;
1158 PSCM_CONTROL_PACKET ControlPacket;
1159 DWORD dwBufSize;
1160 BOOL bRet = TRUE;
1161
1162 TRACE("StartServiceCtrlDispatcherW(%p)\n",
1163 lpServiceStartTable);
1164
1165 i = 0;
1166 while (lpServiceStartTable[i].lpServiceProc != NULL)
1167 {
1168 i++;
1169 }
1170
1172
1173 /* Allocate the service table */
1174 lpActiveServices = RtlAllocateHeap(RtlGetProcessHeap(),
1177 if (lpActiveServices == NULL)
1178 {
1180 return FALSE;
1181 }
1182
1183 /* Copy service names and start procedure */
1184 for (i = 0; i < dwActiveServiceCount; i++)
1185 {
1187 lpServiceStartTable[i].lpServiceName);
1188 lpActiveServices[i].ServiceMain.W = lpServiceStartTable[i].lpServiceProc;
1192 }
1193
1194 /* Connect to the SCM */
1195 dwError = ScConnectControlPipe(&hPipe);
1196 if (dwError != ERROR_SUCCESS)
1197 {
1198 bRet = FALSE;
1199 goto done;
1200 }
1201
1202 dwBufSize = sizeof(SCM_CONTROL_PACKET) +
1203 (MAX_SERVICE_NAME_LENGTH + 1) * sizeof(WCHAR);
1204
1205 ControlPacket = RtlAllocateHeap(RtlGetProcessHeap(),
1207 dwBufSize);
1208 if (ControlPacket == NULL)
1209 {
1210 dwError = ERROR_NOT_ENOUGH_MEMORY;
1211 bRet = FALSE;
1212 goto done;
1213 }
1214
1216
1217 /* Call the dispatcher loop */
1218 ScServiceDispatcher(hPipe, ControlPacket, dwBufSize);
1219
1221
1222 /* Close the connection */
1223 CloseHandle(hPipe);
1224
1225 /* Free the control packet */
1226 RtlFreeHeap(RtlGetProcessHeap(), 0, ControlPacket);
1227
1228done:
1229 /* Free the service table */
1230 for (i = 0; i < dwActiveServiceCount; i++)
1231 {
1233 }
1234 RtlFreeHeap(RtlGetProcessHeap(), 0, lpActiveServices);
1237
1238 if (!bRet)
1239 SetLastError(dwError);
1240
1241 return bRet;
1242}
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
LPSERVICE_MAIN_FUNCTIONW W
Definition: sctrl.c:47
LPSERVICE_MAIN_FUNCTIONW lpServiceProc
Definition: winsvc.h:190

Referenced by _tmain(), DispatcherThread(), main(), service_process(), start_service(), START_TEST(), wmain(), and wmainCRTStartup().

◆ StartServiceW()

WINADVAPI BOOL WINAPI StartServiceW ( SC_HANDLE  hService,
DWORD  dwNumServiceArgs,
LPCWSTR lpServiceArgVectors 
)

Definition at line 3019 of file scm.c.

3022{
3023 DWORD dwError;
3024
3025 TRACE("StartServiceW(%p %lu %p)\n",
3026 hService, dwNumServiceArgs, lpServiceArgVectors);
3027
3029 {
3030 dwError = RStartServiceW((SC_RPC_HANDLE)hService,
3031 dwNumServiceArgs,
3032 (LPSTRING_PTRSW)lpServiceArgVectors);
3033 }
3035 {
3037 }
3039
3040 if (dwError != ERROR_SUCCESS)
3041 {
3042 ERR("RStartServiceW() failed (Error %lu)\n", dwError);
3043 SetLastError(dwError);
3044 return FALSE;
3045 }
3046
3047 return TRUE;
3048}
DWORD WINAPI RStartServiceW(SC_RPC_HANDLE hService, DWORD argc, LPSTRING_PTRSW argv)
Definition: rpcserver.c:3269

Referenced by _RunRemoteTest(), DoStartService(), EnableUserModePnpManager(), ITERATE_StartService(), MMSYS_InstallDevice(), my_test_server(), start_local_service(), start_rpcss(), start_service(), StartDriver(), StartOneService(), Test_LockUnlockServiceDatabaseWithServiceStart(), and test_startW().

◆ UnlockServiceDatabase()

WINADVAPI BOOL WINAPI UnlockServiceDatabase ( SC_LOCK  ScLock)

Definition at line 3057 of file scm.c.

3058{
3059 DWORD dwError;
3060
3061 TRACE("UnlockServiceDatabase(%x)\n",
3062 ScLock);
3063
3065 {
3066 dwError = RUnlockServiceDatabase((LPSC_RPC_LOCK)&ScLock);
3067 }
3069 {
3071 }
3073
3074 if (dwError == ERROR_INVALID_HANDLE)
3076
3077 if (dwError != ERROR_SUCCESS)
3078 {
3079 TRACE("RUnlockServiceDatabase() failed (Error %lu)\n", dwError);
3080 SetLastError(dwError);
3081 return FALSE;
3082 }
3083
3084 return TRUE;
3085}
DWORD WINAPI RUnlockServiceDatabase(LPSC_RPC_LOCK Lock)
Definition: rpcserver.c:1853
#define ERROR_INVALID_SERVICE_LOCK
Definition: winerror.h:946

Referenced by SetServiceAccount(), SetServiceConfig(), SetServiceDescription(), Test_LockUnlockServiceDatabase(), Test_LockUnlockServiceDatabaseWithServiceStart(), Test_QueryLockStatusA(), and Test_QueryLockStatusW().

Variable Documentation

◆ SERVICES_ACTIVE_DATABASEW

const WCHAR SERVICES_ACTIVE_DATABASEW[] = { 'S','e','r','v','i','c','e','s','A','c','t','i','v','e',0 }
static

Definition at line 42 of file winsvc.h.

◆ SERVICES_FAILED_DATABASEW

const WCHAR SERVICES_FAILED_DATABASEW[] = { 'S','e','r','v','i','c','e','s','F','a','i','l','e','d',0 }
static

Definition at line 43 of file winsvc.h.