static bool test_ControlService(struct torture_context *tctx, struct dcerpc_pipe *p) { struct svcctl_ControlService r; struct policy_handle h, s; struct SERVICE_STATUS service_status; struct dcerpc_binding_handle *b = p->binding_handle; if (!test_OpenSCManager(b, tctx, &h)) return false; if (!test_OpenService(b, tctx, &h, TORTURE_DEFAULT_SERVICE, &s)) return false; r.in.handle = &s; r.in.control = 0; r.out.service_status = &service_status; torture_assert_ntstatus_ok(tctx, dcerpc_svcctl_ControlService_r(b, tctx, &r), "ControlService failed!"); torture_assert_werr_equal(tctx, r.out.result, WERR_INVALID_PARAM, "ControlService failed!"); if (!test_CloseServiceHandle(b, tctx, &s)) return false; if (!test_CloseServiceHandle(b, tctx, &h)) return false; return true; }
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); }