You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-09-12 18:50:20 -07:00
Rebase against 957a1f0216995c14c3a3fe737358578a506af707
This commit is contained in:
@@ -1,124 +0,0 @@
|
||||
From e82c474f4befd2ba092dc41e0d7e188cd6303b7e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Tue, 6 Jun 2017 21:08:51 +0200
|
||||
Subject: [PATCH] ntoskrnl.exe: Implement NtBuildNumber.
|
||||
|
||||
---
|
||||
dlls/ntoskrnl.exe/ntoskrnl.c | 11 +++++++++--
|
||||
dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +-
|
||||
dlls/ntoskrnl.exe/tests/driver.c | 29 +++++++++++++++++++++++++++++
|
||||
3 files changed, 39 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
|
||||
index c3276c95..0e9fa425 100644
|
||||
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
|
||||
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
|
||||
@@ -60,6 +60,7 @@ WINE_DECLARE_DEBUG_CHANNEL(plugplay);
|
||||
|
||||
BOOLEAN KdDebuggerEnabled = FALSE;
|
||||
ULONG InitSafeBootMode = 0;
|
||||
+USHORT NtBuildNumber = 0;
|
||||
|
||||
extern LONG CALLBACK vectored_handler( EXCEPTION_POINTERS *ptrs );
|
||||
|
||||
@@ -2913,6 +2914,13 @@ NTSTATUS WINAPI IoAcquireRemoveLockEx(PIO_REMOVE_LOCK lock, PVOID tag,
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
+static void ntoskrnl_init(void)
|
||||
+{
|
||||
+ LARGE_INTEGER count;
|
||||
+
|
||||
+ KeQueryTickCount( &count ); /* initialize the global KeTickCount */
|
||||
+ NtBuildNumber = NtCurrentTeb()->Peb->OSBuildNumber;
|
||||
+}
|
||||
|
||||
/*****************************************************
|
||||
* DllMain
|
||||
@@ -2920,7 +2928,6 @@ NTSTATUS WINAPI IoAcquireRemoveLockEx(PIO_REMOVE_LOCK lock, PVOID tag,
|
||||
BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved )
|
||||
{
|
||||
static void *handler;
|
||||
- LARGE_INTEGER count;
|
||||
|
||||
switch(reason)
|
||||
{
|
||||
@@ -2929,7 +2936,7 @@ BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved )
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
handler = RtlAddVectoredExceptionHandler( TRUE, vectored_handler );
|
||||
#endif
|
||||
- KeQueryTickCount( &count ); /* initialize the global KeTickCount */
|
||||
+ ntoskrnl_init();
|
||||
break;
|
||||
case DLL_PROCESS_DETACH:
|
||||
if (reserved) break;
|
||||
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
|
||||
index 19cde8cf..271b7f08 100644
|
||||
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
|
||||
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
|
||||
@@ -751,7 +751,7 @@
|
||||
@ stdcall NtAllocateLocallyUniqueId(ptr)
|
||||
@ stdcall NtAllocateUuids(ptr ptr ptr ptr)
|
||||
@ stdcall NtAllocateVirtualMemory(long ptr long ptr long long)
|
||||
-@ stub NtBuildNumber
|
||||
+@ extern NtBuildNumber
|
||||
@ stdcall NtClose(long)
|
||||
@ stdcall NtConnectPort(ptr ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtCreateEvent(ptr long ptr long long)
|
||||
diff --git a/dlls/ntoskrnl.exe/tests/driver.c b/dlls/ntoskrnl.exe/tests/driver.c
|
||||
index bd1070c1..2e622c8d 100644
|
||||
--- a/dlls/ntoskrnl.exe/tests/driver.c
|
||||
+++ b/dlls/ntoskrnl.exe/tests/driver.c
|
||||
@@ -174,6 +174,22 @@ static void winetest_end_todo(void)
|
||||
#define todo_wine_if(is_todo) todo_if((is_todo) && running_under_wine)
|
||||
#define win_skip(...) win_skip_(__FILE__, __LINE__, __VA_ARGS__)
|
||||
|
||||
+static void *get_proc_address(const char *name)
|
||||
+{
|
||||
+ UNICODE_STRING name_u;
|
||||
+ ANSI_STRING name_a;
|
||||
+ NTSTATUS status;
|
||||
+ void *ret;
|
||||
+
|
||||
+ RtlInitAnsiString(&name_a, name);
|
||||
+ status = RtlAnsiStringToUnicodeString(&name_u, &name_a, TRUE);
|
||||
+ if (status) return NULL;
|
||||
+
|
||||
+ ret = MmGetSystemRoutineAddress(&name_u);
|
||||
+ RtlFreeUnicodeString(&name_u);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static void test_currentprocess(void)
|
||||
{
|
||||
PEPROCESS current;
|
||||
@@ -604,6 +620,18 @@ static void test_lookaside_list(void)
|
||||
ExDeleteNPagedLookasideList(&list);
|
||||
}
|
||||
|
||||
+static void test_version(void)
|
||||
+{
|
||||
+ USHORT *pNtBuildNumber;
|
||||
+ ULONG build;
|
||||
+
|
||||
+ pNtBuildNumber = get_proc_address("NtBuildNumber");
|
||||
+ ok(!!pNtBuildNumber, "Could not get pointer to NtBuildNumber\n");
|
||||
+
|
||||
+ PsGetVersion(NULL, NULL, &build, NULL);
|
||||
+ ok(*pNtBuildNumber == build, "Expected build number %u, got %u\n", build, *pNtBuildNumber);
|
||||
+}
|
||||
+
|
||||
static NTSTATUS main_test(IRP *irp, IO_STACK_LOCATION *stack, ULONG_PTR *info)
|
||||
{
|
||||
ULONG length = stack->Parameters.DeviceIoControl.OutputBufferLength;
|
||||
@@ -633,6 +661,7 @@ static NTSTATUS main_test(IRP *irp, IO_STACK_LOCATION *stack, ULONG_PTR *info)
|
||||
test_init_funcs();
|
||||
test_load_driver();
|
||||
test_sync();
|
||||
+ test_version();
|
||||
test_stack_callout();
|
||||
test_lookaside_list();
|
||||
|
||||
--
|
||||
2.20.1
|
||||
|
Reference in New Issue
Block a user