取得windows系统开机日期和时间

    很简单,原生态函数NtQuerySystemInformation已经为我们提供了这个功能,

虽然不那么优雅 :)


#include	<stdio.h>
#include	<stdbool.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("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) == %I64X\n",sti.liKeBootTime.QuadPart);
	
	/*if(!NT_SUCCESS(status))
	{
		printf("NtQuerySystemInformation Failed!\n");
		goto quit;
	}*/
	
	if(NO_ERROR != status)
	{
		printf("NtQuerySystemInformation Failed!\n");
		exit(-1);
	}

	FILETIME ft;
	SYSTEMTIME st;
	memcpy(&ft,&sti.liKeBootTime,sizeof(ft));
	FileTimeToLocalFileTime(&ft,&ft);
	FileTimeToSystemTime(&ft,&st);
	
	printf("Date: %02d-%02d-%04d\nTime: %02d:%02d:%02d\n",st.wMonth,st.wDay,st.wYear,\
		st.wHour,st.wMinute,st.wSecond);
		
	getchar();
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大熊猫侯佩

赏点钱让我买杯可乐好吗 ;)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值