Handle MENUITEMINFOW compiled with _WIN32_WINNT < 0x0500 (MENUITEMINFOW
authorGé van Geldorp <ge@gse.nl>
Sun, 2 May 2004 21:41:18 +0000 (21:41 +0000)
committerGé van Geldorp <ge@gse.nl>
Sun, 2 May 2004 21:41:18 +0000 (21:41 +0000)
misses the HBITMAP hbmpItem at the end in that case).

svn path=/trunk/; revision=9287

reactos/subsys/win32k/ntuser/menu.c

index 1a3dc6d..d0c4c2a 100644 (file)
@@ -16,7 +16,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-/* $Id: menu.c,v 1.52 2004/03/25 12:32:13 gvg Exp $
+/* $Id: menu.c,v 1.53 2004/05/02 21:41:18 gvg Exp $
  *
  * COPYRIGHT:        See COPYING in the top level directory
  * PROJECT:          ReactOS kernel
@@ -1750,8 +1750,11 @@ NtUserMenuItemInfo(
       SetLastNtError(Status);
       return FALSE;
     }
-  if(sizeof(MENUITEMINFOW) != Size && sizeof(ROSMENUITEMINFO) != Size)
+  if (sizeof(MENUITEMINFOW) != Size
+      && sizeof(MENUITEMINFOW) - sizeof(HBITMAP) != Size
+      && sizeof(ROSMENUITEMINFO) != Size)
     {
+      IntReleaseMenuObject(MenuObject);
       SetLastWin32Error(ERROR_INVALID_PARAMETER);
       return FALSE;
     }
@@ -1762,6 +1765,15 @@ NtUserMenuItemInfo(
       SetLastNtError(Status);
       return FALSE;
     }
+  /* If this is a pre-0x0500 _WIN32_WINNT MENUITEMINFOW, you can't
+     set/get hbmpItem */
+  if (sizeof(MENUITEMINFOW) - sizeof(HBITMAP) == Size
+      && 0 != (ItemInfo.fMask & MIIM_BITMAP))
+    {
+      IntReleaseMenuObject(MenuObject);
+      SetLastWin32Error(ERROR_INVALID_PARAMETER);
+      return FALSE;
+    }
 
   if (IntGetMenuItemByFlag(MenuObject, Item,
                            (ByPosition ? MF_BYPOSITION : MF_BYCOMMAND),