Implement NtQueryTimer.

diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h
index 17e7827..f775392 100644
--- a/include/wine/server_protocol.h
+++ b/include/wine/server_protocol.h
@@ -1928,6 +1928,19 @@
 };
 
 
+struct get_timer_info_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct get_timer_info_reply
+{
+    struct reply_header __header;
+    abs_time_t   when;
+    int          signaled;
+};
+
+
 
 struct get_thread_context_request
 {
@@ -3239,6 +3252,7 @@
     REQ_open_timer,
     REQ_set_timer,
     REQ_cancel_timer,
+    REQ_get_timer_info,
     REQ_get_thread_context,
     REQ_set_thread_context,
     REQ_get_selector_entry,
@@ -3424,6 +3438,7 @@
     struct open_timer_request open_timer_request;
     struct set_timer_request set_timer_request;
     struct cancel_timer_request cancel_timer_request;
+    struct get_timer_info_request get_timer_info_request;
     struct get_thread_context_request get_thread_context_request;
     struct set_thread_context_request set_thread_context_request;
     struct get_selector_entry_request get_selector_entry_request;
@@ -3607,6 +3622,7 @@
     struct open_timer_reply open_timer_reply;
     struct set_timer_reply set_timer_reply;
     struct cancel_timer_reply cancel_timer_reply;
+    struct get_timer_info_reply get_timer_info_reply;
     struct get_thread_context_reply get_thread_context_reply;
     struct set_thread_context_reply set_thread_context_reply;
     struct get_selector_entry_reply get_selector_entry_reply;
@@ -3681,6 +3697,6 @@
     struct set_global_windows_reply set_global_windows_reply;
 };
 
-#define SERVER_PROTOCOL_VERSION 152
+#define SERVER_PROTOCOL_VERSION 153
 
 #endif /* __WINE_WINE_SERVER_PROTOCOL_H */
diff --git a/include/winternl.h b/include/winternl.h
index 8a58bed..5946ec7 100644
--- a/include/winternl.h
+++ b/include/winternl.h
@@ -632,6 +632,16 @@
     BOOLEAN     AbandonedState;
 } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
 
+typedef enum _TIMER_INFORMATION_CLASS
+{
+    TimerBasicInformation = 0
+} TIMER_INFORMATION_CLASS;
+
+typedef struct _TIMER_BASIC_INFORMATION
+{
+    LARGE_INTEGER RemainingTime;
+    BOOLEAN       TimerState;
+} TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
 
 
 /* return type of RtlDetermineDosPathNameType_U (FIXME: not the correct names) */
@@ -1401,6 +1411,7 @@
 NTSTATUS  WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
 NTSTATUS  WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
 NTSTATUS  WINAPI NtQuerySystemTime(PLARGE_INTEGER);
+NTSTATUS  WINAPI NtQueryTimer(HANDLE,TIMER_INFORMATION_CLASS,PVOID,ULONG,PULONG);
 NTSTATUS  WINAPI NtQueryValueKey(HKEY,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
 NTSTATUS  WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,ULONG,ULONG*);
 NTSTATUS  WINAPI NtQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);