Dmitry Timoshkov : taskschd: Implement ITaskFolder:: RegisterTask as a wrapper around ITaskFolder::RegisterTaskDefinition.
Module: wine Branch: master Commit: 433598c10b4f32ace1c3a46be1fd68210b81261a URL: http://source.winehq.org/git/wine.git/?a=commit;h=433598c10b4f32ace1c3a46be1... Author: Dmitry Timoshkov <dmitry(a)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
participants (1)
-
Alexandre Julliard