#include "idl_types.h" /* svcctl interface definitions */ [ uuid("367abb81-9844-35f1-ad32-98f038001003"), version(2.0), pointer_default(unique), endpoint("ncacn_np:[\\pipe\\svcctl]", "ncalrpc:"), helpstring("Service Control") ] interface svcctl { typedef struct { uint32 is_locked; unistr *lock_owner; uint32 lock_duration; } SERVICE_LOCK_STATUS; typedef struct { uint32 type; uint32 state; uint32 controls_accepted; uint32 win32_exit_code; uint32 service_exit_code; uint32 check_point; uint32 wait_hint; } SERVICE_STATUS; typedef struct { [relative] astring *service_name; [relative] astring *display_name; SERVICE_STATUS status; } ENUM_SERVICE_STATUS; const int SERVICE_TYPE_KERNEL_DRIVER = 0x01; const int SERVICE_TYPE_FS_DRIVER = 0x02; const int SERVICE_TYPE_ADAPTER = 0x04; const int SERVICE_TYPE_RECOGNIZER_DRIVER = 0x08; const int SERVICE_TYPE_DRIVER=SERVICE_TYPE_KERNEL_DRIVER|SERVICE_TYPE_FS_DRIVER|SERVICE_TYPE_RECOGNIZER_DRIVER; 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 = 0x00; const int SV_TYPE_WORKSTATION = 0x00000001; const int SV_TYPE_SERVER = 0x00000002; const int SV_TYPE_SQLSERVER = 0x00000004; const int SV_TYPE_DOMAIN_CTRL = 0x00000008; const int SV_TYPE_DOMAIN_BAKCTRL = 0x00000010; const int SV_TYPE_TIME_SOURCE = 0x00000020; const int SV_TYPE_AFP = 0x00000040; const int SV_TYPE_NOVELL = 0x00000080; const int SV_TYPE_DOMAIN_MEMBER = 0x00000100; const int SV_TYPE_PRINTQ_SERVER = 0x00000200; const int SV_TYPE_DIALIN_SERVER = 0x00000400; const int SV_TYPE_SERVER_UNIX = 0x00000800; const int SV_TYPE_NT = 0x00001000; const int SV_TYPE_WFW = 0x00002000; const int SV_TYPE_SERVER_MFPN = 0x00004000; const int SV_TYPE_SERVER_NT = 0x00008000; const int SV_TYPE_POTENTIAL_BROWSER = 0x00010000; const int SV_TYPE_BACKUP_BROWSER = 0x00020000; const int SV_TYPE_MASTER_BROWSER = 0x00040000; const int SV_TYPE_DOMAIN_MASTER = 0x00080000; const int SV_TYPE_SERVER_OSF = 0x00100000; const int SV_TYPE_SERVER_VMS = 0x00200000; const int SV_TYPE_WIN95_PLUS = 0x00400000; const int SV_TYPE_DFS_SERVER = 0x00800000; const int SV_TYPE_ALTERNATE_XPORT = 0x20000000; const int SV_TYPE_LOCAL_LIST_ONLY = 0x40000000; const int SV_TYPE_DOMAIN_ENUM = 0x80000000; const int SV_TYPE_ALL = 0xFFFFFFFF; /*****************/ /* Function 0x00 */ uint32 svcctl_CloseServiceHandle( [in,out,ref] policy_handle *handle ); /*****************/ /* Function 0x01 */ typedef enum { FIXME=1 } SERVICE_CONTROL; WERROR svcctl_ControlService( [in,ref] policy_handle *handle, [in] uint32 control, [out] SERVICE_STATUS status ); /*****************/ /* Function 0x02 */ WERROR svcctl_DeleteService([in,ref] policy_handle *handle); /*****************/ /* Function 0x03 */ WERROR svcctl_LockServiceDatabase( [in,ref] policy_handle *handle, [out] policy_handle lock ); /*****************/ /* Function 0x04 */ WERROR svcctl_QueryServiceObjectSecurity(); /*****************/ /* Function 0x05 */ WERROR svcctl_SetServiceObjectSecurity(); /*****************/ /* Function 0x06 */ WERROR svcctl_QueryServiceStatus( [in,ref] policy_handle *handle, [out,ref] SERVICE_STATUS *status); /*****************/ /* Function 0x07 */ WERROR svcctl_SetServiceStatus(); /*****************/ /* Function 0x08 */ WERROR svcctl_UnlockServiceDatabase( [in,out,ref] policy_handle *lock ); /*****************/ /* Function 0x09 */ WERROR svcctl_NotifyBootConfigStatus(); /*****************/ /* Function 0x0a */ WERROR svcctl_SCSetServiceBitsW( [in,ref] policy_handle *handle, [in] uint32 bits, [in] boolean32 bitson, [in] boolean32 immediate); /*****************/ /* Function 0x0b */ WERROR svcctl_ChangeServiceConfigW([in,ref] policy_handle *handle, [in] uint32 type, [in] uint32 start, [in] uint32 error, [in] unistr *binary_path, [in] unistr *load_order_group, [out] uint32 tag_id, [in] unistr *dependencies, [in] unistr *service_start_name, [in] unistr *password, [in] unistr *display_name); /*****************/ /* Function 0x0c */ WERROR svcctl_CreateServiceW([in,ref] policy_handle *handle, [in] unistr *ServiceName, [in] unistr *DisplayName, [in] uint32 desired_access, [in] uint32 type, [in] uint32 start_type, [in] uint32 error_control, [in] unistr *binary_path, [in] unistr *LoadOrderGroupKey, [out] uint32 *TagId, [in] unistr *dependencies, [in] unistr *service_start_name, [in] unistr *password); /*****************/ /* Function 0x0d */ WERROR svcctl_EnumDependentServicesW([in,ref] policy_handle *service, [in] uint32 state, [out] ENUM_SERVICE_STATUS *status, [in] uint32 buf_size, [out] uint32 bytes_needed, [out] uint32 services_returned); /*****************/ /* Function 0x0e */ WERROR svcctl_EnumServicesStatusW( [in,ref] policy_handle *handle, [in] uint32 type, [in] uint32 state, [in] uint32 buf_size, [out,size_is(buf_size)] uint8 service[*], [out] uint32 bytes_needed, [out] uint32 services_returned, [in,out] uint32 *resume_handle ); /*****************/ /* Function 0x0f */ WERROR svcctl_OpenSCManagerW( [in] unistr *MachineName, [in] unistr *DatabaseName, [in] uint32 access_mask, [out,ref] policy_handle *handle); /*****************/ /* Function 0x10 */ WERROR svcctl_OpenServiceW([in,ref] policy_handle *scmanager_handle, [in] unistr *ServiceName, [in] uint32 access_mask); /*****************/ /* Function 0x11 */ WERROR svcctl_QueryServiceConfigW([in,ref] policy_handle *handle, [out] uint8 query[buf_size], /*QUERY_SERVICE_CONFIG */ [in] uint32 buf_size, [out] uint32 bytes_needed ); /*****************/ /* Function 0x12 */ WERROR svcctl_QueryServiceLockStatusW( [in,ref] policy_handle *handle, [in] uint32 buf_size, [out,ref] SERVICE_LOCK_STATUS *status, [out,ref] uint32 *required_buf_size ); /*****************/ /* Function 0x13 */ WERROR svcctl_StartServiceW( [in,ref] policy_handle *handle, [in] uint32 NumArgs, [in,length_of(NumArgs)] unistr *Arguments); /*****************/ /* Function 0x14 */ WERROR svcctl_GetServiceDisplayNameW([in,ref] policy_handle *handle, [in] unistr *service_name, [out] unistr *display_name, [in,out] uint32 *display_name_length); /*****************/ /* Function 0x15 */ WERROR svcctl_GetServiceKeyNameW([in,ref] policy_handle *handle, [in] unistr *service_name, [out] unistr *key_name, [in,out] uint32 *display_name_length); /*****************/ /* Function 0x16 */ WERROR svcctl_SCSetServiceBitsA( [in,ref] policy_handle *handle, [in] uint32 bits, [in] boolean32 bitson, [in] boolean32 immediate); /*****************/ /* Function 0x17 */ WERROR svcctl_ChangeServiceConfigA([in,ref] policy_handle *handle, [in] uint32 type, [in] uint32 start, [in] uint32 error, [in] unistr *binary_path, [in] unistr *load_order_group, [out] uint32 tag_id, [in] unistr *dependencies, [in] unistr *service_start_name, [in] unistr *password, [in] unistr *display_name); /*****************/ /* Function 0x18 */ WERROR svcctl_CreateServiceA([in,ref] policy_handle *handle, [in] unistr *ServiceName, [in] unistr *DisplayName, [in] uint32 desired_access, [in] uint32 type, [in] uint32 start_type, [in] uint32 error_control, [in] unistr *binary_path, [in] unistr *LoadOrderGroupKey, [out] uint32 *TagId, [in] unistr *dependencies, [in] unistr *service_start_name, [in] unistr *password); /*****************/ /* Function 0x19 */ WERROR svcctl_EnumDependentServicesA([in,ref] policy_handle *service, [in] uint32 state, [out] ENUM_SERVICE_STATUS *status, [in] uint32 buf_size, [out] uint32 bytes_needed, [out] uint32 services_returned); /*****************/ /* Function 0x1a */ 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] uint32 bytes_needed, [out] uint32 services_returned, [in,out] uint32 *resume_handle ); /*****************/ /* Function 0x1b */ WERROR svcctl_OpenSCManagerA( [in] unistr *MachineName, [in] unistr *DatabaseName, [in] uint32 access_mask, [out,ref] policy_handle *handle); /*****************/ /* Function 0x1c */ WERROR svcctl_OpenServiceA([in,ref] policy_handle *scmanager_handle, [in] unistr *ServiceName, [in] uint32 access_mask); /*****************/ /* Function 0x1d */ WERROR svcctl_QueryServiceConfigA([in,ref] policy_handle *handle, [out] uint8 query[buf_size], /*QUERYU_SERVICE_CONFIG */ [in] uint32 buf_size, [out] uint32 bytes_needed ); /*****************/ /* Function 0x1e */ WERROR svcctl_QueryServiceLockStatusA( [in,ref] policy_handle *handle, [in] uint32 buf_size, [out,ref] SERVICE_LOCK_STATUS *status, [out,ref] uint32 *required_buf_size ); /*****************/ /* Function 0x1f */ WERROR svcctl_StartServiceA( [in,ref] policy_handle *handle, [in] uint32 NumArgs, [in,length_of(NumArgs)] unistr *Arguments); /*****************/ /* Function 0x20 */ WERROR svcctl_GetServiceDisplayNameA([in,ref] policy_handle *handle, [in] unistr *service_name, [out] unistr *display_name, [in,out] uint32 *display_name_length); /*****************/ /* Function 0x21 */ WERROR svcctl_GetServiceKeyNameA([in,ref] policy_handle *handle, [in] unistr *service_name, [out] unistr *key_name, [in,out] uint32 *display_name_length); /*****************/ /* Function 0x22 */ WERROR svcctl_GetCurrentGroupeStateW(); /*****************/ /* Function 0x23 */ WERROR svcctl_EnumServiceGroupW(); /*****************/ /* Function 0x24 */ WERROR svcctl_ChangeServiceConfig2A([in,ref] policy_handle *handle, [in] uint32 info_level, [in] uint8 *info ); /*****************/ /* Function 0x25 */ WERROR svcctl_ChangeServiceConfig2W([in,ref] policy_handle *handle, [in] uint32 info_level, [in] uint8 *info); /*****************/ /* Function 0x26 */ WERROR svcctl_QueryServiceConfig2A( [in,ref] policy_handle *handle, [in] uint32 info_level, [out] uint8 buffer[buf_size], [in] uint32 buf_size, [out] uint32 bytes_needed); /*****************/ /* Function 0x27 */ WERROR svcctl_QueryServiceConfig2W( [in,ref] policy_handle *handle, [in] uint32 info_level, [out] uint8 buffer[buf_size], [in] uint32 buf_size, [out] uint32 bytes_needed); /*****************/ /* Function 0x28 */ WERROR svcctl_QueryServiceStatusEx( [in,ref] policy_handle *handle, [in] uint32 info_level, [out] uint8 buffer[buf_size], [in] uint32 buf_size, [out] uint32 bytes_needed); /*****************/ /* Function 0x29 */ WERROR EnumServicesStatusExA( [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] uint32 bytes_needed, [out] uint32 service_returned, [in,out] uint32 *resume_handle, [out] unistr *group_name); /*****************/ /* Function 0x2a */ WERROR EnumServicesStatusExW( [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] uint32 bytes_needed, [out] uint32 service_returned, [in,out] uint32 *resume_handle, [out] unistr *group_name); /*****************/ /* Function 0x2b */ WERROR svcctl_SCSendTSMessage(); }