ReactOS  0.4.15-dev-4863-gba0d16f
precomp.h File Reference
#include <limits.h>
#include <stdarg.h>
#include <stdio.h>
#include <windef.h>
#include <winbase.h>
#include <winreg.h>
#include <winsvc.h>
#include <winuser.h>
#include <undocuser.h>
#include <ndk/rtlfuncs.h>
#include <atsvc_s.h>
#include <wine/debug.h>
Include dependency graph for precomp.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _JOB
 

Macros

#define WIN32_NO_STATUS
 
#define _INC_WINDOWS
 
#define COM_NO_WINDOWS_H
 
#define JOB_NAME_LENGTH   9
 

Typedefs

typedef struct _JOB JOB
 
typedef struct _JOBPJOB
 

Functions

NTSYSAPI ULONG NTAPI RtlRandomEx (PULONG Seed)
 
VOID GetNextJobTimeout (HANDLE hTimer)
 
VOID RunCurrentJobs (VOID)
 
LONG SaveJob (PJOB pJob)
 
LONG DeleteJob (PJOB pJob)
 
LONG LoadJobs (VOID)
 
VOID CalculateNextStartTime (_In_ PJOB pJob)
 
VOID InsertJobIntoStartList (_In_ PLIST_ENTRY StartListHead, _In_ PJOB pJob)
 
VOID DumpStartList (_In_ PLIST_ENTRY StartListHead)
 
DWORD WINAPI RpcThreadRoutine (LPVOID lpParameter)
 

Variables

DWORD dwNextJobId
 
DWORD dwJobCount
 
LIST_ENTRY JobListHead
 
RTL_RESOURCE JobListLock
 
LIST_ENTRY StartListHead
 
RTL_RESOURCE StartListLock
 
HANDLE Events [3]
 

Macro Definition Documentation

◆ _INC_WINDOWS

#define _INC_WINDOWS

Definition at line 5 of file precomp.h.

◆ COM_NO_WINDOWS_H

#define COM_NO_WINDOWS_H

Definition at line 6 of file precomp.h.

◆ JOB_NAME_LENGTH

#define JOB_NAME_LENGTH   9

Definition at line 23 of file precomp.h.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 4 of file precomp.h.

Typedef Documentation

◆ JOB

typedef struct _JOB JOB

◆ PJOB

typedef struct _JOB * PJOB

Function Documentation

◆ CalculateNextStartTime()

VOID CalculateNextStartTime ( _In_ PJOB  pJob)

Definition at line 467 of file job.c.

469 {
470  SYSTEMTIME CurrentSystemTime, StartSystemTime;
471  FILETIME StartFileTime;
472  WORD wDaysOffset, wTempOffset, i, wJobDayOfWeek, wJobDayOfMonth;
473  DWORD_PTR CurrentTimeMs;
474  BOOL bDaysOffsetValid;
475  ULARGE_INTEGER LocalStartTime;
476 
477  TRACE("CalculateNextStartTime(%p)\n", pJob);
478  TRACE("JobTime: %lu\n", pJob->JobTime);
479  TRACE("DaysOfWeek: 0x%x\n", pJob->DaysOfWeek);
480  TRACE("DaysOfMonth: 0x%x\n", pJob->DaysOfMonth);
481 
482  GetLocalTime(&CurrentSystemTime);
483 
484  CurrentTimeMs = (DWORD_PTR)CurrentSystemTime.wHour * 3600000 +
485  (DWORD_PTR)CurrentSystemTime.wMinute * 60000;
486 
487  bDaysOffsetValid = FALSE;
488  wDaysOffset = 0;
489  if ((pJob->DaysOfWeek == 0) && (pJob->DaysOfMonth == 0))
490  {
491  if (CurrentTimeMs >= pJob->JobTime)
492  {
493  TRACE("Tomorrow!\n");
494  wDaysOffset = 1;
495  }
496 
497  bDaysOffsetValid = TRUE;
498  }
499  else
500  {
501  if (pJob->DaysOfWeek != 0)
502  {
503  TRACE("DaysOfWeek!\n");
504  for (i = 0; i < 7; i++)
505  {
506  if (pJob->DaysOfWeek & (1 << i))
507  {
508  /* Adjust the range */
509  wJobDayOfWeek = (i + 1) % 7;
510  TRACE("wJobDayOfWeek: %hu\n", wJobDayOfWeek);
511  TRACE("CurrentSystemTime.wDayOfWeek: %hu\n", CurrentSystemTime.wDayOfWeek);
512 
513  /* Calculate the days offset */
514  if ((CurrentSystemTime.wDayOfWeek > wJobDayOfWeek ) ||
515  ((CurrentSystemTime.wDayOfWeek == wJobDayOfWeek) && (CurrentTimeMs >= pJob->JobTime)))
516  {
517  wTempOffset = 7 - CurrentSystemTime.wDayOfWeek + wJobDayOfWeek;
518  TRACE("wTempOffset: %hu\n", wTempOffset);
519  }
520  else
521  {
522  wTempOffset = wJobDayOfWeek - CurrentSystemTime.wDayOfWeek;
523  TRACE("wTempOffset: %hu\n", wTempOffset);
524  }
525 
526  /* Use the smallest offset */
527  if (bDaysOffsetValid == FALSE)
528  {
529  wDaysOffset = wTempOffset;
530  bDaysOffsetValid = TRUE;
531  }
532  else
533  {
534  if (wTempOffset < wDaysOffset)
535  wDaysOffset = wTempOffset;
536  }
537  }
538  }
539  }
540 
541  if (pJob->DaysOfMonth != 0)
542  {
543  FIXME("Support DaysOfMonth!\n");
544  for (i = 0; i < 31; i++)
545  {
546  if (pJob->DaysOfMonth & (1 << i))
547  {
548  /* Adjust the range */
549  wJobDayOfMonth = i + 1;
550  FIXME("wJobDayOfMonth: %hu\n", wJobDayOfMonth);
551  FIXME("CurrentSystemTime.wDay: %hu\n", CurrentSystemTime.wDay);
552 
553  if ((CurrentSystemTime.wDay > wJobDayOfMonth) ||
554  ((CurrentSystemTime.wDay == wJobDayOfMonth) && (CurrentTimeMs >= pJob->JobTime)))
555  {
556  wTempOffset = DaysOfMonth(CurrentSystemTime.wMonth, CurrentSystemTime.wYear) -
557  CurrentSystemTime.wDay + wJobDayOfMonth;
558  FIXME("wTempOffset: %hu\n", wTempOffset);
559  }
560  else
561  {
562  wTempOffset = wJobDayOfMonth - CurrentSystemTime.wDay;
563  FIXME("wTempOffset: %hu\n", wTempOffset);
564  }
565 
566  /* Use the smallest offset */
567  if (bDaysOffsetValid == FALSE)
568  {
569  wDaysOffset = wTempOffset;
570  bDaysOffsetValid = TRUE;
571  }
572  else
573  {
574  if (wTempOffset < wDaysOffset)
575  wDaysOffset = wTempOffset;
576  }
577  }
578  }
579  }
580  }
581 
582  TRACE("wDaysOffset: %hu\n", wDaysOffset);
583 
584  CopyMemory(&StartSystemTime, &CurrentSystemTime, sizeof(SYSTEMTIME));
585 
586  StartSystemTime.wMilliseconds = 0;
587  StartSystemTime.wSecond = 0;
588  StartSystemTime.wHour = (WORD)(pJob->JobTime / 3600000);
589  StartSystemTime.wMinute = (WORD)((pJob->JobTime % 3600000) / 60000);
590 
591  SystemTimeToFileTime(&StartSystemTime, &StartFileTime);
592 
593  LocalStartTime.u.LowPart = StartFileTime.dwLowDateTime;
594  LocalStartTime.u.HighPart = StartFileTime.dwHighDateTime;
595  if (bDaysOffsetValid && wDaysOffset != 0)
596  {
597  LocalStartTime.QuadPart += ((ULONGLONG)wDaysOffset * 24 * 60 * 60 * 10000);
598  }
599 
600  pJob->StartTime.dwLowDateTime = LocalStartTime.u.LowPart;
601  pJob->StartTime.dwHighDateTime = LocalStartTime.u.HighPart;
602 }
#define DWORD_PTR
Definition: treelist.c:76
WORD wMonth
Definition: winbase.h:903
#define TRUE
Definition: types.h:120
WORD wDayOfWeek
Definition: winbase.h:904
DWORD dwHighDateTime
Definition: mapidefs.h:66
WORD wYear
Definition: winbase.h:902
ULONGLONG QuadPart
Definition: ms-dtyp.idl:185
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
#define FIXME(fmt,...)
Definition: debug.h:111
WORD wMinute
Definition: winbase.h:907
VOID WINAPI GetLocalTime(OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:286
#define TRACE(s)
Definition: solgame.cpp:4
uint64_t ULONGLONG
Definition: typedefs.h:67
#define CopyMemory
Definition: winbase.h:1665
unsigned short WORD
Definition: ntddk_ex.h:93
WORD wSecond
Definition: winbase.h:908
WORD wMilliseconds
Definition: winbase.h:909
uint32_t DWORD_PTR
Definition: typedefs.h:65
WORD wDay
Definition: winbase.h:905
BOOL WINAPI SystemTimeToFileTime(IN CONST SYSTEMTIME *lpSystemTime, OUT LPFILETIME lpFileTime)
Definition: time.c:158
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
WORD wHour
Definition: winbase.h:906
static WORD DaysOfMonth(WORD wMonth, WORD wYear)
Definition: job.c:455
struct _ULARGE_INTEGER::@3917 u
DWORD dwLowDateTime
Definition: mapidefs.h:65

Referenced by LoadJobs(), and NetrJobAdd().

◆ DeleteJob()

LONG DeleteJob ( PJOB  pJob)

◆ DumpStartList()

VOID DumpStartList ( _In_ PLIST_ENTRY  StartListHead)

Referenced by LoadJobs(), NetrJobAdd(), and NetrJobDel().

◆ GetNextJobTimeout()

VOID GetNextJobTimeout ( HANDLE  hTimer)

Definition at line 44 of file job.c.

45 {
46  PLIST_ENTRY CurrentEntry;
48  PJOB CurrentJob;
49 
51  CurrentEntry = JobListHead.Flink;
52  while (CurrentEntry != &JobListHead)
53  {
54  CurrentJob = CONTAINING_RECORD(CurrentEntry, JOB, JobEntry);
55 
57  {
58  CopyMemory(&NextJobStartTime, &CurrentJob->StartTime, sizeof(FILETIME));
60  }
61  else
62  {
63  if (CompareFileTime(&NextJobStartTime, &CurrentJob->StartTime) > 0)
64  CopyMemory(&NextJobStartTime, &CurrentJob->StartTime, sizeof(FILETIME));
65  }
66 
67  CurrentEntry = CurrentEntry->Flink;
68  }
69 
71  {
72  TRACE("No valid job!\n");
73  return;
74  }
75 
77 
78  SetWaitableTimer(hTimer,
80  0,
81  NULL,
82  NULL,
83  TRUE);
84 }
#define TRUE
Definition: types.h:120
LIST_ENTRY JobListHead
Definition: job.c:29
BOOL WINAPI LocalFileTimeToFileTime(IN CONST FILETIME *lpLocalFileTime, OUT LPFILETIME lpFileTime)
Definition: time.c:253
#define FALSE
Definition: types.h:117
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
BOOL bValidNextJobStartTime
Definition: job.c:35
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
#define TRACE(s)
Definition: solgame.cpp:4
LONG WINAPI CompareFileTime(IN CONST FILETIME *lpFileTime1, IN CONST FILETIME *lpFileTime2)
Definition: time.c:106
#define CopyMemory
Definition: winbase.h:1665
FILETIME StartTime
Definition: precomp.h:35
Definition: typedefs.h:119
#define NULL
Definition: types.h:112
_In_ WDFTIMER _In_ LONGLONG DueTime
Definition: wdftimer.h:187
BOOL WINAPI SetWaitableTimer(IN HANDLE hTimer, IN const LARGE_INTEGER *pDueTime, IN LONG lPeriod, IN PTIMERAPCROUTINE pfnCompletionRoutine OPTIONAL, IN OPTIONAL LPVOID lpArgToCompletionRoutine, IN BOOL fResume)
Definition: synch.c:382
Definition: precomp.h:31
FILETIME NextJobStartTime
Definition: job.c:34

Referenced by SchedServiceMain().

◆ InsertJobIntoStartList()

VOID InsertJobIntoStartList ( _In_ PLIST_ENTRY  StartListHead,
_In_ PJOB  pJob 
)

◆ LoadJobs()

LONG LoadJobs ( VOID  )

Definition at line 318 of file job.c.

319 {
320  SCHEDULE Schedule;
321  WCHAR szNameBuffer[JOB_NAME_LENGTH];
322  DWORD dwNameLength, dwIndex, dwSize;
323  HKEY hJobsKey = NULL, hJobKey = NULL;
324  PJOB pJob = NULL;
325  LONG lError;
326 
327  TRACE("LoadJobs()\n");
328 
330  L"System\\CurrentControlSet\\Services\\Schedule\\Jobs",
331  0,
332  NULL,
334  KEY_READ,
335  NULL,
336  &hJobsKey,
337  NULL);
338  if (lError != ERROR_SUCCESS)
339  goto done;
340 
341  for (dwIndex = 0; dwIndex < 1000; dwIndex++)
342  {
343  dwNameLength = JOB_NAME_LENGTH;
344  lError = RegEnumKeyEx(hJobsKey,
345  dwIndex,
346  szNameBuffer,
347  &dwNameLength,
348  NULL,
349  NULL,
350  NULL,
351  NULL);
352  if (lError != ERROR_SUCCESS)
353  {
354  lError = ERROR_SUCCESS;
355  break;
356  }
357 
358  TRACE("KeyName: %S\n", szNameBuffer);
359 
360  lError = RegOpenKeyEx(hJobsKey,
361  szNameBuffer,
362  0,
363  KEY_READ,
364  &hJobKey);
365  if (lError != ERROR_SUCCESS)
366  break;
367 
368  dwSize = sizeof(SCHEDULE);
369  lError = RegQueryValueEx(hJobKey,
370  L"Schedule",
371  NULL,
372  NULL,
373  (PBYTE)&Schedule,
374  &dwSize);
375  if (lError == ERROR_SUCCESS)
376  {
377  dwSize = 0;
378  RegQueryValueEx(hJobKey,
379  L"Command",
380  NULL,
381  NULL,
382  NULL,
383  &dwSize);
384  if (dwSize != 0)
385  {
386  /* Allocate a new job object */
387  pJob = HeapAlloc(GetProcessHeap(),
389  sizeof(JOB) + dwSize - sizeof(WCHAR));
390  if (pJob == NULL)
391  {
392  lError = ERROR_OUTOFMEMORY;
393  break;
394  }
395 
396  lError = RegQueryValueEx(hJobKey,
397  L"Command",
398  NULL,
399  NULL,
400  (PBYTE)pJob->Command,
401  &dwSize);
402  if (lError != ERROR_SUCCESS)
403  break;
404 
405  wcscpy(pJob->Name, szNameBuffer);
406  pJob->JobTime = Schedule.JobTime;
407  pJob->DaysOfMonth = Schedule.DaysOfMonth;
408  pJob->DaysOfWeek = Schedule.DaysOfWeek;
409  pJob->Flags = Schedule.Flags;
410 
411  /* Acquire the job list lock exclusively */
413 
414  /* Assign a new job ID */
415  pJob->JobId = dwNextJobId++;
416  dwJobCount++;
417 
418  /* Append the new job to the job list */
420 
421  /* Calculate the next start time */
423 
424 #if 0
426 #endif
427 
428  /* Release the job list lock */
430 
431  pJob = NULL;
432  }
433  }
434 
435  RegCloseKey(hJobKey);
436  hJobKey = NULL;
437  }
438 
439 done:
440  if (pJob != NULL)
441  HeapFree(GetProcessHeap(), 0, pJob);
442 
443  if (hJobKey != NULL)
444  RegCloseKey(hJobKey);
445 
446  if (hJobsKey != NULL)
447  RegCloseKey(hJobsKey);
448 
449  return lError;
450 }
#define RegQueryValueEx
Definition: winreg.h:524
LIST_ENTRY JobEntry
Definition: precomp.h:33
RTL_RESOURCE JobListLock
Definition: job.c:30
DWORD JobId
Definition: precomp.h:38
#define ERROR_SUCCESS
Definition: deptool.c:10
#define KEY_READ
Definition: nt_native.h:1023
#define TRUE
Definition: types.h:120
UCHAR DaysOfWeek
Definition: job.c:22
WCHAR Name[JOB_NAME_LENGTH]
Definition: precomp.h:36
#define InsertTailList(ListHead, Entry)
LIST_ENTRY StartListHead
Definition: job.c:32
VOID DumpStartList(_In_ PLIST_ENTRY StartListHead)
WCHAR Command[1]
Definition: precomp.h:43
NTSYSAPI VOID NTAPI RtlReleaseResource(_In_ PRTL_RESOURCE Resource)
LIST_ENTRY JobListHead
Definition: job.c:29
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1091
#define L(x)
Definition: ntvdm.h:50
UCHAR Flags
Definition: precomp.h:42
long LONG
Definition: pedump.c:60
DWORD_PTR JobTime
Definition: precomp.h:39
#define REG_OPTION_NON_VOLATILE
Definition: nt_native.h:1057
UCHAR DaysOfWeek
Definition: precomp.h:41
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
struct _SCHEDULE SCHEDULE
unsigned long DWORD
Definition: ntddk_ex.h:95
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define RegEnumKeyEx
Definition: winreg.h:510
UCHAR Flags
Definition: job.c:23
#define RegOpenKeyEx
Definition: winreg.h:520
DWORD JobTime
Definition: job.c:20
#define JOB_NAME_LENGTH
Definition: precomp.h:23
DWORD dwJobCount
Definition: job.c:28
#define NULL
Definition: types.h:112
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
Definition: job.c:18
DWORD DaysOfMonth
Definition: precomp.h:40
DWORD dwNextJobId
Definition: job.c:27
VOID CalculateNextStartTime(_In_ PJOB pJob)
Definition: job.c:467
DWORD DaysOfMonth
Definition: job.c:21
BYTE * PBYTE
Definition: pedump.c:66
Definition: precomp.h:31
#define HeapFree(x, y, z)
Definition: compat.h:594
#define RegCloseKey(hKey)
Definition: registry.h:47
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define ERROR_OUTOFMEMORY
Definition: deptool.c:13
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
NTSYSAPI BOOLEAN NTAPI RtlAcquireResourceExclusive(_In_ PRTL_RESOURCE Resource, _In_ BOOLEAN Wait)

Referenced by ServiceInit().

◆ RpcThreadRoutine()

DWORD WINAPI RpcThreadRoutine ( LPVOID  lpParameter)

Definition at line 20 of file rpcserver.c.

22 {
24 
25  Status = RpcServerUseProtseqEpW(L"ncacn_np", 20, L"\\pipe\\browser", NULL);
26  if (Status != RPC_S_OK)
27  {
28  ERR("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status);
29  return 0;
30  }
31 
32  Status = RpcServerRegisterIf(browser_v0_0_s_ifspec, NULL, NULL);
33  if (Status != RPC_S_OK)
34  {
35  ERR("RpcServerRegisterIf() failed (Status %lx)\n", Status);
36  return 0;
37  }
38 
40  if (Status != RPC_S_OK)
41  {
42  ERR("RpcServerListen() failed (Status %lx)\n", Status);
43  }
44 
45  return 0;
46 }
long RPC_STATUS
Definition: rpc.h:52
#define L(x)
Definition: ntvdm.h:50
#define FALSE
Definition: types.h:117
RPC_STATUS WINAPI RpcServerListen(UINT MinimumCallThreads, UINT MaxCalls, UINT DontWait)
Definition: rpc_server.c:1520
#define RPC_C_LISTEN_MAX_CALLS_DEFAULT
Definition: rpcdce.h:122
Status
Definition: gdiplustypes.h:24
RPC_STATUS WINAPI RpcServerRegisterIf(RPC_IF_HANDLE IfSpec, UUID *MgrTypeUuid, RPC_MGR_EPV *MgrEpv)
Definition: rpc_server.c:1116
RPC_STATUS WINAPI RpcServerUseProtseqEpW(RPC_WSTR Protseq, UINT MaxCalls, RPC_WSTR Endpoint, LPVOID SecurityDescriptor)
Definition: rpc_server.c:927
#define ERR(fmt,...)
Definition: debug.h:110
#define NULL
Definition: types.h:112
#define RPC_S_OK
Definition: rpcnterr.h:22

◆ RtlRandomEx()

NTSYSAPI ULONG NTAPI RtlRandomEx ( PULONG  Seed)

Referenced by get_uuid(), and GetJobName().

◆ RunCurrentJobs()

VOID RunCurrentJobs ( VOID  )

Definition at line 122 of file job.c.

123 {
124  PROCESS_INFORMATION ProcessInformation;
125  STARTUPINFOW StartupInfo;
126  PLIST_ENTRY CurrentEntry;
127  PJOB CurrentJob;
128  BOOL bRet;
129 
130  CurrentEntry = JobListHead.Flink;
131  while (CurrentEntry != &JobListHead)
132  {
133  CurrentJob = CONTAINING_RECORD(CurrentEntry, JOB, JobEntry);
134 
135  if (CompareFileTime(&NextJobStartTime, &CurrentJob->StartTime) == 0)
136  {
137  TRACE("Run job %ld: %S\n", CurrentJob->JobId, CurrentJob->Command);
138 
139  ZeroMemory(&StartupInfo, sizeof(StartupInfo));
140  StartupInfo.cb = sizeof(StartupInfo);
141  StartupInfo.lpTitle = CurrentJob->Command;
142  StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
143  StartupInfo.wShowWindow = SW_SHOWDEFAULT;
144 
145  if ((CurrentJob->Flags & JOB_NONINTERACTIVE) == 0)
146  {
147  StartupInfo.dwFlags |= STARTF_INHERITDESKTOP;
148  StartupInfo.lpDesktop = L"WinSta0\\Default";
149  }
150 
151  bRet = CreateProcessW(NULL,
152  CurrentJob->Command,
153  NULL,
154  NULL,
155  FALSE,
157  NULL,
158  NULL,
159  &StartupInfo,
160  &ProcessInformation);
161  if (bRet == FALSE)
162  {
163  ERR("CreateProcessW() failed (Error %lu)\n", GetLastError());
164  }
165  else
166  {
167  CloseHandle(ProcessInformation.hThread);
168  CloseHandle(ProcessInformation.hProcess);
169  }
170  }
171 
172  CurrentEntry = CurrentEntry->Flink;
173  }
174 }
DWORD JobId
Definition: precomp.h:38
#define SW_SHOWDEFAULT
Definition: winuser.h:774
#define CloseHandle
Definition: compat.h:598
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
#define ZeroMemory
Definition: winbase.h:1667
WCHAR Command[1]
Definition: precomp.h:43
LIST_ENTRY JobListHead
Definition: job.c:29
#define L(x)
Definition: ntvdm.h:50
UCHAR Flags
Definition: precomp.h:42
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
LPWSTR lpDesktop
Definition: winbase.h:851
#define STARTF_INHERITDESKTOP
Definition: undocuser.h:163
LPWSTR lpTitle
Definition: winbase.h:852
#define STARTF_USESHOWWINDOW
Definition: winbase.h:488
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation)
Definition: proc.c:4594
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
#define TRACE(s)
Definition: solgame.cpp:4
#define CREATE_NEW_CONSOLE
Definition: winbase.h:180
LONG WINAPI CompareFileTime(IN CONST FILETIME *lpFileTime1, IN CONST FILETIME *lpFileTime2)
Definition: time.c:106
DWORD cb
Definition: winbase.h:849
#define JOB_NONINTERACTIVE
Definition: lmat.h:11
FILETIME StartTime
Definition: precomp.h:35
WORD wShowWindow
Definition: winbase.h:861
Definition: typedefs.h:119
#define ERR(fmt,...)
Definition: debug.h:110
#define NULL
Definition: types.h:112
DWORD dwFlags
Definition: winbase.h:860
Definition: precomp.h:31
FILETIME NextJobStartTime
Definition: job.c:34

Referenced by SchedServiceMain().

◆ SaveJob()

LONG SaveJob ( PJOB  pJob)

Variable Documentation

◆ dwJobCount

DWORD dwJobCount

Definition at line 28 of file job.c.

Referenced by LoadJobs(), NetrJobAdd(), NetrJobDel(), and NetrJobEnum().

◆ dwNextJobId

DWORD dwNextJobId

Definition at line 27 of file job.c.

Referenced by LoadJobs(), and NetrJobAdd().

◆ Events

◆ JobListHead

◆ JobListLock

RTL_RESOURCE JobListLock

◆ StartListHead

LIST_ENTRY StartListHead

Definition at line 32 of file job.c.

Referenced by LoadJobs(), NetrJobAdd(), NetrJobDel(), and ServiceInit().

◆ StartListLock

RTL_RESOURCE StartListLock

Definition at line 33 of file job.c.

Referenced by ServiceInit().