static HRESULT WINAPI MSTASK_ITaskScheduler_Activate(ITaskScheduler *iface, LPCWSTR task_name, REFIID riid, IUnknown **unknown) { ITask *task; IPersistFile *pfile; HRESULT hr; TRACE("%p, %s, %s, %p\n", iface, debugstr_w(task_name), debugstr_guid(riid), unknown); hr = ITaskScheduler_NewWorkItem(iface, task_name, &CLSID_CTask, riid, (IUnknown **)&task); if (hr != S_OK) return hr; hr = ITask_QueryInterface(task, &IID_IPersistFile, (void **)&pfile); if (hr == S_OK) { WCHAR *curfile; hr = IPersistFile_GetCurFile(pfile, &curfile); if (hr == S_OK) { hr = IPersistFile_Load(pfile, curfile, STGM_READ | STGM_SHARE_DENY_WRITE); CoTaskMemFree(curfile); } IPersistFile_Release(pfile); } if (hr == S_OK) *unknown = (IUnknown *)task; else ITask_Release(task); return hr; }
void create_lnk_(int line, const WCHAR* path, lnk_desc_t* desc, int save_fails) { HRESULT r; IShellLinkA *sl; IPersistFile *pf; r = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, &IID_IShellLinkA, (LPVOID*)&sl); lok(r == S_OK, "no IID_IShellLinkA (0x%08x)\n", r); if (r != S_OK) return; if (desc->description) { r = IShellLinkA_SetDescription(sl, desc->description); lok(r == S_OK, "SetDescription failed (0x%08x)\n", r); } if (desc->workdir) { r = IShellLinkA_SetWorkingDirectory(sl, desc->workdir); lok(r == S_OK, "SetWorkingDirectory failed (0x%08x)\n", r); } if (desc->path) { r = IShellLinkA_SetPath(sl, desc->path); lok(SUCCEEDED(r), "SetPath failed (0x%08x)\n", r); } if (desc->pidl) { r = IShellLinkA_SetIDList(sl, desc->pidl); lok(r == S_OK, "SetIDList failed (0x%08x)\n", r); } if (desc->arguments) { r = IShellLinkA_SetArguments(sl, desc->arguments); lok(r == S_OK, "SetArguments failed (0x%08x)\n", r); } if (desc->showcmd) { r = IShellLinkA_SetShowCmd(sl, desc->showcmd); lok(r == S_OK, "SetShowCmd failed (0x%08x)\n", r); } if (desc->icon) { r = IShellLinkA_SetIconLocation(sl, desc->icon, desc->icon_id); lok(r == S_OK, "SetIconLocation failed (0x%08x)\n", r); } if (desc->hotkey) { r = IShellLinkA_SetHotkey(sl, desc->hotkey); lok(r == S_OK, "SetHotkey failed (0x%08x)\n", r); } r = IShellLinkA_QueryInterface(sl, &IID_IPersistFile, (void**)&pf); lok(r == S_OK, "no IID_IPersistFile (0x%08x)\n", r); if (r == S_OK) { LPOLESTR str; if (0) { /* crashes on XP */ IPersistFile_GetCurFile(pf, NULL); } /* test GetCurFile before ::Save */ str = (LPWSTR)0xdeadbeef; r = IPersistFile_GetCurFile(pf, &str); lok(r == S_FALSE || broken(r == S_OK), /* shell32 < 5.0 */ "got 0x%08x\n", r); lok(str == NULL, "got %p\n", str); r = IPersistFile_Save(pf, path, TRUE); if (save_fails) { todo_wine { lok(r == S_OK, "save failed (0x%08x)\n", r); } } else {