ntdll: Use a syscall thunk for NtQueryPerformanceCounter().
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
4752e252ea
commit
78c772e9d8
|
@ -307,7 +307,7 @@
|
||||||
@ stdcall -syscall NtQueryMutant(long long ptr long ptr)
|
@ stdcall -syscall NtQueryMutant(long long ptr long ptr)
|
||||||
@ stdcall -syscall NtQueryObject(long long ptr long ptr)
|
@ stdcall -syscall NtQueryObject(long long ptr long ptr)
|
||||||
@ stub NtQueryOpenSubKeys
|
@ stub NtQueryOpenSubKeys
|
||||||
@ stdcall NtQueryPerformanceCounter(ptr ptr)
|
@ stdcall -syscall NtQueryPerformanceCounter(ptr ptr)
|
||||||
# @ stub NtQueryPortInformationProcess
|
# @ stub NtQueryPortInformationProcess
|
||||||
# @ stub NtQueryQuotaInformationFile
|
# @ stub NtQueryQuotaInformationFile
|
||||||
@ stdcall -syscall NtQuerySection(long long ptr long ptr)
|
@ stdcall -syscall NtQuerySection(long long ptr long ptr)
|
||||||
|
@ -1295,7 +1295,7 @@
|
||||||
@ stdcall -private -syscall ZwQueryMutant(long long ptr long ptr) NtQueryMutant
|
@ stdcall -private -syscall ZwQueryMutant(long long ptr long ptr) NtQueryMutant
|
||||||
@ stdcall -private -syscall ZwQueryObject(long long ptr long ptr) NtQueryObject
|
@ stdcall -private -syscall ZwQueryObject(long long ptr long ptr) NtQueryObject
|
||||||
@ stub ZwQueryOpenSubKeys
|
@ stub ZwQueryOpenSubKeys
|
||||||
@ stdcall -private ZwQueryPerformanceCounter(ptr ptr) NtQueryPerformanceCounter
|
@ stdcall -private -syscall ZwQueryPerformanceCounter(ptr ptr) NtQueryPerformanceCounter
|
||||||
# @ stub ZwQueryPortInformationProcess
|
# @ stub ZwQueryPortInformationProcess
|
||||||
# @ stub ZwQueryQuotaInformationFile
|
# @ stub ZwQueryQuotaInformationFile
|
||||||
@ stdcall -private -syscall ZwQuerySection(long long ptr long ptr) NtQuerySection
|
@ stdcall -private -syscall ZwQuerySection(long long ptr long ptr) NtQuerySection
|
||||||
|
|
|
@ -375,31 +375,12 @@ LONGLONG WINAPI RtlGetSystemTimePrecise( void )
|
||||||
return unix_funcs->RtlGetSystemTimePrecise();
|
return unix_funcs->RtlGetSystemTimePrecise();
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* NtQueryPerformanceCounter [NTDLL.@]
|
|
||||||
*/
|
|
||||||
NTSTATUS WINAPI NtQueryPerformanceCounter( LARGE_INTEGER *counter, LARGE_INTEGER *frequency )
|
|
||||||
{
|
|
||||||
NTSTATUS status;
|
|
||||||
|
|
||||||
__TRY
|
|
||||||
{
|
|
||||||
status = unix_funcs->NtQueryPerformanceCounter( counter, frequency );
|
|
||||||
}
|
|
||||||
__EXCEPT_PAGE_FAULT
|
|
||||||
{
|
|
||||||
return STATUS_ACCESS_VIOLATION;
|
|
||||||
}
|
|
||||||
__ENDTRY
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* RtlQueryPerformanceCounter [NTDLL.@]
|
* RtlQueryPerformanceCounter [NTDLL.@]
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI DECLSPEC_HOTPATCH RtlQueryPerformanceCounter( LARGE_INTEGER *counter )
|
BOOL WINAPI DECLSPEC_HOTPATCH RtlQueryPerformanceCounter( LARGE_INTEGER *counter )
|
||||||
{
|
{
|
||||||
unix_funcs->NtQueryPerformanceCounter( counter, NULL );
|
NtQueryPerformanceCounter( counter, NULL );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1362,7 +1362,6 @@ static struct unix_funcs unix_funcs =
|
||||||
{
|
{
|
||||||
NtCurrentTeb,
|
NtCurrentTeb,
|
||||||
NtGetContextThread,
|
NtGetContextThread,
|
||||||
NtQueryPerformanceCounter,
|
|
||||||
DbgUiIssueRemoteBreakin,
|
DbgUiIssueRemoteBreakin,
|
||||||
RtlGetSystemTimePrecise,
|
RtlGetSystemTimePrecise,
|
||||||
RtlWaitOnAddress,
|
RtlWaitOnAddress,
|
||||||
|
|
|
@ -69,6 +69,7 @@
|
||||||
#include "winternl.h"
|
#include "winternl.h"
|
||||||
#include "ddk/wdm.h"
|
#include "ddk/wdm.h"
|
||||||
#include "wine/server.h"
|
#include "wine/server.h"
|
||||||
|
#include "wine/exception.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
#include "unix_private.h"
|
#include "unix_private.h"
|
||||||
|
|
||||||
|
@ -1361,8 +1362,16 @@ NTSTATUS WINAPI NtDelayExecution( BOOLEAN alertable, const LARGE_INTEGER *timeou
|
||||||
*/
|
*/
|
||||||
NTSTATUS WINAPI NtQueryPerformanceCounter( LARGE_INTEGER *counter, LARGE_INTEGER *frequency )
|
NTSTATUS WINAPI NtQueryPerformanceCounter( LARGE_INTEGER *counter, LARGE_INTEGER *frequency )
|
||||||
{
|
{
|
||||||
|
__TRY
|
||||||
|
{
|
||||||
counter->QuadPart = monotonic_counter();
|
counter->QuadPart = monotonic_counter();
|
||||||
if (frequency) frequency->QuadPart = TICKSPERSEC;
|
if (frequency) frequency->QuadPart = TICKSPERSEC;
|
||||||
|
}
|
||||||
|
__EXCEPT_PAGE_FAULT
|
||||||
|
{
|
||||||
|
return STATUS_ACCESS_VIOLATION;
|
||||||
|
}
|
||||||
|
__ENDTRY
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,14 +28,13 @@ struct msghdr;
|
||||||
struct _DISPATCHER_CONTEXT;
|
struct _DISPATCHER_CONTEXT;
|
||||||
|
|
||||||
/* increment this when you change the function table */
|
/* increment this when you change the function table */
|
||||||
#define NTDLL_UNIXLIB_VERSION 89
|
#define NTDLL_UNIXLIB_VERSION 90
|
||||||
|
|
||||||
struct unix_funcs
|
struct unix_funcs
|
||||||
{
|
{
|
||||||
/* Nt* functions */
|
/* Nt* functions */
|
||||||
TEB * (WINAPI *NtCurrentTeb)(void);
|
TEB * (WINAPI *NtCurrentTeb)(void);
|
||||||
NTSTATUS (WINAPI *NtGetContextThread)( HANDLE handle, CONTEXT *context );
|
NTSTATUS (WINAPI *NtGetContextThread)( HANDLE handle, CONTEXT *context );
|
||||||
NTSTATUS (WINAPI *NtQueryPerformanceCounter)( LARGE_INTEGER *counter, LARGE_INTEGER *frequency );
|
|
||||||
|
|
||||||
/* other Win32 API functions */
|
/* other Win32 API functions */
|
||||||
NTSTATUS (WINAPI *DbgUiIssueRemoteBreakin)( HANDLE process );
|
NTSTATUS (WINAPI *DbgUiIssueRemoteBreakin)( HANDLE process );
|
||||||
|
|
Loading…
Reference in New Issue