[5/5] taskschd: Add support for registering a task with NULL name in the root folder.

Dmitry Timoshkov dmitry at baikal.ru
Thu Apr 10 03:41:45 CDT 2014


Because server receives full task name it can't autogenerate a name in
a not root folder.
---
 dlls/taskschd/regtask.c         | 20 ++++++++++++++++++--
 dlls/taskschd/tests/scheduler.c |  7 +------
 2 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/dlls/taskschd/regtask.c b/dlls/taskschd/regtask.c
index 5e9d5d3..10562fe 100644
--- a/dlls/taskschd/regtask.c
+++ b/dlls/taskschd/regtask.c
@@ -313,8 +313,21 @@ HRESULT RegisteredTask_create(const WCHAR *path, const WCHAR *name, ITaskDefinit
     RegisteredTask *regtask;
     HRESULT hr;
 
-    full_name = get_full_path(path, name);
-    if (!full_name) return E_OUTOFMEMORY;
+    if (!name)
+    {
+        if (!create) return E_INVALIDARG;
+
+        /* NULL task name is allowed only in the root folder */
+        if (path[0] != '\\' || path[1])
+            return E_INVALIDARG;
+
+        full_name = NULL;
+    }
+    else
+    {
+        full_name = get_full_path(path, name);
+        if (!full_name) return E_OUTOFMEMORY;
+    }
 
     regtask = heap_alloc(sizeof(*regtask));
     if (!regtask)
@@ -337,6 +350,9 @@ HRESULT RegisteredTask_create(const WCHAR *path, const WCHAR *name, ITaskDefinit
             SysFreeString(xml);
             return hr;
         }
+
+        heap_free(full_name);
+        full_name = heap_strdupW(actual_path);
         MIDL_user_free(actual_path);
     }
     else
diff --git a/dlls/taskschd/tests/scheduler.c b/dlls/taskschd/tests/scheduler.c
index b3fe9ea..6751f62 100644
--- a/dlls/taskschd/tests/scheduler.c
+++ b/dlls/taskschd/tests/scheduler.c
@@ -851,7 +851,6 @@ todo_wine
     IRegisteredTask_Release(task2);
 
     hr = ITaskFolder_GetTask(root, NULL, &task1);
-todo_wine
     ok(hr == E_INVALIDARG, "expected E_INVALIDARG, got %#x\n", hr);
 
     hr = ITaskFolder_GetTask(root, Wine_Task1, NULL);
@@ -929,10 +928,8 @@ todo_wine
     ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "expected ERROR_FILE_NOT_FOUND, got %#x\n", hr);
 
     hr = ITaskFolder_RegisterTask(root, NULL, xmlW, TASK_CREATE, v_null, v_null, TASK_LOGON_NONE, v_null, &task1);
-todo_wine
     ok(hr == S_OK, "RegisterTask error %#x\n", hr);
-if (hr == S_OK)
-{
+
     hr = IRegisteredTask_get_Name(task1, &bstr);
     ok(hr == S_OK, "get_Name error %#x\n", hr);
     hr = IIDFromString(bstr, &iid);
@@ -942,10 +939,8 @@ if (hr == S_OK)
 
     hr = ITaskFolder_DeleteTask(root, bstr, 0);
     ok(hr == S_OK, "DeleteTask error %#x\n", hr);
-}
 
     hr = ITaskFolder_RegisterTask(folder, NULL, xmlW, TASK_CREATE, v_null, v_null, TASK_LOGON_NONE, v_null, &task1);
-todo_wine
     ok(hr == E_INVALIDARG, "expected E_INVALIDARG, got %#x\n", hr);
 
     ITaskFolder_Release(folder);
-- 
1.9.2




More information about the wine-patches mailing list