Module: wine Branch: master Commit: 88b20b2dee5dc246e481a58ddaa983b98e63831c URL: https://source.winehq.org/git/wine.git/?a=commit;h=88b20b2dee5dc246e481a58dd...
Author: Michael Müller michael@fds-team.de Date: Wed Feb 6 23:35:18 2019 +0100
ntoskrnl.exe: Implement NtBuildNumber.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntoskrnl.exe/ntoskrnl.c | 2 ++ dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +- dlls/ntoskrnl.exe/tests/driver.c | 13 +++++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index c1d15cd..aa569d5 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 );
@@ -2952,6 +2953,7 @@ BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved ) handler = RtlAddVectoredExceptionHandler( TRUE, vectored_handler ); #endif KeQueryTickCount( &count ); /* initialize the global KeTickCount */ + NtBuildNumber = NtCurrentTeb()->Peb->OSBuildNumber; 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 fc162ac..c274966 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 5897ac0..3984240 100644 --- a/dlls/ntoskrnl.exe/tests/driver.c +++ b/dlls/ntoskrnl.exe/tests/driver.c @@ -624,6 +624,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(DEVICE_OBJECT *device, IRP *irp, IO_STACK_LOCATION *stack, ULONG_PTR *info) { ULONG length = stack->Parameters.DeviceIoControl.OutputBufferLength; @@ -654,6 +666,7 @@ static NTSTATUS main_test(DEVICE_OBJECT *device, IRP *irp, IO_STACK_LOCATION *st test_init_funcs(); test_load_driver(); test_sync(); + test_version(); test_stack_callout(); test_lookaside_list();