C++ 获取System Boot Time代码


#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; 
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值