2 * Copyright 2013 Dmitry Timoshkov
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
28 #include "taskschd_private.h"
30 #include "wine/unicode.h"
31 #include "wine/debug.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(taskschd
);
37 ITaskSettings ITaskSettings_iface
;
41 static inline TaskSettings
*impl_from_ITaskSettings(ITaskSettings
*iface
)
43 return CONTAINING_RECORD(iface
, TaskSettings
, ITaskSettings_iface
);
46 static ULONG WINAPI
TaskSettings_AddRef(ITaskSettings
*iface
)
48 TaskSettings
*taskset
= impl_from_ITaskSettings(iface
);
49 return InterlockedIncrement(&taskset
->ref
);
52 static ULONG WINAPI
TaskSettings_Release(ITaskSettings
*iface
)
54 TaskSettings
*taskset
= impl_from_ITaskSettings(iface
);
55 LONG ref
= InterlockedDecrement(&taskset
->ref
);
59 TRACE("destroying %p\n", iface
);
66 static HRESULT WINAPI
TaskSettings_QueryInterface(ITaskSettings
*iface
, REFIID riid
, void **obj
)
68 if (!riid
|| !obj
) return E_INVALIDARG
;
70 TRACE("%p,%s,%p\n", iface
, debugstr_guid(riid
), obj
);
72 if (IsEqualGUID(riid
, &IID_ITaskSettings
) ||
73 IsEqualGUID(riid
, &IID_IDispatch
) ||
74 IsEqualGUID(riid
, &IID_IUnknown
))
76 ITaskSettings_AddRef(iface
);
81 FIXME("interface %s is not implemented\n", debugstr_guid(riid
));
86 static HRESULT WINAPI
TaskSettings_GetTypeInfoCount(ITaskSettings
*iface
, UINT
*count
)
88 FIXME("%p,%p: stub\n", iface
, count
);
92 static HRESULT WINAPI
TaskSettings_GetTypeInfo(ITaskSettings
*iface
, UINT index
, LCID lcid
, ITypeInfo
**info
)
94 FIXME("%p,%u,%u,%p: stub\n", iface
, index
, lcid
, info
);
98 static HRESULT WINAPI
TaskSettings_GetIDsOfNames(ITaskSettings
*iface
, REFIID riid
, LPOLESTR
*names
,
99 UINT count
, LCID lcid
, DISPID
*dispid
)
101 FIXME("%p,%s,%p,%u,%u,%p: stub\n", iface
, debugstr_guid(riid
), names
, count
, lcid
, dispid
);
105 static HRESULT WINAPI
TaskSettings_Invoke(ITaskSettings
*iface
, DISPID dispid
, REFIID riid
, LCID lcid
, WORD flags
,
106 DISPPARAMS
*params
, VARIANT
*result
, EXCEPINFO
*excepinfo
, UINT
*argerr
)
108 FIXME("%p,%d,%s,%04x,%04x,%p,%p,%p,%p: stub\n", iface
, dispid
, debugstr_guid(riid
), lcid
, flags
,
109 params
, result
, excepinfo
, argerr
);
113 static HRESULT WINAPI
TaskSettings_get_AllowDemandStart(ITaskSettings
*iface
, VARIANT_BOOL
*allow
)
115 FIXME("%p,%p: stub\n", iface
, allow
);
119 static HRESULT WINAPI
TaskSettings_put_AllowDemandStart(ITaskSettings
*iface
, VARIANT_BOOL allow
)
121 FIXME("%p,%d: stub\n", iface
, allow
);
125 static HRESULT WINAPI
TaskSettings_get_RestartInterval(ITaskSettings
*iface
, BSTR
*interval
)
127 FIXME("%p,%p: stub\n", iface
, interval
);
131 static HRESULT WINAPI
TaskSettings_put_RestartInterval(ITaskSettings
*iface
, BSTR interval
)
133 TRACE("%p,%s\n", iface
, debugstr_w(interval
));
137 static HRESULT WINAPI
TaskSettings_get_RestartCount(ITaskSettings
*iface
, INT
*count
)
139 FIXME("%p,%p: stub\n", iface
, count
);
143 static HRESULT WINAPI
TaskSettings_put_RestartCount(ITaskSettings
*iface
, INT count
)
145 FIXME("%p,%d: stub\n", iface
, count
);
149 static HRESULT WINAPI
TaskSettings_get_MultipleInstances(ITaskSettings
*iface
, TASK_INSTANCES_POLICY
*policy
)
151 FIXME("%p,%p: stub\n", iface
, policy
);
155 static HRESULT WINAPI
TaskSettings_put_MultipleInstances(ITaskSettings
*iface
, TASK_INSTANCES_POLICY policy
)
157 FIXME("%p,%d: stub\n", iface
, policy
);
161 static HRESULT WINAPI
TaskSettings_get_StopIfGoingOnBatteries(ITaskSettings
*iface
, VARIANT_BOOL
*stop
)
163 FIXME("%p,%p: stub\n", iface
, stop
);
167 static HRESULT WINAPI
TaskSettings_put_StopIfGoingOnBatteries(ITaskSettings
*iface
, VARIANT_BOOL stop
)
169 FIXME("%p,%d: stub\n", iface
, stop
);
173 static HRESULT WINAPI
TaskSettings_get_DisallowStartIfOnBatteries(ITaskSettings
*iface
, VARIANT_BOOL
*disallow
)
175 FIXME("%p,%p: stub\n", iface
, disallow
);
179 static HRESULT WINAPI
TaskSettings_put_DisallowStartIfOnBatteries(ITaskSettings
*iface
, VARIANT_BOOL disallow
)
181 FIXME("%p,%d: stub\n", iface
, disallow
);
185 static HRESULT WINAPI
TaskSettings_get_AllowHardTerminate(ITaskSettings
*iface
, VARIANT_BOOL
*allow
)
187 FIXME("%p,%p: stub\n", iface
, allow
);
191 static HRESULT WINAPI
TaskSettings_put_AllowHardTerminate(ITaskSettings
*iface
, VARIANT_BOOL allow
)
193 FIXME("%p,%d: stub\n", iface
, allow
);
197 static HRESULT WINAPI
TaskSettings_get_StartWhenAvailable(ITaskSettings
*iface
, VARIANT_BOOL
*start
)
199 FIXME("%p,%p: stub\n", iface
, start
);
203 static HRESULT WINAPI
TaskSettings_put_StartWhenAvailable(ITaskSettings
*iface
, VARIANT_BOOL start
)
205 FIXME("%p,%d: stub\n", iface
, start
);
209 static HRESULT WINAPI
TaskSettings_get_XmlText(ITaskSettings
*iface
, BSTR
*xml
)
211 FIXME("%p,%p: stub\n", iface
, xml
);
215 static HRESULT WINAPI
TaskSettings_put_XmlText(ITaskSettings
*iface
, BSTR xml
)
217 TRACE("%p,%s\n", iface
, debugstr_w(xml
));
221 static HRESULT WINAPI
TaskSettings_get_RunOnlyIfNetworkAvailable(ITaskSettings
*iface
, VARIANT_BOOL
*run
)
223 FIXME("%p,%p: stub\n", iface
, run
);
227 static HRESULT WINAPI
TaskSettings_put_RunOnlyIfNetworkAvailable(ITaskSettings
*iface
, VARIANT_BOOL run
)
229 FIXME("%p,%d: stub\n", iface
, run
);
233 static HRESULT WINAPI
TaskSettings_get_ExecutionTimeLimit(ITaskSettings
*iface
, BSTR
*limit
)
235 FIXME("%p,%p: stub\n", iface
, limit
);
239 static HRESULT WINAPI
TaskSettings_put_ExecutionTimeLimit(ITaskSettings
*iface
, BSTR limit
)
241 TRACE("%p,%s\n", iface
, debugstr_w(limit
));
245 static HRESULT WINAPI
TaskSettings_get_Enabled(ITaskSettings
*iface
, VARIANT_BOOL
*enabled
)
247 FIXME("%p,%p: stub\n", iface
, enabled
);
251 static HRESULT WINAPI
TaskSettings_put_Enabled(ITaskSettings
*iface
, VARIANT_BOOL enabled
)
253 FIXME("%p,%d: stub\n", iface
, enabled
);
257 static HRESULT WINAPI
TaskSettings_get_DeleteExpiredTaskAfter(ITaskSettings
*iface
, BSTR
*delay
)
259 FIXME("%p,%p: stub\n", iface
, delay
);
263 static HRESULT WINAPI
TaskSettings_put_DeleteExpiredTaskAfter(ITaskSettings
*iface
, BSTR delay
)
265 TRACE("%p,%s\n", iface
, debugstr_w(delay
));
269 static HRESULT WINAPI
TaskSettings_get_Priority(ITaskSettings
*iface
, INT
*priority
)
271 FIXME("%p,%p: stub\n", iface
, priority
);
275 static HRESULT WINAPI
TaskSettings_put_Priority(ITaskSettings
*iface
, INT priority
)
277 FIXME("%p,%d: stub\n", iface
, priority
);
281 static HRESULT WINAPI
TaskSettings_get_Compatibility(ITaskSettings
*iface
, TASK_COMPATIBILITY
*level
)
283 FIXME("%p,%p: stub\n", iface
, level
);
287 static HRESULT WINAPI
TaskSettings_put_Compatibility(ITaskSettings
*iface
, TASK_COMPATIBILITY level
)
289 FIXME("%p,%d: stub\n", iface
, level
);
293 static HRESULT WINAPI
TaskSettings_get_Hidden(ITaskSettings
*iface
, VARIANT_BOOL
*hidden
)
295 FIXME("%p,%p: stub\n", iface
, hidden
);
299 static HRESULT WINAPI
TaskSettings_put_Hidden(ITaskSettings
*iface
, VARIANT_BOOL hidden
)
301 FIXME("%p,%d: stub\n", iface
, hidden
);
305 static HRESULT WINAPI
TaskSettings_get_IdleSettings(ITaskSettings
*iface
, IIdleSettings
**settings
)
307 FIXME("%p,%p: stub\n", iface
, settings
);
311 static HRESULT WINAPI
TaskSettings_put_IdleSettings(ITaskSettings
*iface
, IIdleSettings
*settings
)
313 FIXME("%p,%p: stub\n", iface
, settings
);
317 static HRESULT WINAPI
TaskSettings_get_RunOnlyIfIdle(ITaskSettings
*iface
, VARIANT_BOOL
*run
)
319 FIXME("%p,%p: stub\n", iface
, run
);
323 static HRESULT WINAPI
TaskSettings_put_RunOnlyIfIdle(ITaskSettings
*iface
, VARIANT_BOOL run
)
325 FIXME("%p,%d: stub\n", iface
, run
);
329 static HRESULT WINAPI
TaskSettings_get_WakeToRun(ITaskSettings
*iface
, VARIANT_BOOL
*wake
)
331 FIXME("%p,%p: stub\n", iface
, wake
);
335 static HRESULT WINAPI
TaskSettings_put_WakeToRun(ITaskSettings
*iface
, VARIANT_BOOL wake
)
337 FIXME("%p,%d: stub\n", iface
, wake
);
341 static HRESULT WINAPI
TaskSettings_get_NetworkSettings(ITaskSettings
*iface
, INetworkSettings
**settings
)
343 FIXME("%p,%p: stub\n", iface
, settings
);
347 static HRESULT WINAPI
TaskSettings_put_NetworkSettings(ITaskSettings
*iface
, INetworkSettings
*settings
)
349 FIXME("%p,%p: stub\n", iface
, settings
);
353 static const ITaskSettingsVtbl TaskSettings_vtbl
=
355 TaskSettings_QueryInterface
,
357 TaskSettings_Release
,
358 TaskSettings_GetTypeInfoCount
,
359 TaskSettings_GetTypeInfo
,
360 TaskSettings_GetIDsOfNames
,
362 TaskSettings_get_AllowDemandStart
,
363 TaskSettings_put_AllowDemandStart
,
364 TaskSettings_get_RestartInterval
,
365 TaskSettings_put_RestartInterval
,
366 TaskSettings_get_RestartCount
,
367 TaskSettings_put_RestartCount
,
368 TaskSettings_get_MultipleInstances
,
369 TaskSettings_put_MultipleInstances
,
370 TaskSettings_get_StopIfGoingOnBatteries
,
371 TaskSettings_put_StopIfGoingOnBatteries
,
372 TaskSettings_get_DisallowStartIfOnBatteries
,
373 TaskSettings_put_DisallowStartIfOnBatteries
,
374 TaskSettings_get_AllowHardTerminate
,
375 TaskSettings_put_AllowHardTerminate
,
376 TaskSettings_get_StartWhenAvailable
,
377 TaskSettings_put_StartWhenAvailable
,
378 TaskSettings_get_XmlText
,
379 TaskSettings_put_XmlText
,
380 TaskSettings_get_RunOnlyIfNetworkAvailable
,
381 TaskSettings_put_RunOnlyIfNetworkAvailable
,
382 TaskSettings_get_ExecutionTimeLimit
,
383 TaskSettings_put_ExecutionTimeLimit
,
384 TaskSettings_get_Enabled
,
385 TaskSettings_put_Enabled
,
386 TaskSettings_get_DeleteExpiredTaskAfter
,
387 TaskSettings_put_DeleteExpiredTaskAfter
,
388 TaskSettings_get_Priority
,
389 TaskSettings_put_Priority
,
390 TaskSettings_get_Compatibility
,
391 TaskSettings_put_Compatibility
,
392 TaskSettings_get_Hidden
,
393 TaskSettings_put_Hidden
,
394 TaskSettings_get_IdleSettings
,
395 TaskSettings_put_IdleSettings
,
396 TaskSettings_get_RunOnlyIfIdle
,
397 TaskSettings_put_RunOnlyIfIdle
,
398 TaskSettings_get_WakeToRun
,
399 TaskSettings_put_WakeToRun
,
400 TaskSettings_get_NetworkSettings
,
401 TaskSettings_put_NetworkSettings
404 static HRESULT
TaskSettings_create(ITaskSettings
**obj
)
406 TaskSettings
*taskset
;
408 taskset
= heap_alloc(sizeof(*taskset
));
409 if (!taskset
) return E_OUTOFMEMORY
;
411 taskset
->ITaskSettings_iface
.lpVtbl
= &TaskSettings_vtbl
;
413 *obj
= &taskset
->ITaskSettings_iface
;
415 TRACE("created %p\n", *obj
);
422 ITaskDefinition ITaskDefinition_iface
;
426 static inline TaskDefinition
*impl_from_ITaskDefinition(ITaskDefinition
*iface
)
428 return CONTAINING_RECORD(iface
, TaskDefinition
, ITaskDefinition_iface
);
431 static ULONG WINAPI
TaskDefinition_AddRef(ITaskDefinition
*iface
)
433 TaskDefinition
*taskdef
= impl_from_ITaskDefinition(iface
);
434 return InterlockedIncrement(&taskdef
->ref
);
437 static ULONG WINAPI
TaskDefinition_Release(ITaskDefinition
*iface
)
439 TaskDefinition
*taskdef
= impl_from_ITaskDefinition(iface
);
440 LONG ref
= InterlockedDecrement(&taskdef
->ref
);
444 TRACE("destroying %p\n", iface
);
451 static HRESULT WINAPI
TaskDefinition_QueryInterface(ITaskDefinition
*iface
, REFIID riid
, void **obj
)
453 if (!riid
|| !obj
) return E_INVALIDARG
;
455 TRACE("%p,%s,%p\n", iface
, debugstr_guid(riid
), obj
);
457 if (IsEqualGUID(riid
, &IID_ITaskDefinition
) ||
458 IsEqualGUID(riid
, &IID_IDispatch
) ||
459 IsEqualGUID(riid
, &IID_IUnknown
))
461 ITaskDefinition_AddRef(iface
);
466 FIXME("interface %s is not implemented\n", debugstr_guid(riid
));
468 return E_NOINTERFACE
;
471 static HRESULT WINAPI
TaskDefinition_GetTypeInfoCount(ITaskDefinition
*iface
, UINT
*count
)
473 FIXME("%p,%p: stub\n", iface
, count
);
477 static HRESULT WINAPI
TaskDefinition_GetTypeInfo(ITaskDefinition
*iface
, UINT index
, LCID lcid
, ITypeInfo
**info
)
479 FIXME("%p,%u,%u,%p: stub\n", iface
, index
, lcid
, info
);
483 static HRESULT WINAPI
TaskDefinition_GetIDsOfNames(ITaskDefinition
*iface
, REFIID riid
, LPOLESTR
*names
,
484 UINT count
, LCID lcid
, DISPID
*dispid
)
486 FIXME("%p,%s,%p,%u,%u,%p: stub\n", iface
, debugstr_guid(riid
), names
, count
, lcid
, dispid
);
490 static HRESULT WINAPI
TaskDefinition_Invoke(ITaskDefinition
*iface
, DISPID dispid
, REFIID riid
, LCID lcid
, WORD flags
,
491 DISPPARAMS
*params
, VARIANT
*result
, EXCEPINFO
*excepinfo
, UINT
*argerr
)
493 FIXME("%p,%d,%s,%04x,%04x,%p,%p,%p,%p: stub\n", iface
, dispid
, debugstr_guid(riid
), lcid
, flags
,
494 params
, result
, excepinfo
, argerr
);
498 static HRESULT WINAPI
TaskDefinition_get_RegistrationInfo(ITaskDefinition
*iface
, IRegistrationInfo
**info
)
500 FIXME("%p,%p: stub\n", iface
, info
);
504 static HRESULT WINAPI
TaskDefinition_put_RegistrationInfo(ITaskDefinition
*iface
, IRegistrationInfo
*info
)
506 FIXME("%p,%p: stub\n", iface
, info
);
510 static HRESULT WINAPI
TaskDefinition_get_Triggers(ITaskDefinition
*iface
, ITriggerCollection
**triggers
)
512 FIXME("%p,%p: stub\n", iface
, triggers
);
516 static HRESULT WINAPI
TaskDefinition_put_Triggers(ITaskDefinition
*iface
, ITriggerCollection
*triggers
)
518 FIXME("%p,%p: stub\n", iface
, triggers
);
522 static HRESULT WINAPI
TaskDefinition_get_Settings(ITaskDefinition
*iface
, ITaskSettings
**settings
)
524 TRACE("%p,%p\n", iface
, settings
);
526 if (!settings
) return E_POINTER
;
528 return TaskSettings_create(settings
);
531 static HRESULT WINAPI
TaskDefinition_put_Settings(ITaskDefinition
*iface
, ITaskSettings
*settings
)
533 FIXME("%p,%p: stub\n", iface
, settings
);
537 static HRESULT WINAPI
TaskDefinition_get_Data(ITaskDefinition
*iface
, BSTR
*data
)
539 FIXME("%p,%p: stub\n", iface
, data
);
543 static HRESULT WINAPI
TaskDefinition_put_Data(ITaskDefinition
*iface
, BSTR data
)
545 FIXME("%p,%p: stub\n", iface
, data
);
549 static HRESULT WINAPI
TaskDefinition_get_Principal(ITaskDefinition
*iface
, IPrincipal
**principal
)
551 FIXME("%p,%p: stub\n", iface
, principal
);
555 static HRESULT WINAPI
TaskDefinition_put_Principal(ITaskDefinition
*iface
, IPrincipal
*principal
)
557 FIXME("%p,%p: stub\n", iface
, principal
);
561 static HRESULT WINAPI
TaskDefinition_get_Actions(ITaskDefinition
*iface
, IActionCollection
**actions
)
563 FIXME("%p,%p: stub\n", iface
, actions
);
567 static HRESULT WINAPI
TaskDefinition_put_Actions(ITaskDefinition
*iface
, IActionCollection
*actions
)
569 FIXME("%p,%p: stub\n", iface
, actions
);
573 static HRESULT WINAPI
TaskDefinition_get_XmlText(ITaskDefinition
*iface
, BSTR
*xml
)
575 FIXME("%p,%p: stub\n", iface
, xml
);
579 static HRESULT WINAPI
TaskDefinition_put_XmlText(ITaskDefinition
*iface
, BSTR xml
)
581 FIXME("%p,%p: stub\n", iface
, xml
);
585 static const ITaskDefinitionVtbl TaskDefinition_vtbl
=
587 TaskDefinition_QueryInterface
,
588 TaskDefinition_AddRef
,
589 TaskDefinition_Release
,
590 TaskDefinition_GetTypeInfoCount
,
591 TaskDefinition_GetTypeInfo
,
592 TaskDefinition_GetIDsOfNames
,
593 TaskDefinition_Invoke
,
594 TaskDefinition_get_RegistrationInfo
,
595 TaskDefinition_put_RegistrationInfo
,
596 TaskDefinition_get_Triggers
,
597 TaskDefinition_put_Triggers
,
598 TaskDefinition_get_Settings
,
599 TaskDefinition_put_Settings
,
600 TaskDefinition_get_Data
,
601 TaskDefinition_put_Data
,
602 TaskDefinition_get_Principal
,
603 TaskDefinition_put_Principal
,
604 TaskDefinition_get_Actions
,
605 TaskDefinition_put_Actions
,
606 TaskDefinition_get_XmlText
,
607 TaskDefinition_put_XmlText
610 static HRESULT
TaskDefinition_create(ITaskDefinition
**obj
)
612 TaskDefinition
*taskdef
;
614 taskdef
= heap_alloc(sizeof(*taskdef
));
615 if (!taskdef
) return E_OUTOFMEMORY
;
617 taskdef
->ITaskDefinition_iface
.lpVtbl
= &TaskDefinition_vtbl
;
619 *obj
= &taskdef
->ITaskDefinition_iface
;
621 TRACE("created %p\n", *obj
);
628 ITaskService ITaskService_iface
;
631 WCHAR comp_name
[MAX_COMPUTERNAME_LENGTH
+ 1];
634 static inline TaskService
*impl_from_ITaskService(ITaskService
*iface
)
636 return CONTAINING_RECORD(iface
, TaskService
, ITaskService_iface
);
639 static ULONG WINAPI
TaskService_AddRef(ITaskService
*iface
)
641 TaskService
*task_svc
= impl_from_ITaskService(iface
);
642 return InterlockedIncrement(&task_svc
->ref
);
645 static ULONG WINAPI
TaskService_Release(ITaskService
*iface
)
647 TaskService
*task_svc
= impl_from_ITaskService(iface
);
648 LONG ref
= InterlockedDecrement(&task_svc
->ref
);
652 TRACE("destroying %p\n", iface
);
659 static HRESULT WINAPI
TaskService_QueryInterface(ITaskService
*iface
, REFIID riid
, void **obj
)
661 if (!riid
|| !obj
) return E_INVALIDARG
;
663 TRACE("%p,%s,%p\n", iface
, debugstr_guid(riid
), obj
);
665 if (IsEqualGUID(riid
, &IID_ITaskService
) ||
666 IsEqualGUID(riid
, &IID_IDispatch
) ||
667 IsEqualGUID(riid
, &IID_IUnknown
))
669 ITaskService_AddRef(iface
);
674 FIXME("interface %s is not implemented\n", debugstr_guid(riid
));
676 return E_NOINTERFACE
;
679 static HRESULT WINAPI
TaskService_GetTypeInfoCount(ITaskService
*iface
, UINT
*count
)
681 FIXME("%p,%p: stub\n", iface
, count
);
685 static HRESULT WINAPI
TaskService_GetTypeInfo(ITaskService
*iface
, UINT index
, LCID lcid
, ITypeInfo
**info
)
687 FIXME("%p,%u,%u,%p: stub\n", iface
, index
, lcid
, info
);
691 static HRESULT WINAPI
TaskService_GetIDsOfNames(ITaskService
*iface
, REFIID riid
, LPOLESTR
*names
,
692 UINT count
, LCID lcid
, DISPID
*dispid
)
694 FIXME("%p,%s,%p,%u,%u,%p: stub\n", iface
, debugstr_guid(riid
), names
, count
, lcid
, dispid
);
698 static HRESULT WINAPI
TaskService_Invoke(ITaskService
*iface
, DISPID dispid
, REFIID riid
, LCID lcid
, WORD flags
,
699 DISPPARAMS
*params
, VARIANT
*result
, EXCEPINFO
*excepinfo
, UINT
*argerr
)
701 FIXME("%p,%d,%s,%04x,%04x,%p,%p,%p,%p: stub\n", iface
, dispid
, debugstr_guid(riid
), lcid
, flags
,
702 params
, result
, excepinfo
, argerr
);
706 static HRESULT WINAPI
TaskService_GetFolder(ITaskService
*iface
, BSTR path
, ITaskFolder
**folder
)
708 TaskService
*task_svc
= impl_from_ITaskService(iface
);
710 TRACE("%p,%s,%p\n", iface
, debugstr_w(path
), folder
);
712 if (!folder
) return E_POINTER
;
714 if (!task_svc
->connected
)
715 return HRESULT_FROM_WIN32(ERROR_ONLY_IF_CONNECTED
);
717 return TaskFolder_create(path
, NULL
, folder
, FALSE
);
720 static HRESULT WINAPI
TaskService_GetRunningTasks(ITaskService
*iface
, LONG flags
, IRunningTaskCollection
**tasks
)
722 FIXME("%p,%x,%p: stub\n", iface
, flags
, tasks
);
726 static HRESULT WINAPI
TaskService_NewTask(ITaskService
*iface
, DWORD flags
, ITaskDefinition
**definition
)
728 TaskService
*task_svc
= impl_from_ITaskService(iface
);
730 TRACE("%p,%x,%p\n", iface
, flags
, definition
);
732 if (!definition
) return E_POINTER
;
734 if (!task_svc
->connected
)
735 return HRESULT_FROM_WIN32(ERROR_ONLY_IF_CONNECTED
);
738 FIXME("unsupported flags %x\n", flags
);
740 return TaskDefinition_create(definition
);
743 static inline BOOL
is_variant_null(const VARIANT
*var
)
745 return V_VT(var
) == VT_EMPTY
|| V_VT(var
) == VT_NULL
||
746 (V_VT(var
) == VT_BSTR
&& (V_BSTR(var
) == NULL
|| !*V_BSTR(var
)));
749 static HRESULT WINAPI
TaskService_Connect(ITaskService
*iface
, VARIANT server
, VARIANT user
, VARIANT domain
, VARIANT password
)
751 TaskService
*task_svc
= impl_from_ITaskService(iface
);
752 WCHAR comp_name
[MAX_COMPUTERNAME_LENGTH
+ 1];
755 TRACE("%p,%s,%s,%s,%s\n", iface
, debugstr_variant(&server
), debugstr_variant(&user
),
756 debugstr_variant(&domain
), debugstr_variant(&password
));
758 if (!is_variant_null(&user
) || !is_variant_null(&domain
) || !is_variant_null(&password
))
759 FIXME("user/domain/password are ignored\n");
761 len
= sizeof(comp_name
)/sizeof(comp_name
[0]);
762 if (!GetComputerNameW(comp_name
, &len
))
763 return HRESULT_FROM_WIN32(GetLastError());
765 if (!is_variant_null(&server
))
767 const WCHAR
*server_name
;
769 if (V_VT(&server
) != VT_BSTR
)
771 FIXME("server variant type %d is not supported\n", V_VT(&server
));
772 return HRESULT_FROM_WIN32(ERROR_BAD_NETPATH
);
775 /* skip UNC prefix if any */
776 server_name
= V_BSTR(&server
);
777 if (server_name
[0] == '\\' && server_name
[1] == '\\')
780 if (strcmpiW(server_name
, comp_name
))
782 FIXME("connection to remote server %s is not supported\n", debugstr_w(V_BSTR(&server
)));
783 return HRESULT_FROM_WIN32(ERROR_BAD_NETPATH
);
787 strcpyW(task_svc
->comp_name
, comp_name
);
788 task_svc
->connected
= TRUE
;
793 static HRESULT WINAPI
TaskService_get_Connected(ITaskService
*iface
, VARIANT_BOOL
*connected
)
795 TaskService
*task_svc
= impl_from_ITaskService(iface
);
797 TRACE("%p,%p\n", iface
, connected
);
799 if (!connected
) return E_POINTER
;
801 *connected
= task_svc
->connected
? VARIANT_TRUE
: VARIANT_FALSE
;
806 static HRESULT WINAPI
TaskService_get_TargetServer(ITaskService
*iface
, BSTR
*server
)
808 TaskService
*task_svc
= impl_from_ITaskService(iface
);
810 TRACE("%p,%p\n", iface
, server
);
812 if (!server
) return E_POINTER
;
814 if (!task_svc
->connected
)
815 return HRESULT_FROM_WIN32(ERROR_ONLY_IF_CONNECTED
);
817 *server
= SysAllocString(task_svc
->comp_name
);
818 if (!*server
) return E_OUTOFMEMORY
;
823 static HRESULT WINAPI
TaskService_get_ConnectedUser(ITaskService
*iface
, BSTR
*user
)
825 FIXME("%p,%p: stub\n", iface
, user
);
829 static HRESULT WINAPI
TaskService_get_ConnectedDomain(ITaskService
*iface
, BSTR
*domain
)
831 FIXME("%p,%p: stub\n", iface
, domain
);
835 static HRESULT WINAPI
TaskService_get_HighestVersion(ITaskService
*iface
, DWORD
*version
)
837 FIXME("%p,%p: stub\n", iface
, version
);
841 static const ITaskServiceVtbl TaskService_vtbl
=
843 TaskService_QueryInterface
,
846 TaskService_GetTypeInfoCount
,
847 TaskService_GetTypeInfo
,
848 TaskService_GetIDsOfNames
,
850 TaskService_GetFolder
,
851 TaskService_GetRunningTasks
,
854 TaskService_get_Connected
,
855 TaskService_get_TargetServer
,
856 TaskService_get_ConnectedUser
,
857 TaskService_get_ConnectedDomain
,
858 TaskService_get_HighestVersion
861 HRESULT
TaskService_create(void **obj
)
863 TaskService
*task_svc
;
865 task_svc
= heap_alloc(sizeof(*task_svc
));
866 if (!task_svc
) return E_OUTOFMEMORY
;
868 task_svc
->ITaskService_iface
.lpVtbl
= &TaskService_vtbl
;
870 task_svc
->connected
= FALSE
;
871 *obj
= &task_svc
->ITaskService_iface
;
873 TRACE("created %p\n", *obj
);