From 4f392cea55f1160d6dc35d05c393862e3edf8808 Mon Sep 17 00:00:00 2001 From: Roy Shea Date: Thu, 17 Jul 2008 16:56:14 -0700 Subject: [PATCH] mstask: TaskScheduler stub with AddRef, QueryInterface, and Release. --- dlls/mstask/Makefile.in | 5 +- dlls/mstask/mstask_main.c | 5 +- dlls/mstask/mstask_private.h | 39 ++++++++ dlls/mstask/task_scheduler.c | 174 +++++++++++++++++++++++++++++++++++ 4 files changed, 217 insertions(+), 6 deletions(-) create mode 100644 dlls/mstask/mstask_private.h create mode 100644 dlls/mstask/task_scheduler.c diff --git a/dlls/mstask/Makefile.in b/dlls/mstask/Makefile.in index f05d63fb3f..b193ae7227 100644 --- a/dlls/mstask/Makefile.in +++ b/dlls/mstask/Makefile.in @@ -3,10 +3,11 @@ TOPOBJDIR = ../.. SRCDIR = @srcdir@ VPATH = @srcdir@ MODULE = mstask.dll -IMPORTS = kernel32 +IMPORTS = uuid kernel32 C_SRCS = \ - mstask_main.c + mstask_main.c \ + task_scheduler.c IDL_I_SRCS = mstask_local.idl diff --git a/dlls/mstask/mstask_main.c b/dlls/mstask/mstask_main.c index c373d663dc..b1984ebff8 100644 --- a/dlls/mstask/mstask_main.c +++ b/dlls/mstask/mstask_main.c @@ -16,10 +16,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include - -#include "windef.h" -#include "winbase.h" +#include "mstask_private.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(mstask); diff --git a/dlls/mstask/mstask_private.h b/dlls/mstask/mstask_private.h new file mode 100644 index 0000000000..3a08e7a60b --- /dev/null +++ b/dlls/mstask/mstask_private.h @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2008 Google (Roy Shea) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __MSTASK_PRIVATE_H__ +#define __MSTASK_PRIVATE_H__ + +#include + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "ole2.h" +#include "mstask.h" + +typedef struct +{ + const ITaskSchedulerVtbl *lpVtbl; + LONG ref; +} TaskSchedulerImpl; +extern HRESULT TaskSchedulerConstructor(LPVOID *ppObj); + +#endif /* __MSTASK_PRIVATE_H__ */ diff --git a/dlls/mstask/task_scheduler.c b/dlls/mstask/task_scheduler.c new file mode 100644 index 0000000000..5d4768ed85 --- /dev/null +++ b/dlls/mstask/task_scheduler.c @@ -0,0 +1,174 @@ +/* + * Copyright (C) 2008 Google (Roy Shea) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "mstask_private.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(mstask); + +static void TaskSchedulerDestructor(TaskSchedulerImpl *This) +{ + TRACE("%p\n", This); + HeapFree(GetProcessHeap(), 0, This); +} + +static HRESULT WINAPI MSTASK_ITaskScheduler_QueryInterface( + ITaskScheduler* iface, + REFIID riid, + void **ppvObject) +{ + TaskSchedulerImpl * This = (TaskSchedulerImpl *)iface; + + TRACE("IID: %s\n", debugstr_guid(riid)); + + if (IsEqualGUID(riid, &IID_IUnknown) || + IsEqualGUID(riid, &IID_ITaskScheduler)) + { + *ppvObject = &This->lpVtbl; + ITaskScheduler_AddRef(iface); + return S_OK; + } + + *ppvObject = NULL; + return E_NOINTERFACE; +} + +static ULONG WINAPI MSTASK_ITaskScheduler_AddRef( + ITaskScheduler* iface) +{ + TaskSchedulerImpl *This = (TaskSchedulerImpl *)iface; + TRACE("\n"); + return InterlockedIncrement(&This->ref); +} + +static ULONG WINAPI MSTASK_ITaskScheduler_Release( + ITaskScheduler* iface) +{ + TaskSchedulerImpl * This = (TaskSchedulerImpl *)iface; + ULONG ref; + TRACE("\n"); + ref = InterlockedDecrement(&This->ref); + if (ref == 0) + TaskSchedulerDestructor(This); + return ref; +} + +static HRESULT WINAPI MSTASK_ITaskScheduler_SetTargetComputer( + ITaskScheduler* iface, + LPCWSTR pwszComputer) +{ + FIXME("%p, %s: stub\n", iface, debugstr_w(pwszComputer)); + return E_NOTIMPL; +} + +static HRESULT WINAPI MSTASK_ITaskScheduler_GetTargetComputer( + ITaskScheduler* iface, + LPWSTR *ppwszComputer) +{ + FIXME("%p, %p: stub\n", iface, ppwszComputer); + return E_NOTIMPL; +} + +static HRESULT WINAPI MSTASK_ITaskScheduler_Enum( + ITaskScheduler* iface, + IEnumWorkItems **ppEnumTasks) +{ + FIXME("%p, %p: stub\n", iface, ppEnumTasks); + return E_NOTIMPL; +} + +static HRESULT WINAPI MSTASK_ITaskScheduler_Activate( + ITaskScheduler* iface, + LPCWSTR pwszName, + REFIID riid, + IUnknown **ppunk) +{ + FIXME("%p, %s, %s, %p: stub\n", iface, debugstr_w(pwszName), + debugstr_guid(riid), ppunk); + return E_NOTIMPL; +} + +static HRESULT WINAPI MSTASK_ITaskScheduler_Delete( + ITaskScheduler* iface, + LPCWSTR pwszName) +{ + FIXME("%p, %s: stub\n", iface, debugstr_w(pwszName)); + return E_NOTIMPL; +} + +static HRESULT WINAPI MSTASK_ITaskScheduler_NewWorkItem( + ITaskScheduler* iface, + LPCWSTR pwszTaskName, + REFCLSID rclsid, + REFIID riid, + IUnknown **ppunk) +{ + FIXME("%p, %s, %s, %s, %p: stub\n", iface, debugstr_w(pwszTaskName), + debugstr_guid(rclsid) ,debugstr_guid(riid), ppunk); + return E_NOTIMPL; +} + +static HRESULT WINAPI MSTASK_ITaskScheduler_AddWorkItem( + ITaskScheduler* iface, + LPCWSTR pwszTaskName, + IScheduledWorkItem *pWorkItem) +{ + FIXME("%p, %s, %p: stub\n", iface, debugstr_w(pwszTaskName), pWorkItem); + return E_NOTIMPL; +} + +static HRESULT WINAPI MSTASK_ITaskScheduler_IsOfType( + ITaskScheduler* iface, + LPCWSTR pwszName, + REFIID riid) +{ + FIXME("%p, %s, %s: stub\n", iface, debugstr_w(pwszName), + debugstr_guid(riid)); + return E_NOTIMPL; +} + +static const ITaskSchedulerVtbl MSTASK_ITaskSchedulerVtbl = +{ + MSTASK_ITaskScheduler_QueryInterface, + MSTASK_ITaskScheduler_AddRef, + MSTASK_ITaskScheduler_Release, + MSTASK_ITaskScheduler_SetTargetComputer, + MSTASK_ITaskScheduler_GetTargetComputer, + MSTASK_ITaskScheduler_Enum, + MSTASK_ITaskScheduler_Activate, + MSTASK_ITaskScheduler_Delete, + MSTASK_ITaskScheduler_NewWorkItem, + MSTASK_ITaskScheduler_AddWorkItem, + MSTASK_ITaskScheduler_IsOfType +}; + +HRESULT TaskSchedulerConstructor(LPVOID *ppObj) +{ + TaskSchedulerImpl *This; + TRACE("(%p)\n", ppObj); + + This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This)); + if (!This) + return E_OUTOFMEMORY; + + This->lpVtbl = &MSTASK_ITaskSchedulerVtbl; + This->ref = 1; + + *ppObj = &This->lpVtbl; + return S_OK; +} -- 2.32.0.93.g670b81a890