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; }
static void test_NewWorkItem(void) { HRESULT hres; ITask *task; const WCHAR task_name[] = {'T', 'e', 's', 't', 'i', 'n', 'g', 0}; GUID GUID_BAD; /* Initialize a GUID that will not be a recognized CLSID or a IID */ CoCreateGuid(&GUID_BAD); /* Create TaskScheduler */ hres = CoCreateInstance(&CLSID_CTaskScheduler, NULL, CLSCTX_INPROC_SERVER, &IID_ITaskScheduler, (void **) &test_task_scheduler); ok(hres == S_OK, "CTaskScheduler CoCreateInstance failed: %08x\n", hres); if (hres != S_OK) { skip("Failed to create task scheduler. Skipping tests.\n"); return; } /* Test basic task creation */ hres = ITaskScheduler_NewWorkItem(test_task_scheduler, task_name, &CLSID_CTask, &IID_ITask, (IUnknown**)&task); ok(hres == S_OK, "NewNetworkItem failed: %08x\n", hres); if (hres == S_OK) ITask_Release(task); /* Task creation attempt using invalid work item class ID */ hres = ITaskScheduler_NewWorkItem(test_task_scheduler, task_name, &GUID_BAD, &IID_ITask, (IUnknown**)&task); ok(hres == CLASS_E_CLASSNOTAVAILABLE, "Expected CLASS_E_CLASSNOTAVAILABLE: %08x\n", hres); /* Task creation attempt using invalid interface ID */ hres = ITaskScheduler_NewWorkItem(test_task_scheduler, task_name, &CLSID_CTask, &GUID_BAD, (IUnknown**)&task); ok(hres == E_NOINTERFACE, "Expected E_NOINTERFACE: %08x\n", hres); /* Task creation attempt using invalid work item class and interface ID */ hres = ITaskScheduler_NewWorkItem(test_task_scheduler, task_name, &GUID_BAD, &GUID_BAD, (IUnknown**)&task); ok(hres == CLASS_E_CLASSNOTAVAILABLE, "Expected CLASS_E_CLASSNOTAVAILABLE: %08x\n", hres); ITaskScheduler_Release(test_task_scheduler); return; }