Dmitry Timoshkov : taskschd: Forward ITaskFolder:: RegisterTask to IRegisterTask constructor.

Alexandre Julliard julliard at winehq.org
Thu Feb 13 13:26:10 CST 2014


Module: wine
Branch: master
Commit: a20b10e445c638b4957ec87aff8c59db1b710803
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a20b10e445c638b4957ec87aff8c59db1b710803

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Tue Feb 11 16:18:58 2014 +0900

taskschd: Forward ITaskFolder::RegisterTask to IRegisterTask constructor.

---

 dlls/taskschd/folder.c           |   32 ++++++++++++++++++++++++++------
 dlls/taskschd/regtask.c          |    3 ++-
 dlls/taskschd/taskschd_private.h |    8 +++++++-
 dlls/taskschd/tests/scheduler.c  |    8 ++++----
 4 files changed, 39 insertions(+), 12 deletions(-)

diff --git a/dlls/taskschd/folder.c b/dlls/taskschd/folder.c
index c5f8010..9e57e07 100644
--- a/dlls/taskschd/folder.c
+++ b/dlls/taskschd/folder.c
@@ -287,13 +287,15 @@ static HRESULT WINAPI TaskFolder_DeleteFolder(ITaskFolder *iface, BSTR name, LON
     return reg_delete_folder(folder->path, name);
 }
 
-static HRESULT WINAPI TaskFolder_GetTask(ITaskFolder *iface, BSTR path, IRegisteredTask **task)
+static HRESULT WINAPI TaskFolder_GetTask(ITaskFolder *iface, BSTR name, IRegisteredTask **task)
 {
-    TRACE("%p,%s,%p\n", iface, debugstr_w(path), task);
+    TaskFolder *folder = impl_from_ITaskFolder(iface);
+
+    TRACE("%p,%s,%p\n", iface, debugstr_w(name), task);
 
     if (!task) return E_POINTER;
 
-    return RegisteredTask_create(path, task);
+    return RegisteredTask_create(folder->path, name, NULL, 0, task, FALSE);
 }
 
 static HRESULT WINAPI TaskFolder_GetTasks(ITaskFolder *iface, LONG flags, IRegisteredTaskCollection **tasks)
@@ -313,13 +315,31 @@ static HRESULT WINAPI TaskFolder_DeleteTask(ITaskFolder *iface, BSTR name, LONG
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI TaskFolder_RegisterTask(ITaskFolder *iface, BSTR path, BSTR xml, LONG flags,
+static HRESULT WINAPI TaskFolder_RegisterTask(ITaskFolder *iface, BSTR name, BSTR xml, LONG flags,
                                               VARIANT user, VARIANT password, TASK_LOGON_TYPE logon,
                                               VARIANT sddl, IRegisteredTask **task)
 {
-    FIXME("%p,%s,%s,%x,%s,%s,%d,%s,%p: stub\n", iface, debugstr_w(path), debugstr_w(xml), flags,
+    TaskFolder *folder = impl_from_ITaskFolder(iface);
+    IRegisteredTask *regtask = NULL;
+    HRESULT hr;
+
+    FIXME("%p,%s,%s,%x,%s,%s,%d,%s,%p: stub\n", iface, debugstr_w(name), debugstr_w(xml), flags,
           debugstr_variant(&user), debugstr_variant(&password), logon, debugstr_variant(&sddl), task);
-    return E_NOTIMPL;
+
+    if (!is_variant_null(&sddl))
+        FIXME("security descriptor %s is ignored\n", debugstr_variant(&sddl));
+
+    if (!is_variant_null(&user) || !is_variant_null(&password))
+        FIXME("user/password are ignored\n");
+
+    if (!task) task = ®task;
+
+    hr = RegisteredTask_create(folder->path, name, xml, logon, task, TRUE);
+
+    if (regtask)
+        IRegisteredTask_Release(regtask);
+
+    return hr;
 }
 
 static HRESULT WINAPI TaskFolder_RegisterTaskDefinition(ITaskFolder *iface, BSTR path, ITaskDefinition *definition, LONG flags,
diff --git a/dlls/taskschd/regtask.c b/dlls/taskschd/regtask.c
index 5252670..bab50e3 100644
--- a/dlls/taskschd/regtask.c
+++ b/dlls/taskschd/regtask.c
@@ -251,7 +251,8 @@ static const IRegisteredTaskVtbl RegisteredTask_vtbl =
     regtask_GetRunTimes
 };
 
-HRESULT RegisteredTask_create(const WCHAR *path, IRegisteredTask **obj)
+HRESULT RegisteredTask_create(const WCHAR *path, const WCHAR *name, const WCHAR *xml,
+                              TASK_LOGON_TYPE logon, IRegisteredTask **obj, BOOL create)
 {
     RegisteredTask *regtask;
 
diff --git a/dlls/taskschd/taskschd_private.h b/dlls/taskschd/taskschd_private.h
index df15903..b5e0cf1 100644
--- a/dlls/taskschd/taskschd_private.h
+++ b/dlls/taskschd/taskschd_private.h
@@ -16,12 +16,16 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#ifndef __WINE_TASKSCHD_PRIVATE_H__
+#define __WINE_TASKSCHD_PRIVATE_H__
+
 #include "wine/unicode.h"
 
 HRESULT TaskService_create(void **obj) DECLSPEC_HIDDEN;
 HRESULT TaskFolder_create(const WCHAR *parent, const WCHAR *path, ITaskFolder **obj, BOOL create) DECLSPEC_HIDDEN;
 HRESULT TaskFolderCollection_create(const WCHAR *path, ITaskFolderCollection **obj) DECLSPEC_HIDDEN;
-HRESULT RegisteredTask_create(const WCHAR *path, IRegisteredTask **obj) DECLSPEC_HIDDEN;
+HRESULT RegisteredTask_create(const WCHAR *path, const WCHAR *name, const WCHAR *xml, TASK_LOGON_TYPE logon,
+                              IRegisteredTask **obj, BOOL create) DECLSPEC_HIDDEN;
 HRESULT RegisteredTaskCollection_create(const WCHAR *path, IRegisteredTaskCollection **obj) DECLSPEC_HIDDEN;
 
 const char *debugstr_variant(const VARIANT *v) DECLSPEC_HIDDEN;
@@ -52,3 +56,5 @@ static inline WCHAR *heap_strdupW(const WCHAR *src)
     if ((dst = heap_alloc(len))) memcpy(dst, src, len);
     return dst;
 }
+
+#endif /* __WINE_TASKSCHD_PRIVATE_H__ */
diff --git a/dlls/taskschd/tests/scheduler.c b/dlls/taskschd/tests/scheduler.c
index ac1eb98..8ecd98a 100644
--- a/dlls/taskschd/tests/scheduler.c
+++ b/dlls/taskschd/tests/scheduler.c
@@ -734,7 +734,6 @@ static void test_GetTask(void)
     MultiByteToWideChar(CP_ACP, 0, xml1, -1, xmlW, sizeof(xmlW)/sizeof(xmlW[0]));
 
     hr = ITaskFolder_RegisterTask(root, Wine_Task1, xmlW, TASK_CREATE, v_null, v_null, TASK_LOGON_NONE, v_null, NULL);
-todo_wine
     ok(hr == S_OK, "RegisterTask error %#x\n", hr);
 
     hr = ITaskFolder_RegisterTask(root, Wine_Task1, xmlW, TASK_CREATE, v_null, v_null, TASK_LOGON_NONE, v_null, &task1);
@@ -742,16 +741,17 @@ todo_wine
     ok(hr == HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS), "expected ERROR_ALREADY_EXISTS, got %#x\n", hr);
 
     hr = ITaskFolder_RegisterTask(root, Wine_Task1, xmlW, TASK_CREATE_OR_UPDATE, v_null, v_null, TASK_LOGON_NONE, v_null, &task1);
-todo_wine
     ok(hr == S_OK, "RegisterTask error %#x\n", hr);
-    /* FIXME: Remove once implemented */
-    if (hr != S_OK) goto failed;
 
     hr = IRegisteredTask_get_Name(task1, NULL);
+todo_wine
     ok(hr == E_POINTER, "expected E_POINTER, got %#x\n", hr);
 
     hr = IRegisteredTask_get_Name(task1, &bstr);
+todo_wine
     ok(hr == S_OK, "get_Name error %#x\n", hr);
+    /* FIXME: Remove once implemented */
+    if (hr != S_OK) goto failed;
     ok(!lstrcmpW(bstr, Task1), "expected Task1, got %s\n", wine_dbgstr_w(bstr));
     SysFreeString(bstr);
     hr = IRegisteredTask_get_Path(task1, &bstr);




More information about the wine-cvs mailing list