liz666
驱动小牛
驱动小牛
  • 注册日期2003-05-22
  • 最后登录2005-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1731回复:12

大放血呀,得到可用的系统时间!

楼主#
更多 发布于:2003-12-17 17:37
我有一个pci设备,想在计算机启动的时候把系统时间传递给它。 我调用keQuerySystemTime();得到一个64位的数字,这两天我一直在对他进行运算结果不对呀!后来我通过time得到一个从1970年开始的以秒为单位的数,但是还是不对呀!两个数差了很多。我在同一天取得的SystemTime数值差别也和大呀!我是在98下实现的(我的机器2000下,一用ds moniter就死机)。98无法调用systemTimeToLocal(),它是包含在ntddk.h里面的。
1.localtime和systime是不是就是格林威治时间和北京时间的区别?
2.有没有那位同胞已经实现了时间的转化,给我一下好吗?lizhuo666@163.com
3.有明白为什么同一天里这个返回值差别这么大的原因的帮忙解释一下,我实在是想不明白!

最新喜欢:

znsoftznsoft
我真的好烦!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-12-17 19:42
RtlTimeToTimeFields
hong
驱动小牛
驱动小牛
  • 注册日期2001-09-19
  • 最后登录2005-12-16
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-18 03:46
you need following steps:
1. keQuerySystemTime(&newTime);
2. get current active time bias from registry, that say biasTime;
3. realTime = newTime - biasTime;
4. RtlTimeToTimeFields();
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-12-18 09:42
why not use ExSystemTimeToLocalTime?
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
地下室#
发布于:2003-12-18 17:34
you need following steps:
1. keQuerySystemTime(&newTime);
2. get current active time bias from registry, that say biasTime;
3. realTime = newTime - biasTime;
4. RtlTimeToTimeFields();
 




arthurtu 说得对,中间的第 2, 3 步可以用 ExSystemTimeToLocalTime 来实现。

1. KeQuerySystemTime()
obtains the current GMT system time. It\'s a count of 100-nanosecond intervals since 1601-01-01.
2. ExSystemTimeToLocalTime()
converts a GMT system time value to the local system time for the current time zone.

3. RtlTimeToTimeFields()
得到如下结构:
typedef struct TIME_FIELDS
{
    CSHORT Year;
    CSHORT Month;
    CSHORT Day;
    CSHORT Hour;
    CSHORT Minute;
    CSHORT Second;
    CSHORT Milliseconds;
    CSHORT Weekday;
} TIME_FIELDS;

应该就是楼主所要的吧。
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
liz666
驱动小牛
驱动小牛
  • 注册日期2003-05-22
  • 最后登录2005-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-18 21:56
98下无法使用 exSystemtimetoLocalTime,这个函数包含在ntddk.h
我真的好烦!
liz666
驱动小牛
驱动小牛
  • 注册日期2003-05-22
  • 最后登录2005-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-12-19 08:23
longboot也给我发了一个,在2000下可以这么写
{
...
LARGE_INTEGER Now,NowLocal;
    TIME_FIELDS time;
KeQuerySystemTime(&Now);
ExSystemTimeToLocalTime(&Now, &NowLocal);
RtlTimeToTimeFields(&NowLocal, &time);
...
}
但是98下如何做呀!我现在的设备98,2000完全兼容,需要在98下使用呀!
我真的好烦!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2003-12-19 08:35
hong的帖子
liz666
驱动小牛
驱动小牛
  • 注册日期2003-05-22
  • 最后登录2005-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-12-19 11:26
我的帖子怎么丢了一个?
这就是为什么我多给hong两分的原因,但是我不清楚第二步是如何实现的,在注册标的什么位置?
我真的好烦!
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
9楼#
发布于:2003-12-19 12:19
我的帖子怎么丢了一个?
这就是为什么我多给hong两分的原因,但是我不清楚第二步是如何实现的,在注册标的什么位置?


如果是在 Win9x 下,不能调用 ExSystemTimeToLocalTime(),可以这样作:
查询注册表键 (REG_DWORD)
       HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation\\Bias

得到 Time-Zone Bias 值,再用 GMT System Time 减去 Bias,即可得到 Local System Time。

八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
liz666
驱动小牛
驱动小牛
  • 注册日期2003-05-22
  • 最后登录2005-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-12-19 13:54
我不知道在驱动里如何更改和读取注册表项?
我真的好烦!
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
11楼#
发布于:2003-12-19 17:31
我不知道在驱动里如何更改和读取注册表项?



RtlQueryRegistryValues
RtlWriteRegistryValue
...

查一下DDK吧
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
liz666
驱动小牛
驱动小牛
  • 注册日期2003-05-22
  • 最后登录2005-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-12-22 13:20
[quote]我不知道在驱动里如何更改和读取注册表项?



RtlQueryRegistryValues
RtlWriteRegistryValue
...

查一下DDK吧 [/quote]
谢谢,已经搞定!但是不知道为什么没法再给你加分了?
我真的好烦!
游客

返回顶部