static NTSTATUS svc_CreateService(struct dcerpc_binding_handle *binding_handle, struct policy_handle * pscm_handle, const char *ServiceName, uint32_t type, const char *binary_path, struct policy_handle * psvc_handle) { NTSTATUS status; struct svcctl_CreateServiceW r; r.in.scmanager_handle = pscm_handle; r.in.ServiceName = ServiceName; r.in.DisplayName = NULL; r.in.desired_access = SERVICE_ALL_ACCESS; r.in.type = type; r.in.start_type = SERVICE_DEMAND_START; r.in.error_control = SERVICE_ERROR_NORMAL; r.in.binary_path = binary_path; r.in.LoadOrderGroupKey = NULL; r.in.TagId = NULL; r.in.dependencies = NULL; r.in.dependencies_size = 0; r.in.service_start_name = NULL; r.in.password = NULL; r.in.password_size = 0; r.out.handle = psvc_handle; r.out.TagId = NULL; status = dcerpc_svcctl_CreateServiceW_r(binding_handle, NULL, &r); return NT_RES(status, r.out.result); }
NTSTATUS svc_ChangeServiceConfig(struct dcerpc_pipe * svc_pipe, struct policy_handle * psvc_handle, uint32_t type, const char *binary_path) { NTSTATUS status; struct svcctl_ChangeServiceConfigW r; r.in.handle = psvc_handle; r.in.type = type; r.in.start_type = SERVICE_NO_CHANGE; r.in.error_control = SERVICE_NO_CHANGE; r.in.binary_path = binary_path; r.in.load_order_group = NULL; r.in.tag_id = NULL; r.in.dependencies = NULL; r.in.dependencies_size = 0; r.in.service_start_name = NULL; r.in.password = NULL; r.in.password_size = 0; r.in.display_name = NULL; r.out.tag_id = NULL; status = dcerpc_svcctl_ChangeServiceConfigW(svc_pipe, NULL, &r); return NT_RES(status, r.out.result); }
static NTSTATUS svc_DeleteService(struct dcerpc_binding_handle *binding_handle, struct policy_handle * psvc_handle) { NTSTATUS status; struct svcctl_DeleteService r; r.in.handle = psvc_handle; status = dcerpc_svcctl_DeleteService_r(binding_handle, NULL, &r); return NT_RES(status, r.out.result); }
static NTSTATUS svc_QueryServiceStatus(struct dcerpc_binding_handle *binding_handle, struct policy_handle * psvc_handle, struct SERVICE_STATUS * sstatus) { NTSTATUS status; struct svcctl_QueryServiceStatus r; r.in.handle = psvc_handle; r.out.service_status = sstatus; status = dcerpc_svcctl_QueryServiceStatus_r(binding_handle, NULL, &r); return NT_RES(status, r.out.result); }
static NTSTATUS svc_StartService(struct dcerpc_binding_handle *binding_handle, struct policy_handle * psvc_handle) { NTSTATUS status; struct svcctl_StartServiceW r; r.in.handle = psvc_handle; r.in.NumArgs = 0; r.in.Arguments = NULL; status = dcerpc_svcctl_StartServiceW_r(binding_handle, NULL, &r); return NT_RES(status, r.out.result); }
static NTSTATUS svc_ControlService(struct dcerpc_binding_handle *binding_handle, struct policy_handle * psvc_handle, int control, struct SERVICE_STATUS * sstatus) { NTSTATUS status; struct svcctl_ControlService r; r.in.handle = psvc_handle; r.in.control = control; r.out.service_status = sstatus; status = dcerpc_svcctl_ControlService_r(binding_handle, NULL, &r); return NT_RES(status, r.out.result); }
static NTSTATUS svc_OpenSCManager(struct dcerpc_binding_handle *binding_handle, const char *hostname, struct policy_handle * pscm_handle) { NTSTATUS status; struct svcctl_OpenSCManagerW r; r.in.MachineName = hostname; r.in.DatabaseName = NULL; r.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED; r.out.handle = pscm_handle; status = dcerpc_svcctl_OpenSCManagerW_r(binding_handle, NULL, &r); return NT_RES(status, r.out.result); }
static NTSTATUS svc_OpenService(struct dcerpc_binding_handle *binding_handle, struct policy_handle * pscm_handle, const char *ServiceName, struct policy_handle * psvc_handle) { NTSTATUS status; struct svcctl_OpenServiceW r; r.in.scmanager_handle = pscm_handle; r.in.ServiceName = ServiceName; r.in.access_mask = SERVICE_ALL_ACCESS; r.out.handle = psvc_handle; status = dcerpc_svcctl_OpenServiceW_r(binding_handle, NULL, &r); return NT_RES(status, r.out.result); }