version(2.0),
pointer_default(unique),
endpoint("ncacn_np:[\\pipe\\svcctl]", "ncalrpc:"),
+ helper("../librpc/ndr/ndr_svcctl.h"),
helpstring("Service Control")
] interface svcctl
{
uint32 lock_duration;
} SERVICE_LOCK_STATUS;
+ typedef [v1_enum] enum {
+ SVCCTL_STATE_UNKNOWN = 0x00000000, /* only used internally to smbd */
+ SVCCTL_STOPPED = 0x00000001,
+ SVCCTL_START_PENDING = 0x00000002,
+ SVCCTL_STOP_PENDING = 0x00000003,
+ SVCCTL_RUNNING = 0x00000004,
+ SVCCTL_CONTINUE_PENDING = 0x00000005,
+ SVCCTL_PAUSE_PENDING = 0x00000006,
+ SVCCTL_PAUSED = 0x00000007
+ } svcctl_ServiceStatus;
+
+ const int SVCCTL_ACCEPT_NONE = 0x00000000;
+
+ typedef [bitmap32bit] bitmap {
+ SVCCTL_ACCEPT_STOP = 0x00000001,
+ SVCCTL_ACCEPT_PAUSE_CONTINUE = 0x00000002,
+ SVCCTL_ACCEPT_SHUTDOWN = 0x00000004,
+ SVCCTL_ACCEPT_PARAMCHANGE = 0x00000008,
+ SVCCTL_ACCEPT_NETBINDCHANGE = 0x00000010,
+ SVCCTL_ACCEPT_HARDWAREPROFILECHANGE = 0x00000020,
+ SVCCTL_ACCEPT_POWEREVENT = 0x00000040
+ } svcctl_ControlsAccepted;
+
typedef struct {
uint32 type;
- uint32 state;
- uint32 controls_accepted;
+ svcctl_ServiceStatus state;
+ svcctl_ControlsAccepted controls_accepted;
WERROR win32_exit_code;
uint32 service_exit_code;
uint32 check_point;
uint32 service_flags;
} SERVICE_STATUS_PROCESS;
- typedef struct {
+ typedef [public,gensize] struct {
+ [relative] nstring *service_name;
+ [relative] nstring *display_name;
+ SERVICE_STATUS status;
+ } ENUM_SERVICE_STATUSW;
+
+ typedef [public,gensize] struct {
[relative] astring *service_name;
[relative] astring *display_name;
SERVICE_STATUS status;
- } ENUM_SERVICE_STATUS;
+ } ENUM_SERVICE_STATUSA;
const int SERVICE_TYPE_KERNEL_DRIVER = 0x01;
const int SERVICE_TYPE_FS_DRIVER = 0x02;
const int SERVICE_TYPE_WIN32_OWN_PROCESS = 0x10;
const int SERVICE_TYPE_WIN32_SHARE_PROCESS = 0x20;
const int SERVICE_TYPE_WIN32=SERVICE_TYPE_WIN32_OWN_PROCESS|SERVICE_TYPE_WIN32_SHARE_PROCESS;
-
- const int SERVICE_STATE_ACTIVE = 0x01;
- const int SERVICE_STATE_INACTIVE = 0x02;
- const int SERVICE_STATE_ALL = 0x03;
+ const int SERVICE_TYPE_INTERACTIVE_PROCESS = 0x100;
typedef [public,bitmap32bit] bitmap {
SV_TYPE_WORKSTATION = 0x00000001,
WERROR svcctl_EnumDependentServicesW(
[in,ref] policy_handle *service,
[in] uint32 state,
- [out,ref,size_is(buf_size)] uint8 *service_status,
- [in,range(0,0x40000)] uint32 buf_size,
- [out,ref,range(0,0x40000)] uint32 *bytes_needed,
+ [out,ref,size_is(offered)] uint8 *service_status,
+ [in,range(0,0x40000)] uint32 offered,
+ [out,ref,range(0,0x40000)] uint32 *needed,
[out,ref,range(0,0x40000)] uint32 *services_returned
);
/* Function 0x0e */
typedef [v1_enum] enum {
- SVCCTL_STATE_ACTIVE = 0x00000001,
- SVCCTL_STATE_INACTIVE = 0x00000002,
- SVCCTL_STATE_ALL = ( SVCCTL_STATE_ACTIVE | SVCCTL_STATE_INACTIVE )
+ SERVICE_STATE_ACTIVE = 0x00000001,
+ SERVICE_STATE_INACTIVE = 0x00000002,
+ SERVICE_STATE_ALL = ( SERVICE_STATE_ACTIVE | SERVICE_STATE_INACTIVE )
} svcctl_ServiceState;
WERROR svcctl_EnumServicesStatusW(
[in,ref] policy_handle *handle,
[in] uint32 type,
[in] svcctl_ServiceState state,
- [out,ref,size_is(buf_size)] uint8 *service,
- [in] [range(0,262144)] uint32 buf_size,
- [out,ref] [range(0,262144)] uint32 *bytes_needed,
- [out,ref] [range(0,262144)] uint32 *services_returned,
+ [out,ref,size_is(offered)] uint8 *service,
+ [in] [range(0,0x40000)] uint32 offered,
+ [out,ref] [range(0,0x40000)] uint32 *needed,
+ [out,ref] [range(0,0x40000)] uint32 *services_returned,
[in,out,unique] uint32 *resume_handle
);
WERROR svcctl_QueryServiceConfigW(
[in,ref] policy_handle *handle,
[out] QUERY_SERVICE_CONFIG *query,
- [in] [range(0,8192)] uint32 buf_size,
- [out,ref] [range(0,8192)] uint32 *bytes_needed
+ [in] [range(0,8192)] uint32 offered,
+ [out,ref] [range(0,8192)] uint32 *needed
);
/*****************/
/* Function 0x12 */
WERROR svcctl_QueryServiceLockStatusW(
[in,ref] policy_handle *handle,
- [in] uint32 buf_size,
+ [in] uint32 offered,
[out,ref] SERVICE_LOCK_STATUS *lock_status,
- [out,ref] uint32 *required_buf_size
+ [out,ref] uint32 *needed
);
/*****************/
WERROR svcctl_EnumDependentServicesA(
[in,ref] policy_handle *service,
[in] uint32 state,
- [out,unique] ENUM_SERVICE_STATUS *service_status,
- [in] uint32 buf_size,
- [out,ref] uint32 *bytes_needed,
+ [out,unique] ENUM_SERVICE_STATUSA *service_status,
+ [in] uint32 offered,
+ [out,ref] uint32 *needed,
[out,ref] uint32 *services_returned
);
WERROR svcctl_EnumServicesStatusA(
[in,ref] policy_handle *handle,
[in] uint32 type,
- [in] uint32 state,
- [in] uint32 buf_size,
- [out,size_is(buf_size)] uint8 service[*],
- [out,ref] uint32 *bytes_needed,
+ [in] svcctl_ServiceState state,
+ [in] uint32 offered,
+ [out,size_is(offered)] uint8 service[*],
+ [out,ref] uint32 *needed,
[out,ref] uint32 *services_returned,
[in,out,unique] uint32 *resume_handle
);
/* Function 0x1d */
WERROR svcctl_QueryServiceConfigA(
[in,ref] policy_handle *handle,
- [out] uint8 query[buf_size], /*QUERYU_SERVICE_CONFIG */
- [in] uint32 buf_size,
- [out,ref] uint32 *bytes_needed
+ [out] uint8 query[offered], /*QUERYU_SERVICE_CONFIG */
+ [in] uint32 offered,
+ [out,ref] uint32 *needed
);
/*****************/
/* Function 0x1e */
WERROR svcctl_QueryServiceLockStatusA(
[in,ref] policy_handle *handle,
- [in] uint32 buf_size,
+ [in] uint32 offered,
[out,ref] SERVICE_LOCK_STATUS *lock_status,
- [out,ref] uint32 *required_buf_size
+ [out,ref] uint32 *needed
);
/*****************/
WERROR svcctl_QueryServiceConfig2A(
[in,ref] policy_handle *handle,
[in] svcctl_ConfigLevel info_level,
- [out] uint8 buffer[buf_size],
- [in] uint32 buf_size,
- [out,ref] uint32 *bytes_needed
+ [out] uint8 buffer[offered],
+ [in] uint32 offered,
+ [out,ref] uint32 *needed
);
/*****************/
WERROR svcctl_QueryServiceConfig2W(
[in,ref] policy_handle *handle,
[in] svcctl_ConfigLevel info_level,
- [out,ref,size_is(buf_size)] uint8 *buffer,
- [in] [range(0,8192)] uint32 buf_size,
- [out,ref] [range(0,8192)] uint32 *bytes_needed
+ [out,ref,size_is(offered)] uint8 *buffer,
+ [in] [range(0,8192)] uint32 offered,
+ [out,ref] [range(0,8192)] uint32 *needed
);
/*****************/
WERROR svcctl_QueryServiceStatusEx(
[in,ref] policy_handle *handle,
[in] svcctl_StatusLevel info_level,
- [out,ref,size_is(buf_size)] uint8 *buffer,
- [in] [range(0,8192)] uint32 buf_size,
- [out,ref] [range(0,8192)] uint32 *bytes_needed
+ [out,ref,size_is(offered)] uint8 *buffer,
+ [in] [range(0,8192)] uint32 offered,
+ [out,ref] [range(0,8192)] uint32 *needed
);
/*****************/
[in,ref] policy_handle *scmanager,
[in] uint32 info_level,
[in] uint32 type,
- [in] uint32 state,
- [out] uint8 services[buf_size],
- [in] uint32 buf_size,
- [out,ref] uint32 *bytes_needed,
+ [in] svcctl_ServiceState state,
+ [out] uint8 services[offered],
+ [in] uint32 offered,
+ [out,ref] uint32 *needed,
[out,ref] uint32 *service_returned,
[in,out,unique] uint32 *resume_handle,
[out,ref] [string,charset(UTF16)] uint16 **group_name
[in,ref] policy_handle *scmanager,
[in] uint32 info_level,
[in] uint32 type,
- [in] uint32 state,
- [out,ref,size_is(buf_size)] uint8 *services,
- [in] [range(0,262144)] uint32 buf_size,
- [out,ref] [range(0,262144)] uint32 *bytes_needed,
- [out,ref] [range(0,262144)] uint32 *service_returned,
- [in,out,unique] [range(0,262144)] uint32 *resume_handle,
+ [in] svcctl_ServiceState state,
+ [out,ref,size_is(offered)] uint8 *services,
+ [in] [range(0,0x40000)] uint32 offered,
+ [out,ref] [range(0,0x40000)] uint32 *needed,
+ [out,ref] [range(0,0x40000)] uint32 *service_returned,
+ [in,out,unique] [range(0,0x40000)] uint32 *resume_handle,
[in,unique] [string,charset(UTF16)] uint16 *group_name
);