| 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 |