static ULONG WINAPI MSTASK_ITaskScheduler_AddRef( ITaskScheduler* iface) { TaskSchedulerImpl *This = impl_from_ITaskScheduler(iface); TRACE("\n"); return InterlockedIncrement(&This->ref); }
static HRESULT WINAPI MSTASK_ITaskScheduler_GetTargetComputer( ITaskScheduler *iface, LPWSTR *comp_name) { TaskSchedulerImpl *This = impl_from_ITaskScheduler(iface); BSTR bstr; WCHAR *buffer; HRESULT hr; TRACE("(%p)->(%p)\n", This, comp_name); if (!comp_name) return E_INVALIDARG; hr = ITaskService_get_TargetServer(This->service, &bstr); if (hr != S_OK) return hr; /* extra space for two '\' and a zero */ buffer = CoTaskMemAlloc((SysStringLen(bstr) + 3) * sizeof(WCHAR)); if (buffer) { buffer[0] = '\\'; buffer[1] = '\\'; lstrcpyW(buffer + 2, bstr); *comp_name = buffer; hr = S_OK; } else { *comp_name = NULL; hr = E_OUTOFMEMORY; } SysFreeString(bstr); return hr; }
static HRESULT WINAPI MSTASK_ITaskScheduler_GetTargetComputer( ITaskScheduler* iface, LPWSTR *ppwszComputer) { TaskSchedulerImpl *This = impl_from_ITaskScheduler(iface); LPWSTR buffer; DWORD len = MAX_COMPUTERNAME_LENGTH + 1; /* extra space for the zero */ TRACE("(%p)->(%p)\n", This, ppwszComputer); if (!ppwszComputer) return E_INVALIDARG; /* extra space for two '\' and a zero */ buffer = CoTaskMemAlloc((MAX_COMPUTERNAME_LENGTH + 3) * sizeof(WCHAR)); if (buffer) { buffer[0] = '\\'; buffer[1] = '\\'; if (GetComputerNameW(buffer + 2, &len)) { *ppwszComputer = buffer; return S_OK; } CoTaskMemFree(buffer); } *ppwszComputer = NULL; return HRESULT_FROM_WIN32(GetLastError()); }
static HRESULT WINAPI MSTASK_ITaskScheduler_SetTargetComputer( ITaskScheduler* iface, LPCWSTR pwszComputer) { TaskSchedulerImpl *This = impl_from_ITaskScheduler(iface); WCHAR buffer[MAX_COMPUTERNAME_LENGTH + 3]; /* extra space for two '\' and a zero */ DWORD len = MAX_COMPUTERNAME_LENGTH + 1; /* extra space for a zero */ TRACE("(%p)->(%s)\n", This, debugstr_w(pwszComputer)); /* NULL is an alias for the local computer */ if (!pwszComputer) return S_OK; buffer[0] = '\\'; buffer[1] = '\\'; if (GetComputerNameW(buffer + 2, &len)) { if (!lstrcmpiW(buffer, pwszComputer) || /* full unc name */ !lstrcmpiW(buffer + 2, pwszComputer)) /* name without backslash */ return S_OK; } FIXME("remote computer %s not supported\n", debugstr_w(pwszComputer)); return HRESULT_FROM_WIN32(ERROR_BAD_NETPATH); }
static ULONG WINAPI MSTASK_ITaskScheduler_Release( ITaskScheduler* iface) { TaskSchedulerImpl * This = impl_from_ITaskScheduler(iface); ULONG ref; TRACE("\n"); ref = InterlockedDecrement(&This->ref); if (ref == 0) TaskSchedulerDestructor(This); return ref; }
static HRESULT WINAPI MSTASK_ITaskScheduler_Enum( ITaskScheduler* iface, IEnumWorkItems **tasks) { TaskSchedulerImpl *This = impl_from_ITaskScheduler(iface); TRACE("(%p)->(%p)\n", This, tasks); if (!tasks) return E_INVALIDARG; return create_task_enum(tasks); }
static HRESULT WINAPI MSTASK_ITaskScheduler_SetTargetComputer( ITaskScheduler *iface, LPCWSTR comp_name) { TaskSchedulerImpl *This = impl_from_ITaskScheduler(iface); VARIANT v_null, v_comp; HRESULT hr; TRACE("(%p)->(%s)\n", This, debugstr_w(comp_name)); V_VT(&v_null) = VT_NULL; V_VT(&v_comp) = VT_BSTR; V_BSTR(&v_comp) = SysAllocString(comp_name); hr = ITaskService_Connect(This->service, v_comp, v_null, v_null, v_null); SysFreeString(V_BSTR(&v_comp)); return hr; }
static HRESULT WINAPI MSTASK_ITaskScheduler_NewWorkItem( ITaskScheduler* iface, LPCWSTR task_name, REFCLSID rclsid, REFIID riid, IUnknown **task) { TaskSchedulerImpl *This = impl_from_ITaskScheduler(iface); TRACE("(%p, %s, %s, %s, %p)\n", iface, debugstr_w(task_name), debugstr_guid(rclsid), debugstr_guid(riid), task); if (!IsEqualGUID(rclsid, &CLSID_CTask)) return CLASS_E_CLASSNOTAVAILABLE; if (!IsEqualGUID(riid, &IID_ITask)) return E_NOINTERFACE; return TaskConstructor(This->service, task_name, (ITask **)task); }
static HRESULT WINAPI MSTASK_ITaskScheduler_QueryInterface( ITaskScheduler* iface, REFIID riid, void **ppvObject) { TaskSchedulerImpl * This = impl_from_ITaskScheduler(iface); TRACE("IID: %s\n", debugstr_guid(riid)); if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_ITaskScheduler)) { *ppvObject = &This->ITaskScheduler_iface; ITaskScheduler_AddRef(iface); return S_OK; } *ppvObject = NULL; return E_NOINTERFACE; }