static HRESULT WINAPI regtask_get_Xml(IRegisteredTask *iface, BSTR *xml) { RegisteredTask *regtask = impl_from_IRegisteredTask(iface); TRACE("%p,%p\n", iface, xml); if (!xml) return E_POINTER; return ITaskDefinition_get_XmlText(regtask->taskdef, xml); }
static HRESULT WINAPI regtask_get_State(IRegisteredTask *iface, TASK_STATE *state) { RegisteredTask *regtask = impl_from_IRegisteredTask(iface); DWORD enabled; TRACE("%p,%p\n", iface, state); if (!state) return E_POINTER; return SchRpcGetTaskInfo(regtask->path, SCH_FLAG_STATE, &enabled, state); }
static HRESULT WINAPI regtask_get_Definition(IRegisteredTask *iface, ITaskDefinition **task) { RegisteredTask *regtask = impl_from_IRegisteredTask(iface); TRACE("%p,%p\n", iface, task); if (!task) return E_POINTER; ITaskDefinition_AddRef(regtask->taskdef); *task = regtask->taskdef; return S_OK; }
static HRESULT WINAPI regtask_get_Path(IRegisteredTask *iface, BSTR *path) { RegisteredTask *regtask = impl_from_IRegisteredTask(iface); TRACE("%p,%p\n", iface, path); if (!path) return E_POINTER; *path = SysAllocString(regtask->path); if (!*path) return E_OUTOFMEMORY; return S_OK; }
static ULONG WINAPI regtask_Release(IRegisteredTask *iface) { RegisteredTask *regtask = impl_from_IRegisteredTask(iface); LONG ref = InterlockedDecrement(®task->ref); if (!ref) { TRACE("destroying %p\n", iface); heap_free(regtask->path); heap_free(regtask); } return ref; }
static HRESULT WINAPI regtask_get_Enabled(IRegisteredTask *iface, VARIANT_BOOL *v_enabled) { RegisteredTask *regtask = impl_from_IRegisteredTask(iface); DWORD enabled, state; HRESULT hr; TRACE("%p,%p\n", iface, v_enabled); if (!v_enabled) return E_POINTER; hr = SchRpcGetTaskInfo(regtask->path, 0, &enabled, &state); if (hr == S_OK) *v_enabled = enabled ? VARIANT_TRUE : VARIANT_FALSE; return hr; }
static HRESULT WINAPI regtask_get_Name(IRegisteredTask *iface, BSTR *name) { RegisteredTask *regtask = impl_from_IRegisteredTask(iface); const WCHAR *p_name; TRACE("%p,%p\n", iface, name); if (!name) return E_POINTER; p_name = strrchrW(regtask->path, '\\'); if (!p_name) p_name = regtask->path; else if (p_name[1] != 0) p_name++; *name = SysAllocString(p_name); if (!*name) return E_OUTOFMEMORY; return S_OK; }
static ULONG WINAPI regtask_AddRef(IRegisteredTask *iface) { RegisteredTask *regtask = impl_from_IRegisteredTask(iface); return InterlockedIncrement(®task->ref); }