57 lines
2.0 KiB
C#
57 lines
2.0 KiB
C#
|
//------------------------------------------------------------
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
//------------------------------------------------------------
|
||
|
namespace System.ServiceModel.Channels
|
||
|
{
|
||
|
using System.Runtime;
|
||
|
using System.Runtime.InteropServices;
|
||
|
using System.Runtime.Versioning;
|
||
|
using System.Security;
|
||
|
using FILETIME = System.Runtime.InteropServices.ComTypes.FILETIME;
|
||
|
|
||
|
[SuppressUnmanagedCodeSecurity]
|
||
|
internal static class SafeNativeMethods
|
||
|
{
|
||
|
public const string KERNEL32 = "kernel32.dll";
|
||
|
|
||
|
[DllImport(KERNEL32, SetLastError = false)]
|
||
|
[ResourceExposure(ResourceScope.None)]
|
||
|
static extern uint GetSystemTimeAdjustment(
|
||
|
[Out] out int adjustment,
|
||
|
[Out] out uint increment,
|
||
|
[Out] out uint adjustmentDisabled
|
||
|
);
|
||
|
|
||
|
[DllImport(KERNEL32, SetLastError = true)]
|
||
|
[ResourceExposure(ResourceScope.None)]
|
||
|
private static extern void GetSystemTimeAsFileTime([Out] out FILETIME time);
|
||
|
|
||
|
public static void GetSystemTimeAsFileTime(out long time) {
|
||
|
FILETIME fileTime;
|
||
|
GetSystemTimeAsFileTime(out fileTime);
|
||
|
time = 0;
|
||
|
time |= (uint)fileTime.dwHighDateTime;
|
||
|
time <<= sizeof(uint) * 8;
|
||
|
time |= (uint)fileTime.dwLowDateTime;
|
||
|
}
|
||
|
|
||
|
[Fx.Tag.SecurityNote(Critical = "Calls critical method GetSystemTimeAdjustment.",
|
||
|
Safe = "Method is a SafeNativeMethod.")]
|
||
|
[SecuritySafeCritical]
|
||
|
internal static long GetSystemTimeResolution()
|
||
|
{
|
||
|
int dummyAdjustment;
|
||
|
uint increment;
|
||
|
uint dummyAdjustmentDisabled;
|
||
|
|
||
|
if (GetSystemTimeAdjustment(out dummyAdjustment, out increment, out dummyAdjustmentDisabled) != 0)
|
||
|
{
|
||
|
return (long)increment;
|
||
|
}
|
||
|
|
||
|
// Assume the default, which is around 15 milliseconds.
|
||
|
return 15 * TimeSpan.TicksPerMillisecond;
|
||
|
}
|
||
|
}
|
||
|
}
|