网上的蜘蛛
分类: C/C++
2010-04-17 00:20:08
Windows NT 内核中你是无法使用 time.h 获取当前系统时间的,这个时候你需要用到 Wdm.h(你可以 include Wdm.h, Ntddk.h, 或 Ntifs.h)里面提供的 函数。这个函数和相关头文件需要 Windows 2000, Windows Vista 或者 Windows 7 等 NT 系统。
函数原型:
VOID KeQuerySystemTime(
__out PLARGE_INTEGER CurrentTime
);
参数:
CurrentTime [out]
这是一个指向当前系统时间的指针。
备注:
系统时间是一个以 100 纳秒为单位从 1601 年 1 月 1 日开始计算的 64 位有符号整数。以下是有关于这个 64 位的 的结构:
typedef union _LARGE_INTEGER {
>
struct {
DWORD LowPart;
LONG HighPart;
} ;
struct {
DWORD LowPart;
LONG HighPart;
} u;
LONGLONG QuadPart;
} LARGE_INTEGER, *PLARGE_INTEGER;
实际上这是一个为了防止你没有 64 位字符定义而设立的兼容性数据结构。当然如果你有 LONGLONG 定义的话,你可以直接使用里面的 QuadPart 作为你需要使用的时间。例如:
LONGLONG Timer;
LARGE_INTEGER timeUTC;
KeQuerySystemTime(&timeUTC);
Timer = timeUTC.QuadPart;
如上即可。
来自一位学弟的博客: