Dmitry Timoshkov : schedsvc: Read triggers when loading a job file.
Alexandre Julliard
julliard at winehq.org
Wed Jun 6 15:21:47 CDT 2018
Module: wine
Branch: master
Commit: a3566fd6e189f803477839a7444f8418f59fd99c
URL: https://source.winehq.org/git/wine.git/?a=commit;h=a3566fd6e189f803477839a7444f8418f59fd99c
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Wed Jun 6 14:34:24 2018 +0800
schedsvc: Read triggers when loading a job file.
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/schedsvc/atsvc.c | 61 ++++++++++++++++++++++++++++++---------------------
1 file changed, 36 insertions(+), 25 deletions(-)
diff --git a/dlls/schedsvc/atsvc.c b/dlls/schedsvc/atsvc.c
index 9497c90..8f6cf03 100644
--- a/dlls/schedsvc/atsvc.c
+++ b/dlls/schedsvc/atsvc.c
@@ -64,6 +64,8 @@ struct job_t
AT_ENUM info;
FIXDLEN_DATA data;
USHORT instance_count;
+ USHORT trigger_count;
+ TASK_TRIGGER *trigger;
};
struct running_job_t
@@ -143,7 +145,7 @@ static BOOL load_job_data(const char *data, DWORD size, struct job_t *info)
const FIXDLEN_DATA *fixed;
const SYSTEMTIME *st;
DWORD unicode_strings_size, data_size, triggers_size;
- USHORT triggers_count, i;
+ USHORT i;
const USHORT *signature;
const TASK_TRIGGER *trigger;
@@ -202,11 +204,10 @@ static BOOL load_job_data(const char *data, DWORD size, struct job_t *info)
TRACE("no space for triggers count\n");
return FALSE;
}
- triggers_count = *(const USHORT *)(data + fixed->trigger_offset);
- TRACE("triggers_count %u\n", triggers_count);
+ info->trigger_count = *(const USHORT *)(data + fixed->trigger_offset);
+ TRACE("trigger_count %u\n", info->trigger_count);
triggers_size = size - fixed->trigger_offset - sizeof(USHORT);
TRACE("triggers_size %u\n", triggers_size);
- trigger = (const TASK_TRIGGER *)(data + fixed->trigger_offset + sizeof(USHORT));
data += fixed->name_size_offset + unicode_strings_size;
size -= fixed->name_size_offset + unicode_strings_size;
@@ -249,42 +250,51 @@ static BOOL load_job_data(const char *data, DWORD size, struct job_t *info)
/* Trigger Data */
TRACE("trigger_offset %04x, triggers end at %04x\n", fixed->trigger_offset,
- (DWORD)(fixed->trigger_offset + sizeof(USHORT) + triggers_count * sizeof(TASK_TRIGGER)));
+ (DWORD)(fixed->trigger_offset + sizeof(USHORT) + info->trigger_count * sizeof(TASK_TRIGGER)));
- triggers_count = *(const USHORT *)data;
- TRACE("triggers_count %u\n", triggers_count);
+ info->trigger_count = *(const USHORT *)data;
+ TRACE("trigger_count %u\n", info->trigger_count);
trigger = (const TASK_TRIGGER *)(data + sizeof(USHORT));
- if (triggers_count * sizeof(TASK_TRIGGER) > triggers_size)
+ if (info->trigger_count * sizeof(TASK_TRIGGER) > triggers_size)
{
TRACE("no space for triggers data\n");
return FALSE;
}
- for (i = 0; i < triggers_count; i++)
+ info->trigger = heap_alloc(info->trigger_count * sizeof(info->trigger[0]));
+ if (!info->trigger)
+ {
+ TRACE("not enough memory for trigger data\n");
+ return FALSE;
+ }
+
+ for (i = 0; i < info->trigger_count; i++)
{
TRACE("%u: cbTriggerSize = %#x\n", i, trigger[i].cbTriggerSize);
if (trigger[i].cbTriggerSize != sizeof(TASK_TRIGGER))
TRACE("invalid cbTriggerSize\n");
TRACE("Reserved1 = %#x\n", trigger[i].Reserved1);
- TRACE("wBeginYear = %u\n", trigger->wBeginYear);
- TRACE("wBeginMonth = %u\n", trigger->wBeginMonth);
- TRACE("wBeginDay = %u\n", trigger->wBeginDay);
- TRACE("wEndYear = %u\n", trigger->wEndYear);
- TRACE("wEndMonth = %u\n", trigger->wEndMonth);
- TRACE("wEndDay = %u\n", trigger->wEndDay);
- TRACE("wStartHour = %u\n", trigger->wStartHour);
- TRACE("wStartMinute = %u\n", trigger->wStartMinute);
- TRACE("MinutesDuration = %u\n", trigger->MinutesDuration);
- TRACE("MinutesInterval = %u\n", trigger->MinutesInterval);
- TRACE("rgFlags = %u\n", trigger->rgFlags);
- TRACE("TriggerType = %u\n", trigger->TriggerType);
- TRACE("Reserved2 = %u\n", trigger->Reserved2);
- TRACE("wRandomMinutesInterval = %u\n", trigger->wRandomMinutesInterval);
+ TRACE("wBeginYear = %u\n", trigger[i].wBeginYear);
+ TRACE("wBeginMonth = %u\n", trigger[i].wBeginMonth);
+ TRACE("wBeginDay = %u\n", trigger[i].wBeginDay);
+ TRACE("wEndYear = %u\n", trigger[i].wEndYear);
+ TRACE("wEndMonth = %u\n", trigger[i].wEndMonth);
+ TRACE("wEndDay = %u\n", trigger[i].wEndDay);
+ TRACE("wStartHour = %u\n", trigger[i].wStartHour);
+ TRACE("wStartMinute = %u\n", trigger[i].wStartMinute);
+ TRACE("MinutesDuration = %u\n", trigger[i].MinutesDuration);
+ TRACE("MinutesInterval = %u\n", trigger[i].MinutesInterval);
+ TRACE("rgFlags = %u\n", trigger[i].rgFlags);
+ TRACE("TriggerType = %u\n", trigger[i].TriggerType);
+ TRACE("Reserved2 = %u\n", trigger[i].Reserved2);
+ TRACE("wRandomMinutesInterval = %u\n", trigger[i].wRandomMinutesInterval);
+
+ info->trigger[i] = trigger[i];
}
- size -= sizeof(USHORT) + triggers_count * sizeof(TASK_TRIGGER);
- data += sizeof(USHORT) + triggers_count * sizeof(TASK_TRIGGER);
+ size -= sizeof(USHORT) + info->trigger_count * sizeof(TASK_TRIGGER);
+ data += sizeof(USHORT) + info->trigger_count * sizeof(TASK_TRIGGER);
if (size < 2 * sizeof(USHORT) + 64)
{
@@ -353,6 +363,7 @@ static void free_job(struct job_t *job)
heap_free(job->name);
heap_free(job->params);
heap_free(job->curdir);
+ heap_free(job->trigger);
heap_free(job);
}
More information about the wine-cvs
mailing list