|
|
//--------------------------------------------------------------------
// w32timep - interface
//
// Copyright (C) Microsoft Corporation, 2000
//
// Created by: Duncan Bryce (duncanb), 12-07-00
//
// Contains methods to configure or query the windows time service
//
#ifndef __W32TIMEP_H__
#define __W32TIMEP_H__ 1
#ifdef __cplusplus
extern "C" { #endif
//-------------------------------------------------------------------------------------
// Configurable / queryable properties for the windows time service:
//
#ifndef MIDL_PASS
#define W32TIME_CONFIG_SPECIAL_POLL_INTERVAL 0
#define W32TIME_CONFIG_MANUAL_PEER_LIST 1
#endif // MIDL_PASS
//-------------------------------------------------------------------------------------
// W32TimeQueryConfig
//
// Queries configuration information for the windows time service. The semantics
// of the parameters depend on which property is being query:
//
// dwProperty: W32TIME_CONFIG_SPECIAL_POLL_INTERVAL
// pdwType: REG_DWORD
// pbConfig: a DWORD-sized buffer, containing the special polling interval (in seconds).
// The special polling interval can be specified as an alternative to
// using the standard, automatically-computed polling intervals specified by
// NTP. NOTE: The special polling interval applies only to microsoft time
// providers.
// pdwSize: sizeof(DWORD)
//
//
// dwProperty: W32TIME_CONFIG_MANUAL_PEER_LIST
// pdwType: REG_SZ
// pbConfig: a space-delimited unicode string containing the list of time sources which the
// microsoft time providers should sync from. Each is an IP address
// or DNS name of an NTP server, optionally followed by a "flags" parameter.
// For example:
//
// time.windows.com,0x3 gproxy,0x2 ntdsdc9
//
// The following flags are available:
//
// 0x1 -- use the special polling interval for this source, instead of the
// standard NTP polling
// 0x2 -- use this source only when no domain hierarchy sources are available
//
// pdwSize: sizeof(WCHAR) * (wcslen(pbConfig) + 1)
//
#ifndef MIDL_PASS
HRESULT W32TimeQueryConfig(IN DWORD dwProperty, OUT DWORD *pdwType, IN OUT BYTE *pbConfig, IN OUT DWORD *pdwSize); #endif // MIDL_PASS
//-------------------------------------------------------------------------------------
// W32TimeSetConfig
//
// Sets configuration information for the windows time service. The semantics
// of the parameters depend on which property is being query. For a description
// of the properties, see W32TimeQueryConfig().
//
#ifndef MIDL_PASS
HRESULT W32TimeSetConfig(IN DWORD dwProperty, IN DWORD dwType, IN BYTE *pbConfig, IN DWORD dwSize); #endif // MIDL_PASS
//-------------------------------------------------------------------------------------
//
// Client-side wrappers for the w32time RPC interface
//
//-------------------------------------------------------------------------------------
#ifndef MIDL_PASS
#define TimeSyncFlag_SoftResync 0x00
#define TimeSyncFlag_HardResync 0x01
#define TimeSyncFlag_ReturnResult 0x02
#define TimeSyncFlag_Rediscover 0x04
#define TimeSyncFlag_UpdateAndResync 0x08
#define ResyncResult_Success 0x00
#define ResyncResult_NoData 0x01
#define ResyncResult_StaleData 0x02
#define ResyncResult_Shutdown 0x03
#define ResyncResult_ChangeTooBig 0x04
#endif // MIDL_PASS
//-------------------------------------------------------------------------------------
// W32TimeSyncNow
//
// Sends an RPC request to the windows time service to attempt to synchronize time with
// its configured time sources.
//
// wszServer: The name of the computer which should resync.
// ulWaitFlag: if 0 is specified, the call will be asynchronous. Passing non-zero value
// causes the call to block until time synchronization completes, or fails.
// ulFlags: One of the resync types, or'd with any of the other flags.
// NOTE: these flags are ignored by the Windows 2000 time service. Only
// Windows XP and later servers will use them.
//
// Resync Types:
//
// TimeSyncFlag_SoftResync -- the time service will synchronize the computer clock with
// whatever time samples it currently has available. It will
// not poll the network, or hardware providers, for more data.
// TimeSyncFlag_HardResync -- tells the time service that a time slip has occured.
// causing the time service will discard its time data.
// Microsoft default providers will attempt to acquire more
// network samples, if possible.
// TimeSyncFlag_Rediscover -- tells the time service that it needs to re-resolve its
// network sources, and attempt to acquire network time data.
//
//
// Flags:
//
// TimeSyncFlag_ReturnResult -- used only for asynchronous calls, causes the function
// to return one of its possible return status codes, or an error.
// See "Return Values".
//
// Return Values:
//
// ResyncResult_Success -- indicates that the time synchronization has succeeded. For asynchronous
// calls, this does not guarantee that the server has acquired more data,
// merely that the request has been successfully dispatched.
// ResyncResult_NoData -- Windows XP and later. For synchronous requests, or when the
// TimeSyncFlag_ReturnResult is set, indicates that the time service couldn't
// synchronize time because it failed to acquire time data.
// ResyncResult_StaleData -- Windows XP and later. For synchronous requests, or when the
// TimeSyncFlag_ReturnResult is set, indicates that the time service couldn't
// synchronize time because the data it received was stale (time stamped
// as received earlier than the last good sample)
// ResyncResult_Shutdown -- Windows XP and later. For synchronous requests, or when the
// TimeSyncFlag_ReturnResult is set, indicates that the time service couldn't
// synchronize because the service was shutting down
// ResyncResult_ChangeTooBig -- Windows XP and later. For synchronous requests, or when the
// TimeSyncFlag_ReturnResult is set, indicates that the time service couldn't
// synchronize because it would've required a change larger than that allowed
// by the w32time policy
//
// Otherwise, the function returns a standard windows error.
//
#ifndef MIDL_PASS
DWORD W32TimeSyncNow(IN const WCHAR *wszServer, IN unsigned long ulWaitFlag, IN unsigned long ulFlags);
#endif // MIDL_PASS
//-------------------------------------------------------------------------------------
// W32TimeGetNetlogonServiceBits
//
// Queries the specified time service to determine what it advertises itself as in the
// DS.
//
// wszServer: The name of the computer which should resync.
// pulBits: A set of flags indicating what the specified time service is
// advertised as. Can be the OR of the following values:
//
// DS_TIMESERV_FLAG: if the service is advertising as a time service
// DS_GOOD_TIMESERV_FLAG: if the service is advertising as a reliable time service
//
// Return Values:
//
// ERROR_SUCCESS if the call succeeds, otherwise, the function returns a standard
// windows error.
//
#ifndef MIDL_PASS
DWORD W32TimeGetNetlogonServiceBits(IN const WCHAR *wszServer, OUT unsigned long *pulBits); #endif // MIDL_PASS
//--------------------------------------------------------------------------------
//
// NTP provider information structures
//
//--------------------------------------------------------------------------------
//
// W32TIME_NTP_PEER_INFO
//
// Represents the current state of a network provider's peer.
//
// Fields:
//
// ulSize -- sizeof(W32TIME_NTP_PEER_INFO), used for versioning
// ulResolveAttempts -- the number of times the NTP provider has attempted to
// resolve this peer unsuccessfully. Setting this
// value to 0 indicates that the peer has been successfully
// resolved.
// u64TimeRemaining -- the number of 100ns intervals until the provider will
// poll this peer again
// u64LastSuccessfulSync -- the number of 100ns intervals since (0h 1-Jan 1601) (in UTC).
// ulLastSyncError -- S_OK if the last sync with this peer was successful, otherwise,
// the error that occured attempting to sync
// ulLastSyncErrorMsgId -- the resource identifier of a string representing the last
// error that occured syncing from this peer. 0 if there is no
// string associated with this error. The strings are stored in
// the DLL in which this provider is implemented.
// ulValidDataCount -- the number of valid samples from this peer the provider
// currently has in its clock filter
// ulAuthTypeMsgId -- the resource identifier of a string representing the
// authentication mechanism used by the NTP provider to
// secure communications with this peer. 0 if none.
// The strings are stored in the DLL in which this
// provider is implemented.
// wszUniqueName -- a name uniquely identifying this peer (usually the peers
// dns name).
// ulMode -- one of the NTP modes specified in the NTPv3 spec:
//
// +------------------+---+
// | Reserved | 0 |
// | SymmetricActive | 1 |
// | SymmetricPassive | 2 |
// | Client | 3 |
// | Server | 4 |
// | Broadcast | 5 |
// | Control | 6 |
// | PrivateUse | 7 |
// +------------------+---+
//
// ulStratum -- this peer's stratum
// ulreachability -- this peer's 1-byte reachability register. Each bit represents
// whether or not a poll attempt returned valid data (set == success,
// unset == failure). The low bit indicates the most recent sync,
// the second bit represents the previous sync, etc. When this register
// is 0, the peer is assumed to be unreachable.
// ulPeerPollInterval -- the poll interval which this peer returned to the NTP provider (in log (base 2) seconds).
// ulHostPollInterval -- the interval at which the NTP provider is polling this peer (in log (base 2) seconds).
//
typedef struct _W32TIME_NTP_PEER_INFO { unsigned __int32 ulSize; unsigned __int32 ulResolveAttempts; unsigned __int64 u64TimeRemaining; unsigned __int64 u64LastSuccessfulSync; unsigned __int32 ulLastSyncError; unsigned __int32 ulLastSyncErrorMsgId; unsigned __int32 ulValidDataCounter; unsigned __int32 ulAuthTypeMsgId; #ifdef MIDL_PASS
[string, unique] wchar_t *wszUniqueName; #else // MIDL_PASS
LPWSTR wszUniqueName; #endif // MIDL_PASS
unsigned char ulMode; unsigned char ulStratum; unsigned char ulReachability; unsigned char ulPeerPollInterval; unsigned char ulHostPollInterval; } W32TIME_NTP_PEER_INFO, *PW32TIME_NTP_PEER_INFO;
//
// W32TIME_NTP_PROVIDER_DATA
//
// Represents the state of an NTP provider.
//
// ulSize -- sizeof(W32TIME_NTP_PROVIDER_DATA), used for versioning
// ulError -- S_OK if the provider is functioning correctly,
// otherwise, the error which caused it to fail.
// ulErrorMsgId -- the resource identifier of a string representing the
// error that caused this provider to fail.
// cPeerInfo -- the number of active peers used by this provider
// pPeerInfo -- an array of W32TIME_NTP_PEER_INFO structures, representing
// the active peers this provider is currently synchronizing with
//
typedef struct _W32TIME_NTP_PROVIDER_DATA { unsigned __int32 ulSize; unsigned __int32 ulError; unsigned __int32 ulErrorMsgId; unsigned __int32 cPeerInfo; #ifdef MIDL_PASS
[size_is(cPeerInfo)] #endif // MIDL_PASS
W32TIME_NTP_PEER_INFO *pPeerInfo; } W32TIME_NTP_PROVIDER_DATA, *PW32TIME_NTP_PROVIDER_DATA;
//--------------------------------------------------------------------------------
//
// HARDWARE provider structures
//
//--------------------------------------------------------------------------------
// W32TIME_HARDWARE_PROVIDER_DATA
//
// Represents the state of a HARDWARE provider.
//
// ulSize -- sizeof(W32TIME_HARDWARE_PROVIDER_DATA), used for versioning
// ulError -- S_OK if the provider is functioning correctly,
// otherwise, the error which caused it to fail.
// ulErrorMsgId -- the resource identifier of a string representing the
// error that caused this provider to fail.
// wszReferenceIdentifier -- the synchronization source (usually, the provider's
// suggested 4-byte reference ID).
//
typedef struct _W32TIME_HARDWARE_PROVIDER_DATA { unsigned __int32 ulSize; unsigned __int32 ulError; unsigned __int32 ulErrorMsgId; #ifdef MIDL_PASS
[string, unique] wchar_t *wszReferenceIdentifier; #else // MIDL_PASS
LPWSTR wszReferenceIdentifier; #endif // MIDL_PASS
} W32TIME_HARDWARE_PROVIDER_DATA, *PW32TIME_HARDWARE_PROVIDER_DATA;
//-------------------------------------------------------------------------------------
// W32TimeQueryHardwareProviderStatus
//
// Queries the specified time service for information about one of its installed
// time providers.
//
// wszServer: The name of the computer which should resync.
// dwFlags: Reserved, must be 0.
// pwszProvider: The name of the provider to query.
// ppHardwareProviderData: A structure representing the current state of this hardware provider.
// The returned buffer is allocated by the system, and should be
// freed with W32TimeBufferFree().
//
// Return Values:
//
// ERROR_SUCCESS if the call succeeds, otherwise, the function returns a standard
// windows error.
//
#ifndef MIDL_PASS
DWORD W32TimeQueryHardwareProviderStatus(IN const WCHAR *wszServer, IN DWORD dwFlags, IN LPWSTR pwszProvider, OUT W32TIME_HARDWARE_PROVIDER_DATA **ppHardwareProviderData); #endif // MIDL_PASS
//-------------------------------------------------------------------------------------
// W32TimeQueryNTPProviderStatus
//
// Queries the specified time service for information about one of its installed
// time providers.
//
// wszServer: The name of the computer which should resync.
// dwFlags: Reserved, must be 0.
// pwszProvider: The name of the provider to query.
// ppNTPProviderData: A structure representing the current state of this hardware provider.
// The returned buffer is allocated by the system, and should be
// freed with W32TimeBufferFree().
//
// Return Values:
//
// ERROR_SUCCESS if the call succeeds, otherwise, the function returns a standard
// windows error.
//
#ifndef MIDL_PASS
DWORD W32TimeQueryNTPProviderStatus(IN LPCWSTR pwszServer, IN DWORD dwFlags, IN LPWSTR pwszProvider, OUT W32TIME_NTP_PROVIDER_DATA **ppNTPProviderData); #endif // MIDL_PASS
//-------------------------------------------------------------------------------------
// W32TimeBufferFree
//
// Frees a buffer allocated by the w32time client API.
//
// pvBuffer: the buffer to free.
//
#ifndef MIDL_PASS
void W32TimeBufferFree(IN LPVOID pvBuffer); #endif // MIDL_PASS
//
//-------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------
//
// W32Time named events.
// These events are ACL'd such that LocalSystem has full access.
//
//-------------------------------------------------------------------------------------
//
// Signaling this event tells w32time that its time is off, causing the windows time
// service to attempt resynchronization. This does not guarantee that the time service
// will successfully adjust the system clock, or that resynchronization will occur
// in a timely manner.
//
#define W32TIME_NAMED_EVENT_SYSTIME_NOT_CORRECT L"W32TIME_NAMED_EVENT_SYSTIME_NOT_CORRECT"
#ifdef __cplusplus
} // balance extern "C" {
#endif
#endif // #ifndef __W32TIMEP_H__
|