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