#include "stdafx.h"
#include<stdio.h>
#include<windows.h>
#define NT_SUCCESS(x) ((x)>=0)
#define SystemTimeInformation 3
typedef struct
{
LARGE_INTEGER liKeBootTime;
LARGE_INTEGER liKeSystemTime;
LARGE_INTEGER liExpTimeZoneBias;
ULONG uCurrentTimeZoneId;
DWORD dwReserved;
} SYSTEM_TIME_INFORMATION;
typedef long (__stdcall *fnNtQuerySystemInformation)(
IN UINT SystemInformationClass,
OUT PVOID SystemInformation,
IN ULONG SystemInformationLength,
OUT PULONG ReturnLength OPTIONAL);
static fnNtQuerySystemInformation NtQuerySystemInformation = NULL;
int main(void)
{
NtQuerySystemInformation = (fnNtQuerySystemInformation)GetProcAddress(LoadLibrary(L"ntdll.dll"),
"NtQuerySystemInformation");
if(NtQuerySystemInformation == NULL)
{
printf("Get NtQuerySystemInformation Addr Failed!n");
exit(-1);
}
LONG status;
SYSTEM_TIME_INFORMATION sti;
status = NtQuerySystemInformation(SystemTimeInformation, &sti,sizeof(sti),0);
printf("boot time (ms) == %I64Xn\n",sti.liKeBootTime.QuadPart);
if(NO_ERROR != status)
{
printf("NtQuerySystemInformation Failed!n");
exit(-1);
}
FILETIME ft;
SYSTEMTIME st;
memcpy(&ft,&sti.liKeBootTime,sizeof(ft)); //将其转为文件时间
FileTimeToLocalFileTime(&ft,&ft); //将一个FILETIME结构转换成本地时间
FileTimeToSystemTime(&ft,&st); //将文件时间转为系统时间
printf("DateTime: %02d-%02d-%04d %02d:%02d:%02d ",st.wMonth,st.wDay,st.wYear, st.wHour,st.wMinute,st.wSecond);
getchar();
return 0;
}