Exemple #1
0
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);
}