Module: wine Branch: master Commit: 62f22dd4e3ab4f4b21f8e6b571fd7f9ba3547020 URL: http://source.winehq.org/git/wine.git/?a=commit;h=62f22dd4e3ab4f4b21f8e6b571...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Jan 8 22:02:21 2013 +0100
kernel32: Retrieve the system info from ntdll on startup.
---
dlls/kernel32/cpu.c | 19 +++++++++---------- dlls/kernel32/kernel_private.h | 1 + dlls/kernel32/process.c | 2 ++ dlls/kernel32/virtual.c | 18 ++++++------------ 4 files changed, 18 insertions(+), 22 deletions(-)
diff --git a/dlls/kernel32/cpu.c b/dlls/kernel32/cpu.c index 333e402..0ebf8f3 100644 --- a/dlls/kernel32/cpu.c +++ b/dlls/kernel32/cpu.c @@ -39,9 +39,10 @@ #include "winnt.h" #include "winternl.h" #include "psapi.h" +#include "ddk/wdm.h" #include "wine/unicode.h" +#include "kernel_private.h" #include "wine/debug.h" -#include "ddk/wdm.h"
WINE_DEFAULT_DEBUG_CHANNEL(reg);
@@ -104,13 +105,11 @@ VOID WINAPI GetSystemInfo( LPSYSTEM_INFO si /* [out] Destination for system information, may not be NULL */) { NTSTATUS nts; - SYSTEM_BASIC_INFORMATION sbi; SYSTEM_CPU_INFORMATION sci;
TRACE("si=0x%p\n", si);
- if ((nts = NtQuerySystemInformation( SystemBasicInformation, &sbi, sizeof(sbi), NULL )) != STATUS_SUCCESS || - (nts = NtQuerySystemInformation( SystemCpuInformation, &sci, sizeof(sci), NULL )) != STATUS_SUCCESS) + if ((nts = NtQuerySystemInformation( SystemCpuInformation, &sci, sizeof(sci), NULL )) != STATUS_SUCCESS) { SetLastError(RtlNtStatusToDosError(nts)); return; @@ -118,11 +117,11 @@ VOID WINAPI GetSystemInfo(
si->u.s.wProcessorArchitecture = sci.Architecture; si->u.s.wReserved = 0; - si->dwPageSize = sbi.PageSize; - si->lpMinimumApplicationAddress = sbi.LowestUserAddress; - si->lpMaximumApplicationAddress = sbi.HighestUserAddress; - si->dwActiveProcessorMask = sbi.ActiveProcessorsAffinityMask; - si->dwNumberOfProcessors = sbi.NumberOfProcessors; + si->dwPageSize = system_info.PageSize; + si->lpMinimumApplicationAddress = system_info.LowestUserAddress; + si->lpMaximumApplicationAddress = system_info.HighestUserAddress; + si->dwActiveProcessorMask = system_info.ActiveProcessorsAffinityMask; + si->dwNumberOfProcessors = system_info.NumberOfProcessors;
switch (sci.Architecture) { @@ -162,7 +161,7 @@ VOID WINAPI GetSystemInfo( FIXME("Unknown processor architecture %x\n", sci.Architecture); si->dwProcessorType = 0; } - si->dwAllocationGranularity = sbi.AllocationGranularity; + si->dwAllocationGranularity = system_info.AllocationGranularity; si->wProcessorLevel = sci.Level; si->wProcessorRevision = sci.Revision; } diff --git a/dlls/kernel32/kernel_private.h b/dlls/kernel32/kernel_private.h index feeeb55..cfc2935 100644 --- a/dlls/kernel32/kernel_private.h +++ b/dlls/kernel32/kernel_private.h @@ -53,6 +53,7 @@ static inline obj_handle_t console_handle_unmap(HANDLE h) #define KERNEL32_CONSOLE_SHELL ((HANDLE)2)
extern HMODULE kernel32_handle DECLSPEC_HIDDEN; +extern SYSTEM_BASIC_INFORMATION system_info DECLSPEC_HIDDEN;
extern const WCHAR *DIR_Windows DECLSPEC_HIDDEN; extern const WCHAR *DIR_System DECLSPEC_HIDDEN; diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c index 3a88aaa..8fcf67b 100644 --- a/dlls/kernel32/process.c +++ b/dlls/kernel32/process.c @@ -87,6 +87,7 @@ static BOOL is_wow64; static const int is_win64 = (sizeof(void *) > sizeof(int));
HMODULE kernel32_handle = 0; +SYSTEM_BASIC_INFORMATION system_info = { 0 };
const WCHAR *DIR_Windows = NULL; const WCHAR *DIR_System = NULL; @@ -1146,6 +1147,7 @@ void CDECL __wine_kernel_init(void) setbuf(stderr,NULL); kernel32_handle = GetModuleHandleW(kernel32W); IsWow64Process( GetCurrentProcess(), &is_wow64 ); + NtQuerySystemInformation( SystemBasicInformation, &system_info, sizeof(system_info), NULL );
LOCALE_Init();
diff --git a/dlls/kernel32/virtual.c b/dlls/kernel32/virtual.c index bddd638..0470073 100644 --- a/dlls/kernel32/virtual.c +++ b/dlls/kernel32/virtual.c @@ -48,8 +48,6 @@ WINE_DECLARE_DEBUG_CHANNEL(seh); WINE_DECLARE_DEBUG_CHANNEL(file);
-static unsigned int page_size; -
/*********************************************************************** * VirtualAlloc (KERNEL32.@) @@ -648,19 +646,17 @@ BOOL WINAPI IsBadReadPtr( LPCVOID ptr, UINT size ) { if (!size) return FALSE; /* handle 0 size case w/o reference */ if (!ptr) return TRUE; - - if (!page_size) page_size = getpagesize(); __TRY { volatile const char *p = ptr; char dummy __attribute__((unused)); UINT count = size;
- while (count > page_size) + while (count > system_info.PageSize) { dummy = *p; - p += page_size; - count -= page_size; + p += system_info.PageSize; + count -= system_info.PageSize; } dummy = p[0]; dummy = p[count - 1]; @@ -692,18 +688,16 @@ BOOL WINAPI IsBadWritePtr( LPVOID ptr, UINT size ) { if (!size) return FALSE; /* handle 0 size case w/o reference */ if (!ptr) return TRUE; - - if (!page_size) page_size = getpagesize(); __TRY { volatile char *p = ptr; UINT count = size;
- while (count > page_size) + while (count > system_info.PageSize) { *p |= 0; - p += page_size; - count -= page_size; + p += system_info.PageSize; + count -= system_info.PageSize; } p[0] |= 0; p[count - 1] |= 0;