Alexandre Julliard : ntoskrnl.exe:
Implemented a couple of time-related APIs.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri May 18 13:56:07 CDT 2007
Module: wine
Branch: master
Commit: bd3a08b355f53b160b076bce9fab5b16056a01cd
URL: http://source.winehq.org/git/wine.git/?a=commit;h=bd3a08b355f53b160b076bce9fab5b16056a01cd
Author: Alexandre Julliard <julliard at winehq.org>
Date: Fri May 18 16:48:54 2007 +0200
ntoskrnl.exe: Implemented a couple of time-related APIs.
---
dlls/ntoskrnl.exe/ntoskrnl.c | 37 +++++++++++++++++++++++++++++++++++
dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 6 ++--
include/ddk/wdm.h | 3 ++
3 files changed, 43 insertions(+), 3 deletions(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index b0007fc..3bbb205 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -130,6 +130,7 @@ static NTSTATUS process_ioctl( DEVICE_OBJECT *device, ULONG code, void *in_buff,
IO_STACK_LOCATION irpsp;
PDRIVER_DISPATCH dispatch = device->DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL];
NTSTATUS status;
+ LARGE_INTEGER count;
TRACE( "ioctl %x device %p in_size %u out_size %u\n", code, device, in_size, *out_size );
@@ -159,6 +160,8 @@ static NTSTATUS process_ioctl( DEVICE_OBJECT *device, ULONG code, void *in_buff,
device->CurrentIrp = &irp;
+ KeQueryTickCount( &count ); /* update the global KeTickCount */
+
if (TRACE_ON(relay))
DPRINTF( "%04x:Call driver dispatch %p (device=%p,irp=%p)\n",
GetCurrentThreadId(), dispatch, device, &irp );
@@ -416,6 +419,37 @@ void WINAPI ExFreePoolWithTag( void *ptr, ULONG tag )
/***********************************************************************
+ * KeQuerySystemTime (NTOSKRNL.EXE.@)
+ */
+void WINAPI KeQuerySystemTime( LARGE_INTEGER *time )
+{
+ NtQuerySystemTime( time );
+}
+
+
+/***********************************************************************
+ * KeQueryTickCount (NTOSKRNL.EXE.@)
+ */
+void WINAPI KeQueryTickCount( LARGE_INTEGER *count )
+{
+ count->QuadPart = NtGetTickCount();
+ /* update the global variable too */
+ KeTickCount.LowPart = count->u.LowPart;
+ KeTickCount.High1Time = count->u.HighPart;
+ KeTickCount.High2Time = count->u.HighPart;
+}
+
+
+/***********************************************************************
+ * KeQueryTimeIncrement (NTOSKRNL.EXE.@)
+ */
+ULONG WINAPI KeQueryTimeIncrement(void)
+{
+ return 10000;
+}
+
+
+/***********************************************************************
* MmAllocateNonCachedMemory (NTOSKRNL.EXE.@)
*/
LPVOID WINAPI MmAllocateNonCachedMemory( SIZE_T size )
@@ -493,11 +527,14 @@ NTSTATUS WINAPI PsSetCreateProcessNotifyRoutine( PCREATE_PROCESS_NOTIFY_ROUTINE
*/
BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved )
{
+ LARGE_INTEGER count;
+
switch(reason)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls( inst );
RtlAddVectoredExceptionHandler( TRUE, vectored_handler );
+ KeQueryTickCount( &count ); /* initialize the global KeTickCount */
break;
}
return TRUE;
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
index 2a89b33..f199602 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -573,9 +573,9 @@
@ stub KeQueryInterruptTime
@ stub KeQueryPriorityThread
@ stub KeQueryRuntimeThread
-@ stub KeQuerySystemTime
-@ stub KeQueryTickCount
-@ stub KeQueryTimeIncrement
+@ stdcall KeQuerySystemTime(ptr)
+@ stdcall KeQueryTickCount(ptr)
+@ stdcall KeQueryTimeIncrement()
@ stub KeRaiseUserException
@ stub KeReadStateEvent
@ stub KeReadStateMutant
diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h
index f9db943..38b3625 100644
--- a/include/ddk/wdm.h
+++ b/include/ddk/wdm.h
@@ -874,6 +874,9 @@ NTSTATUS WINAPI IoDeleteSymbolicLink(UNICODE_STRING*);
PEPROCESS WINAPI IoGetCurrentProcess(void);
PKTHREAD WINAPI KeGetCurrentThread(void);
+void WINAPI KeQuerySystemTime(LARGE_INTEGER*);
+void WINAPI KeQueryTickCount(LARGE_INTEGER*);
+ULONG WINAPI KeQueryTimeIncrement(void);
LPVOID WINAPI MmAllocateNonCachedMemory(SIZE_T);
void WINAPI MmFreeNonCachedMemory(PVOID,SIZE_T);
More information about the wine-cvs
mailing list