timeprov.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11. #define wszW32TimeRegKeyTimeProviders L"System\\CurrentControlSet\\Services\\W32Time\\TimeProviders"
  12. #define wszW32TimeRegKeyPolicyTimeProviders L"Software\\Policies\\Microsoft\\W32Time\\TimeProviders"
  13. #define wszW32TimeRegValueEnabled L"Enabled"
  14. #define wszW32TimeRegValueDllName L"DllName"
  15. #define wszW32TimeRegValueInputProvider L"InputProvider"
  16. #define TSF_Hardware 0x00000001
  17. #define TSF_Authenticated 0x00000002
  18. typedef enum TimeProvCmd {
  19. TPC_TimeJumped,TPC_UpdateConfig,TPC_PollIntervalChanged,TPC_GetSamples,TPC_NetTopoChange,TPC_Query,TPC_Shutdown
  20. } TimeProvCmd;
  21. typedef enum TimeSysInfo {
  22. TSI_LastSyncTime,TSI_ClockTickSize,TSI_ClockPrecision,TSI_CurrentTime,TSI_PhaseOffset,TSI_TickCount,TSI_LeapFlags,TSI_Stratum,
  23. TSI_ReferenceIdentifier,TSI_PollInterval,TSI_RootDelay,TSI_RootDispersion,TSI_TSFlags
  24. } TimeSysInfo;
  25. typedef enum TimeJumpedFlags {
  26. TJF_Default=0,TJF_UserRequested=1
  27. } TimeJumpedFlags;
  28. typedef enum NetTopoChangeFlags {
  29. NTC_Default=0,NTC_UserRequested=1
  30. } NetTopoChangeFlags;
  31. typedef enum TimeProvState {
  32. TPS_Running,TPS_Error
  33. } TimeProvState;
  34. struct SetProviderStatusInfo;
  35. typedef void (WINAPI SetProviderStatusInfoFreeFunc)(struct SetProviderStatusInfo *pspsi);
  36. typedef struct SetProviderStatusInfo {
  37. TimeProvState tpsCurrentState;
  38. DWORD dwStratum;
  39. LPWSTR wszProvName;
  40. HANDLE hWaitEvent;
  41. SetProviderStatusInfoFreeFunc *pfnFree;
  42. HRESULT *pHr;
  43. DWORD *pdwSysStratum;
  44. } SetProviderStatusInfo;
  45. typedef HRESULT (WINAPI GetTimeSysInfoFunc)(TimeSysInfo eInfo,void *pvInfo);
  46. typedef HRESULT (WINAPI LogTimeProvEventFunc)(WORD wType,WCHAR *wszProvName,WCHAR *wszMessage);
  47. typedef HRESULT (WINAPI AlertSamplesAvailFunc)(void);
  48. typedef HRESULT (WINAPI SetProviderStatusFunc)(SetProviderStatusInfo *pspsi);
  49. typedef struct TimeProvSysCallbacks {
  50. DWORD dwSize;
  51. GetTimeSysInfoFunc *pfnGetTimeSysInfo;
  52. LogTimeProvEventFunc *pfnLogTimeProvEvent;
  53. AlertSamplesAvailFunc *pfnAlertSamplesAvail;
  54. SetProviderStatusFunc *pfnSetProviderStatus;
  55. } TimeProvSysCallbacks;
  56. typedef void *TimeProvArgs;
  57. typedef struct TimeSample {
  58. DWORD dwSize;
  59. DWORD dwRefid;
  60. __MINGW_EXTENSION signed __int64 toOffset;
  61. __MINGW_EXTENSION signed __int64 toDelay;
  62. __MINGW_EXTENSION unsigned __int64 tpDispersion;
  63. __MINGW_EXTENSION unsigned __int64 nSysTickCount;
  64. __MINGW_EXTENSION signed __int64 nSysPhaseOffset;
  65. BYTE nLeapFlags;
  66. BYTE nStratum;
  67. DWORD dwTSFlags;
  68. WCHAR wszUniqueName[256];
  69. } TimeSample;
  70. typedef struct TpcGetSamplesArgs {
  71. BYTE *pbSampleBuf;
  72. DWORD cbSampleBuf;
  73. DWORD dwSamplesReturned;
  74. DWORD dwSamplesAvailable;
  75. } TpcGetSamplesArgs;
  76. typedef struct TpcTimeJumpedArgs {
  77. TimeJumpedFlags tjfFlags;
  78. } TpcTimeJumpedArgs;
  79. typedef struct TpcNetTopoChangeArgs {
  80. NetTopoChangeFlags ntcfFlags;
  81. } TpcNetTopoChangeArgs;
  82. typedef void *TimeProvHandle;
  83. HRESULT WINAPI TimeProvOpen(WCHAR *wszName,TimeProvSysCallbacks *pSysCallbacks,TimeProvHandle *phTimeProv);
  84. HRESULT WINAPI TimeProvCommand(TimeProvHandle hTimeProv,TimeProvCmd eCmd,TimeProvArgs pvArgs);
  85. HRESULT WINAPI TimeProvClose(TimeProvHandle hTimeProv);
  86. #ifdef __cplusplus
  87. }
  88. #endif
  89. #endif