Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygentask.c
Go to the documentation of this file.
00001 /* 00002 * Copyright (C) 2008 Google (Roy Shea) 00003 * 00004 * This library is free software; you can redistribute it and/or 00005 * modify it under the terms of the GNU Lesser General Public 00006 * License as published by the Free Software Foundation; either 00007 * version 2.1 of the License, or (at your option) any later version. 00008 * 00009 * This library is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 * Lesser General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU Lesser General Public 00015 * License along with this library; if not, write to the Free Software 00016 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 00017 */ 00018 00019 #include "mstask_private.h" 00020 #include "wine/debug.h" 00021 00022 WINE_DEFAULT_DEBUG_CHANNEL(mstask); 00023 00024 typedef struct 00025 { 00026 ITask ITask_iface; 00027 IPersistFile IPersistFile_iface; 00028 LONG ref; 00029 LPWSTR taskName; 00030 LPWSTR applicationName; 00031 LPWSTR parameters; 00032 LPWSTR comment; 00033 DWORD maxRunTime; 00034 LPWSTR accountName; 00035 } TaskImpl; 00036 00037 static inline TaskImpl *impl_from_ITask(ITask *iface) 00038 { 00039 return CONTAINING_RECORD(iface, TaskImpl, ITask_iface); 00040 } 00041 00042 static inline TaskImpl *impl_from_IPersistFile( IPersistFile *iface ) 00043 { 00044 return CONTAINING_RECORD(iface, TaskImpl, IPersistFile_iface); 00045 } 00046 00047 static void TaskDestructor(TaskImpl *This) 00048 { 00049 TRACE("%p\n", This); 00050 HeapFree(GetProcessHeap(), 0, This->accountName); 00051 HeapFree(GetProcessHeap(), 0, This->comment); 00052 HeapFree(GetProcessHeap(), 0, This->parameters); 00053 HeapFree(GetProcessHeap(), 0, This->taskName); 00054 HeapFree(GetProcessHeap(), 0, This); 00055 InterlockedDecrement(&dll_ref); 00056 } 00057 00058 static HRESULT WINAPI MSTASK_ITask_QueryInterface( 00059 ITask* iface, 00060 REFIID riid, 00061 void **ppvObject) 00062 { 00063 TaskImpl * This = impl_from_ITask(iface); 00064 00065 TRACE("IID: %s\n", debugstr_guid(riid)); 00066 if (ppvObject == NULL) 00067 return E_POINTER; 00068 00069 if (IsEqualGUID(riid, &IID_IUnknown) || 00070 IsEqualGUID(riid, &IID_ITask)) 00071 { 00072 *ppvObject = &This->ITask_iface; 00073 ITask_AddRef(iface); 00074 return S_OK; 00075 } 00076 else if (IsEqualGUID(riid, &IID_IPersistFile)) 00077 { 00078 *ppvObject = &This->IPersistFile_iface; 00079 ITask_AddRef(iface); 00080 return S_OK; 00081 } 00082 00083 WARN("Unknown interface: %s\n", debugstr_guid(riid)); 00084 *ppvObject = NULL; 00085 return E_NOINTERFACE; 00086 } 00087 00088 static ULONG WINAPI MSTASK_ITask_AddRef( 00089 ITask* iface) 00090 { 00091 TaskImpl *This = impl_from_ITask(iface); 00092 ULONG ref; 00093 TRACE("\n"); 00094 ref = InterlockedIncrement(&This->ref); 00095 return ref; 00096 } 00097 00098 static ULONG WINAPI MSTASK_ITask_Release( 00099 ITask* iface) 00100 { 00101 TaskImpl * This = impl_from_ITask(iface); 00102 ULONG ref; 00103 TRACE("\n"); 00104 ref = InterlockedDecrement(&This->ref); 00105 if (ref == 0) 00106 TaskDestructor(This); 00107 return ref; 00108 } 00109 00110 static HRESULT WINAPI MSTASK_ITask_CreateTrigger( 00111 ITask* iface, 00112 WORD *piNewTrigger, 00113 ITaskTrigger **ppTrigger) 00114 { 00115 TRACE("(%p, %p, %p)\n", iface, piNewTrigger, ppTrigger); 00116 return TaskTriggerConstructor((LPVOID *)ppTrigger); 00117 } 00118 00119 static HRESULT WINAPI MSTASK_ITask_DeleteTrigger( 00120 ITask* iface, 00121 WORD iTrigger) 00122 { 00123 FIXME("(%p, %d): stub\n", iface, iTrigger); 00124 return E_NOTIMPL; 00125 } 00126 00127 static HRESULT WINAPI MSTASK_ITask_GetTriggerCount( 00128 ITask* iface, 00129 WORD *plCount) 00130 { 00131 FIXME("(%p, %p): stub\n", iface, plCount); 00132 return E_NOTIMPL; 00133 } 00134 00135 static HRESULT WINAPI MSTASK_ITask_GetTrigger( 00136 ITask* iface, 00137 WORD iTrigger, 00138 ITaskTrigger **ppTrigger) 00139 { 00140 FIXME("(%p, %d, %p): stub\n", iface, iTrigger, ppTrigger); 00141 return E_NOTIMPL; 00142 } 00143 00144 static HRESULT WINAPI MSTASK_ITask_GetTriggerString( 00145 ITask* iface, 00146 WORD iTrigger, 00147 LPWSTR *ppwszTrigger) 00148 { 00149 FIXME("(%p, %d, %p): stub\n", iface, iTrigger, ppwszTrigger); 00150 return E_NOTIMPL; 00151 } 00152 00153 static HRESULT WINAPI MSTASK_ITask_GetRunTimes( 00154 ITask* iface, 00155 const LPSYSTEMTIME pstBegin, 00156 const LPSYSTEMTIME pstEnd, 00157 WORD *pCount, 00158 LPSYSTEMTIME *rgstTaskTimes) 00159 { 00160 FIXME("(%p, %p, %p, %p, %p): stub\n", iface, pstBegin, pstEnd, pCount, 00161 rgstTaskTimes); 00162 return E_NOTIMPL; 00163 } 00164 00165 static HRESULT WINAPI MSTASK_ITask_GetNextRunTime( 00166 ITask* iface, 00167 SYSTEMTIME *pstNextRun) 00168 { 00169 FIXME("(%p, %p): stub\n", iface, pstNextRun); 00170 return E_NOTIMPL; 00171 } 00172 00173 static HRESULT WINAPI MSTASK_ITask_SetIdleWait( 00174 ITask* iface, 00175 WORD wIdleMinutes, 00176 WORD wDeadlineMinutes) 00177 { 00178 FIXME("(%p, %d, %d): stub\n", iface, wIdleMinutes, wDeadlineMinutes); 00179 return E_NOTIMPL; 00180 } 00181 00182 static HRESULT WINAPI MSTASK_ITask_GetIdleWait( 00183 ITask* iface, 00184 WORD *pwIdleMinutes, 00185 WORD *pwDeadlineMinutes) 00186 { 00187 FIXME("(%p, %p, %p): stub\n", iface, pwIdleMinutes, pwDeadlineMinutes); 00188 return E_NOTIMPL; 00189 } 00190 00191 static HRESULT WINAPI MSTASK_ITask_Run( 00192 ITask* iface) 00193 { 00194 FIXME("(%p): stub\n", iface); 00195 return E_NOTIMPL; 00196 } 00197 00198 static HRESULT WINAPI MSTASK_ITask_Terminate( 00199 ITask* iface) 00200 { 00201 FIXME("(%p): stub\n", iface); 00202 return E_NOTIMPL; 00203 } 00204 00205 static HRESULT WINAPI MSTASK_ITask_EditWorkItem( 00206 ITask* iface, 00207 HWND hParent, 00208 DWORD dwReserved) 00209 { 00210 FIXME("(%p, %p, %d): stub\n", iface, hParent, dwReserved); 00211 return E_NOTIMPL; 00212 } 00213 00214 static HRESULT WINAPI MSTASK_ITask_GetMostRecentRunTime( 00215 ITask* iface, 00216 SYSTEMTIME *pstLastRun) 00217 { 00218 FIXME("(%p, %p): stub\n", iface, pstLastRun); 00219 return E_NOTIMPL; 00220 } 00221 00222 static HRESULT WINAPI MSTASK_ITask_GetStatus( 00223 ITask* iface, 00224 HRESULT *phrStatus) 00225 { 00226 FIXME("(%p, %p): stub\n", iface, phrStatus); 00227 return E_NOTIMPL; 00228 } 00229 00230 static HRESULT WINAPI MSTASK_ITask_GetExitCode( 00231 ITask* iface, 00232 DWORD *pdwExitCode) 00233 { 00234 FIXME("(%p, %p): stub\n", iface, pdwExitCode); 00235 return E_NOTIMPL; 00236 } 00237 00238 static HRESULT WINAPI MSTASK_ITask_SetComment( 00239 ITask* iface, 00240 LPCWSTR pwszComment) 00241 { 00242 DWORD n; 00243 TaskImpl *This = impl_from_ITask(iface); 00244 LPWSTR tmp_comment; 00245 00246 TRACE("(%p, %s)\n", iface, debugstr_w(pwszComment)); 00247 00248 /* Empty comment */ 00249 if (pwszComment[0] == 0) 00250 { 00251 HeapFree(GetProcessHeap(), 0, This->comment); 00252 This->comment = NULL; 00253 return S_OK; 00254 } 00255 00256 /* Set to pwszComment */ 00257 n = (lstrlenW(pwszComment) + 1); 00258 tmp_comment = HeapAlloc(GetProcessHeap(), 0, n * sizeof(WCHAR)); 00259 if (!tmp_comment) 00260 return E_OUTOFMEMORY; 00261 lstrcpyW(tmp_comment, pwszComment); 00262 HeapFree(GetProcessHeap(), 0, This->comment); 00263 This->comment = tmp_comment; 00264 00265 return S_OK; 00266 } 00267 00268 static HRESULT WINAPI MSTASK_ITask_GetComment( 00269 ITask* iface, 00270 LPWSTR *ppwszComment) 00271 { 00272 DWORD n; 00273 TaskImpl *This = impl_from_ITask(iface); 00274 00275 TRACE("(%p, %p)\n", iface, ppwszComment); 00276 00277 n = This->comment ? lstrlenW(This->comment) + 1 : 1; 00278 *ppwszComment = CoTaskMemAlloc(n * sizeof(WCHAR)); 00279 if (!*ppwszComment) 00280 return E_OUTOFMEMORY; 00281 00282 if (!This->comment) 00283 *ppwszComment[0] = 0; 00284 else 00285 lstrcpyW(*ppwszComment, This->comment); 00286 00287 return S_OK; 00288 } 00289 00290 static HRESULT WINAPI MSTASK_ITask_SetCreator( 00291 ITask* iface, 00292 LPCWSTR pwszCreator) 00293 { 00294 FIXME("(%p, %p): stub\n", iface, pwszCreator); 00295 return E_NOTIMPL; 00296 } 00297 00298 static HRESULT WINAPI MSTASK_ITask_GetCreator( 00299 ITask* iface, 00300 LPWSTR *ppwszCreator) 00301 { 00302 FIXME("(%p, %p): stub\n", iface, ppwszCreator); 00303 return E_NOTIMPL; 00304 } 00305 00306 static HRESULT WINAPI MSTASK_ITask_SetWorkItemData( 00307 ITask* iface, 00308 WORD cBytes, 00309 BYTE rgbData[]) 00310 { 00311 FIXME("(%p, %d, %p): stub\n", iface, cBytes, rgbData); 00312 return E_NOTIMPL; 00313 } 00314 00315 static HRESULT WINAPI MSTASK_ITask_GetWorkItemData( 00316 ITask* iface, 00317 WORD *pcBytes, 00318 BYTE **ppBytes) 00319 { 00320 FIXME("(%p, %p, %p): stub\n", iface, pcBytes, ppBytes); 00321 return E_NOTIMPL; 00322 } 00323 00324 static HRESULT WINAPI MSTASK_ITask_SetErrorRetryCount( 00325 ITask* iface, 00326 WORD wRetryCount) 00327 { 00328 FIXME("(%p, %d): stub\n", iface, wRetryCount); 00329 return E_NOTIMPL; 00330 } 00331 00332 static HRESULT WINAPI MSTASK_ITask_GetErrorRetryCount( 00333 ITask* iface, 00334 WORD *pwRetryCount) 00335 { 00336 FIXME("(%p, %p): stub\n", iface, pwRetryCount); 00337 return E_NOTIMPL; 00338 } 00339 00340 static HRESULT WINAPI MSTASK_ITask_SetErrorRetryInterval( 00341 ITask* iface, 00342 WORD wRetryInterval) 00343 { 00344 FIXME("(%p, %d): stub\n", iface, wRetryInterval); 00345 return E_NOTIMPL; 00346 } 00347 00348 static HRESULT WINAPI MSTASK_ITask_GetErrorRetryInterval( 00349 ITask* iface, 00350 WORD *pwRetryInterval) 00351 { 00352 FIXME("(%p, %p): stub\n", iface, pwRetryInterval); 00353 return E_NOTIMPL; 00354 } 00355 00356 static HRESULT WINAPI MSTASK_ITask_SetFlags( 00357 ITask* iface, 00358 DWORD dwFlags) 00359 { 00360 FIXME("(%p, 0x%08x): stub\n", iface, dwFlags); 00361 return E_NOTIMPL; 00362 } 00363 00364 static HRESULT WINAPI MSTASK_ITask_GetFlags( 00365 ITask* iface, 00366 DWORD *pdwFlags) 00367 { 00368 FIXME("(%p, %p): stub\n", iface, pdwFlags); 00369 return E_NOTIMPL; 00370 } 00371 00372 static HRESULT WINAPI MSTASK_ITask_SetAccountInformation( 00373 ITask* iface, 00374 LPCWSTR pwszAccountName, 00375 LPCWSTR pwszPassword) 00376 { 00377 DWORD n; 00378 TaskImpl *This = impl_from_ITask(iface); 00379 LPWSTR tmp_account_name; 00380 00381 TRACE("(%p, %s, %s): partial stub\n", iface, debugstr_w(pwszAccountName), 00382 debugstr_w(pwszPassword)); 00383 00384 if (pwszPassword) 00385 FIXME("Partial stub ignores passwords\n"); 00386 00387 n = (lstrlenW(pwszAccountName) + 1); 00388 tmp_account_name = HeapAlloc(GetProcessHeap(), 0, n * sizeof(WCHAR)); 00389 if (!tmp_account_name) 00390 return E_OUTOFMEMORY; 00391 lstrcpyW(tmp_account_name, pwszAccountName); 00392 HeapFree(GetProcessHeap(), 0, This->accountName); 00393 This->accountName = tmp_account_name; 00394 return S_OK; 00395 } 00396 00397 static HRESULT WINAPI MSTASK_ITask_GetAccountInformation( 00398 ITask* iface, 00399 LPWSTR *ppwszAccountName) 00400 { 00401 DWORD n; 00402 TaskImpl *This = impl_from_ITask(iface); 00403 00404 TRACE("(%p, %p): partial stub\n", iface, ppwszAccountName); 00405 00406 /* This implements the WinXP behavior when accountName has not yet 00407 * set. Win2K behaves differently, returning SCHED_E_CANNOT_OPEN_TASK */ 00408 if (!This->accountName) 00409 return HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND); 00410 00411 n = (lstrlenW(This->accountName) + 1); 00412 *ppwszAccountName = CoTaskMemAlloc(n * sizeof(WCHAR)); 00413 if (!*ppwszAccountName) 00414 return E_OUTOFMEMORY; 00415 lstrcpyW(*ppwszAccountName, This->accountName); 00416 return S_OK; 00417 } 00418 00419 static HRESULT WINAPI MSTASK_ITask_SetApplicationName( 00420 ITask* iface, 00421 LPCWSTR pwszApplicationName) 00422 { 00423 DWORD n; 00424 TaskImpl *This = impl_from_ITask(iface); 00425 LPWSTR tmp_name; 00426 00427 TRACE("(%p, %s)\n", iface, debugstr_w(pwszApplicationName)); 00428 00429 /* Empty application name */ 00430 if (pwszApplicationName[0] == 0) 00431 { 00432 HeapFree(GetProcessHeap(), 0, This->applicationName); 00433 This->applicationName = NULL; 00434 return S_OK; 00435 } 00436 00437 /* Attempt to set pwszApplicationName to a path resolved application name */ 00438 n = SearchPathW(NULL, pwszApplicationName, NULL, 0, NULL, NULL); 00439 if (n) 00440 { 00441 tmp_name = HeapAlloc(GetProcessHeap(), 0, n * sizeof(WCHAR)); 00442 if (!tmp_name) 00443 return E_OUTOFMEMORY; 00444 n = SearchPathW(NULL, pwszApplicationName, NULL, n, tmp_name, NULL); 00445 if (n) 00446 { 00447 HeapFree(GetProcessHeap(), 0, This->applicationName); 00448 This->applicationName = tmp_name; 00449 return S_OK; 00450 } 00451 else 00452 HeapFree(GetProcessHeap(), 0, tmp_name); 00453 } 00454 00455 /* If unable to path resolve name, simply set to pwszApplicationName */ 00456 n = (lstrlenW(pwszApplicationName) + 1); 00457 tmp_name = HeapAlloc(GetProcessHeap(), 0, n * sizeof(WCHAR)); 00458 if (!tmp_name) 00459 return E_OUTOFMEMORY; 00460 lstrcpyW(tmp_name, pwszApplicationName); 00461 HeapFree(GetProcessHeap(), 0, This->applicationName); 00462 This->applicationName = tmp_name; 00463 return S_OK; 00464 } 00465 00466 static HRESULT WINAPI MSTASK_ITask_GetApplicationName( 00467 ITask* iface, 00468 LPWSTR *ppwszApplicationName) 00469 { 00470 DWORD n; 00471 TaskImpl *This = impl_from_ITask(iface); 00472 00473 TRACE("(%p, %p)\n", iface, ppwszApplicationName); 00474 00475 n = This->applicationName ? lstrlenW(This->applicationName) + 1 : 1; 00476 *ppwszApplicationName = CoTaskMemAlloc(n * sizeof(WCHAR)); 00477 if (!*ppwszApplicationName) 00478 return E_OUTOFMEMORY; 00479 00480 if (!This->applicationName) 00481 *ppwszApplicationName[0] = 0; 00482 else 00483 lstrcpyW(*ppwszApplicationName, This->applicationName); 00484 00485 return S_OK; 00486 } 00487 00488 static HRESULT WINAPI MSTASK_ITask_SetParameters( 00489 ITask* iface, 00490 LPCWSTR pwszParameters) 00491 { 00492 DWORD n; 00493 TaskImpl *This = impl_from_ITask(iface); 00494 LPWSTR tmp_parameters; 00495 00496 TRACE("(%p, %s)\n", iface, debugstr_w(pwszParameters)); 00497 00498 /* Empty parameter list */ 00499 if (pwszParameters[0] == 0) 00500 { 00501 HeapFree(GetProcessHeap(), 0, This->parameters); 00502 This->parameters = NULL; 00503 return S_OK; 00504 } 00505 00506 /* Set to pwszParameters */ 00507 n = (lstrlenW(pwszParameters) + 1); 00508 tmp_parameters = HeapAlloc(GetProcessHeap(), 0, n * sizeof(WCHAR)); 00509 if (!tmp_parameters) 00510 return E_OUTOFMEMORY; 00511 lstrcpyW(tmp_parameters, pwszParameters); 00512 HeapFree(GetProcessHeap(), 0, This->parameters); 00513 This->parameters = tmp_parameters; 00514 return S_OK; 00515 } 00516 00517 static HRESULT WINAPI MSTASK_ITask_GetParameters( 00518 ITask* iface, 00519 LPWSTR *ppwszParameters) 00520 { 00521 DWORD n; 00522 TaskImpl *This = impl_from_ITask(iface); 00523 00524 TRACE("(%p, %p)\n", iface, ppwszParameters); 00525 00526 n = This->parameters ? lstrlenW(This->parameters) + 1 : 1; 00527 *ppwszParameters = CoTaskMemAlloc(n * sizeof(WCHAR)); 00528 if (!*ppwszParameters) 00529 return E_OUTOFMEMORY; 00530 00531 if (!This->parameters) 00532 *ppwszParameters[0] = 0; 00533 else 00534 lstrcpyW(*ppwszParameters, This->parameters); 00535 00536 return S_OK; 00537 } 00538 00539 static HRESULT WINAPI MSTASK_ITask_SetWorkingDirectory( 00540 ITask* iface, 00541 LPCWSTR pwszWorkingDirectory) 00542 { 00543 FIXME("(%p, %s): stub\n", iface, debugstr_w(pwszWorkingDirectory)); 00544 return E_NOTIMPL; 00545 } 00546 00547 static HRESULT WINAPI MSTASK_ITask_GetWorkingDirectory( 00548 ITask* iface, 00549 LPWSTR *ppwszWorkingDirectory) 00550 { 00551 FIXME("(%p, %p): stub\n", iface, ppwszWorkingDirectory); 00552 return E_NOTIMPL; 00553 } 00554 00555 static HRESULT WINAPI MSTASK_ITask_SetPriority( 00556 ITask* iface, 00557 DWORD dwPriority) 00558 { 00559 FIXME("(%p, 0x%08x): stub\n", iface, dwPriority); 00560 return E_NOTIMPL; 00561 } 00562 00563 static HRESULT WINAPI MSTASK_ITask_GetPriority( 00564 ITask* iface, 00565 DWORD *pdwPriority) 00566 { 00567 FIXME("(%p, %p): stub\n", iface, pdwPriority); 00568 return E_NOTIMPL; 00569 } 00570 00571 static HRESULT WINAPI MSTASK_ITask_SetTaskFlags( 00572 ITask* iface, 00573 DWORD dwFlags) 00574 { 00575 FIXME("(%p, 0x%08x): stub\n", iface, dwFlags); 00576 return E_NOTIMPL; 00577 } 00578 00579 static HRESULT WINAPI MSTASK_ITask_GetTaskFlags( 00580 ITask* iface, 00581 DWORD *pdwFlags) 00582 { 00583 FIXME("(%p, %p): stub\n", iface, pdwFlags); 00584 return E_NOTIMPL; 00585 } 00586 00587 static HRESULT WINAPI MSTASK_ITask_SetMaxRunTime( 00588 ITask* iface, 00589 DWORD dwMaxRunTime) 00590 { 00591 TaskImpl *This = impl_from_ITask(iface); 00592 00593 TRACE("(%p, %d)\n", iface, dwMaxRunTime); 00594 00595 This->maxRunTime = dwMaxRunTime; 00596 return S_OK; 00597 } 00598 00599 static HRESULT WINAPI MSTASK_ITask_GetMaxRunTime( 00600 ITask* iface, 00601 DWORD *pdwMaxRunTime) 00602 { 00603 TaskImpl *This = impl_from_ITask(iface); 00604 00605 TRACE("(%p, %p)\n", iface, pdwMaxRunTime); 00606 00607 *pdwMaxRunTime = This->maxRunTime; 00608 return S_OK; 00609 } 00610 00611 static HRESULT WINAPI MSTASK_IPersistFile_QueryInterface( 00612 IPersistFile* iface, 00613 REFIID riid, 00614 void **ppvObject) 00615 { 00616 TaskImpl *This = impl_from_IPersistFile(iface); 00617 TRACE("(%p, %s, %p)\n", iface, debugstr_guid(riid), ppvObject); 00618 return ITask_QueryInterface(&This->ITask_iface, riid, ppvObject); 00619 } 00620 00621 static ULONG WINAPI MSTASK_IPersistFile_AddRef( 00622 IPersistFile* iface) 00623 { 00624 TaskImpl *This = impl_from_IPersistFile(iface); 00625 ULONG ref; 00626 TRACE("\n"); 00627 ref = InterlockedIncrement(&This->ref); 00628 return ref; 00629 } 00630 00631 static ULONG WINAPI MSTASK_IPersistFile_Release( 00632 IPersistFile* iface) 00633 { 00634 TaskImpl *This = impl_from_IPersistFile(iface); 00635 ULONG ref; 00636 TRACE("\n"); 00637 ref = InterlockedDecrement(&This->ref); 00638 if (ref == 0) 00639 TaskDestructor(This); 00640 return ref; 00641 } 00642 00643 static HRESULT WINAPI MSTASK_IPersistFile_GetClassID( 00644 IPersistFile* iface, 00645 CLSID *pClassID) 00646 { 00647 FIXME("(%p, %p): stub\n", iface, pClassID); 00648 return E_NOTIMPL; 00649 } 00650 00651 static HRESULT WINAPI MSTASK_IPersistFile_IsDirty( 00652 IPersistFile* iface) 00653 { 00654 FIXME("(%p): stub\n", iface); 00655 return E_NOTIMPL; 00656 } 00657 00658 static HRESULT WINAPI MSTASK_IPersistFile_Load( 00659 IPersistFile* iface, 00660 LPCOLESTR pszFileName, 00661 DWORD dwMode) 00662 { 00663 FIXME("(%p, %p, 0x%08x): stub\n", iface, pszFileName, dwMode); 00664 return E_NOTIMPL; 00665 } 00666 00667 static HRESULT WINAPI MSTASK_IPersistFile_Save( 00668 IPersistFile* iface, 00669 LPCOLESTR pszFileName, 00670 BOOL fRemember) 00671 { 00672 FIXME("(%p, %p, %d): stub\n", iface, pszFileName, fRemember); 00673 WARN("Returning S_OK but not writing to disk: %s %d\n", 00674 debugstr_w(pszFileName), fRemember); 00675 return S_OK; 00676 } 00677 00678 static HRESULT WINAPI MSTASK_IPersistFile_SaveCompleted( 00679 IPersistFile* iface, 00680 LPCOLESTR pszFileName) 00681 { 00682 FIXME("(%p, %p): stub\n", iface, pszFileName); 00683 return E_NOTIMPL; 00684 } 00685 00686 static HRESULT WINAPI MSTASK_IPersistFile_GetCurFile( 00687 IPersistFile* iface, 00688 LPOLESTR *ppszFileName) 00689 { 00690 FIXME("(%p, %p): stub\n", iface, ppszFileName); 00691 return E_NOTIMPL; 00692 } 00693 00694 00695 static const ITaskVtbl MSTASK_ITaskVtbl = 00696 { 00697 MSTASK_ITask_QueryInterface, 00698 MSTASK_ITask_AddRef, 00699 MSTASK_ITask_Release, 00700 MSTASK_ITask_CreateTrigger, 00701 MSTASK_ITask_DeleteTrigger, 00702 MSTASK_ITask_GetTriggerCount, 00703 MSTASK_ITask_GetTrigger, 00704 MSTASK_ITask_GetTriggerString, 00705 MSTASK_ITask_GetRunTimes, 00706 MSTASK_ITask_GetNextRunTime, 00707 MSTASK_ITask_SetIdleWait, 00708 MSTASK_ITask_GetIdleWait, 00709 MSTASK_ITask_Run, 00710 MSTASK_ITask_Terminate, 00711 MSTASK_ITask_EditWorkItem, 00712 MSTASK_ITask_GetMostRecentRunTime, 00713 MSTASK_ITask_GetStatus, 00714 MSTASK_ITask_GetExitCode, 00715 MSTASK_ITask_SetComment, 00716 MSTASK_ITask_GetComment, 00717 MSTASK_ITask_SetCreator, 00718 MSTASK_ITask_GetCreator, 00719 MSTASK_ITask_SetWorkItemData, 00720 MSTASK_ITask_GetWorkItemData, 00721 MSTASK_ITask_SetErrorRetryCount, 00722 MSTASK_ITask_GetErrorRetryCount, 00723 MSTASK_ITask_SetErrorRetryInterval, 00724 MSTASK_ITask_GetErrorRetryInterval, 00725 MSTASK_ITask_SetFlags, 00726 MSTASK_ITask_GetFlags, 00727 MSTASK_ITask_SetAccountInformation, 00728 MSTASK_ITask_GetAccountInformation, 00729 MSTASK_ITask_SetApplicationName, 00730 MSTASK_ITask_GetApplicationName, 00731 MSTASK_ITask_SetParameters, 00732 MSTASK_ITask_GetParameters, 00733 MSTASK_ITask_SetWorkingDirectory, 00734 MSTASK_ITask_GetWorkingDirectory, 00735 MSTASK_ITask_SetPriority, 00736 MSTASK_ITask_GetPriority, 00737 MSTASK_ITask_SetTaskFlags, 00738 MSTASK_ITask_GetTaskFlags, 00739 MSTASK_ITask_SetMaxRunTime, 00740 MSTASK_ITask_GetMaxRunTime 00741 }; 00742 00743 static const IPersistFileVtbl MSTASK_IPersistFileVtbl = 00744 { 00745 MSTASK_IPersistFile_QueryInterface, 00746 MSTASK_IPersistFile_AddRef, 00747 MSTASK_IPersistFile_Release, 00748 MSTASK_IPersistFile_GetClassID, 00749 MSTASK_IPersistFile_IsDirty, 00750 MSTASK_IPersistFile_Load, 00751 MSTASK_IPersistFile_Save, 00752 MSTASK_IPersistFile_SaveCompleted, 00753 MSTASK_IPersistFile_GetCurFile 00754 }; 00755 00756 HRESULT TaskConstructor(LPCWSTR pwszTaskName, LPVOID *ppObj) 00757 { 00758 TaskImpl *This; 00759 int n; 00760 00761 TRACE("(%s, %p)\n", debugstr_w(pwszTaskName), ppObj); 00762 00763 This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This)); 00764 if (!This) 00765 return E_OUTOFMEMORY; 00766 00767 This->ITask_iface.lpVtbl = &MSTASK_ITaskVtbl; 00768 This->IPersistFile_iface.lpVtbl = &MSTASK_IPersistFileVtbl; 00769 This->ref = 1; 00770 n = (lstrlenW(pwszTaskName) + 1) * sizeof(WCHAR); 00771 This->taskName = HeapAlloc(GetProcessHeap(), 0, n); 00772 if (!This->taskName) 00773 { 00774 HeapFree(GetProcessHeap(), 0, This); 00775 return E_OUTOFMEMORY; 00776 } 00777 lstrcpyW(This->taskName, pwszTaskName); 00778 This->applicationName = NULL; 00779 This->parameters = NULL; 00780 This->comment = NULL; 00781 This->accountName = NULL; 00782 00783 /* Default time is 3 days = 259200000 ms */ 00784 This->maxRunTime = 259200000; 00785 00786 *ppObj = &This->ITask_iface; 00787 InterlockedIncrement(&dll_ref); 00788 return S_OK; 00789 } Generated on Mon May 28 2012 04:24:46 for ReactOS by
1.7.6.1
|