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