内核里获得系统版本,与系统滴答时间

获得系统版本号。内核编程难免使用硬编码,以及使用一些高版本系统才出现的函数。为了使得驱动能在低版本的系统上正常运行,就需要根据不同系统做不同处理了。

VOID GetVersion()
{
ULONG NtBuildNumber;
RTL_OSVERSIONINFOW osi;
osi.dwOSVersionInfoSize=sizeof(RTL_OSVERSIONINFOW);
RtlFillMemory(&osi,sizeof(RTL_OSVERSIONINFOW),0);
RtlGetVersion(&osi);
NtBuildNumber=osi.dwBuildNumber;
DbgPrint("NtBuildNumber: %ld
",NtBuildNumber);
return NtBuildNumber;
}

获得系统时间。在内核里获得系统时间的是标准时间(GMT+0),转换成本地时间还需要进行转换。此功能在发布测试版软件的时候特别有用,限制人们只能在指定时间之前使用。

VOID MyGetCurrentTime()
{
 LARGE_INTEGER CurrentTime;
 LARGE_INTEGER LocalTime;
 TIME_FIELDS TimeFiled;
 // 这里得到的其实是格林威治时间
 KeQuerySystemTime(&CurrentTime);
 // 转换成本地时间
 ExSystemTimeToLocalTime(&CurrentTime, &LocalTime);
 // 把时间转换为容易理解的形式
 RtlTimeToTimeFields(&LocalTime, &TimeFiled);
 DbgPrint("[TimeTest] NowTime : %4d-%2d-%2d %2d:%2d:%2d",
TimeFiled.Year, TimeFiled.Month, TimeFiled.Day, 
TimeFiled.Hour, TimeFiled.Minute, TimeFiled.Second);
}
原文地址:https://www.cnblogs.com/csnd/p/11719007.html