1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef TIMEPROV_H
7 #define TIMEPROV_H
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 #define wszW32TimeRegKeyTimeProviders L"System\\CurrentControlSet\\Services\\W32Time\\TimeProviders"
14 #define wszW32TimeRegKeyPolicyTimeProviders L"Software\\Policies\\Microsoft\\W32Time\\TimeProviders"
15 #define wszW32TimeRegValueEnabled L"Enabled"
16 #define wszW32TimeRegValueDllName L"DllName"
17 #define wszW32TimeRegValueInputProvider L"InputProvider"
18 
19 #define TSF_Hardware 0x00000001
20 #define TSF_Authenticated 0x00000002
21 
22   typedef enum TimeProvCmd {
23     TPC_TimeJumped,TPC_UpdateConfig,TPC_PollIntervalChanged,TPC_GetSamples,TPC_NetTopoChange,TPC_Query,TPC_Shutdown
24   } TimeProvCmd;
25 
26   typedef enum TimeSysInfo {
27     TSI_LastSyncTime,TSI_ClockTickSize,TSI_ClockPrecision,TSI_CurrentTime,TSI_PhaseOffset,TSI_TickCount,TSI_LeapFlags,TSI_Stratum,
28     TSI_ReferenceIdentifier,TSI_PollInterval,TSI_RootDelay,TSI_RootDispersion,TSI_TSFlags
29   } TimeSysInfo;
30 
31   typedef enum TimeJumpedFlags {
32     TJF_Default=0,TJF_UserRequested=1
33   } TimeJumpedFlags;
34 
35   typedef enum NetTopoChangeFlags {
36     NTC_Default=0,NTC_UserRequested=1
37   } NetTopoChangeFlags;
38 
39   typedef enum TimeProvState {
40     TPS_Running,TPS_Error
41   } TimeProvState;
42 
43   struct SetProviderStatusInfo;
44 
45   typedef void (WINAPI SetProviderStatusInfoFreeFunc)(struct SetProviderStatusInfo *pspsi);
46 
47   typedef struct SetProviderStatusInfo {
48     TimeProvState tpsCurrentState;
49     DWORD dwStratum;
50     LPWSTR wszProvName;
51     HANDLE hWaitEvent;
52     SetProviderStatusInfoFreeFunc *pfnFree;
53     HRESULT *pHr;
54     DWORD *pdwSysStratum;
55   } SetProviderStatusInfo;
56 
57   typedef HRESULT (WINAPI GetTimeSysInfoFunc)(TimeSysInfo eInfo,void *pvInfo);
58   typedef HRESULT (WINAPI LogTimeProvEventFunc)(WORD wType,WCHAR *wszProvName,WCHAR *wszMessage);
59   typedef HRESULT (WINAPI AlertSamplesAvailFunc)(void);
60   typedef HRESULT (WINAPI SetProviderStatusFunc)(SetProviderStatusInfo *pspsi);
61 
62   typedef struct TimeProvSysCallbacks {
63     DWORD dwSize;
64     GetTimeSysInfoFunc *pfnGetTimeSysInfo;
65     LogTimeProvEventFunc *pfnLogTimeProvEvent;
66     AlertSamplesAvailFunc *pfnAlertSamplesAvail;
67     SetProviderStatusFunc *pfnSetProviderStatus;
68   } TimeProvSysCallbacks;
69 
70   typedef void *TimeProvArgs;
71 
72   typedef struct TimeSample {
73     DWORD dwSize;
74     DWORD dwRefid;
75     __MINGW_EXTENSION signed __int64 toOffset;
76     __MINGW_EXTENSION signed __int64 toDelay;
77     __MINGW_EXTENSION unsigned __int64 tpDispersion;
78     __MINGW_EXTENSION unsigned __int64 nSysTickCount;
79     __MINGW_EXTENSION signed __int64 nSysPhaseOffset;
80     BYTE nLeapFlags;
81     BYTE nStratum;
82     DWORD dwTSFlags;
83     WCHAR wszUniqueName[256];
84   } TimeSample;
85 
86   typedef struct TpcGetSamplesArgs {
87     BYTE *pbSampleBuf;
88     DWORD cbSampleBuf;
89     DWORD dwSamplesReturned;
90     DWORD dwSamplesAvailable;
91   } TpcGetSamplesArgs;
92 
93   typedef struct TpcTimeJumpedArgs {
94     TimeJumpedFlags tjfFlags;
95   } TpcTimeJumpedArgs;
96 
97   typedef struct TpcNetTopoChangeArgs {
98     NetTopoChangeFlags ntcfFlags;
99   } TpcNetTopoChangeArgs;
100 
101   typedef void *TimeProvHandle;
102 
103   HRESULT WINAPI TimeProvOpen(WCHAR *wszName,TimeProvSysCallbacks *pSysCallbacks,TimeProvHandle *phTimeProv);
104   HRESULT WINAPI TimeProvCommand(TimeProvHandle hTimeProv,TimeProvCmd eCmd,TimeProvArgs pvArgs);
105   HRESULT WINAPI TimeProvClose(TimeProvHandle hTimeProv);
106 
107 #ifdef __cplusplus
108 }
109 #endif
110 #endif
111