Dmitry Timoshkov : taskschd: Forward ITaskFolder:: RegisterTask to IRegisterTask constructor.
Module: wine Branch: master Commit: a20b10e445c638b4957ec87aff8c59db1b710803 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a20b10e445c638b4957ec87aff... Author: Dmitry Timoshkov <dmitry(a)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);
participants (1)
-
Alexandre Julliard