Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/mstask/mstask_private.h | 4 +- dlls/mstask/task.c | 193 ++++++++++++++++++++++++++++++++++--- dlls/mstask/task_trigger.c | 203 ++++----------------------------------- dlls/mstask/tests/task_trigger.c | 11 --- 4 files changed, 203 insertions(+), 208 deletions(-)
diff --git a/dlls/mstask/mstask_private.h b/dlls/mstask/mstask_private.h index 038c6c84c1..dbaf5433b0 100644 --- a/dlls/mstask/mstask_private.h +++ b/dlls/mstask/mstask_private.h @@ -27,9 +27,11 @@ extern LONG dll_ref DECLSPEC_HIDDEN; typedef struct ClassFactoryImpl ClassFactoryImpl; extern ClassFactoryImpl MSTASK_ClassFactory DECLSPEC_HIDDEN;
-extern HRESULT TaskTriggerConstructor(LPVOID *ppObj) DECLSPEC_HIDDEN; +extern HRESULT TaskTriggerConstructor(ITask *task, WORD idx, ITaskTrigger **trigger) DECLSPEC_HIDDEN; extern HRESULT TaskSchedulerConstructor(LPVOID *ppObj) DECLSPEC_HIDDEN; extern HRESULT TaskConstructor(ITaskService *service, const WCHAR *task_name, ITask **task) DECLSPEC_HIDDEN; +extern HRESULT task_set_trigger(ITask *task, WORD idx, const TASK_TRIGGER *trigger) DECLSPEC_HIDDEN; +extern HRESULT task_get_trigger(ITask *task, WORD idx, TASK_TRIGGER *trigger) DECLSPEC_HIDDEN;
static inline WCHAR *heap_strdupW(const WCHAR *src) { diff --git a/dlls/mstask/task.c b/dlls/mstask/task.c index 68452afa4f..5129d9a513 100644 --- a/dlls/mstask/task.c +++ b/dlls/mstask/task.c @@ -23,6 +23,7 @@
#include "windef.h" #include "winbase.h" +#include "winternl.h" #include "objbase.h" #include "taskschd.h" #include "mstask.h" @@ -144,15 +145,176 @@ static ULONG WINAPI MSTASK_ITask_Release( return ref; }
+HRESULT task_set_trigger(ITask *task, WORD idx, const TASK_TRIGGER *src) +{ + TaskImpl *This = impl_from_ITask(task); + TIME_FIELDS field_time; + LARGE_INTEGER sys_time; + TASK_TRIGGER dst; + + TRACE("(%p, %u, %p)\n", task, idx, src); + + if (idx >= This->trigger_count) + return E_FAIL; + + /* Verify valid structure size */ + if (src->cbTriggerSize != sizeof(*src)) + return E_INVALIDARG; + dst.cbTriggerSize = src->cbTriggerSize; + + /* Reserved field must be zero */ + dst.Reserved1 = 0; + + /* Verify and set valid start date and time */ + memset(&field_time, 0, sizeof(field_time)); + field_time.Year = src->wBeginYear; + field_time.Month = src->wBeginMonth; + field_time.Day = src->wBeginDay; + field_time.Hour = src->wStartHour; + field_time.Minute = src->wStartMinute; + if (!RtlTimeFieldsToTime(&field_time, &sys_time)) + return E_INVALIDARG; + dst.wBeginYear = src->wBeginYear; + dst.wBeginMonth = src->wBeginMonth; + dst.wBeginDay = src->wBeginDay; + dst.wStartHour = src->wStartHour; + dst.wStartMinute = src->wStartMinute; + + /* Verify valid end date if TASK_TRIGGER_FLAG_HAS_END_DATE flag is set */ + if (src->rgFlags & TASK_TRIGGER_FLAG_HAS_END_DATE) + { + memset(&field_time, 0, sizeof(field_time)); + field_time.Year = src->wEndYear; + field_time.Month = src->wEndMonth; + field_time.Day = src->wEndDay; + if (!RtlTimeFieldsToTime(&field_time, &sys_time)) + return E_INVALIDARG; + } + + /* Set valid end date independent of TASK_TRIGGER_FLAG_HAS_END_DATE flag */ + dst.wEndYear = src->wEndYear; + dst.wEndMonth = src->wEndMonth; + dst.wEndDay = src->wEndDay; + + /* Verify duration and interval pair */ + if (src->MinutesDuration <= src->MinutesInterval && src->MinutesInterval > 0) + return E_INVALIDARG; + dst.MinutesDuration = src->MinutesDuration; + dst.MinutesInterval = src->MinutesInterval; + + /* Copy over flags */ + dst.rgFlags = src->rgFlags; + + /* Set TriggerType dependent fields of Type union */ + dst.TriggerType = src->TriggerType; + switch (src->TriggerType) + { + case TASK_TIME_TRIGGER_DAILY: + dst.Type.Daily.DaysInterval = src->Type.Daily.DaysInterval; + break; + case TASK_TIME_TRIGGER_WEEKLY: + dst.Type.Weekly.WeeksInterval = src->Type.Weekly.WeeksInterval; + dst.Type.Weekly.rgfDaysOfTheWeek = src->Type.Weekly.rgfDaysOfTheWeek; + break; + case TASK_TIME_TRIGGER_MONTHLYDATE: + dst.Type.MonthlyDate.rgfDays = src->Type.MonthlyDate.rgfDays; + dst.Type.MonthlyDate.rgfMonths = src->Type.MonthlyDate.rgfMonths; + break; + case TASK_TIME_TRIGGER_MONTHLYDOW: + dst.Type.MonthlyDOW.wWhichWeek = src->Type.MonthlyDOW.wWhichWeek; + dst.Type.MonthlyDOW.rgfDaysOfTheWeek = src->Type.MonthlyDOW.rgfDaysOfTheWeek; + dst.Type.MonthlyDOW.rgfMonths = src->Type.MonthlyDOW.rgfMonths; + break; + case TASK_TIME_TRIGGER_ONCE: + case TASK_EVENT_TRIGGER_ON_IDLE: + case TASK_EVENT_TRIGGER_AT_SYSTEMSTART: + case TASK_EVENT_TRIGGER_AT_LOGON: + default: + dst.Type = src->Type; + break; + } + + /* Reserved field must be zero */ + dst.Reserved2 = 0; + + /* wRandomMinutesInterval not currently used and is initialized to zero */ + dst.wRandomMinutesInterval = 0; + + This->trigger[idx] = dst; + + return S_OK; +} + +HRESULT task_get_trigger(ITask *task, WORD idx, TASK_TRIGGER *dst) +{ + TaskImpl *This = impl_from_ITask(task); + TASK_TRIGGER *src; + + TRACE("(%p, %u, %p)\n", task, idx, dst); + + if (idx >= This->trigger_count) + return SCHED_E_TRIGGER_NOT_FOUND; + + src = &This->trigger[idx]; + + /* Native implementation doesn't verify equivalent cbTriggerSize fields */ + + /* Copy relevant fields of the structure */ + dst->cbTriggerSize = src->cbTriggerSize; + dst->Reserved1 = 0; + dst->wBeginYear = src->wBeginYear; + dst->wBeginMonth = src->wBeginMonth; + dst->wBeginDay = src->wBeginDay; + dst->wEndYear = src->wEndYear; + dst->wEndMonth = src->wEndMonth; + dst->wEndDay = src->wEndDay; + dst->wStartHour = src->wStartHour; + dst->wStartMinute = src->wStartMinute; + dst->MinutesDuration = src->MinutesDuration; + dst->MinutesInterval = src->MinutesInterval; + dst->rgFlags = src->rgFlags; + dst->TriggerType = src->TriggerType; + switch (src->TriggerType) + { + case TASK_TIME_TRIGGER_DAILY: + dst->Type.Daily.DaysInterval = src->Type.Daily.DaysInterval; + break; + case TASK_TIME_TRIGGER_WEEKLY: + dst->Type.Weekly.WeeksInterval = src->Type.Weekly.WeeksInterval; + dst->Type.Weekly.rgfDaysOfTheWeek = src->Type.Weekly.rgfDaysOfTheWeek; + break; + case TASK_TIME_TRIGGER_MONTHLYDATE: + dst->Type.MonthlyDate.rgfDays = src->Type.MonthlyDate.rgfDays; + dst->Type.MonthlyDate.rgfMonths = src->Type.MonthlyDate.rgfMonths; + break; + case TASK_TIME_TRIGGER_MONTHLYDOW: + dst->Type.MonthlyDOW.wWhichWeek = src->Type.MonthlyDOW.wWhichWeek; + dst->Type.MonthlyDOW.rgfDaysOfTheWeek = src->Type.MonthlyDOW.rgfDaysOfTheWeek; + dst->Type.MonthlyDOW.rgfMonths = src->Type.MonthlyDOW.rgfMonths; + break; + case TASK_TIME_TRIGGER_ONCE: + case TASK_EVENT_TRIGGER_ON_IDLE: + case TASK_EVENT_TRIGGER_AT_SYSTEMSTART: + case TASK_EVENT_TRIGGER_AT_LOGON: + default: + break; + } + dst->Reserved2 = 0; + dst->wRandomMinutesInterval = 0; + + return S_OK; +} + static HRESULT WINAPI MSTASK_ITask_CreateTrigger(ITask *iface, WORD *idx, ITaskTrigger **task_trigger) { TaskImpl *This = impl_from_ITask(iface); TASK_TRIGGER *new_trigger; + SYSTEMTIME time; HRESULT hr;
TRACE("(%p, %p, %p)\n", iface, idx, task_trigger);
- hr = TaskTriggerConstructor((void **)task_trigger); + hr = TaskTriggerConstructor(iface, This->trigger_count, task_trigger); if (hr != S_OK) return hr;
if (This->trigger) @@ -167,9 +329,22 @@ static HRESULT WINAPI MSTASK_ITask_CreateTrigger(ITask *iface, WORD *idx, ITaskT
This->trigger = new_trigger;
- hr = ITaskTrigger_GetTrigger(*task_trigger, &This->trigger[This->trigger_count]); - if (hr == S_OK) - *idx = This->trigger_count++; + new_trigger = &This->trigger[This->trigger_count]; + + /* Most fields default to zero. Initialize other fields to default values. */ + memset(new_trigger, 0, sizeof(*new_trigger)); + GetLocalTime(&time); + new_trigger->cbTriggerSize = sizeof(*new_trigger); + new_trigger->wBeginYear = time.wYear; + new_trigger->wBeginMonth = time.wMonth; + new_trigger->wBeginDay = time.wDay; + new_trigger->wStartHour = time.wHour; + new_trigger->wStartMinute = time.wMinute; + new_trigger->rgFlags = TASK_TRIGGER_FLAG_DISABLED; + new_trigger->TriggerType = TASK_TIME_TRIGGER_DAILY, + new_trigger->Type.Daily.DaysInterval = 1; + + *idx = This->trigger_count++;
return hr; } @@ -204,21 +379,13 @@ static HRESULT WINAPI MSTASK_ITask_GetTriggerCount(ITask *iface, WORD *count) static HRESULT WINAPI MSTASK_ITask_GetTrigger(ITask *iface, WORD idx, ITaskTrigger **trigger) { TaskImpl *This = impl_from_ITask(iface); - HRESULT hr;
TRACE("(%p, %u, %p)\n", iface, idx, trigger);
if (idx >= This->trigger_count) return SCHED_E_TRIGGER_NOT_FOUND;
- hr = TaskTriggerConstructor((void **)trigger); - if (hr != S_OK) return hr; - - hr = ITaskTrigger_SetTrigger(*trigger, &This->trigger[idx]); - if (hr != S_OK) - ITaskTrigger_Release(*trigger); - - return hr; + return TaskTriggerConstructor(iface, idx, trigger); }
static HRESULT WINAPI MSTASK_ITask_GetTriggerString( diff --git a/dlls/mstask/task_trigger.c b/dlls/mstask/task_trigger.c index 0f24e1f998..e3f190a315 100644 --- a/dlls/mstask/task_trigger.c +++ b/dlls/mstask/task_trigger.c @@ -23,7 +23,6 @@ #include "windef.h" #include "winbase.h" #include "objbase.h" -#include "winternl.h" #include "taskschd.h" #include "mstask.h" #include "mstask_private.h" @@ -35,7 +34,8 @@ typedef struct { ITaskTrigger ITaskTrigger_iface; LONG ref; - TASK_TRIGGER triggerCond; + ITask *parent_task; + WORD trigger_index; } TaskTriggerImpl;
static inline TaskTriggerImpl *impl_from_ITaskTrigger(ITaskTrigger *iface) @@ -86,186 +86,33 @@ static ULONG WINAPI MSTASK_ITaskTrigger_Release( ref = InterlockedDecrement(&This->ref); if (ref == 0) { + ITask_Release(This->parent_task); heap_free(This); InterlockedDecrement(&dll_ref); } return ref; }
-static HRESULT WINAPI MSTASK_ITaskTrigger_SetTrigger( - ITaskTrigger* iface, - const PTASK_TRIGGER pTrigger) +static HRESULT WINAPI MSTASK_ITaskTrigger_SetTrigger(ITaskTrigger *iface, const PTASK_TRIGGER trigger) { - TaskTriggerImpl * This = impl_from_ITaskTrigger(iface); - TIME_FIELDS field_time; - LARGE_INTEGER sys_time; - TASK_TRIGGER tmp_trigger_cond; - - TRACE("(%p, %p)\n", iface, pTrigger); - - if (!pTrigger) return E_INVALIDARG; - - /* Verify valid structure size */ - if (pTrigger->cbTriggerSize != sizeof(*pTrigger)) - return E_INVALIDARG; - tmp_trigger_cond.cbTriggerSize = pTrigger->cbTriggerSize; - - /* Reserved field must be zero */ - tmp_trigger_cond.Reserved1 = 0; - - /* Verify and set valid start date and time */ - memset(&field_time, 0, sizeof(field_time)); - field_time.Year = pTrigger->wBeginYear; - field_time.Month = pTrigger->wBeginMonth; - field_time.Day = pTrigger->wBeginDay; - field_time.Hour = pTrigger->wStartHour; - field_time.Minute = pTrigger->wStartMinute; - if (!RtlTimeFieldsToTime(&field_time, &sys_time)) - return E_INVALIDARG; - tmp_trigger_cond.wBeginYear = pTrigger->wBeginYear; - tmp_trigger_cond.wBeginMonth = pTrigger->wBeginMonth; - tmp_trigger_cond.wBeginDay = pTrigger->wBeginDay; - tmp_trigger_cond.wStartHour = pTrigger->wStartHour; - tmp_trigger_cond.wStartMinute = pTrigger->wStartMinute; - - /* Verify valid end date if TASK_TRIGGER_FLAG_HAS_END_DATE flag is set */ - if (pTrigger->rgFlags & TASK_TRIGGER_FLAG_HAS_END_DATE) - { - memset(&field_time, 0, sizeof(field_time)); - field_time.Year = pTrigger->wEndYear; - field_time.Month = pTrigger->wEndMonth; - field_time.Day = pTrigger->wEndDay; - if (!RtlTimeFieldsToTime(&field_time, &sys_time)) - return E_INVALIDARG; - } - - /* Set valid end date independent of TASK_TRIGGER_FLAG_HAS_END_DATE flag */ - tmp_trigger_cond.wEndYear = pTrigger->wEndYear; - tmp_trigger_cond.wEndMonth = pTrigger->wEndMonth; - tmp_trigger_cond.wEndDay = pTrigger->wEndDay; - - /* Verify duration and interval pair */ - if (pTrigger->MinutesDuration <= pTrigger->MinutesInterval && - pTrigger->MinutesInterval > 0) - return E_INVALIDARG; - tmp_trigger_cond.MinutesDuration = pTrigger->MinutesDuration; - tmp_trigger_cond.MinutesInterval = pTrigger->MinutesInterval; - - /* Copy over flags */ - tmp_trigger_cond.rgFlags = pTrigger->rgFlags; - - /* Set TriggerType dependent fields of Type union */ - tmp_trigger_cond.TriggerType = pTrigger->TriggerType; - switch (pTrigger->TriggerType) - { - case TASK_TIME_TRIGGER_DAILY: - tmp_trigger_cond.Type.Daily.DaysInterval = - pTrigger->Type.Daily.DaysInterval; - break; - case TASK_TIME_TRIGGER_WEEKLY: - tmp_trigger_cond.Type.Weekly.WeeksInterval = - pTrigger->Type.Weekly.WeeksInterval; - tmp_trigger_cond.Type.Weekly.rgfDaysOfTheWeek = - pTrigger->Type.Weekly.rgfDaysOfTheWeek; - break; - case TASK_TIME_TRIGGER_MONTHLYDATE: - tmp_trigger_cond.Type.MonthlyDate.rgfDays = - pTrigger->Type.MonthlyDate.rgfDays; - tmp_trigger_cond.Type.MonthlyDate.rgfMonths = - pTrigger->Type.MonthlyDate.rgfMonths; - break; - case TASK_TIME_TRIGGER_MONTHLYDOW: - tmp_trigger_cond.Type.MonthlyDOW.wWhichWeek = - pTrigger->Type.MonthlyDOW.wWhichWeek; - tmp_trigger_cond.Type.MonthlyDOW.rgfDaysOfTheWeek = - pTrigger->Type.MonthlyDOW.rgfDaysOfTheWeek; - tmp_trigger_cond.Type.MonthlyDOW.rgfMonths = - pTrigger->Type.MonthlyDOW.rgfMonths; - break; - case TASK_TIME_TRIGGER_ONCE: - case TASK_EVENT_TRIGGER_ON_IDLE: - case TASK_EVENT_TRIGGER_AT_SYSTEMSTART: - case TASK_EVENT_TRIGGER_AT_LOGON: - default: - tmp_trigger_cond.Type = This->triggerCond.Type; - break; - } - - /* Reserved field must be zero */ - tmp_trigger_cond.Reserved2 = 0; + TaskTriggerImpl *This = impl_from_ITaskTrigger(iface);
- /* wRandomMinutesInterval not currently used and is initialized to zero */ - tmp_trigger_cond.wRandomMinutesInterval = 0; + TRACE("(%p, %p)\n", iface, trigger);
- /* Update object copy of triggerCond */ - This->triggerCond = tmp_trigger_cond; + if (!trigger) return E_INVALIDARG;
- return S_OK; + return task_set_trigger(This->parent_task, This->trigger_index, trigger); }
-static HRESULT WINAPI MSTASK_ITaskTrigger_GetTrigger( - ITaskTrigger* iface, - PTASK_TRIGGER pTrigger) +static HRESULT WINAPI MSTASK_ITaskTrigger_GetTrigger(ITaskTrigger *iface, TASK_TRIGGER *trigger) { - TaskTriggerImpl * This = impl_from_ITaskTrigger(iface); - - TRACE("(%p, %p)\n", iface, pTrigger); + TaskTriggerImpl *This = impl_from_ITaskTrigger(iface);
- if (!pTrigger) return E_INVALIDARG; + TRACE("(%p, %p)\n", iface, trigger);
- /* Native implementation doesn't verify equivalent cbTriggerSize fields */ + if (!trigger) return E_INVALIDARG;
- /* Copy relevant fields of the structure */ - pTrigger->cbTriggerSize = This->triggerCond.cbTriggerSize; - pTrigger->Reserved1 = 0; - pTrigger->wBeginYear = This->triggerCond.wBeginYear; - pTrigger->wBeginMonth = This->triggerCond.wBeginMonth; - pTrigger->wBeginDay = This->triggerCond.wBeginDay; - pTrigger->wEndYear = This->triggerCond.wEndYear; - pTrigger->wEndMonth = This->triggerCond.wEndMonth; - pTrigger->wEndDay = This->triggerCond.wEndDay; - pTrigger->wStartHour = This->triggerCond.wStartHour; - pTrigger->wStartMinute = This->triggerCond.wStartMinute; - pTrigger->MinutesDuration = This->triggerCond.MinutesDuration; - pTrigger->MinutesInterval = This->triggerCond.MinutesInterval; - pTrigger->rgFlags = This->triggerCond.rgFlags; - pTrigger->TriggerType = This->triggerCond.TriggerType; - switch (This->triggerCond.TriggerType) - { - case TASK_TIME_TRIGGER_DAILY: - pTrigger->Type.Daily.DaysInterval = - This->triggerCond.Type.Daily.DaysInterval; - break; - case TASK_TIME_TRIGGER_WEEKLY: - pTrigger->Type.Weekly.WeeksInterval = - This->triggerCond.Type.Weekly.WeeksInterval; - pTrigger->Type.Weekly.rgfDaysOfTheWeek = - This->triggerCond.Type.Weekly.rgfDaysOfTheWeek; - break; - case TASK_TIME_TRIGGER_MONTHLYDATE: - pTrigger->Type.MonthlyDate.rgfDays = - This->triggerCond.Type.MonthlyDate.rgfDays; - pTrigger->Type.MonthlyDate.rgfMonths = - This->triggerCond.Type.MonthlyDate.rgfMonths; - break; - case TASK_TIME_TRIGGER_MONTHLYDOW: - pTrigger->Type.MonthlyDOW.wWhichWeek = - This->triggerCond.Type.MonthlyDOW.wWhichWeek; - pTrigger->Type.MonthlyDOW.rgfDaysOfTheWeek = - This->triggerCond.Type.MonthlyDOW.rgfDaysOfTheWeek; - pTrigger->Type.MonthlyDOW.rgfMonths = - This->triggerCond.Type.MonthlyDOW.rgfMonths; - break; - case TASK_TIME_TRIGGER_ONCE: - case TASK_EVENT_TRIGGER_ON_IDLE: - case TASK_EVENT_TRIGGER_AT_SYSTEMSTART: - case TASK_EVENT_TRIGGER_AT_LOGON: - default: - break; - } - pTrigger->Reserved2 = 0; - pTrigger->wRandomMinutesInterval = 0; - return S_OK; + return task_get_trigger(This->parent_task, This->trigger_index, trigger); }
static HRESULT WINAPI MSTASK_ITaskTrigger_GetTriggerString( @@ -286,11 +133,11 @@ static const ITaskTriggerVtbl MSTASK_ITaskTriggerVtbl = MSTASK_ITaskTrigger_GetTriggerString };
-HRESULT TaskTriggerConstructor(LPVOID *ppObj) +HRESULT TaskTriggerConstructor(ITask *task, WORD idx, ITaskTrigger **trigger) { TaskTriggerImpl *This; - SYSTEMTIME time; - TRACE("(%p)\n", ppObj); + + TRACE("(%p, %u, %p)\n", task, idx, trigger);
This = heap_alloc(sizeof(*This)); if (!This) @@ -299,21 +146,11 @@ HRESULT TaskTriggerConstructor(LPVOID *ppObj) This->ITaskTrigger_iface.lpVtbl = &MSTASK_ITaskTriggerVtbl; This->ref = 1;
- /* Most fields of triggerCond default to zero. Initialize other - * fields to default values. */ - memset(&This->triggerCond, 0, sizeof(TASK_TRIGGER)); - GetLocalTime(&time); - This->triggerCond.cbTriggerSize = sizeof(This->triggerCond); - This->triggerCond.wBeginYear = time.wYear; - This->triggerCond.wBeginMonth = time.wMonth; - This->triggerCond.wBeginDay = time.wDay; - This->triggerCond.wStartHour = time.wHour; - This->triggerCond.wStartMinute = time.wMinute; - This->triggerCond.rgFlags = TASK_TRIGGER_FLAG_DISABLED; - This->triggerCond.TriggerType = TASK_TIME_TRIGGER_DAILY, - This->triggerCond.Type.Daily.DaysInterval = 1; + ITask_AddRef(task); + This->parent_task = task; + This->trigger_index = idx;
- *ppObj = &This->ITaskTrigger_iface; + *trigger = &This->ITaskTrigger_iface; InterlockedIncrement(&dll_ref); return S_OK; } diff --git a/dlls/mstask/tests/task_trigger.c b/dlls/mstask/tests/task_trigger.c index ab99af7b5d..9a20a5672c 100644 --- a/dlls/mstask/tests/task_trigger.c +++ b/dlls/mstask/tests/task_trigger.c @@ -499,14 +499,12 @@ static void test_trigger_manager(void) hr = ITask_CreateTrigger(task, &idx, &trigger0); ok(hr == S_OK, "got %#x\n", hr); ok(idx == 0, "got %u\n", idx); -todo_wine ok(obj_refcount(task) == 2, "got %u\n", obj_refcount(task));
idx = 0xdead; hr = ITask_CreateTrigger(task, &idx, &trigger1); ok(hr == S_OK, "got %#x\n", hr); ok(idx == 1, "got %u\n", idx); -todo_wine ok(obj_refcount(task) == 3, "got %u\n", obj_refcount(task));
count = 0xdead; @@ -524,9 +522,7 @@ todo_wine
hr = get_task_trigger(task, 0, &state); ok(hr == S_OK, "got %#x\n", hr); -todo_wine ok(state.wBeginYear == 3000, "got %u\n", state.wBeginYear); -todo_wine ok(state.TriggerType == TASK_TIME_TRIGGER_ONCE, "got %u\n", state.TriggerType);
hr = ITaskTrigger_GetTrigger(trigger1, &state1); @@ -539,7 +535,6 @@ todo_wine
hr = get_task_trigger(task, 1, &state); ok(hr == S_OK, "got %#x\n", hr); -todo_wine ok(state.wBeginYear == 2000, "got %u\n", state.wBeginYear); ok(state.TriggerType == TASK_TIME_TRIGGER_DAILY, "got %u\n", state.TriggerType);
@@ -552,14 +547,11 @@ todo_wine
hr = get_task_trigger(task, 0, &state); ok(hr == S_OK, "got %#x\n", hr); -todo_wine ok(state.wBeginYear == 3000, "got %u\n", state.wBeginYear); -todo_wine ok(state.TriggerType == TASK_TIME_TRIGGER_ONCE, "got %u\n", state.TriggerType);
hr = get_task_trigger(task, 1, &state); ok(hr == S_OK, "got %#x\n", hr); -todo_wine ok(state.wBeginYear == 2000, "got %u\n", state.wBeginYear); ok(state.TriggerType == TASK_TIME_TRIGGER_DAILY, "got %u\n", state.TriggerType);
@@ -573,7 +565,6 @@ todo_wine
hr = get_task_trigger(task, 0, &state); ok(hr == S_OK, "got %#x\n", hr); -todo_wine ok(state.wBeginYear == 2000, "got %u\n", state.wBeginYear); ok(state.TriggerType == TASK_TIME_TRIGGER_DAILY, "got %u\n", state.TriggerType);
@@ -584,7 +575,6 @@ todo_wine ok(hr == S_OK, "got %#x\n", hr);
hr = ITaskTrigger_SetTrigger(trigger1, &state1); -todo_wine ok(hr == E_FAIL, "got %#x\n", hr);
count = 0xdead; @@ -592,7 +582,6 @@ todo_wine ok(hr == S_OK, "got %#x\n", hr); ok(count == 1, "got %u\n", count);
-todo_wine ok(obj_refcount(task) == 3, "got %u\n", obj_refcount(task));
ref = ITaskTrigger_Release(trigger0);