From: Jacob Czekalla jczekalla@codeweavers.com
--- dlls/taskschd/regtask.c | 57 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-)
diff --git a/dlls/taskschd/regtask.c b/dlls/taskschd/regtask.c index bae0d4cb0b2..c1276ea9801 100644 --- a/dlls/taskschd/regtask.c +++ b/dlls/taskschd/regtask.c @@ -471,8 +471,61 @@ static HRESULT WINAPI regtasks_get_Count(IRegisteredTaskCollection *iface, LONG
static HRESULT WINAPI regtasks_get_Item(IRegisteredTaskCollection *iface, VARIANT index, IRegisteredTask **regtask) { - FIXME("%p,%s,%p: stub\n", iface, debugstr_variant(&index), regtask); - return E_NOTIMPL; + HRESULT hr; + WCHAR *xml = NULL; + VARIANT converted_index; + TASK_NAMES task_names = NULL; + ITaskDefinition *definition = NULL; + RegisteredTaskCollection *collection; + DWORD start_index = 0, num_tasks = 0, i = 0; + + collection = impl_from_IRegisteredTaskCollection(iface); + if (!regtask) + return E_POINTER; + *regtask = NULL; + + VariantInit(&converted_index); + hr = VariantChangeType(&converted_index, &index, 0, VT_UI4); + if (FAILED(hr)) + return hr; + + start_index = V_UI4(&index); + if (start_index == 0) + { + VariantClear(&converted_index); + return E_INVALIDARG; + } + start_index -= 1; + + hr = SchRpcEnumTasks(collection->path, 0, &start_index, 1, &num_tasks, &task_names); + if(start_index > num_tasks) + { + VariantClear(&converted_index); + return E_INVALIDARG; + } + if (FAILED(hr)) + { + VariantClear(&converted_index); + return hr; + } + + hr = TaskDefinition_create(&definition); + if (FAILED(hr)) + goto cleanup; + hr = RegisteredTask_create(collection->path, task_names[0], definition, TASK_VALIDATE_ONLY, TASK_LOGON_INTERACTIVE_TOKEN, regtask, FALSE); + if (FAILED(hr)) + goto cleanup; + + hr = S_OK; +cleanup: + for (;i < num_tasks; i++) + MIDL_user_free(task_names[i]); + MIDL_user_free(task_names); + if (xml) + SysFreeString(xml); + VariantClear(&converted_index); + + return hr; }
static HRESULT WINAPI regtasks_get__NewEnum(IRegisteredTaskCollection *iface, IUnknown **penum)