/** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #ifndef TIMEPROV_H #define TIMEPROV_H #ifdef __cplusplus extern "C" { #endif #define wszW32TimeRegKeyTimeProviders L"System\\CurrentControlSet\\Services\\W32Time\\TimeProviders" #define wszW32TimeRegKeyPolicyTimeProviders L"Software\\Policies\\Microsoft\\W32Time\\TimeProviders" #define wszW32TimeRegValueEnabled L"Enabled" #define wszW32TimeRegValueDllName L"DllName" #define wszW32TimeRegValueInputProvider L"InputProvider" #define TSF_Hardware 0x00000001 #define TSF_Authenticated 0x00000002 typedef enum TimeProvCmd { TPC_TimeJumped,TPC_UpdateConfig,TPC_PollIntervalChanged,TPC_GetSamples,TPC_NetTopoChange,TPC_Query,TPC_Shutdown } TimeProvCmd; typedef enum TimeSysInfo { TSI_LastSyncTime,TSI_ClockTickSize,TSI_ClockPrecision,TSI_CurrentTime,TSI_PhaseOffset,TSI_TickCount,TSI_LeapFlags,TSI_Stratum, TSI_ReferenceIdentifier,TSI_PollInterval,TSI_RootDelay,TSI_RootDispersion,TSI_TSFlags } TimeSysInfo; typedef enum TimeJumpedFlags { TJF_Default=0,TJF_UserRequested=1 } TimeJumpedFlags; typedef enum NetTopoChangeFlags { NTC_Default=0,NTC_UserRequested=1 } NetTopoChangeFlags; typedef enum TimeProvState { TPS_Running,TPS_Error } TimeProvState; struct SetProviderStatusInfo; typedef void (WINAPI SetProviderStatusInfoFreeFunc)(struct SetProviderStatusInfo *pspsi); typedef struct SetProviderStatusInfo { TimeProvState tpsCurrentState; DWORD dwStratum; LPWSTR wszProvName; HANDLE hWaitEvent; SetProviderStatusInfoFreeFunc *pfnFree; HRESULT *pHr; DWORD *pdwSysStratum; } SetProviderStatusInfo; typedef HRESULT (WINAPI GetTimeSysInfoFunc)(TimeSysInfo eInfo,void *pvInfo); typedef HRESULT (WINAPI LogTimeProvEventFunc)(WORD wType,WCHAR *wszProvName,WCHAR *wszMessage); typedef HRESULT (WINAPI AlertSamplesAvailFunc)(void); typedef HRESULT (WINAPI SetProviderStatusFunc)(SetProviderStatusInfo *pspsi); typedef struct TimeProvSysCallbacks { DWORD dwSize; GetTimeSysInfoFunc *pfnGetTimeSysInfo; LogTimeProvEventFunc *pfnLogTimeProvEvent; AlertSamplesAvailFunc *pfnAlertSamplesAvail; SetProviderStatusFunc *pfnSetProviderStatus; } TimeProvSysCallbacks; typedef void *TimeProvArgs; typedef struct TimeSample { DWORD dwSize; DWORD dwRefid; __MINGW_EXTENSION signed __int64 toOffset; __MINGW_EXTENSION signed __int64 toDelay; __MINGW_EXTENSION unsigned __int64 tpDispersion; __MINGW_EXTENSION unsigned __int64 nSysTickCount; __MINGW_EXTENSION signed __int64 nSysPhaseOffset; BYTE nLeapFlags; BYTE nStratum; DWORD dwTSFlags; WCHAR wszUniqueName[256]; } TimeSample; typedef struct TpcGetSamplesArgs { BYTE *pbSampleBuf; DWORD cbSampleBuf; DWORD dwSamplesReturned; DWORD dwSamplesAvailable; } TpcGetSamplesArgs; typedef struct TpcTimeJumpedArgs { TimeJumpedFlags tjfFlags; } TpcTimeJumpedArgs; typedef struct TpcNetTopoChangeArgs { NetTopoChangeFlags ntcfFlags; } TpcNetTopoChangeArgs; typedef void *TimeProvHandle; HRESULT WINAPI TimeProvOpen(WCHAR *wszName,TimeProvSysCallbacks *pSysCallbacks,TimeProvHandle *phTimeProv); HRESULT WINAPI TimeProvCommand(TimeProvHandle hTimeProv,TimeProvCmd eCmd,TimeProvArgs pvArgs); HRESULT WINAPI TimeProvClose(TimeProvHandle hTimeProv); #ifdef __cplusplus } #endif #endif