Alexandre Julliard : krnl386.exe: Retrieve the page size from ntdll.
Alexandre Julliard
julliard at winehq.org
Tue Jan 8 13:58:43 CST 2013
Module: wine
Branch: master
Commit: ac5319630d7882bb1380240ba1bc3d89314b2416
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ac5319630d7882bb1380240ba1bc3d89314b2416
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Jan 8 14:00:44 2013 +0100
krnl386.exe: Retrieve the page size from ntdll.
---
dlls/krnl386.exe16/global.c | 5 ++++-
dlls/krnl386.exe16/int31.c | 14 ++++++++++----
dlls/toolhelp.dll16/toolhelp.c | 4 +++-
3 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/dlls/krnl386.exe16/global.c b/dlls/krnl386.exe16/global.c
index d9dcb1b..699463c 100644
--- a/dlls/krnl386.exe16/global.c
+++ b/dlls/krnl386.exe16/global.c
@@ -963,9 +963,12 @@ WORD WINAPI GlobalHandleToSel16( HGLOBAL16 handle )
*/
DWORD WINAPI GetFreeMemInfo16(void)
{
+ SYSTEM_BASIC_INFORMATION info;
MEMORYSTATUS status;
+
+ NtQuerySystemInformation( SystemBasicInformation, &info, sizeof(info), NULL );
GlobalMemoryStatus( &status );
- return MAKELONG( status.dwTotalVirtual/getpagesize(), status.dwAvailVirtual/getpagesize() );
+ return MAKELONG( status.dwTotalVirtual / info.PageSize, status.dwAvailVirtual / info.PageSize );
}
/***********************************************************************
diff --git a/dlls/krnl386.exe16/int31.c b/dlls/krnl386.exe16/int31.c
index ac9ae1f..5eddcca 100644
--- a/dlls/krnl386.exe16/int31.c
+++ b/dlls/krnl386.exe16/int31.c
@@ -1312,6 +1312,7 @@ void WINAPI DOSVM_Int31Handler( CONTEXT *context )
TRACE("get free memory information\n");
{
MEMORYSTATUS status;
+ SYSTEM_BASIC_INFORMATION sbi;
/* the layout is just the same as MEMMANINFO, but without
* the dwSize entry.
@@ -1331,7 +1332,9 @@ void WINAPI DOSVM_Int31Handler( CONTEXT *context )
} *info = CTX_SEG_OFF_TO_LIN( context, context->SegEs, context->Edi );
GlobalMemoryStatus( &status );
- info->wPageSize = getpagesize();
+ NtQuerySystemInformation( SystemBasicInformation, &sbi, sizeof(sbi), NULL );
+
+ info->wPageSize = sbi.PageSize;
info->dwLargestFreeBlock = status.dwAvailVirtual;
info->dwMaxPagesAvailable = info->dwLargestFreeBlock / info->wPageSize;
info->dwMaxPagesLockable = info->dwMaxPagesAvailable;
@@ -1418,11 +1421,14 @@ void WINAPI DOSVM_Int31Handler( CONTEXT *context )
break;
case 0x0604: /* Get page size */
+ {
+ SYSTEM_BASIC_INFORMATION info;
TRACE("get pagesize\n");
- SET_BX( context, HIWORD(getpagesize()) );
- SET_CX( context, LOWORD(getpagesize()) );
+ NtQuerySystemInformation( SystemBasicInformation, &info, sizeof(info), NULL );
+ SET_BX( context, HIWORD(info.PageSize) );
+ SET_CX( context, LOWORD(info.PageSize) );
break;
-
+ }
case 0x0700: /* Mark pages as paging candidates */
TRACE( "mark pages as paging candidates - ignored (no paging)\n" );
break;
diff --git a/dlls/toolhelp.dll16/toolhelp.c b/dlls/toolhelp.dll16/toolhelp.c
index fb001ea..4fa1500 100644
--- a/dlls/toolhelp.dll16/toolhelp.c
+++ b/dlls/toolhelp.dll16/toolhelp.c
@@ -491,6 +491,7 @@ BOOL16 WINAPI TaskFindHandle16( TASKENTRY *lpte, HTASK16 hTask )
*/
BOOL16 WINAPI MemManInfo16( MEMMANINFO *info )
{
+ SYSTEM_BASIC_INFORMATION sbi;
MEMORYSTATUS status;
/*
@@ -498,8 +499,9 @@ BOOL16 WINAPI MemManInfo16( MEMMANINFO *info )
* _must_ provide the size in the dwSize field, this function
* (under Windows) always fills the structure and returns true.
*/
+ NtQuerySystemInformation( SystemBasicInformation, &sbi, sizeof(sbi), NULL );
GlobalMemoryStatus( &status );
- info->wPageSize = getpagesize();
+ info->wPageSize = sbi.PageSize;
info->dwLargestFreeBlock = status.dwAvailVirtual;
info->dwMaxPagesAvailable = info->dwLargestFreeBlock / info->wPageSize;
info->dwMaxPagesLockable = info->dwMaxPagesAvailable;
More information about the wine-cvs
mailing list