svcctl.idl revision 3194da424708abdd288b28d96892b3a5f3f7df0b
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync/*
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * svcctl interface definitions - exported by services.exe to access the
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * services database
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync *
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * Copyright 2007 Google (Mikolaj Zalewski)
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync *
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * This library is free software; you can redistribute it and/or
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * modify it under the terms of the GNU Lesser General Public
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * License as published by the Free Software Foundation; either
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * version 2.1 of the License, or (at your option) any later version.
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync *
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * This library is distributed in the hope that it will be useful,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * but WITHOUT ANY WARRANTY; without even the implied warranty of
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * Lesser General Public License for more details.
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync *
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * You should have received a copy of the GNU Lesser General Public
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * License along with this library; if not, write to the Free Software
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync */
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsyncimport "wtypes.idl";
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync/*
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync * some defined for the C code
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync */
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsynccpp_quote("#include \"winsvc.h\"")
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsynccpp_quote("#define SVCCTL_TRANSPORT {'n','c','a','c','n','_','n','p',0}")
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsynccpp_quote("#define SVCCTL_ENDPOINT {'\\\\','p','i','p','e','\\\\','s','v','c','c','t','l',0}")
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync/* Not the Windows event name - if needed the true one can be found in Inside Windows */
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsynccpp_quote("#define SVCCTL_STARTED_EVENT {'_','_','w','i','n','e','_','S','v','c','c','t','l','S','t','a','r','t','e','d',0}")
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync/* Service startup protocol over control pipe - not compatible with Windows */
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsyncenum service_pipe_command
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync{
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync WINESERV_STARTINFO = 1,
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync WINESERV_SENDCONTROL = 2
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync};
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsynctypedef struct service_start_info_t
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync{
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync enum service_pipe_command cmd; /* request code */
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync DWORD total_size; /* total request size */
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync DWORD name_size; /* size of name in data buffer */
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync DWORD control; /* control code */
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync WCHAR data[1];
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync} service_start_info;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync[
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync uuid(367abb81-9844-35f1-ad32-98f038001003),
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync version(2.0),
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync pointer_default(unique),
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync endpoint("ncacn_np:[\\pipe\\svcctl]")
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync]
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsyncinterface svcctl
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync{
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync /* handle types */
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync typedef [handle] LPCWSTR MACHINE_HANDLEW;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync typedef [context_handle] void *SC_RPC_HANDLE;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync typedef [context_handle] void *SC_RPC_LOCK;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync /* undocumented access rights */
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync cpp_quote("#define SERVICE_SET_STATUS 0x8000")
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsynccpp_quote("#if 0 /* already defined in winsvc.h */")
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsynctypedef struct _QUERY_SERVICE_CONFIGW {
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync DWORD dwServiceType;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync DWORD dwStartType;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync DWORD dwErrorControl;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [unique] LPWSTR lpBinaryPathName;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [unique] LPWSTR lpLoadOrderGroup;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync DWORD dwTagId;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [unique] LPWSTR lpDependencies;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [unique] LPWSTR lpServiceStartName;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync [unique] LPWSTR lpDisplayName;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync} QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsynctypedef struct _SERVICE_STATUS {
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync DWORD dwServiceType;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync DWORD dwCurrentState;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync DWORD dwControlsAccepted;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync DWORD dwWin32ExitCode;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync DWORD dwServiceSpecificExitCode;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync DWORD dwCheckPoint;
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync DWORD dwWaitHint;
} SERVICE_STATUS, *LPSERVICE_STATUS;
typedef enum _SC_STATUS_TYPE {
SC_STATUS_PROCESS_INFO = 0
} SC_STATUS_TYPE;
typedef struct _SERVICE_DESCRIPTIONW {
LPWSTR lpDescription;
} SERVICE_DESCRIPTIONW,*LPSERVICE_DESCRIPTIONW;
typedef enum _SC_ACTION_TYPE {
SC_ACTION_NONE = 0,
SC_ACTION_RESTART = 1,
SC_ACTION_REBOOT = 2,
SC_ACTION_RUN_COMMAND = 3
} SC_ACTION_TYPE;
typedef struct _SC_ACTION {
SC_ACTION_TYPE Type;
DWORD Delay;
} SC_ACTION,*LPSC_ACTION;
typedef struct _SERVICE_FAILURE_ACTIONSW {
DWORD dwResetPeriod;
[unique] LPWSTR lpRebootMsg;
[unique] LPWSTR lpCommand;
DWORD cActions;
[size_is(cActions)] SC_ACTION *lpsaActions;
} SERVICE_FAILURE_ACTIONSW,*LPSERVICE_FAILURE_ACTIONSW;
typedef struct _SERVICE_PRESHUTDOWN_INFO {
DWORD dwPreshutdownTimeout;
} SERVICE_PRESHUTDOWN_INFO,*LPSERVICE_PRESHUTDOWN_INFO;
#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
typedef struct _ENUM_SERVICE_STATUSW {
LPWSTR lpServiceName;
LPWSTR lpDisplayName;
SERVICE_STATUS ServiceStatus;
} ENUM_SERVICE_STATUSW, *LPENUM_SERVICE_STATUSW;
cpp_quote("#endif")
typedef [switch_type(DWORD)] union
{
[case (SERVICE_CONFIG_DESCRIPTION)] SERVICE_DESCRIPTIONW descr;
[case (SERVICE_CONFIG_FAILURE_ACTIONS)] SERVICE_FAILURE_ACTIONSW actions;
[case (SERVICE_CONFIG_PRESHUTDOWN_INFO)] SERVICE_PRESHUTDOWN_INFO preshutdown;
} SERVICE_CONFIG2W;
/* Compatible with Windows function 0x00 */
DWORD svcctl_CloseServiceHandle(
[in,out] SC_RPC_HANDLE *handle
);
/* Compatible with Windows function 0x01 */
DWORD svcctl_ControlService(
[in] SC_RPC_HANDLE hService,
[in] DWORD dwControl,
[out] SERVICE_STATUS *lpServiceStatus
);
/* Compatible with Windows function 0x02 */
DWORD svcctl_DeleteService(
[in] SC_RPC_HANDLE hService
);
/* Compatible with Windows function 0x03 */
DWORD svcctl_LockServiceDatabase(
[in] SC_RPC_HANDLE hSCManager,
[out] SC_RPC_LOCK *phLock
);
/* Not compatible with Windows function 0x04 */
DWORD svcctl_QueryServiceObjectSecurity(/* FIXME */);
/* Not compatible with Windows function 0x05 */
DWORD svcctl_SetServiceObjectSecurity(/* FIXME */);
/* Not compatible with Windows function 0x06 */
DWORD svcctl_QueryServiceStatus(/* FIXME */);
/* Compatible with Windows function 0x07 */
DWORD svcctl_SetServiceStatus(
[in] SC_RPC_HANDLE hServiceStatus,
[in] LPSERVICE_STATUS lpServiceStatus
);
/* Compatible with Windows function 0x08 */
DWORD svcctl_UnlockServiceDatabase(
[in,out] SC_RPC_LOCK *phLock
);
/* Not compatible with Windows function 0x09 */
DWORD svcctl_NotifyBootConfigStatus(/* FIXME */);
/* Not compatible with Windows function 0x0a */
DWORD svcctl_SCSetServiceBitsW(/* FIXME */);
/* Compatible with Windows function 0x0b */
DWORD svcctl_ChangeServiceConfigW(
[in] SC_RPC_HANDLE hService,
[in] DWORD dwServiceType,
[in] DWORD dwStartType,
[in] DWORD dwErrorControl,
[in,unique] LPCWSTR lpBinaryPathName,
[in,unique] LPCWSTR lpLoadOrderGroupKey,
[in,out,unique] DWORD *lpdwTagId,
[in,unique,size_is(dwDependenciesSize)] const BYTE *lpDependencies,
[in] DWORD dwDependenciesSize,
[in,unique] LPCWSTR lpServiceStartName,
[in,unique,size_is(dwPasswordSize)] const BYTE *lpPassword,
[in] DWORD dwPasswordSize,
[in,unique] LPCWSTR lpDisplayName
);
/* Compatible with Windows function 0x0c */
DWORD svcctl_CreateServiceW(
[in] SC_RPC_HANDLE hSCManager,
[in] LPCWSTR lpServiceName,
[in,unique] LPCWSTR lpDisplayName,
[in] DWORD dwDesiredAccess,
[in] DWORD dwServiceType,
[in] DWORD dwStartType,
[in] DWORD dwErrorControl,
[in] LPCWSTR lpBinaryPathName,
[in,unique] LPCWSTR lpLoadOrderGroup,
[in,out,unique] DWORD *lpdwTagId,
[in,unique,size_is(dwDependenciesSize)] const BYTE *lpDependencies,
[in] DWORD dwDependenciesSize,
[in,unique] LPCWSTR lpServiceStartName,
[in,unique,size_is(dwPasswordSize)] const BYTE *lpPassword,
[in] DWORD dwPasswordSize,
[out] SC_RPC_HANDLE *phService
);
/* Not compatible with Windows function 0x0d */
DWORD svcctl_EnumDependentServicesW(/* FIXME */);
/* Not compatible with Windows function 0x0e */
DWORD svcctl_EnumServicesStatusW(
[in] SC_RPC_HANDLE hmngr,
[in] DWORD type,
[in] DWORD state,
[out,size_is(size)] BYTE *buffer,
[in] DWORD size,
[out] LPDWORD needed,
[out] LPDWORD returned
);
/* Compatible with Windows function 0x0f */
DWORD svcctl_OpenSCManagerW(
[in,unique] MACHINE_HANDLEW MachineName,
[in,unique] LPCWSTR DatabaseName,
[in] DWORD dwAccessMask,
[out] SC_RPC_HANDLE *handle
);
/* Compatible with Windows function 0x10 */
DWORD svcctl_OpenServiceW(
[in] SC_RPC_HANDLE hSCManager,
[in] LPCWSTR lpServiceName,
[in] DWORD dwDesiredAccess,
[out] SC_RPC_HANDLE *phService
);
/* Windows function 0x11 must be using a different prototype - not compatible */
DWORD svcctl_QueryServiceConfigW(
[in] SC_RPC_HANDLE hService,
[out] QUERY_SERVICE_CONFIGW *config);
/* Not compatible with Windows function 0x12 */
DWORD svcctl_QueryServiceLockStatusW(/* FIXME */);
/* Untested with Windows function 0x13 */
DWORD svcctl_StartServiceW(
[in] SC_RPC_HANDLE hService,
[in] DWORD dwNumServiceArgs,
[in,unique,size_is(dwNumServiceArgs)] LPCWSTR *lpServiceArgVectors
);
/* Compatible with Windows function 0x14 */
DWORD svcctl_GetServiceDisplayNameW(
[in] SC_RPC_HANDLE hSCManager,
[in] LPCWSTR lpServiceName,
[out,string,size_is(*cchBufSize+1)] WCHAR lpBuffer[],
[in,out] DWORD *cchBufSize);
/* Compatible with Windows function 0x15 */
DWORD svcctl_GetServiceKeyNameW(
[in] SC_RPC_HANDLE hSCManager,
[in] LPCWSTR lpServiceDisplayName,
[out,string,size_is(*cchBufSize+1)] WCHAR lpBuffer[],
[in,out] DWORD *cchBufSize);
/* Not compatible with Windows function 0x16 */
DWORD svcctl_SCSetServiceBitsA(/* FIXME */);
/* Not compatible with Windows function 0x17 */
DWORD svcctl_ChangeServiceConfigA(/* FIXME */);
/* Not compatible with Windows function 0x18 */
DWORD svcctl_CreateServiceA(/* FIXME */);
/* Not compatible with Windows function 0x19 */
DWORD svcctl_EnumDependentServicesA(/* FIXME */);
/* Not compatible with Windows function 0x1a */
DWORD svcctl_EnumServicesStatusA(/* FIXME */);
/* Not compatible with Windows function 0x1b */
DWORD svcctl_OpenSCManagerA(/* FIXME */);
/* Not compatible with Windows function 0x1c */
DWORD svcctl_OpenServiceA(/* FIXME */);
/* Not compatible with Windows function 0x1d */
DWORD svcctl_QueryServiceConfigA(/* FIXME */);
/* Not compatible with Windows function 0x1e */
DWORD svcctl_QueryServiceLockStatusA(/* FIXME */);
/* Not compatible with Windows function 0x1f */
DWORD svcctl_StartServiceA(/* FIXME */);
/* Not compatible with Windows function 0x20 */
DWORD svcctl_GetServiceDisplayNameA(/* FIXME */);
/* Not compatible with Windows function 0x21 */
DWORD svcctl_GetServiceKeyNameA(/* FIXME */);
/* Not compatible with Windows function 0x22 */
DWORD svcctl_GetCurrentGroupStateW(/* FIXME */);
/* Not compatible with Windows function 0x23 */
DWORD svcctl_EnumServiceGroupW(/* FIXME */);
/* Not compatible with Windows function 0x24 */
DWORD svcctl_ChangeServiceConfig2A(/* FIXME */);
/* Untested with Windows function 0x25 */
DWORD svcctl_ChangeServiceConfig2W(
[in] SC_RPC_HANDLE hService,
[in] DWORD InfoLevel,
[in,switch_is(InfoLevel)] SERVICE_CONFIG2W *config );
/* Not compatible with Windows function 0x26 */
DWORD svcctl_QueryServiceConfig2A(/* FIXME */);
/* Untested with Windows function 0x27 */
DWORD svcctl_QueryServiceConfig2W(
[in] SC_RPC_HANDLE hService,
[in] DWORD InfoLevel,
[out,size_is(cbBufSize)] BYTE lpBuffer[],
[in] DWORD cbBufSize,
[out] LPDWORD pcbBytesNeeded
);
/* Untested with Windows function 0x28 */
DWORD svcctl_QueryServiceStatusEx(
[in] SC_RPC_HANDLE hService,
[in] SC_STATUS_TYPE InfoLevel,
[out,size_is(cbBufSize)] BYTE *lpBuffer,
[in] DWORD cbBufSize,
[out] LPDWORD pcbBytesNeeded
);
DWORD svcctl_EnumServicesStatusExW(
[in] SC_RPC_HANDLE hmngr,
[in] DWORD type,
[in] DWORD state,
[out,size_is(size)] BYTE *buffer,
[in] DWORD size,
[out] LPDWORD needed,
[out] LPDWORD returned,
[in,unique] LPCWSTR group
);
}