Module: wine Branch: master Commit: bd3a08b355f53b160b076bce9fab5b16056a01cd URL: http://source.winehq.org/git/wine.git/?a=commit;h=bd3a08b355f53b160b076bce9f...
Author: Alexandre Julliard julliard@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);