Alexandre Julliard : winedos: Handle memory reservation errors more gracefully.

Alexandre Julliard julliard at winehq.org
Mon Apr 14 17:20:49 CDT 2008


Module: wine
Branch: master
Commit: 16e8633ee597c68336bc1b1561260fa7d0eced2b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=16e8633ee597c68336bc1b1561260fa7d0eced2b

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon Apr 14 20:39:52 2008 +0200

winedos: Handle memory reservation errors more gracefully.

---

 dlls/winedos/dosmem.c      |    5 ++---
 programs/winevdm/winevdm.c |    8 +++++++-
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/dlls/winedos/dosmem.c b/dlls/winedos/dosmem.c
index 9829f1a..876a3e7 100644
--- a/dlls/winedos/dosmem.c
+++ b/dlls/winedos/dosmem.c
@@ -506,14 +506,13 @@ BOOL DOSMEM_MapDosLayout(void)
         unsigned short  sel;
         LDT_ENTRY       entry;
 
-        if (DOSMEM_dosmem)
+        if (DOSMEM_dosmem || !VirtualProtect( NULL, DOSMEM_SIZE, PAGE_EXECUTE_READWRITE, NULL ))
         {
-            ERR( "Needs access to the first megabyte for DOS mode\n" );
+            ERR( "Need full access to the first megabyte for DOS mode\n" );
             ExitProcess(1);
         }
         MESSAGE( "Warning: unprotecting memory to allow real-mode calls.\n"
                  "         NULL pointer accesses will no longer be caught.\n" );
-        VirtualProtect( NULL, DOSMEM_SIZE, PAGE_EXECUTE_READWRITE, NULL );
         /* copy the BIOS and ISR area down */
         memcpy( DOSMEM_dosmem, DOSMEM_sysmem, 0x400 + 0x100 );
         DOSMEM_sysmem = DOSMEM_dosmem;
diff --git a/programs/winevdm/winevdm.c b/programs/winevdm/winevdm.c
index 140efab..263f561 100644
--- a/programs/winevdm/winevdm.c
+++ b/programs/winevdm/winevdm.c
@@ -383,6 +383,7 @@ int main( int argc, char *argv[] )
     char *cmdline, *appname, **first_arg;
     char *p;
     HMODULE winedos;
+    MEMORY_BASIC_INFORMATION mem_info;
 
     if (!argv[1]) usage();
 
@@ -405,7 +406,12 @@ int main( int argc, char *argv[] )
     if (!(winedos = LoadLibraryA( "winedos.dll" )) ||
         !(wine_load_dos_exe = (void *)GetProcAddress( winedos, "wine_load_dos_exe" )))
     {
-        WINE_MESSAGE( "winevdm: unable to exec '%s': 16-bit support missing\n", argv[1] );
+        WINE_MESSAGE( "winevdm: unable to exec '%s': DOS support unavailable\n", appname );
+        ExitProcess(1);
+    }
+    if (!VirtualQuery( NULL, &mem_info, sizeof(mem_info) ) || mem_info.State == MEM_FREE)
+    {
+        WINE_MESSAGE( "winevdm: unable to exec '%s': DOS memory range unavailable\n", appname );
         ExitProcess(1);
     }
 




More information about the wine-cvs mailing list