Dmitry Timoshkov : taskschd: Implement ITaskFolder:: RegisterTask as a wrapper around ITaskFolder::RegisterTaskDefinition.

Alexandre Julliard julliard at winehq.org
Tue Feb 18 14:11:02 CST 2014


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

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Mon Feb 17 14:10:04 2014 +0900

taskschd: Implement ITaskFolder::RegisterTask as a wrapper around ITaskFolder::RegisterTaskDefinition.

---

 dlls/taskschd/folder.c           |   34 +++++++++++++++++++++++-----------
 dlls/taskschd/regtask.c          |    2 +-
 dlls/taskschd/task.c             |    2 +-
 dlls/taskschd/taskschd_private.h |    3 ++-
 dlls/taskschd/tests/scheduler.c  |    4 ++++
 5 files changed, 31 insertions(+), 14 deletions(-)

diff --git a/dlls/taskschd/folder.c b/dlls/taskschd/folder.c
index 9e57e07..ab3f8f1 100644
--- a/dlls/taskschd/folder.c
+++ b/dlls/taskschd/folder.c
@@ -319,11 +319,32 @@ static HRESULT WINAPI TaskFolder_RegisterTask(ITaskFolder *iface, BSTR name, BST
                                               VARIANT user, VARIANT password, TASK_LOGON_TYPE logon,
                                               VARIANT sddl, IRegisteredTask **task)
 {
+    ITaskDefinition *taskdef;
+    HRESULT hr;
+
+    TRACE("%p,%s,%s,%x,%s,%s,%d,%s,%p\n", iface, debugstr_w(name), debugstr_w(xml), flags,
+          debugstr_variant(&user), debugstr_variant(&password), logon, debugstr_variant(&sddl), task);
+
+    hr = TaskDefinition_create(&taskdef);
+    if (hr != S_OK) return hr;
+
+    hr = ITaskDefinition_put_XmlText(taskdef, xml);
+    if (hr == S_OK)
+        hr = ITaskFolder_RegisterTaskDefinition(iface, name, taskdef, flags, user, password, logon, sddl, task);
+
+    ITaskDefinition_Release(taskdef);
+    return hr;
+}
+
+static HRESULT WINAPI TaskFolder_RegisterTaskDefinition(ITaskFolder *iface, BSTR name, ITaskDefinition *definition, LONG flags,
+                                                        VARIANT user, VARIANT password, TASK_LOGON_TYPE logon,
+                                                        VARIANT sddl, IRegisteredTask **task)
+{
     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,
+    FIXME("%p,%s,%p,%x,%s,%s,%d,%s,%p: stub\n", iface, debugstr_w(name), definition, flags,
           debugstr_variant(&user), debugstr_variant(&password), logon, debugstr_variant(&sddl), task);
 
     if (!is_variant_null(&sddl))
@@ -334,7 +355,7 @@ static HRESULT WINAPI TaskFolder_RegisterTask(ITaskFolder *iface, BSTR name, BST
 
     if (!task) task = ®task;
 
-    hr = RegisteredTask_create(folder->path, name, xml, logon, task, TRUE);
+    hr = RegisteredTask_create(folder->path, name, definition, logon, task, TRUE);
 
     if (regtask)
         IRegisteredTask_Release(regtask);
@@ -342,15 +363,6 @@ static HRESULT WINAPI TaskFolder_RegisterTask(ITaskFolder *iface, BSTR name, BST
     return hr;
 }
 
-static HRESULT WINAPI TaskFolder_RegisterTaskDefinition(ITaskFolder *iface, BSTR path, ITaskDefinition *definition, LONG flags,
-                                                        VARIANT user, VARIANT password, TASK_LOGON_TYPE logon,
-                                                        VARIANT sddl, IRegisteredTask **task)
-{
-    FIXME("%p,%s,%p,%x,%s,%s,%d,%s,%p: stub\n", iface, debugstr_w(path), definition, flags,
-          debugstr_variant(&user), debugstr_variant(&password), logon, debugstr_variant(&sddl), task);
-    return E_NOTIMPL;
-}
-
 static HRESULT WINAPI TaskFolder_GetSecurityDescriptor(ITaskFolder *iface, LONG info, BSTR *sddl)
 {
     FIXME("%p,%x,%p: stub\n", iface, info, sddl);
diff --git a/dlls/taskschd/regtask.c b/dlls/taskschd/regtask.c
index bab50e3..7ed3c2a 100644
--- a/dlls/taskschd/regtask.c
+++ b/dlls/taskschd/regtask.c
@@ -251,7 +251,7 @@ static const IRegisteredTaskVtbl RegisteredTask_vtbl =
     regtask_GetRunTimes
 };
 
-HRESULT RegisteredTask_create(const WCHAR *path, const WCHAR *name, const WCHAR *xml,
+HRESULT RegisteredTask_create(const WCHAR *path, const WCHAR *name, ITaskDefinition *definition,
                               TASK_LOGON_TYPE logon, IRegisteredTask **obj, BOOL create)
 {
     RegisteredTask *regtask;
diff --git a/dlls/taskschd/task.c b/dlls/taskschd/task.c
index 700c79c..95b5ba1 100644
--- a/dlls/taskschd/task.c
+++ b/dlls/taskschd/task.c
@@ -787,7 +787,7 @@ static const ITaskDefinitionVtbl TaskDefinition_vtbl =
     TaskDefinition_put_XmlText
 };
 
-static HRESULT TaskDefinition_create(ITaskDefinition **obj)
+HRESULT TaskDefinition_create(ITaskDefinition **obj)
 {
     TaskDefinition *taskdef;
 
diff --git a/dlls/taskschd/taskschd_private.h b/dlls/taskschd/taskschd_private.h
index b5e0cf1..f9cf909 100644
--- a/dlls/taskschd/taskschd_private.h
+++ b/dlls/taskschd/taskschd_private.h
@@ -22,9 +22,10 @@
 #include "wine/unicode.h"
 
 HRESULT TaskService_create(void **obj) DECLSPEC_HIDDEN;
+HRESULT TaskDefinition_create(ITaskDefinition **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, const WCHAR *name, const WCHAR *xml, TASK_LOGON_TYPE logon,
+HRESULT RegisteredTask_create(const WCHAR *path, const WCHAR *name, ITaskDefinition *definition, TASK_LOGON_TYPE logon,
                               IRegisteredTask **obj, BOOL create) DECLSPEC_HIDDEN;
 HRESULT RegisteredTaskCollection_create(const WCHAR *path, IRegisteredTaskCollection **obj) DECLSPEC_HIDDEN;
 
diff --git a/dlls/taskschd/tests/scheduler.c b/dlls/taskschd/tests/scheduler.c
index 83f5367..dccc228 100644
--- a/dlls/taskschd/tests/scheduler.c
+++ b/dlls/taskschd/tests/scheduler.c
@@ -734,6 +734,7 @@ 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);
@@ -741,7 +742,10 @@ 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




More information about the wine-cvs mailing list