获得系统版本号。内核编程难免使用硬编码,以及使用一些高版本系统才出现的函数。为了使得驱动能在低版本的系统上正常运行,就需要根据不同系统做不同处理了。
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\n",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
时间: 2024-12-28 13:35:17