TimeProv.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:8k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //--------------------------------------------------------------------
  2. // TimeProv - header
  3. // Copyright (C) Microsoft Corporation, 1999
  4. //
  5. // Created by: Louis Thomas (louisth), 9-2-99
  6. //
  7. // Definitions for time providers
  8. //
  9. #ifndef TIMEPROV_H
  10. #define TIMEPROV_H
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14. //--------------------------------------------------------------------
  15. // Registry keys and values
  16. // Each time provider should create their own subkey under this key
  17. //  and store their configuration there.
  18. #define wszW32TimeRegKeyTimeProviders      L"System\CurrentControlSet\Services\W32Time\TimeProviders"
  19. // Path:    ...TimeProviders<PrividerName>Enabled 
  20. // Type:    REG_DWORD (cast to BOOL)
  21. // Meaning: If true, this provider will be started by the time service.
  22. #define wszW32TimeRegValueEnabled          L"Enabled"
  23. // Path:    ...TimeProviders<PrividerName>DllName 
  24. // Type:    REG_SZ
  25. // Meaning: The dll that contains the provider. The time service will 
  26. //          call LoadLibrary on this value.
  27. #define wszW32TimeRegValueDllName          L"DllName"
  28. // Path:    ...TimeProviders<PrividerName>InputProvider 
  29. // Type:    REG_DWORD (cast to BOOL)
  30. // Meaning: If true, this provider is an input provider, and will be
  31. //          called upon to return time samples. If false, this provider
  32. //          is an output provider.
  33. #define wszW32TimeRegValueInputProvider    L"InputProvider"
  34. //--------------------------------------------------------------------
  35. // types
  36. // Time Source Flags
  37. #define TSF_Hardware        0x00000001
  38. #define TSF_Authenticated   0x00000002
  39. // commands that can be issued through TimeProvCommand
  40. typedef enum TimeProvCmd {
  41.     TPC_TimeJumped,         // (TpcTimeJumpedArgs *)pvArgs
  42.     TPC_UpdateConfig,       // (void)pvArgs
  43.     TPC_PollIntervalChanged,// (void)pvArgs
  44.     TPC_GetSamples,         // (TpcGetSamplesArgs *)pvArgs
  45.     TPC_NetTopoChange,      // (TpcNetTopoChangeArgs *)pvArgs
  46.     TPC_Query,              // (W32TIME_PROVIDER_STATUS *)pvArgs
  47.     TPC_Shutdown,           // (void)pvArgs
  48. } TimeProvCmd;
  49. // info that can be requested through GetTimeSysInfo
  50. typedef enum TimeSysInfo {
  51.     TSI_LastSyncTime,   // (unsigned __int64 *)pvInfo, NtTimeEpoch, in (10^-7)s
  52.     TSI_ClockTickSize,  // (unsigned __int64 *)pvInfo, NtTimePeriod, in (10^-7)s
  53.     TSI_ClockPrecision, // (  signed __int32 *)pvInfo, ClockTickSize, in log2(s)
  54.     TSI_CurrentTime,    // (unsigned __int64 *)pvInfo, NtTimeEpoch, in (10^-7)s
  55.     TSI_PhaseOffset,    // (  signed __int64 *)pvInfo, opaque
  56.     TSI_TickCount,      // (unsigned __int64 *)pvInfo, opaque
  57.     TSI_LeapFlags,      // (            BYTE *)pvInfo, a warning of an impending leap second or loss of synchronization
  58.     TSI_Stratum,        // (            BYTE *)pvInfo, how far away the computer is from a reference source
  59.     TSI_ReferenceIdentifier, // (      DWORD *)pvInfo, NtpRefId
  60.     TSI_PollInterval,   // (  signed __int32 *)pvInfo, poll interval, in log2(s)
  61.     TSI_RootDelay,      // (  signed __int64 *)pvInfo, NtTimeOffset, in (10^-7)s
  62.     TSI_RootDispersion, // (unsigned __int64 *)pvInfo, NtTimePeriod, in (10^-7)s
  63.     TSI_TSFlags,        // (           DWORD *)pvInfo, Time source flags
  64. } TimeSysInfo;
  65. // flags which provide information about a time jump
  66. typedef enum TimeJumpedFlags { 
  67.     TJF_Default=0, 
  68.     TJF_UserRequested=1,
  69. }; 
  70. // flags which provide information about a network topography change
  71. typedef enum NetTopoChangeFlags { 
  72.     NTC_Default=0,
  73.     NTC_UserRequested=1,
  74. };
  75. typedef enum TimeProvState { 
  76.     TPS_Running, 
  77.     TPS_Error,
  78. } TimeProvState; 
  79. struct SetProviderStatusInfo; 
  80. typedef void (__stdcall 
  81.          SetProviderStatusInfoFreeFunc)
  82.          (IN struct SetProviderStatusInfo *pspsi); 
  83. // parameter to SetProviderStatusFunc
  84. typedef struct SetProviderStatusInfo { 
  85.     TimeProvState                    tpsCurrentState;  // IN   the new state of the provider.  
  86.     DWORD                            dwStratum;        // IN   the new stratum of the provider.
  87.     LPWSTR                           wszProvName;      // IN   the name of the provider who's status should be adjusted
  88.     HANDLE                           hWaitEvent;       // IN   the event to signal when the operation is complete, NULL if notification is not needed
  89.     SetProviderStatusInfoFreeFunc   *pfnFree;          // IN   function used to free the struct on completion
  90.     HRESULT                         *pHr;              // OUT  on completion, set to the result of the operation
  91.     DWORD                           *pdwSysStratum;    // OUT  on completion, set to the new system stratum 
  92. } SetProviderStatusInfo; 
  93.   
  94. // Time Service provided callback to get system state information
  95. typedef HRESULT (__stdcall 
  96.          GetTimeSysInfoFunc)(
  97.             IN TimeSysInfo eInfo,
  98.             OUT void * pvInfo
  99.             );
  100. // Time Service provided callback to log an event on behalf of the Time Provider.
  101. typedef HRESULT (__stdcall 
  102.          LogTimeProvEventFunc)(
  103.             IN WORD wType,
  104.             IN WCHAR * wszProvName,
  105.             IN WCHAR * wszMessage);
  106. // Time Service provided callback to inform the system of newly available samples
  107. typedef HRESULT (__stdcall 
  108.          AlertSamplesAvailFunc)(
  109.             void
  110.             );
  111.   // Time Service provided callback to set the provider's stratum
  112. typedef HRESULT (__stdcall SetProviderStatusFunc)
  113.          (IN SetProviderStatusInfo *pspsi);
  114. // All the callbacsk provided by the Time Service to the Time Provider.
  115. typedef struct TimeProvSysCallbacks {
  116.     DWORD dwSize;
  117.     GetTimeSysInfoFunc * pfnGetTimeSysInfo;
  118.     LogTimeProvEventFunc * pfnLogTimeProvEvent;
  119.     AlertSamplesAvailFunc * pfnAlertSamplesAvail;
  120.     SetProviderStatusFunc * pfnSetProviderStatus; 
  121. } TimeProvSysCallbacks;
  122. typedef void * TimeProvArgs;
  123. typedef struct TimeSample {
  124.     DWORD dwSize;                       // size of this structure
  125.     DWORD dwRefid;                      // NtpRefId
  126.       signed __int64 toOffset;          // NtTimeOffset, in (10^-7)s - difference between local and remote clocks
  127.       signed __int64 toDelay;           // NtTimeOffset, in (10^-7)s - round trip delay; time packets spent in flight, INCLUDING root delay
  128.     unsigned __int64 tpDispersion;      // NtTimePeriod, in (10^-7)s - measurement error, INCLUDING root dispersion
  129.     unsigned __int64 nSysTickCount;     // opaque, must be GetTimeSysInfo(TSI_TickCount)
  130.       signed __int64 nSysPhaseOffset;   // opaque, must be GetTimeSysInfo(TSI_PhaseOffset)
  131.     BYTE nLeapFlags;                    // a warning of an impending leap second or loss of synchronization
  132.     BYTE nStratum;                      // how far away the computer is from a reference source
  133.     DWORD dwTSFlags;                    // time source flags
  134.     WCHAR wszUniqueName[256];           // Admin readable name that uniquely identifies this peer
  135. } TimeSample;
  136. typedef struct TpcGetSamplesArgs {
  137.     BYTE * pbSampleBuf;
  138.     DWORD cbSampleBuf;
  139.     DWORD dwSamplesReturned;
  140.     DWORD dwSamplesAvailable;
  141. } TpcGetSamplesArgs;
  142. typedef struct TpcTimeJumpedArgs { 
  143.     TimeJumpedFlags tjfFlags; 
  144. } TpcTimeJumpedArgs;
  145. typedef struct TpcNetTopoChangeArgs { 
  146.     NetTopoChangeFlags ntcfFlags;
  147. } TpcNetTopoChangeArgs; 
  148. // An opaque handle to a Time Provider used by the Time Service to identify an
  149. //  opened Provider in a dll. NULL is considered an invalid value.
  150. typedef void * TimeProvHandle;
  151. //--------------------------------------------------------------------
  152. // functions that a Time Provider must implement and export
  153. HRESULT __stdcall
  154.     TimeProvOpen(
  155.         IN WCHAR * wszName,
  156.         IN TimeProvSysCallbacks * pSysCallbacks,  // copy this data, do not free it!
  157.         OUT TimeProvHandle * phTimeProv);
  158. HRESULT __stdcall
  159.     TimeProvCommand(
  160.         IN TimeProvHandle hTimeProv,
  161.         IN TimeProvCmd eCmd,
  162.         IN TimeProvArgs pvArgs);
  163. HRESULT __stdcall
  164.     TimeProvClose(
  165.         IN TimeProvHandle hTimeProv);
  166. #ifdef __cplusplus
  167. } // <- end extern "C"
  168. #endif
  169. #endif //TIMEPROV_H