阅读:6726回复:24
==在内核中如何获得系统的日期和时间==
在内核中如何获得系统当前日期和时间以及是星期几?谢谢先了!
|
|
最新喜欢:aasa2 |
沙发#
发布于:2005-01-24 17:32
2k和XP下用ZwQuerySystemTime?
98下用VTD_Get_Date_And_Time或IFSMgr_Get_DOSTime? |
|
板凳#
发布于:2005-01-24 19:38
但是ZwQuerySystemTime没有被ntoskrnl.exe导出呀,如何使用?请老大们告知呀.............
|
|
地板#
发布于:2005-01-24 23:10
pursuer_zhao:
快告诉小弟呀,谢谢了 |
|
地下室#
发布于:2005-01-25 09:01
ZwQuerySystemInformation也可以吧?你试一下
另外,KeQuerySystemTime和ExSystemTimeToLocalTime 函数应该也可以 |
|
5楼#
发布于:2005-01-25 11:11
但是ZwQuerySystemTime没有被ntoskrnl.exe导出呀,如何使用?请老大们告知呀............. NTSYSAPI NTSTATUS NTAPI ZwQuerySystemTime( OUT PLARGE_INTEGER SystemTime ); 这是一个未公开的内部函数,你自己加个声明即可 |
|
|
6楼#
发布于:2005-01-25 15:40
[quote]但是ZwQuerySystemTime没有被ntoskrnl.exe导出呀,如何使用?请老大们告知呀............. NTSYSAPI NTSTATUS NTAPI ZwQuerySystemTime( OUT PLARGE_INTEGER SystemTime ); 这是一个未公开的内部函数,你自己加个声明即可 [/quote] 正确 |
|
|
7楼#
发布于:2005-01-25 15:42
但是我按照您说法,做了下面函数声明:
NTSYSAPI NTSTATUS NTAPI ZwQuerySystemTime( OUT PLARGE_INTEGER SystemTime ); 可是,我在程序中调用这个函数时,编译通过了,但是连接有如下问题: filehook.obj() : error LNK2001: unresolved external symbol __imp__ZwQuerySystemTime@4 objchki386blocknt.sys() : error LNK1120: 1 unresolved externals 这是什么错误? 同时,我想请教:未文档但是被ntoskrnl导出的函数(如:ZwQuerySystemInformation),声明后在程序中即可使用;但对于那些未文档且未被ntoskrnl导出的函数(例如:ZwQuerySystemTime),仅在程序中声明一下就能使用吗?如果不能,如何才能使用? 谢谢!!! [编辑 - 1/25/05 by zxwqd] |
|
8楼#
发布于:2005-01-25 15:48
我再试试pursuer_zhao的方法
|
|
9楼#
发布于:2005-01-25 15:53
在内核里直接调是可以的,在应用层则不行,
你得像下面这样处理一下 typedef NTSTATUS ( __stdcall *ZWQUERYSYSTEMTIME ) ( OUT PLARGE_INTEGER SystemTime ); static ZWQUERYSYSTEMTIME ZwQuerySystemTime = NULL; ZwQuerySystemTime = (ZWQUERYSYSTEMTIME)GetProcAddress( ntdll_dll, "ZwQuerySystemTime" ); 然后试试看。 [编辑 - 1/25/05 by fslife] |
|
|
10楼#
发布于:2005-01-26 16:47
fslife,你好!
我在内核中对ZwQuerySystemTime做了如下声明: NTSYSAPI NTSTATUS NTAPI ZwQuerySystemTime( OUT PLARGE_INTEGER SystemTime ); 并且在sources文件中添加了如下的宏: TARGETLIBS=$(SDK_LIB_PATH)\ntdll.lib 后,使用ddk能编译、连接都正确,可是我使用softice的DriverMonitor装载驱动程序时发生如下错误: ERROR (127): An unexpected error occurred. 在我把调用ZwQuerySystemTime行注释掉后,驱动程序就能正常加载了。这是什么错误,如何解决? 谢谢!! |
|
11楼#
发布于:2005-01-27 04:53
KeQuerySystemTime
The KeQuerySystemTime routine obtains the current system time. VOID KeQuerySystemTime( OUT PLARGE_INTEGER CurrentTime ); Parameters CurrentTime Pointer to the current time on return from KeQuerySystemTime. Return Value None Headers Declared in wdm.h and ntddk.h. Include wdm.h or ntddk.h. Comments System time is a count of 100-nanosecond intervals since January 1, 1601. System time is typically updated approximately every ten milliseconds. This value is computed for the GMT time zone. To adjust this value for the local time zone use ExSystemTimeToLocalTime. Callers of KeQuerySystemTime can be running at any IRQL. DDK里面不是写得很清楚吗?只不过要自己转换一下。 [编辑 - 1/27/05 by Odyssey] |
|
12楼#
发布于:2005-01-27 10:58
WDM驱动中可以按照以下步骤:
1. 用 KeQuerySystemTime() 获得当前的 GMT System Time. 这是一个从 1601-01-01 以来的计数(单位是 100ns)。 2. 调用 ExSystemTimeToLocalTime() 将 GMT System Time 值转换成当前时区的 Local System Time. 3. 用 RtlTimeToTimeFields() 将 System Time 值转换成 年:月:日:时:分:秒 的形式,保存在一个 TIME_FIELDS 结构中。 typedef struct TIME_FIELDS { CSHORT Year; CSHORT Month; CSHORT Day; CSHORT Hour; CSHORT Minute; CSHORT Second; CSHORT Milliseconds; CSHORT Weekday; } TIME_FIELDS; |
|
|
13楼#
发布于:2005-01-27 12:02
对了,看了你的编译过程,ZwQuerySystemTime由ntdll.dll引出,ntdll.dll在应用层,只能由应用层调用。KeQuerySystemTime()由ntoskrnl.exe导出,而且前面是Ke-Kernel,应该可以在核心调用
|
|
|
14楼#
发布于:2005-01-27 13:23
fslife,你好! 改成: ZwQuerySystemTime = (ZWQUERYSYSTEMTIME)GetProcAddress( "ntdll.dll", "ZwQuerySystemTime" ); |
|
|
15楼#
发布于:2005-01-27 18:29
非常感谢各位的热心帮助,再次表示感谢!
分实在太少了,以后多拿点儿来孝敬各位老大! |
|
16楼#
发布于:2005-01-28 13:37
WDM驱动中可以按照以下步骤: 晕啊,原来还有这个函数,找了半天没有找到,最后只好自己写一个函数来转换 :( |
|
17楼#
发布于:2005-01-28 15:30
WDM驱动中可以按照以下步骤: 非常正确。不过,嘿嘿,其实一般不需要打印出系统时间,因为debugview,里面有时间的哦。 |
|
|
18楼#
发布于:2007-08-21 09:47
dddddddddd
|
|
19楼#
发布于:2007-08-22 15:43
|
|
|
上一页
下一页