Alexandre Julliard : ntdll: Return more correct information for SystemBasicInformation and GetSystemInfo .
Alexandre Julliard
julliard at winehq.org
Mon Nov 3 09:06:55 CST 2008
Module: wine
Branch: master
Commit: 3d6313c9ce6bb1ebe10f61223ba42ddf99075370
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3d6313c9ce6bb1ebe10f61223ba42ddf99075370
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Nov 3 13:23:48 2008 +0100
ntdll: Return more correct information for SystemBasicInformation and GetSystemInfo.
---
dlls/kernel32/cpu.c | 15 ++++++++-------
dlls/ntdll/nt.c | 12 +-----------
dlls/ntdll/ntdll_misc.h | 1 +
dlls/ntdll/virtual.c | 19 +++++++++++++++++++
4 files changed, 29 insertions(+), 18 deletions(-)
diff --git a/dlls/kernel32/cpu.c b/dlls/kernel32/cpu.c
index a49df99..6f50009 100644
--- a/dlls/kernel32/cpu.c
+++ b/dlls/kernel32/cpu.c
@@ -367,6 +367,7 @@ VOID WINAPI GetSystemInfo(
{
static int cache = 0;
static SYSTEM_INFO cachedsi;
+ SYSTEM_BASIC_INFORMATION sbi;
TRACE("si=0x%p\n", si);
if (cache) {
@@ -375,19 +376,19 @@ VOID WINAPI GetSystemInfo(
}
memset(PF,0,sizeof(PF));
+ NtQuerySystemInformation( SystemBasicInformation, &sbi, sizeof(sbi), NULL );
+ cachedsi.dwPageSize = sbi.uPageSize;
+ cachedsi.lpMinimumApplicationAddress = sbi.pLowestUserAddress;
+ cachedsi.lpMaximumApplicationAddress = sbi.pMmHighestUserAddress;
+ cachedsi.dwNumberOfProcessors = sbi.uKeActiveProcessors;
+ cachedsi.dwAllocationGranularity = sbi.uAllocationGranularity;
+
/* choose sensible defaults ...
* FIXME: perhaps overridable with precompiler flags?
*/
cachedsi.u.s.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_INTEL;
- cachedsi.dwPageSize = getpagesize();
-
- /* FIXME: the two entries below should be computed somehow... */
- cachedsi.lpMinimumApplicationAddress = (void *)0x00010000;
- cachedsi.lpMaximumApplicationAddress = (void *)0x7FFEFFFF;
cachedsi.dwActiveProcessorMask = 0;
- cachedsi.dwNumberOfProcessors = 1;
cachedsi.dwProcessorType = PROCESSOR_INTEL_PENTIUM;
- cachedsi.dwAllocationGranularity = 0x10000;
cachedsi.wProcessorLevel = 5; /* 586 */
cachedsi.wProcessorRevision = 0;
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
index 5b0c0bf..37e3ee9 100644
--- a/dlls/ntdll/nt.c
+++ b/dlls/ntdll/nt.c
@@ -708,17 +708,7 @@ NTSTATUS WINAPI NtQuerySystemInformation(
{
SYSTEM_BASIC_INFORMATION sbi;
- sbi.dwUnknown1 = 0;
- sbi.uKeMaximumIncrement = 0;
- sbi.uPageSize = 1024; /* FIXME */
- sbi.uMmNumberOfPhysicalPages = 12345; /* FIXME */
- sbi.uMmLowestPhysicalPage = 0; /* FIXME */
- sbi.uMmHighestPhysicalPage = 12345; /* FIXME */
- sbi.uAllocationGranularity = 65536; /* FIXME */
- sbi.pLowestUserAddress = 0; /* FIXME */
- sbi.pMmHighestUserAddress = (void*)~0; /* FIXME */
- sbi.uKeActiveProcessors = 1; /* FIXME */
- sbi.bKeNumberProcessors = 1; /* FIXME */
+ virtual_get_system_info( &sbi );
len = sizeof(sbi);
if ( Length == len)
diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
index a8fcf63..beffd77 100644
--- a/dlls/ntdll/ntdll_misc.h
+++ b/dlls/ntdll/ntdll_misc.h
@@ -135,6 +135,7 @@ extern NTSTATUS DIR_get_unix_cwd( char **cwd );
extern unsigned int DIR_get_drives_info( struct drive_info info[MAX_DOS_DRIVES] );
/* virtual memory */
+extern void virtual_get_system_info( SYSTEM_BASIC_INFORMATION *info );
extern NTSTATUS virtual_alloc_thread_stack( void *base, SIZE_T stack_size );
extern void virtual_clear_thread_stack(void);
extern BOOL virtual_handle_stack_fault( void *addr );
diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c
index 50b794c..1a27bd1 100644
--- a/dlls/ntdll/virtual.c
+++ b/dlls/ntdll/virtual.c
@@ -1234,6 +1234,25 @@ void virtual_init_threading(void)
/***********************************************************************
+ * virtual_get_system_info
+ */
+void virtual_get_system_info( SYSTEM_BASIC_INFORMATION *info )
+{
+ info->dwUnknown1 = 0;
+ info->uKeMaximumIncrement = 0; /* FIXME */
+ info->uPageSize = page_size;
+ info->uMmLowestPhysicalPage = 1;
+ info->uMmHighestPhysicalPage = 0x7fffffff / page_size;
+ info->uMmNumberOfPhysicalPages = info->uMmHighestPhysicalPage - info->uMmLowestPhysicalPage;
+ info->uAllocationGranularity = get_mask(0) + 1;
+ info->pLowestUserAddress = (void *)0x10000;
+ info->pMmHighestUserAddress = (char *)user_space_limit - 1;
+ info->uKeActiveProcessors = NtCurrentTeb()->Peb->NumberOfProcessors;
+ info->bKeNumberProcessors = info->uKeActiveProcessors;
+}
+
+
+/***********************************************************************
* virtual_alloc_thread_stack
*/
NTSTATUS virtual_alloc_thread_stack( void *base, SIZE_T size )
More information about the wine-cvs
mailing list