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