Moved win32k
[reactos.git] / reactos / subsys / win32k / ntuser / menu.c
diff --git a/reactos/subsys/win32k/ntuser/menu.c b/reactos/subsys/win32k/ntuser/menu.c
deleted file mode 100644 (file)
index 2bc6dfb..0000000
+++ /dev/null
@@ -1,2398 +0,0 @@
-/*
- *  ReactOS W32 Subsystem
- *  Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 ReactOS Team
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/* $Id$
- *
- * COPYRIGHT:        See COPYING in the top level directory
- * PROJECT:          ReactOS kernel
- * PURPOSE:          Menus
- * FILE:             subsys/win32k/ntuser/menu.c
- * PROGRAMER:        Thomas Weidenmueller (w3seek@users.sourceforge.net)
- * REVISION HISTORY:
- *       07/30/2003  CSH  Created
- */
-/* INCLUDES ******************************************************************/
-
-#include <w32k.h>
-
-#define NDEBUG
-#include <debug.h>
-
-PMENU_OBJECT FASTCALL
-IntGetSystemMenu(PWINDOW_OBJECT Window, BOOL bRevert, BOOL RetMenu);
-
-
-
-/* STATIC FUNCTION ***********************************************************/
-
-static
-BOOL FASTCALL
-UserMenuItemInfo(
-   PMENU_OBJECT Menu,
-   UINT Item,
-   BOOL ByPosition,
-   PROSMENUITEMINFO UnsafeItemInfo,
-   BOOL SetOrGet);
-
-static
-BOOL FASTCALL
-UserMenuInfo(
-   PMENU_OBJECT Menu,
-   PROSMENUINFO UnsafeMenuInfo,
-   BOOL SetOrGet);
-
-/* INTERNAL ******************************************************************/
-
-/* maximum number of menu items a menu can contain */
-#define MAX_MENU_ITEMS (0x4000)
-#define MAX_GOINTOSUBMENU (0x10)
-
-#define UpdateMenuItemState(state, change) \
-{\
-  if((change) & MFS_DISABLED) { \
-    (state) |= MFS_DISABLED; \
-  } else { \
-    (state) &= ~MFS_DISABLED; \
-  } \
-  if((change) & MFS_CHECKED) { \
-    (state) |= MFS_CHECKED; \
-  } else { \
-    (state) &= ~MFS_CHECKED; \
-  } \
-  if((change) & MFS_HILITE) { \
-    (state) |= MFS_HILITE; \
-  } else { \
-    (state) &= ~MFS_HILITE; \
-  } \
-  if((change) & MFS_DEFAULT) { \
-    (state) |= MFS_DEFAULT; \
-  } else { \
-    (state) &= ~MFS_DEFAULT; \
-  } \
-  if((change) & MF_MOUSESELECT) { \
-    (state) |= MF_MOUSESELECT; \
-  } else { \
-    (state) &= ~MF_MOUSESELECT; \
-  } \
-}
-
-#define FreeMenuText(MenuItem) \
-{ \
-  if((MENU_ITEM_TYPE((MenuItem)->fType) == MF_STRING) && \
-           (MenuItem)->Text.Length) { \
-    RtlFreeUnicodeString(&(MenuItem)->Text); \
-  } \
-}
-
-#define InRect(r, x, y) \
-      ( ( ((r).right >=  x)) && \
-        ( ((r).left <= x)) && \
-        ( ((r).bottom >=  y)) && \
-        ( ((r).top <= y)) )
-
-NTSTATUS FASTCALL
-InitMenuImpl(VOID)
-{
-   return(STATUS_SUCCESS);
-}
-
-NTSTATUS FASTCALL
-CleanupMenuImpl(VOID)
-{
-   return(STATUS_SUCCESS);
-}
-
-PMENU_OBJECT FASTCALL UserGetMenuObject(HMENU hMenu)
-{
-   PMENU_OBJECT Menu;
-   
-   if (!hMenu)
-   {
-      SetLastWin32Error(ERROR_INVALID_MENU_HANDLE);
-      return NULL;
-   }
-   
-   Menu = (PMENU_OBJECT)UserGetObject(&gHandleTable, hMenu, otMenu);
-   if (!Menu)
-   {
-      SetLastWin32Error(ERROR_INVALID_MENU_HANDLE);
-      return NULL;
-   }
-
-   ASSERT(USER_BODY_TO_HEADER(Menu)->RefCount >= 0);
-   return Menu;
-}
-
-
-#if 0
-void FASTCALL
-DumpMenuItemList(PMENU_ITEM MenuItem)
-{
-   UINT cnt = 0;
-   while(MenuItem)
-   {
-      if(MenuItem->Text.Length)
-         DbgPrint(" %d. %wZ\n", ++cnt, &MenuItem->Text);
-      else
-         DbgPrint(" %d. NO TEXT dwTypeData==%d\n", ++cnt, (DWORD)MenuItem->Text.Buffer);
-      DbgPrint("   fType=");
-      if(MFT_BITMAP & MenuItem->fType)
-         DbgPrint("MFT_BITMAP ");
-      if(MFT_MENUBARBREAK & MenuItem->fType)
-         DbgPrint("MFT_MENUBARBREAK ");
-      if(MFT_MENUBREAK & MenuItem->fType)
-         DbgPrint("MFT_MENUBREAK ");
-      if(MFT_OWNERDRAW & MenuItem->fType)
-         DbgPrint("MFT_OWNERDRAW ");
-      if(MFT_RADIOCHECK & MenuItem->fType)
-         DbgPrint("MFT_RADIOCHECK ");
-      if(MFT_RIGHTJUSTIFY & MenuItem->fType)
-         DbgPrint("MFT_RIGHTJUSTIFY ");
-      if(MFT_SEPARATOR & MenuItem->fType)
-         DbgPrint("MFT_SEPARATOR ");
-      if(MFT_STRING & MenuItem->fType)
-         DbgPrint("MFT_STRING ");
-      DbgPrint("\n   fState=");
-      if(MFS_DISABLED & MenuItem->fState)
-         DbgPrint("MFS_DISABLED ");
-      else
-         DbgPrint("MFS_ENABLED ");
-      if(MFS_CHECKED & MenuItem->fState)
-         DbgPrint("MFS_CHECKED ");
-      else
-         DbgPrint("MFS_UNCHECKED ");
-      if(MFS_HILITE & MenuItem->fState)
-         DbgPrint("MFS_HILITE ");
-      else
-         DbgPrint("MFS_UNHILITE ");
-      if(MFS_DEFAULT & MenuItem->fState)
-         DbgPrint("MFS_DEFAULT ");
-      if(MFS_GRAYED & MenuItem->fState)
-         DbgPrint("MFS_GRAYED ");
-      DbgPrint("\n   wId=%d\n", MenuItem->wID);
-      MenuItem = MenuItem->Next;
-   }
-   DbgPrint("Entries: %d\n", cnt);
-   return;
-}
-#endif
-
-PMENU_OBJECT FASTCALL
-IntGetMenuObject(HMENU hMenu)
-{
-   PMENU_OBJECT Menu = UserGetMenuObject(hMenu);
-   if (Menu)
-   {
-      ASSERT(USER_BODY_TO_HEADER(Menu)->RefCount >= 0);
-
-      USER_BODY_TO_HEADER(Menu)->RefCount++;
-   }
-   return Menu;
-}
-
-BOOL FASTCALL
-IntFreeMenuItem(PMENU_OBJECT Menu, PMENU_ITEM MenuItem,
-                BOOL RemoveFromList, BOOL bRecurse)
-{
-   FreeMenuText(MenuItem);
-   if(RemoveFromList)
-   {
-      /* FIXME - Remove from List */
-      Menu->MenuInfo.MenuItemCount--;
-   }
-   if(bRecurse && MenuItem->hSubMenu)
-   {
-      PMENU_OBJECT SubMenu;
-      SubMenu = UserGetMenuObject(MenuItem->hSubMenu );
-      if(SubMenu)
-      {
-         IntDestroyMenuObject(SubMenu, bRecurse, TRUE);
-      }
-   }
-
-   /* Free memory */
-   ExFreePool(MenuItem);
-
-   return TRUE;
-}
-
-BOOL FASTCALL
-IntRemoveMenuItem(PMENU_OBJECT Menu, UINT uPosition, UINT uFlags,
-                  BOOL bRecurse)
-{
-   PMENU_ITEM PrevMenuItem, MenuItem;
-   if(IntGetMenuItemByFlag(Menu, uPosition, uFlags, &MenuItem,
-                           &PrevMenuItem) > -1)
-   {
-      if(MenuItem)
-      {
-         if(PrevMenuItem)
-            PrevMenuItem->Next = MenuItem->Next;
-         else
-         {
-            Menu->MenuItemList = MenuItem->Next;
-         }
-         return IntFreeMenuItem(Menu, MenuItem, TRUE, bRecurse);
-      }
-   }
-   return FALSE;
-}
-
-UINT FASTCALL
-IntDeleteMenuItems(PMENU_OBJECT Menu, BOOL bRecurse)
-{
-   UINT res = 0;
-   PMENU_ITEM NextItem;
-   PMENU_ITEM CurItem = Menu->MenuItemList;
-   while(CurItem)
-   {
-      NextItem = CurItem->Next;
-      IntFreeMenuItem(Menu, CurItem, FALSE, bRecurse);
-      CurItem = NextItem;
-      res++;
-   }
-   Menu->MenuInfo.MenuItemCount = 0;
-   Menu->MenuItemList = NULL;
-   return res;
-}
-
-BOOL FASTCALL
-IntDestroyMenuObject(PMENU_OBJECT Menu,
-                     BOOL bRecurse, BOOL RemoveFromProcess)
-{
-   if(Menu)
-   {
-      PWINSTATION_OBJECT WindowStation;
-      NTSTATUS Status;
-
-      /* remove all menu items */
-      IntDeleteMenuItems(Menu, bRecurse); /* do not destroy submenus */
-
-      if(RemoveFromProcess)
-      {
-         RemoveEntryList(&Menu->ListEntry);
-      }
-
-      Status = ObReferenceObjectByHandle(Menu->Process->Win32WindowStation,
-                                         0,
-                                         ExWindowStationObjectType,
-                                         KernelMode,
-                                         (PVOID*)&WindowStation,
-                                         NULL);
-      if(NT_SUCCESS(Status))
-      {
-         ObmDeleteObject(Menu->MenuInfo.Self, otMenu);
-         ObDereferenceObject(WindowStation);
-         return TRUE;
-      }
-   }
-   return FALSE;
-}
-
-PMENU_OBJECT FASTCALL
-IntCreateMenu(PHANDLE Handle, BOOL IsMenuBar)
-{
-   PMENU_OBJECT Menu;
-
-   Menu = (PMENU_OBJECT)ObmCreateObject(
-             &gHandleTable, Handle,
-             otMenu, sizeof(MENU_OBJECT));
-
-   if(!Menu)
-   {
-      *Handle = 0;
-      return NULL;
-   }
-
-   Menu->Process = PsGetCurrentProcess();
-   Menu->RtoL = FALSE; /* default */
-   Menu->MenuInfo.cbSize = sizeof(MENUINFO); /* not used */
-   Menu->MenuInfo.fMask = 0; /* not used */
-   Menu->MenuInfo.dwStyle = 0; /* FIXME */
-   Menu->MenuInfo.cyMax = 0; /* default */
-   Menu->MenuInfo.hbrBack =
-      NtGdiCreateSolidBrush(RGB(192, 192, 192), 0); /* FIXME: default background color */
-   Menu->MenuInfo.dwContextHelpID = 0; /* default */
-   Menu->MenuInfo.dwMenuData = 0; /* default */
-   Menu->MenuInfo.Self = *Handle;
-   Menu->MenuInfo.FocusedItem = NO_SELECTED_ITEM;
-   Menu->MenuInfo.Flags = (IsMenuBar ? 0 : MF_POPUP);
-   Menu->MenuInfo.Wnd = NULL;
-   Menu->MenuInfo.WndOwner = NULL;
-   Menu->MenuInfo.Height = 0;
-   Menu->MenuInfo.Width = 0;
-   Menu->MenuInfo.TimeToHide = FALSE;
-
-   Menu->MenuInfo.MenuItemCount = 0;
-   Menu->MenuItemList = NULL;
-
-   /* Insert menu item into process menu handle list */
-   InsertTailList(&PsGetWin32Process()->MenuListHead, &Menu->ListEntry);
-
-   return Menu;
-}
-
-BOOL FASTCALL
-IntCloneMenuItems(PMENU_OBJECT Destination, PMENU_OBJECT Source)
-{
-   PMENU_ITEM MenuItem, NewMenuItem = NULL;
-   PMENU_ITEM Old = NULL;
-
-   if(!Source->MenuInfo.MenuItemCount)
-      return FALSE;
-
-   MenuItem = Source->MenuItemList;
-   while(MenuItem)
-   {
-      Old = NewMenuItem;
-      if(NewMenuItem)
-         NewMenuItem->Next = MenuItem;
-      NewMenuItem = ExAllocatePoolWithTag(PagedPool, sizeof(MENU_ITEM), TAG_MENUITEM);
-      if(!NewMenuItem)
-         break;
-      NewMenuItem->fType = MenuItem->fType;
-      NewMenuItem->fState = MenuItem->fState;
-      NewMenuItem->wID = MenuItem->wID;
-      NewMenuItem->hSubMenu = MenuItem->hSubMenu;
-      NewMenuItem->hbmpChecked = MenuItem->hbmpChecked;
-      NewMenuItem->hbmpUnchecked = MenuItem->hbmpUnchecked;
-      NewMenuItem->dwItemData = MenuItem->dwItemData;
-      if((MENU_ITEM_TYPE(NewMenuItem->fType) == MF_STRING))
-      {
-         if(MenuItem->Text.Length)
-         {
-            NewMenuItem->Text.Length = 0;
-            NewMenuItem->Text.MaximumLength = MenuItem->Text.MaximumLength;
-            NewMenuItem->Text.Buffer = (PWSTR)ExAllocatePoolWithTag(PagedPool, MenuItem->Text.MaximumLength, TAG_STRING);
-            if(!NewMenuItem->Text.Buffer)
-            {
-               ExFreePool(NewMenuItem);
-               break;
-            }
-            RtlCopyUnicodeString(&NewMenuItem->Text, &MenuItem->Text);
-         }
-         else
-         {
-            NewMenuItem->Text.Buffer = MenuItem->Text.Buffer;
-         }
-      }
-      else
-      {
-         NewMenuItem->Text.Buffer = MenuItem->Text.Buffer;
-      }
-      NewMenuItem->hbmpItem = MenuItem->hbmpItem;
-
-      NewMenuItem->Next = NULL;
-      if(Old)
-         Old->Next = NewMenuItem;
-      else
-         Destination->MenuItemList = NewMenuItem;
-      Destination->MenuInfo.MenuItemCount++;
-      MenuItem = MenuItem->Next;
-   }
-
-   return TRUE;
-}
-
-PMENU_OBJECT FASTCALL
-IntCloneMenu(PMENU_OBJECT Source)
-{
-   HANDLE hMenu;
-   PMENU_OBJECT Menu;
-
-   if(!Source)
-      return NULL;
-
-   Menu = (PMENU_OBJECT)ObmCreateObject(
-             &gHandleTable, &hMenu,
-             otMenu, sizeof(MENU_OBJECT));
-
-   if(!Menu)
-      return NULL;
-
-   Menu->Process = PsGetCurrentProcess();
-   Menu->RtoL = Source->RtoL;
-   Menu->MenuInfo.cbSize = sizeof(MENUINFO); /* not used */
-   Menu->MenuInfo.fMask = Source->MenuInfo.fMask;
-   Menu->MenuInfo.dwStyle = Source->MenuInfo.dwStyle;
-   Menu->MenuInfo.cyMax = Source->MenuInfo.cyMax;
-   Menu->MenuInfo.hbrBack = Source->MenuInfo.hbrBack;
-   Menu->MenuInfo.dwContextHelpID = Source->MenuInfo.dwContextHelpID;
-   Menu->MenuInfo.dwMenuData = Source->MenuInfo.dwMenuData;
-   Menu->MenuInfo.Self = hMenu;
-   Menu->MenuInfo.FocusedItem = NO_SELECTED_ITEM;
-   Menu->MenuInfo.Wnd = NULL;
-   Menu->MenuInfo.WndOwner = NULL;
-   Menu->MenuInfo.Height = 0;
-   Menu->MenuInfo.Width = 0;
-   Menu->MenuInfo.TimeToHide = FALSE;
-
-   Menu->MenuInfo.MenuItemCount = 0;
-   Menu->MenuItemList = NULL;
-
-   /* Insert menu item into process menu handle list */
-   InsertTailList(&PsGetWin32Process()->MenuListHead, &Menu->ListEntry);
-
-   IntCloneMenuItems(Menu, Source);
-
-   return Menu;
-}
-
-BOOL FASTCALL
-IntSetMenuFlagRtoL(PMENU_OBJECT Menu)
-{
-   Menu->RtoL = TRUE;
-   return TRUE;
-}
-
-BOOL FASTCALL
-IntSetMenuContextHelpId(PMENU_OBJECT Menu, DWORD dwContextHelpId)
-{
-   Menu->MenuInfo.dwContextHelpID = dwContextHelpId;
-   return TRUE;
-}
-
-BOOL FASTCALL
-IntGetMenuInfo(PMENU_OBJECT Menu, PROSMENUINFO lpmi)
-{
-   if(lpmi->fMask & MIM_BACKGROUND)
-      lpmi->hbrBack = Menu->MenuInfo.hbrBack;
-   if(lpmi->fMask & MIM_HELPID)
-      lpmi->dwContextHelpID = Menu->MenuInfo.dwContextHelpID;
-   if(lpmi->fMask & MIM_MAXHEIGHT)
-      lpmi->cyMax = Menu->MenuInfo.cyMax;
-   if(lpmi->fMask & MIM_MENUDATA)
-      lpmi->dwMenuData = Menu->MenuInfo.dwMenuData;
-   if(lpmi->fMask & MIM_STYLE)
-      lpmi->dwStyle = Menu->MenuInfo.dwStyle;
-   if (sizeof(MENUINFO) < lpmi->cbSize)
-   {
-      RtlCopyMemory((char *) lpmi + sizeof(MENUINFO),
-                    (char *) &Menu->MenuInfo + sizeof(MENUINFO),
-                    lpmi->cbSize - sizeof(MENUINFO));
-   }
-   if (sizeof(ROSMENUINFO) == lpmi->cbSize)
-   {
-     lpmi->maxBmpSize.cx = Menu->MenuInfo.maxBmpSize.cx;
-     lpmi->maxBmpSize.cy = Menu->MenuInfo.maxBmpSize.cy;
-   }
-   return TRUE;
-}
-
-
-BOOL FASTCALL
-IntIsMenu(HMENU hMenu)
-{
-   PMENU_OBJECT Menu;
-
-   if((Menu = UserGetMenuObject(hMenu)))
-   {
-      return TRUE;
-   }
-   return FALSE;
-}
-
-
-BOOL FASTCALL
-IntSetMenuInfo(PMENU_OBJECT Menu, PROSMENUINFO lpmi)
-{
-   if(lpmi->fMask & MIM_BACKGROUND)
-      Menu->MenuInfo.hbrBack = lpmi->hbrBack;
-   if(lpmi->fMask & MIM_HELPID)
-      Menu->MenuInfo.dwContextHelpID = lpmi->dwContextHelpID;
-   if(lpmi->fMask & MIM_MAXHEIGHT)
-      Menu->MenuInfo.cyMax = lpmi->cyMax;
-   if(lpmi->fMask & MIM_MENUDATA)
-      Menu->MenuInfo.dwMenuData = lpmi->dwMenuData;
-   if(lpmi->fMask & MIM_STYLE)
-      Menu->MenuInfo.dwStyle = lpmi->dwStyle;
-   if(lpmi->fMask & MIM_APPLYTOSUBMENUS)
-   {
-      /* FIXME */
-   }
-   if (sizeof(MENUINFO) < lpmi->cbSize)
-   {
-      Menu->MenuInfo.FocusedItem = lpmi->FocusedItem;
-      Menu->MenuInfo.Height = lpmi->Height;
-      Menu->MenuInfo.Width = lpmi->Width;
-      Menu->MenuInfo.Wnd = lpmi->Wnd;
-      Menu->MenuInfo.WndOwner = lpmi->WndOwner;
-      Menu->MenuInfo.TimeToHide = lpmi->TimeToHide;
-   }
-   if (sizeof(ROSMENUINFO) == lpmi->cbSize)
-   {
-     Menu->MenuInfo.maxBmpSize.cx = lpmi->maxBmpSize.cx;
-     Menu->MenuInfo.maxBmpSize.cy = lpmi->maxBmpSize.cy;
-   }
-   return TRUE;
-}
-
-
-int FASTCALL
-IntGetMenuItemByFlag(PMENU_OBJECT Menu, UINT uSearchBy, UINT fFlag,
-                     PMENU_ITEM *MenuItem, PMENU_ITEM *PrevMenuItem)
-{
-   PMENU_ITEM PrevItem = NULL;
-   PMENU_ITEM CurItem = Menu->MenuItemList;
-   int p;
-   int ret;
-
-   if(MF_BYPOSITION & fFlag)
-   {
-      p = uSearchBy;
-      while(CurItem && (p > 0))
-      {
-         PrevItem = CurItem;
-         CurItem = CurItem->Next;
-         p--;
-      }
-      if(CurItem)
-      {
-         if(MenuItem)
-            *MenuItem = CurItem;
-         if(PrevMenuItem)
-            *PrevMenuItem = PrevItem;
-      }
-      else
-      {
-         if(MenuItem)
-            *MenuItem = NULL;
-         if(PrevMenuItem)
-            *PrevMenuItem = NULL; /* ? */
-         return -1;
-      }
-
-      return uSearchBy - p;
-   }
-   else
-   {
-      p = 0;
-      while(CurItem)
-      {
-         if(CurItem->wID == uSearchBy)
-         {
-            if(MenuItem)
-               *MenuItem = CurItem;
-            if(PrevMenuItem)
-               *PrevMenuItem = PrevItem;
-            return p;
-         }
-         else if (0 != (CurItem->fType & MF_POPUP))
-         {
-            Menu = UserGetMenuObject(CurItem->hSubMenu);
-            if (NULL != Menu)
-            {
-               ret = IntGetMenuItemByFlag(Menu, uSearchBy, fFlag,
-                                          MenuItem, PrevMenuItem);
-               if (-1 != ret)
-               {
-                  return ret;
-               }
-            }
-         }
-         PrevItem = CurItem;
-         CurItem = CurItem->Next;
-         p++;
-      }
-   }
-   return -1;
-}
-
-
-int FASTCALL
-IntInsertMenuItemToList(PMENU_OBJECT Menu, PMENU_ITEM MenuItem, int pos)
-{
-   PMENU_ITEM CurItem;
-   PMENU_ITEM LastItem = NULL;
-   UINT npos = 0;
-
-   CurItem = Menu->MenuItemList;
-   if(pos <= -1)
-   {
-      while(CurItem)
-      {
-         LastItem = CurItem;
-         CurItem = CurItem->Next;
-         npos++;
-      }
-   }
-   else
-   {
-      while(CurItem && (pos > 0))
-      {
-         LastItem = CurItem;
-         CurItem = CurItem->Next;
-         pos--;
-         npos++;
-      }
-   }
-
-   if(CurItem)
-   {
-      if(LastItem)
-      {
-         /* insert the item before CurItem */
-         MenuItem->Next = LastItem->Next;
-         LastItem->Next = MenuItem;
-      }
-      else
-      {
-         /* insert at the beginning */
-         Menu->MenuItemList = MenuItem;
-         MenuItem->Next = CurItem;
-      }
-   }
-   else
-   {
-      if(LastItem)
-      {
-         /* append item */
-         LastItem->Next = MenuItem;
-         MenuItem->Next = NULL;
-      }
-      else
-      {
-         /* insert first item */
-         Menu->MenuItemList = MenuItem;
-         MenuItem->Next = NULL;
-      }
-   }
-   Menu->MenuInfo.MenuItemCount++;
-
-   return npos;
-}
-
-BOOL FASTCALL
-IntGetMenuItemInfo(PMENU_OBJECT Menu, /* UNUSED PARAM!! */
-                   PMENU_ITEM MenuItem, PROSMENUITEMINFO lpmii)
-{
-   NTSTATUS Status;
-
-   if(lpmii->fMask & MIIM_BITMAP)
-   {
-      lpmii->hbmpItem = MenuItem->hbmpItem;
-   }
-   if(lpmii->fMask & MIIM_CHECKMARKS)
-   {
-      lpmii->hbmpChecked = MenuItem->hbmpChecked;
-      lpmii->hbmpUnchecked = MenuItem->hbmpUnchecked;
-   }
-   if(lpmii->fMask & MIIM_DATA)
-   {
-      lpmii->dwItemData = MenuItem->dwItemData;
-   }
-   if(lpmii->fMask & (MIIM_FTYPE | MIIM_TYPE))
-   {
-      lpmii->fType = MenuItem->fType;
-   }
-   if(lpmii->fMask & MIIM_ID)
-   {
-      lpmii->wID = MenuItem->wID;
-   }
-   if(lpmii->fMask & MIIM_STATE)
-   {
-      lpmii->fState = MenuItem->fState;
-   }
-   if(lpmii->fMask & MIIM_SUBMENU)
-   {
-      lpmii->hSubMenu = MenuItem->hSubMenu;
-   }
-   if (lpmii->fMask & (MIIM_STRING | MIIM_TYPE))
-   {
-      if (lpmii->dwTypeData == NULL)
-      {
-         lpmii->cch = MenuItem->Text.Length / sizeof(WCHAR);
-      }
-      else
-      {
-         Status = MmCopyToCaller(lpmii->dwTypeData, MenuItem->Text.Buffer,
-                                 min(lpmii->cch * sizeof(WCHAR),
-                                     MenuItem->Text.MaximumLength));
-         if (! NT_SUCCESS(Status))
-         {
-            SetLastNtError(Status);
-            return FALSE;
-         }
-      }
-   }
-
-   if (sizeof(ROSMENUITEMINFO) == lpmii->cbSize)
-   {
-      lpmii->Rect = MenuItem->Rect;
-      lpmii->XTab = MenuItem->XTab;
-   }
-
-   return TRUE;
-}
-
-BOOL FASTCALL
-IntSetMenuItemInfo(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem, PROSMENUITEMINFO lpmii)
-{
-   PMENU_OBJECT SubMenuObject;
-
-   if(!MenuItem || !MenuObject || !lpmii)
-   {
-      return FALSE;
-   }
-
-   MenuItem->fType &= ~MENU_ITEM_TYPE(MenuItem->fType);
-   MenuItem->fType |= MENU_ITEM_TYPE(lpmii->fType);
-
-   if(lpmii->fMask & MIIM_BITMAP)
-   {
-      MenuItem->hbmpItem = lpmii->hbmpItem;
-   }
-   if(lpmii->fMask & MIIM_CHECKMARKS)
-   {
-      MenuItem->hbmpChecked = lpmii->hbmpChecked;
-      MenuItem->hbmpUnchecked = lpmii->hbmpUnchecked;
-   }
-   if(lpmii->fMask & MIIM_DATA)
-   {
-      MenuItem->dwItemData = lpmii->dwItemData;
-   }
-   if(lpmii->fMask & (MIIM_FTYPE | MIIM_TYPE))
-   {
-      /*
-       * Delete the menu item type when changing type from
-       * MF_STRING.
-       */
-      if (MenuItem->fType != lpmii->fType &&
-            MENU_ITEM_TYPE(MenuItem->fType) == MF_STRING)
-      {
-         FreeMenuText(MenuItem);
-         RtlInitUnicodeString(&MenuItem->Text, NULL);
-      }
-      MenuItem->fType &= ~MENU_ITEM_TYPE(MenuItem->fType);
-      MenuItem->fType |= MENU_ITEM_TYPE(lpmii->fType);
-   }
-   if(lpmii->fMask & MIIM_ID)
-   {
-      MenuItem->wID = lpmii->wID;
-   }
-   if(lpmii->fMask & MIIM_STATE)
-   {
-      /* remove MFS_DEFAULT flag from all other menu items if this item
-         has the MFS_DEFAULT state */
-      if(lpmii->fState & MFS_DEFAULT)
-         UserSetMenuDefaultItem(MenuObject, -1, 0);
-      /* update the menu item state flags */
-      UpdateMenuItemState(MenuItem->fState, lpmii->fState);
-   }
-
-   if(lpmii->fMask & MIIM_SUBMENU)
-   {
-      MenuItem->hSubMenu = lpmii->hSubMenu;
-      /* Make sure the submenu is marked as a popup menu */
-      if (MenuItem->hSubMenu)
-      {
-         SubMenuObject = UserGetMenuObject(MenuItem->hSubMenu);
-         if (SubMenuObject != NULL)
-         {
-            SubMenuObject->MenuInfo.Flags |= MF_POPUP;
-            MenuItem->fType |= MF_POPUP;
-         }
-         else
-         {
-            MenuItem->fType &= ~MF_POPUP;
-         }
-      }
-      else
-      {
-         MenuItem->fType &= ~MF_POPUP;
-      }
-   }
-   if ((lpmii->fMask & (MIIM_TYPE | MIIM_STRING)) &&
-         (MENU_ITEM_TYPE(lpmii->fType) == MF_STRING))
-   {
-      FreeMenuText(MenuItem);
-
-      if(lpmii->dwTypeData && lpmii->cch)
-      {
-         UNICODE_STRING Source;
-
-         Source.Length =
-            Source.MaximumLength = lpmii->cch * sizeof(WCHAR);
-         Source.Buffer = lpmii->dwTypeData;
-
-         MenuItem->Text.Buffer = (PWSTR)ExAllocatePoolWithTag(
-                                    PagedPool, Source.Length + sizeof(WCHAR), TAG_STRING);
-         if(MenuItem->Text.Buffer != NULL)
-         {
-            MenuItem->Text.Length = 0;
-            MenuItem->Text.MaximumLength = Source.Length + sizeof(WCHAR);
-            RtlCopyUnicodeString(&MenuItem->Text, &Source);
-            MenuItem->Text.Buffer[MenuItem->Text.Length / sizeof(WCHAR)] = 0;
-         }
-         else
-         {
-            RtlInitUnicodeString(&MenuItem->Text, NULL);
-         }
-      }
-      else
-      {
-         if (0 == (MenuObject->MenuInfo.Flags & MF_SYSMENU))
-         {
-            MenuItem->fType |= MF_SEPARATOR;
-         }
-         RtlInitUnicodeString(&MenuItem->Text, NULL);
-      }
-   }
-
-   if (sizeof(ROSMENUITEMINFO) == lpmii->cbSize)
-   {
-      MenuItem->Rect = lpmii->Rect;
-      MenuItem->XTab = lpmii->XTab;
-   }
-
-   return TRUE;
-}
-
-BOOL FASTCALL
-IntInsertMenuItem(PMENU_OBJECT MenuObject, UINT uItem, BOOL fByPosition,
-                  PROSMENUITEMINFO ItemInfo)
-{
-   int pos = (int)uItem;
-   PMENU_ITEM MenuItem;
-
-   if (MAX_MENU_ITEMS <= MenuObject->MenuInfo.MenuItemCount)
-   {
-      SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
-      return FALSE;
-   }
-
-   if (fByPosition)
-   {
-      /* calculate position */
-      if(MenuObject->MenuInfo.MenuItemCount < pos)
-      {
-         pos = MenuObject->MenuInfo.MenuItemCount;
-      }
-   }
-   else
-   {
-      pos = IntGetMenuItemByFlag(MenuObject, uItem, MF_BYCOMMAND, NULL, NULL);
-   }
-   if (pos < -1)
-   {
-      pos = -1;
-   }
-
-   MenuItem = ExAllocatePoolWithTag(PagedPool, sizeof(MENU_ITEM), TAG_MENUITEM);
-   if (NULL == MenuItem)
-   {
-      SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
-      return FALSE;
-   }
-
-   MenuItem->fType = MFT_STRING;
-   MenuItem->fState = MFS_ENABLED | MFS_UNCHECKED;
-   MenuItem->wID = 0;
-   MenuItem->hSubMenu = (HMENU)0;
-   MenuItem->hbmpChecked = (HBITMAP)0;
-   MenuItem->hbmpUnchecked = (HBITMAP)0;
-   MenuItem->dwItemData = 0;
-   RtlInitUnicodeString(&MenuItem->Text, NULL);
-   MenuItem->hbmpItem = (HBITMAP)0;
-
-   if (! IntSetMenuItemInfo(MenuObject, MenuItem, ItemInfo))
-   {
-      ExFreePool(MenuItem);
-      return FALSE;
-   }
-
-   /* Force size recalculation! */
-   MenuObject->MenuInfo.Height = 0;
-
-   pos = IntInsertMenuItemToList(MenuObject, MenuItem, pos);
-
-   DPRINT("IntInsertMenuItemToList = %i\n", pos);
-
-   return (pos >= 0);
-}
-
-UINT FASTCALL
-IntEnableMenuItem(PMENU_OBJECT MenuObject, UINT uIDEnableItem, UINT uEnable)
-{
-   PMENU_ITEM MenuItem;
-   UINT res = IntGetMenuItemByFlag(MenuObject, uIDEnableItem, uEnable, &MenuItem, NULL);
-   if(!MenuItem || (res == (UINT)-1))
-   {
-      return (UINT)-1;
-   }
-
-   res = MenuItem->fState & (MF_GRAYED | MF_DISABLED);
-
-   if(uEnable & MF_DISABLED)
-   {
-      if(!(MenuItem->fState & MF_DISABLED))
-         MenuItem->fState |= MF_DISABLED;
-      if(uEnable & MF_GRAYED)
-      {
-         if(!(MenuItem->fState & MF_GRAYED))
-            MenuItem->fState |= MF_GRAYED;
-      }
-   }
-   else
-   {
-      if(uEnable & MF_GRAYED)
-      {
-         if(!(MenuItem->fState & MF_GRAYED))
-            MenuItem->fState |= MF_GRAYED;
-         if(!(MenuItem->fState & MF_DISABLED))
-            MenuItem->fState |= MF_DISABLED;
-      }
-      else
-      {
-         if(MenuItem->fState & MF_DISABLED)
-            MenuItem->fState ^= MF_DISABLED;
-         if(MenuItem->fState & MF_GRAYED)
-            MenuItem->fState ^= MF_GRAYED;
-      }
-   }
-
-   return res;
-}
-
-
-DWORD FASTCALL
-IntBuildMenuItemList(PMENU_OBJECT MenuObject, PVOID Buffer, ULONG nMax)
-{
-   DWORD res = 0;
-   UINT sz;
-   ROSMENUITEMINFO mii;
-   PVOID Buf;
-   PMENU_ITEM CurItem = MenuObject->MenuItemList;
-   PWCHAR StrOut;
-   NTSTATUS Status;
-   WCHAR NulByte;
-
-   if (0 != nMax)
-   {
-      if (nMax < MenuObject->MenuInfo.MenuItemCount * sizeof(ROSMENUITEMINFO))
-      {
-         return 0;
-      }
-      StrOut = (PWCHAR)((char *) Buffer + MenuObject->MenuInfo.MenuItemCount
-                        * sizeof(ROSMENUITEMINFO));
-      nMax -= MenuObject->MenuInfo.MenuItemCount * sizeof(ROSMENUITEMINFO);
-      sz = sizeof(ROSMENUITEMINFO);
-      Buf = Buffer;
-      mii.cbSize = sizeof(ROSMENUITEMINFO);
-      mii.fMask = 0;
-      NulByte = L'\0';
-
-      while (NULL != CurItem)
-      {
-         mii.cch = CurItem->Text.Length / sizeof(WCHAR);
-         mii.dwItemData = CurItem->dwItemData;
-         if (0 != CurItem->Text.Length)
-         {
-            mii.dwTypeData = StrOut;
-         }
-         else
-         {
-            mii.dwTypeData = NULL;
-         }
-         mii.fState = CurItem->fState;
-         mii.fType = CurItem->fType;
-         mii.hbmpChecked = CurItem->hbmpChecked;
-         mii.hbmpItem = CurItem->hbmpItem;
-         mii.hbmpUnchecked = CurItem->hbmpUnchecked;
-         mii.hSubMenu = CurItem->hSubMenu;
-         mii.Rect = CurItem->Rect;
-         mii.XTab = CurItem->XTab;
-
-         Status = MmCopyToCaller(Buf, &mii, sizeof(ROSMENUITEMINFO));
-         if (! NT_SUCCESS(Status))
-         {
-            SetLastNtError(Status);
-            return 0;
-         }
-         Buf = (PVOID)((ULONG_PTR)Buf + sizeof(ROSMENUITEMINFO));
-
-         if (0 != CurItem->Text.Length
-               && (nMax >= CurItem->Text.Length + sizeof(WCHAR)))
-         {
-            /* copy string */
-            Status = MmCopyToCaller(StrOut, CurItem->Text.Buffer,
-                                    CurItem->Text.Length);
-            if (! NT_SUCCESS(Status))
-            {
-               SetLastNtError(Status);
-               return 0;
-            }
-            StrOut += CurItem->Text.Length / sizeof(WCHAR);
-            Status = MmCopyToCaller(StrOut, &NulByte, sizeof(WCHAR));
-            if (! NT_SUCCESS(Status))
-            {
-               SetLastNtError(Status);
-               return 0;
-            }
-            StrOut++;
-            nMax -= CurItem->Text.Length + sizeof(WCHAR);
-         }
-         else if (0 != CurItem->Text.Length)
-         {
-            break;
-         }
-
-         CurItem = CurItem->Next;
-         res++;
-      }
-   }
-   else
-   {
-      while (NULL != CurItem)
-      {
-         res += sizeof(ROSMENUITEMINFO) + CurItem->Text.Length + sizeof(WCHAR);
-         CurItem = CurItem->Next;
-      }
-   }
-
-   return res;
-}
-
-
-DWORD FASTCALL
-IntCheckMenuItem(PMENU_OBJECT MenuObject, UINT uIDCheckItem, UINT uCheck)
-{
-   PMENU_ITEM MenuItem;
-   int res = -1;
-
-   if((IntGetMenuItemByFlag(MenuObject, uIDCheckItem, uCheck, &MenuItem, NULL) < 0) || !MenuItem)
-   {
-      return -1;
-   }
-
-   res = (DWORD)(MenuItem->fState & MF_CHECKED);
-   if(uCheck & MF_CHECKED)
-   {
-      if(!(MenuItem->fState & MF_CHECKED))
-         MenuItem->fState |= MF_CHECKED;
-   }
-   else
-   {
-      if(MenuItem->fState & MF_CHECKED)
-         MenuItem->fState ^= MF_CHECKED;
-   }
-
-   return (DWORD)res;
-}
-
-BOOL FASTCALL
-IntHiliteMenuItem(PWINDOW_OBJECT WindowObject, PMENU_OBJECT MenuObject,
-                  UINT uItemHilite, UINT uHilite)
-{
-   PMENU_ITEM MenuItem;
-   BOOL res = IntGetMenuItemByFlag(MenuObject, uItemHilite, uHilite, &MenuItem, NULL);
-   if(!MenuItem || !res)
-   {
-      return FALSE;
-   }
-
-   if(uHilite & MF_HILITE)
-   {
-      if(!(MenuItem->fState & MF_HILITE))
-         MenuItem->fState |= MF_HILITE;
-   }
-   else
-   {
-      if(MenuItem->fState & MF_HILITE)
-         MenuItem->fState ^= MF_HILITE;
-   }
-
-   /* FIXME - update the window's menu */
-
-   return TRUE;
-}
-
-BOOL FASTCALL
-UserSetMenuDefaultItem(PMENU_OBJECT MenuObject, UINT uItem, UINT fByPos)
-{
-   BOOL ret = FALSE;
-   PMENU_ITEM MenuItem = MenuObject->MenuItemList;
-
-   if(uItem == (UINT)-1)
-   {
-      while(MenuItem)
-      {
-         if(MenuItem->fState & MFS_DEFAULT)
-            MenuItem->fState ^= MFS_DEFAULT;
-         MenuItem = MenuItem->Next;
-      }
-      return TRUE;
-   }
-
-   if(fByPos)
-   {
-      UINT pos = 0;
-      while(MenuItem)
-      {
-         if(pos == uItem)
-         {
-            if(!(MenuItem->fState & MFS_DEFAULT))
-               MenuItem->fState |= MFS_DEFAULT;
-            ret = TRUE;
-         }
-         else
-         {
-            if(MenuItem->fState & MFS_DEFAULT)
-               MenuItem->fState ^= MFS_DEFAULT;
-         }
-         pos++;
-         MenuItem = MenuItem->Next;
-      }
-   }
-   else
-   {
-      while(MenuItem)
-      {
-         if(!ret && (MenuItem->wID == uItem))
-         {
-            if(!(MenuItem->fState & MFS_DEFAULT))
-               MenuItem->fState |= MFS_DEFAULT;
-            ret = TRUE;
-         }
-         else
-         {
-            if(MenuItem->fState & MFS_DEFAULT)
-               MenuItem->fState ^= MFS_DEFAULT;
-         }
-         MenuItem = MenuItem->Next;
-      }
-   }
-   return ret;
-}
-
-
-UINT FASTCALL
-IntGetMenuDefaultItem(PMENU_OBJECT MenuObject, UINT fByPos, UINT gmdiFlags,
-                      DWORD *gismc)
-{
-   UINT x = 0;
-   UINT res = -1;
-   UINT sres;
-   PMENU_OBJECT SubMenuObject;
-   PMENU_ITEM MenuItem = MenuObject->MenuItemList;
-
-   while(MenuItem)
-   {
-      if(MenuItem->fState & MFS_DEFAULT)
-      {
-
-         if(!(gmdiFlags & GMDI_USEDISABLED) && (MenuItem->fState & MFS_DISABLED))
-            break;
-
-         if(fByPos & MF_BYPOSITION)
-            res = x;
-         else
-            res = MenuItem->wID;
-
-         if((*gismc < MAX_GOINTOSUBMENU) && (gmdiFlags & GMDI_GOINTOPOPUPS) &&
-               MenuItem->hSubMenu)
-         {
-
-            SubMenuObject = UserGetMenuObject(MenuItem->hSubMenu);
-            if(!SubMenuObject || (SubMenuObject == MenuObject))
-               break;
-
-            (*gismc)++;
-            sres = IntGetMenuDefaultItem(SubMenuObject, fByPos, gmdiFlags, gismc);
-            (*gismc)--;
-
-            if(sres > (UINT)-1)
-               res = sres;
-         }
-
-         break;
-      }
-
-      MenuItem = MenuItem->Next;
-      x++;
-   }
-
-   return res;
-}
-
-VOID FASTCALL
-co_IntInitTracking(PWINDOW_OBJECT Window, PMENU_OBJECT Menu, BOOL Popup,
-                   UINT Flags)
-{
-   /* FIXME - hide caret */
-
-   if(!(Flags & TPM_NONOTIFY))
-      co_IntSendMessage(Window->hSelf, WM_SETCURSOR, (WPARAM)Window->hSelf, HTCAPTION);
-
-   /* FIXME - send WM_SETCURSOR message */
-
-   if(!(Flags & TPM_NONOTIFY))
-      co_IntSendMessage(Window->hSelf, WM_INITMENU, (WPARAM)Menu->MenuInfo.Self, 0);
-}
-
-VOID FASTCALL
-co_IntExitTracking(PWINDOW_OBJECT Window, PMENU_OBJECT Menu, BOOL Popup,
-                   UINT Flags)
-{
-   if(!(Flags & TPM_NONOTIFY))
-      co_IntSendMessage(Window->hSelf, WM_EXITMENULOOP, 0 /* FIXME */, 0);
-
-   /* FIXME - Show caret again */
-}
-
-INT FASTCALL
-IntTrackMenu(PMENU_OBJECT Menu, PWINDOW_OBJECT Window, INT x, INT y,
-             RECT lprect)
-{
-   return 0;
-}
-
-BOOL FASTCALL
-co_IntTrackPopupMenu(PMENU_OBJECT Menu, PWINDOW_OBJECT Window,
-                     UINT Flags, POINT *Pos, UINT MenuPos, RECT *ExcludeRect)
-{
-   co_IntInitTracking(Window, Menu, TRUE, Flags);
-
-   co_IntExitTracking(Window, Menu, TRUE, Flags);
-   return FALSE;
-}
-
-BOOL FASTCALL
-IntSetMenuItemRect(PMENU_OBJECT Menu, UINT Item, BOOL fByPos, RECT *rcRect)
-{
-   PMENU_ITEM mi;
-   if(IntGetMenuItemByFlag(Menu, Item, (fByPos ? MF_BYPOSITION : MF_BYCOMMAND),
-                           &mi, NULL) > -1)
-   {
-      mi->Rect = *rcRect;
-      return TRUE;
-   }
-   return FALSE;
-}
-
-
-/*!
- * Internal function. Called when the process is destroyed to free the remaining menu handles.
-*/
-BOOL FASTCALL
-IntCleanupMenus(struct _EPROCESS *Process, PW32PROCESS Win32Process)
-{
-   PEPROCESS CurrentProcess;
-   PLIST_ENTRY LastHead = NULL;
-   PMENU_OBJECT MenuObject;
-
-   CurrentProcess = PsGetCurrentProcess();
-   if (CurrentProcess != Process)
-   {
-      KeAttachProcess(&Process->Pcb);
-   }
-
-   while (Win32Process->MenuListHead.Flink != &(Win32Process->MenuListHead) &&
-          Win32Process->MenuListHead.Flink != LastHead)
-   {
-      LastHead = Win32Process->MenuListHead.Flink;
-      MenuObject = CONTAINING_RECORD(Win32Process->MenuListHead.Flink, MENU_OBJECT, ListEntry);
-
-      IntDestroyMenuObject(MenuObject, FALSE, TRUE);
-   }
-
-   if (CurrentProcess != Process)
-   {
-      KeDetachProcess();
-   }
-   return TRUE;
-}
-
-/* FUNCTIONS *****************************************************************/
-
-
-/*
- * @implemented
- */
-DWORD
-STDCALL
-NtUserBuildMenuItemList(
-   HMENU hMenu,
-   VOID* Buffer,
-   ULONG nBufSize,
-   DWORD Reserved)
-{
-   DWORD res = -1;
-   PMENU_OBJECT Menu;
-   DECLARE_RETURN(DWORD);
-
-   DPRINT("Enter NtUserBuildMenuItemList\n");
-   UserEnterExclusive();
-
-   if(!(Menu = UserGetMenuObject(hMenu)))
-   {
-      RETURN( (DWORD)-1);
-   }
-
-   if(Buffer)
-   {
-      res = IntBuildMenuItemList(Menu, Buffer, nBufSize);
-   }
-   else
-   {
-      res = Menu->MenuInfo.MenuItemCount;
-   }
-
-   RETURN( res);
-
-CLEANUP:
-   DPRINT("Leave NtUserBuildMenuItemList, ret=%i\n",_ret_);
-   UserLeave();
-   END_CLEANUP;
-}
-
-
-/*
- * @implemented
- */
-DWORD STDCALL
-NtUserCheckMenuItem(
-   HMENU hMenu,
-   UINT uIDCheckItem,
-   UINT uCheck)
-{
-   PMENU_OBJECT Menu;
-   DECLARE_RETURN(DWORD);
-
-   DPRINT("Enter NtUserCheckMenuItem\n");
-   UserEnterExclusive();
-
-   if(!(Menu = UserGetMenuObject(hMenu)))
-   {
-      RETURN( (DWORD)-1);
-   }
-
-   RETURN( IntCheckMenuItem(Menu, uIDCheckItem, uCheck));
-
-CLEANUP:
-   DPRINT("Leave NtUserCheckMenuItem, ret=%i\n",_ret_);
-   UserLeave();
-   END_CLEANUP;
-}
-
-
-HMENU FASTCALL UserCreateMenu(BOOL PopupMenu)
-{
-   PWINSTATION_OBJECT WinStaObject;
-   HANDLE Handle;
-
-   NTSTATUS Status = IntValidateWindowStationHandle(PsGetCurrentProcess()->Win32WindowStation,
-                     KernelMode,
-                     0,
-                     &WinStaObject);
-
-   if (!NT_SUCCESS(Status))
-   {
-      DPRINT("Validation of window station handle (0x%X) failed\n",
-             PsGetCurrentProcess()->Win32WindowStation);
-      SetLastNtError(Status);
-      return (HMENU)0;
-   }
-
-   IntCreateMenu(&Handle, !PopupMenu);
-
-   ObDereferenceObject(WinStaObject);
-   return (HMENU)Handle;
-}
-
-
-
-HMENU STDCALL
-NtUserCreateMenu(BOOL PopupMenu)
-{
-   DECLARE_RETURN(HMENU);
-
-   DPRINT("Enter NtUserCreateMenu\n");
-   UserEnterExclusive();
-
-   RETURN(UserCreateMenu(PopupMenu));
-
-CLEANUP:
-   DPRINT("Leave NtUserCreateMenu, ret=%i\n",_ret_);
-   UserLeave();
-   END_CLEANUP;
-}
-
-
-
-/*
- * @implemented
- */
-BOOL STDCALL
-NtUserDeleteMenu(
-   HMENU hMenu,
-   UINT uPosition,
-   UINT uFlags)
-{
-   PMENU_OBJECT Menu;
-   DECLARE_RETURN(BOOL);
-
-   DPRINT("Enter NtUserDeleteMenu\n");
-   UserEnterExclusive();
-
-   if(!(Menu = UserGetMenuObject(hMenu)))
-   {
-      RETURN( FALSE);
-   }
-
-   RETURN( IntRemoveMenuItem(Menu, uPosition, uFlags, TRUE));
-
-CLEANUP:
-   DPRINT("Leave NtUserDeleteMenu, ret=%i\n",_ret_);
-   UserLeave();
-   END_CLEANUP;
-}
-
-
-
-/*
- * @implemented
- */
-BOOL FASTCALL UserDestroyMenu(HMENU hMenu)
-{
-   PMENU_OBJECT Menu;
-   
-   if(!(Menu = UserGetMenuObject(hMenu)))
-   {
-      return FALSE;
-   }
-   
-   if(Menu->Process != PsGetCurrentProcess())
-   {
-      SetLastWin32Error(ERROR_ACCESS_DENIED);
-      return FALSE;
-   }
-
-   return IntDestroyMenuObject(Menu, FALSE, TRUE);
-}
-
-/*
- * @implemented
- */
-BOOL STDCALL
-NtUserDestroyMenu(
-   HMENU hMenu)
-{
-   PMENU_OBJECT Menu;
-   DECLARE_RETURN(BOOL);
-
-   DPRINT("Enter NtUserDestroyMenu\n");
-   UserEnterExclusive();
-
-   if(!(Menu = UserGetMenuObject(hMenu)))
-   {
-      RETURN( FALSE);
-   }
-   
-   if(Menu->Process != PsGetCurrentProcess())
-   {
-      SetLastWin32Error(ERROR_ACCESS_DENIED);
-      RETURN( FALSE);
-   }
-
-   RETURN( IntDestroyMenuObject(Menu, FALSE, TRUE));
-
-CLEANUP:
-   DPRINT("Leave NtUserDestroyMenu, ret=%i\n",_ret_);
-   UserLeave();
-   END_CLEANUP;
-}
-
-
-/*
- * @implemented
- */
-UINT STDCALL
-NtUserEnableMenuItem(
-   HMENU hMenu,
-   UINT uIDEnableItem,
-   UINT uEnable)
-{
-   PMENU_OBJECT Menu;
-   DECLARE_RETURN(UINT);
-
-   DPRINT("Enter NtUserEnableMenuItem\n");
-   UserEnterExclusive();
-
-   if(!(Menu = UserGetMenuObject(hMenu)))
-   {
-      RETURN(-1);
-   }
-
-   RETURN( IntEnableMenuItem(Menu, uIDEnableItem, uEnable));
-
-CLEANUP:
-   DPRINT("Leave NtUserEnableMenuItem, ret=%i\n",_ret_);
-   UserLeave();
-   END_CLEANUP;
-}
-
-
-/*
- * @implemented
- */
-DWORD STDCALL
-NtUserInsertMenuItem(
-   HMENU hMenu,
-   UINT uItem,
-   BOOL fByPosition,
-   LPCMENUITEMINFOW UnsafeItemInfo)
-{
-   PMENU_OBJECT Menu;
-   NTSTATUS Status;
-   ROSMENUITEMINFO ItemInfo;
-   DECLARE_RETURN(DWORD);
-
-   DPRINT("Enter NtUserInsertMenuItem\n");
-   UserEnterExclusive();
-
-   if(!(Menu = UserGetMenuObject(hMenu)))
-   {
-      RETURN( FALSE);
-   }
-
-   /* Try to copy the whole MENUITEMINFOW structure */
-   Status = MmCopyFromCaller(&ItemInfo, UnsafeItemInfo, sizeof(MENUITEMINFOW));
-   if (NT_SUCCESS(Status))
-   {
-      if (sizeof(MENUITEMINFOW) != ItemInfo.cbSize
-         && FIELD_OFFSET(MENUITEMINFOW, hbmpItem) != ItemInfo.cbSize)
-      {
-         SetLastWin32Error(ERROR_INVALID_PARAMETER);
-         RETURN( FALSE);
-      }
-      RETURN( IntInsertMenuItem(Menu, uItem, fByPosition, &ItemInfo));
-   }
-
-   /* Try to copy without last field (not present in older versions) */
-   Status = MmCopyFromCaller(&ItemInfo, UnsafeItemInfo, FIELD_OFFSET(MENUITEMINFOW, hbmpItem));
-   if (NT_SUCCESS(Status))
-   {
-      if (FIELD_OFFSET(MENUITEMINFOW, hbmpItem) != ItemInfo.cbSize)
-      {
-         SetLastWin32Error(ERROR_INVALID_PARAMETER);
-         RETURN( FALSE);
-      }
-      ItemInfo.hbmpItem = (HBITMAP)0;
-      RETURN( IntInsertMenuItem(Menu, uItem, fByPosition, &ItemInfo));
-   }
-
-   SetLastNtError(Status);
-   RETURN( FALSE);
-
-CLEANUP:
-   DPRINT("Leave NtUserInsertMenuItem, ret=%i\n",_ret_);
-   UserLeave();
-   END_CLEANUP;
-}
-
-
-/*
- * @unimplemented
- */
-BOOL STDCALL
-NtUserEndMenu(VOID)
-{
-   UNIMPLEMENTED
-
-   return 0;
-}
-
-
-/*
- * @implemented
- */
-UINT STDCALL
-NtUserGetMenuDefaultItem(
-   HMENU hMenu,
-   UINT fByPos,
-   UINT gmdiFlags)
-{
-   PMENU_OBJECT Menu;
-   DWORD gismc = 0;
-   DECLARE_RETURN(UINT);
-
-   DPRINT("Enter NtUserGetMenuDefaultItem\n");
-   UserEnterExclusive();
-
-   if(!(Menu = UserGetMenuObject(hMenu)))
-   {
-      RETURN(-1);
-   }
-
-   RETURN( IntGetMenuDefaultItem(Menu, fByPos, gmdiFlags, &gismc));
-
-CLEANUP:
-   DPRINT("Leave NtUserGetMenuDefaultItem, ret=%i\n",_ret_);
-   UserLeave();
-   END_CLEANUP;
-}
-
-
-/*
- * @implemented
- */
-BOOL STDCALL
-NtUserGetMenuBarInfo(
-   HWND hwnd,
-   LONG idObject,
-   LONG idItem,
-   PMENUBARINFO pmbi)
-{
-   BOOL Res = TRUE;
-   PMENU_OBJECT MenuObject;
-   PMENU_ITEM mi;
-   PWINDOW_OBJECT WindowObject;
-   HMENU hMenu;
-   POINT Offset;
-   RECT Rect;
-   MENUBARINFO kmbi;
-   DECLARE_RETURN(BOOL);
-  
-   DPRINT("Enter NtUserGetMenuBarInfo\n");
-   UserEnterShared();
-  
-   if (!(WindowObject = UserGetWindowObject(hwnd)))
-     {
-        SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
-        RETURN(FALSE);
-     }
-
-   hMenu = (HMENU)WindowObject->IDMenu;
-
-   if (!(MenuObject = UserGetMenuObject(hMenu)))
-     {
-       SetLastWin32Error(ERROR_INVALID_MENU_HANDLE);
-       RETURN(FALSE);
-     }
-
-   if (pmbi->cbSize != sizeof(MENUBARINFO))
-     {
-       SetLastWin32Error(ERROR_INVALID_PARAMETER);
-       RETURN(FALSE);
-     }
-
-   kmbi.cbSize = sizeof(MENUBARINFO);
-   kmbi.fBarFocused = FALSE;
-   kmbi.fFocused = FALSE;
-   kmbi.hwndMenu = NULL;
-   
-   switch (idObject)
-   {
-      case OBJID_MENU:
-      {
-         PMENU_OBJECT SubMenuObject;
-         kmbi.hMenu = hMenu;
-         if (idItem) /* Non-Zero-Based. */
-           {
-              if (IntGetMenuItemByFlag(MenuObject, idItem-1, MF_BYPOSITION, &mi, NULL) > -1)
-                   kmbi.rcBar = mi->Rect;
-              else
-                {
-                   Res = FALSE;
-                   break;
-                }
-           }
-         else
-           {  
-              /* If items is zero we assume info for the menu itself. */
-              if (!(IntGetClientOrigin(WindowObject, &Offset)))
-                {
-                   Res = FALSE;
-                   break;
-                }
-              Rect.left = Offset.x;
-              Rect.right = Offset.x + MenuObject->MenuInfo.Width;
-              Rect.top = Offset.y;
-              Rect.bottom = Offset.y + MenuObject->MenuInfo.Height;
-              kmbi.rcBar = Rect;
-              DPRINT("Rect top = %d bottom = %d left = %d right = %d \n",
-                       Rect.top, Rect.bottom, Rect.left, Rect.right);
-           }
-         if (idItem)
-           {
-              if (idItem-1 == MenuObject->MenuInfo.FocusedItem)
-                    kmbi.fFocused = TRUE;
-           }
-         if (MenuObject->MenuInfo.FocusedItem != NO_SELECTED_ITEM)
-               kmbi.fBarFocused = TRUE;
-         SubMenuObject = UserGetMenuObject(MenuObject->MenuItemList->hSubMenu);
-         if(SubMenuObject) kmbi.hwndMenu = SubMenuObject->MenuInfo.Wnd;
-         DPRINT("OBJID_MENU, idItem = %d\n",idItem);
-         break;
-      }
-      case OBJID_CLIENT:
-      {
-         PMENU_OBJECT SubMenuObject, XSubMenuObject;
-         SubMenuObject = UserGetMenuObject(MenuObject->MenuItemList->hSubMenu);
-         if(SubMenuObject) kmbi.hMenu = SubMenuObject->MenuInfo.Self;
-         else
-           {
-              Res = FALSE;
-              DPRINT1("OBJID_CLIENT, No SubMenu!\n");
-              break;
-           }
-         if (idItem)
-           {
-              if (IntGetMenuItemByFlag(SubMenuObject, idItem-1, MF_BYPOSITION, &mi, NULL) > -1)
-                   kmbi.rcBar = mi->Rect;
-              else
-                {
-                   Res = FALSE;
-                   break;
-                }
-           }
-         else
-           {
-              PWINDOW_OBJECT SubWinObj;
-              if (!(SubWinObj = UserGetWindowObject(SubMenuObject->MenuInfo.Wnd)))
-                {
-                   Res = FALSE;
-                   break;
-                }
-              if (!(IntGetClientOrigin(SubWinObj, &Offset)))
-                {
-                   Res = FALSE;
-                   break;
-                }
-              Rect.left = Offset.x;
-              Rect.right = Offset.x + SubMenuObject->MenuInfo.Width;
-              Rect.top = Offset.y;
-              Rect.bottom = Offset.y + SubMenuObject->MenuInfo.Height;
-              kmbi.rcBar = Rect;
-           }
-         if (idItem)
-           {
-              if (idItem-1 == SubMenuObject->MenuInfo.FocusedItem)
-                   kmbi.fFocused = TRUE;
-           }
-         if (SubMenuObject->MenuInfo.FocusedItem != NO_SELECTED_ITEM)
-               kmbi.fBarFocused = TRUE;
-         XSubMenuObject = UserGetMenuObject(SubMenuObject->MenuItemList->hSubMenu);
-         if (XSubMenuObject) kmbi.hwndMenu = XSubMenuObject->MenuInfo.Wnd;
-         DPRINT("OBJID_CLIENT, idItem = %d\n",idItem);
-         break;
-      }
-      case OBJID_SYSMENU:
-      {
-         PMENU_OBJECT SysMenuObject, SubMenuObject;
-         if(!(SysMenuObject = IntGetSystemMenu(WindowObject, FALSE, FALSE)))
-         {
-           Res = FALSE;
-           break;
-         }
-         kmbi.hMenu = SysMenuObject->MenuInfo.Self;
-         if (idItem)
-           {
-              if (IntGetMenuItemByFlag(SysMenuObject, idItem-1, MF_BYPOSITION, &mi, NULL) > -1)
-                   kmbi.rcBar = mi->Rect;
-              else
-                {
-                   Res = FALSE;
-                   break;
-                }
-           }
-         else
-           {
-              PWINDOW_OBJECT SysWinObj;
-              if (!(SysWinObj = UserGetWindowObject(SysMenuObject->MenuInfo.Wnd)))
-                {
-                   Res = FALSE;
-                   break;
-                }
-              if (!(IntGetClientOrigin(SysWinObj, &Offset)))
-                {
-                   Res = FALSE;
-                   break;
-                }
-              Rect.left = Offset.x;
-              Rect.right = Offset.x + SysMenuObject->MenuInfo.Width;
-              Rect.top = Offset.y;
-              Rect.bottom = Offset.y + SysMenuObject->MenuInfo.Height;
-              kmbi.rcBar = Rect;
-           }
-         if (idItem)
-           {
-              if (idItem-1 == SysMenuObject->MenuInfo.FocusedItem)
-                    kmbi.fFocused = TRUE;
-           }
-         if (SysMenuObject->MenuInfo.FocusedItem != NO_SELECTED_ITEM)
-               kmbi.fBarFocused = TRUE;
-         SubMenuObject = UserGetMenuObject(SysMenuObject->MenuItemList->hSubMenu);
-         if(SubMenuObject) kmbi.hwndMenu = SubMenuObject->MenuInfo.Wnd;
-         DPRINT("OBJID_SYSMENU, idItem = %d\n",idItem);
-         break;
-      }
-      default:
-         Res = FALSE;
-         DPRINT1("Unknown idObject = %d, idItem = %d\n",idObject,idItem);
-   }
-   if (Res)
-     {
-        NTSTATUS Status = MmCopyToCaller(pmbi, &kmbi, sizeof(MENUBARINFO));
-        if (! NT_SUCCESS(Status))
-          {
-            SetLastNtError(Status);
-            RETURN(FALSE);
-          }
-     }
-   RETURN(Res);
-
-CLEANUP:
-   DPRINT("Leave NtUserGetMenuBarInfo, ret=%i\n",_ret_);
-   UserLeave();
-   END_CLEANUP;  
-}
-
-
-/*
- * @unimplemented
- */
-UINT STDCALL
-NtUserGetMenuIndex(
-   HMENU hMenu,
-   UINT wID)
-{
-   UNIMPLEMENTED
-
-   return 0;
-}
-
-
-/*
- * @implemented
- */
-BOOL STDCALL
-NtUserGetMenuItemRect(
-   HWND hWnd,
-   HMENU hMenu,
-   UINT uItem,
-   LPRECT lprcItem)
-{
-   ROSMENUINFO mi;
-   HWND referenceHwnd;
-   RECT Rect;
-   NTSTATUS Status;
-   PMENU_OBJECT Menu;
-   PMENU_ITEM MenuItem;
-   DECLARE_RETURN(BOOL);
-
-   DPRINT("Enter NtUserGetMenuItemRect\n");
-   UserEnterShared();
-
-   if (!(Menu = UserGetMenuObject(hMenu)))
-   {
-      RETURN(FALSE);
-   }
-
-   if (IntGetMenuItemByFlag(Menu, uItem, MF_BYPOSITION, &MenuItem, NULL) > -1)
-        Rect = MenuItem->Rect;
-   else
-      RETURN(FALSE);
-   
-   referenceHwnd = hWnd;
-   
-   if(!hWnd)
-   {
-      if(!UserMenuInfo(Menu, &mi, FALSE))
-         RETURN( FALSE);
-      if(mi.Wnd == 0)
-         RETURN( FALSE);
-      referenceHwnd = mi.Wnd; /* Okay we found it, so now what do we do? */
-   }
-
-   if (lprcItem == NULL)
-      RETURN( FALSE);
-
-   Status = MmCopyToCaller(lprcItem, &Rect, sizeof(RECT));
-   if (! NT_SUCCESS(Status))
-   {
-      SetLastNtError(Status);
-      RETURN( FALSE);
-   }
-   RETURN( TRUE);
-
-CLEANUP:
-   DPRINT("Leave NtUserGetMenuItemRect, ret=%i\n",_ret_);
-   UserLeave();
-   END_CLEANUP;
-}
-
-
-/*
- * @implemented
- */
-BOOL STDCALL
-NtUserHiliteMenuItem(
-   HWND hWnd,
-   HMENU hMenu,
-   UINT uItemHilite,
-   UINT uHilite)
-{
-   PMENU_OBJECT Menu;
-   PWINDOW_OBJECT Window;
-   DECLARE_RETURN(BOOLEAN);
-
-   DPRINT("Enter NtUserHiliteMenuItem\n");
-   UserEnterExclusive();
-
-   if(!(Window = UserGetWindowObject(hWnd)))
-   {
-      RETURN(FALSE);
-   }
-   
-   if(!(Menu = UserGetMenuObject(hMenu)))
-   {
-      RETURN(FALSE);
-   }
-   
-   if(Window->IDMenu == (UINT)hMenu)
-   {
-      RETURN( IntHiliteMenuItem(Window, Menu, uItemHilite, uHilite));
-   }
-
-   RETURN(FALSE);
-
-CLEANUP:
-   DPRINT("Leave NtUserHiliteMenuItem, ret=%i\n",_ret_);
-   UserLeave();
-   END_CLEANUP;
-}
-
-
-static
-BOOL FASTCALL
-UserMenuInfo(
-   PMENU_OBJECT Menu,
-   PROSMENUINFO UnsafeMenuInfo,
-   BOOL SetOrGet)
-{
-   BOOL Res;
-   DWORD Size;
-   NTSTATUS Status;
-   ROSMENUINFO MenuInfo;
-
-   Status = MmCopyFromCaller(&Size, &UnsafeMenuInfo->cbSize, sizeof(DWORD));
-   if (! NT_SUCCESS(Status))
-   {
-      SetLastNtError(Status);
-      return( FALSE);
-   }
-   if(Size < sizeof(MENUINFO) || sizeof(ROSMENUINFO) < Size)
-   {
-      SetLastWin32Error(ERROR_INVALID_PARAMETER);
-      return( FALSE);
-   }
-   Status = MmCopyFromCaller(&MenuInfo, UnsafeMenuInfo, Size);
-   if (! NT_SUCCESS(Status))
-   {
-      SetLastNtError(Status);
-      return( FALSE);
-   }
-
-   if(SetOrGet)
-   {
-      /* Set MenuInfo */
-      Res = IntSetMenuInfo(Menu, &MenuInfo);
-   }
-   else
-   {
-      /* Get MenuInfo */
-      Res = IntGetMenuInfo(Menu, &MenuInfo);
-      if (Res)
-      {
-         Status = MmCopyToCaller(UnsafeMenuInfo, &MenuInfo, Size);
-         if (! NT_SUCCESS(Status))
-         {
-            SetLastNtError(Status);
-            return( FALSE);
-         }
-      }
-   }
-
-   return( Res);
-}
-
-
-
-
-
-/*
- * @implemented
- */
-BOOL
-STDCALL
-NtUserMenuInfo(
-   HMENU hMenu,
-   PROSMENUINFO UnsafeMenuInfo,
-   BOOL SetOrGet)
-{
-   PMENU_OBJECT Menu;
-   DECLARE_RETURN(BOOL);
-
-   DPRINT("Enter NtUserMenuInfo\n");
-   UserEnterShared();
-
-   if (!(Menu = UserGetMenuObject(hMenu)))
-   {
-      RETURN(FALSE);
-   }
-
-   RETURN(UserMenuInfo(Menu, UnsafeMenuInfo, SetOrGet));
-
-CLEANUP:
-   DPRINT("Leave NtUserMenuInfo, ret=%i\n",_ret_);
-   UserLeave();
-   END_CLEANUP;
-}
-
-
-
-/*
- * @implemented
- */
-int STDCALL
-NtUserMenuItemFromPoint(
-   HWND hWnd,
-   HMENU hMenu,
-   DWORD X,
-   DWORD Y)
-{
-   PMENU_OBJECT Menu;
-   PWINDOW_OBJECT Window = NULL;
-   PMENU_ITEM mi;
-   int i;
-   DECLARE_RETURN(int);
-
-   DPRINT("Enter NtUserMenuItemFromPoint\n");
-   UserEnterExclusive();
-
-   if (!(Menu = UserGetMenuObject(hMenu)))
-   {
-      RETURN( -1);
-   }
-
-   if (!(Window = UserGetWindowObject(Menu->MenuInfo.Wnd)))
-   {
-      RETURN( -1);
-   }
-
-   X -= Window->WindowRect.left;
-   Y -= Window->WindowRect.top;
-
-   mi = Menu->MenuItemList;
-   for (i = 0; NULL != mi; i++)
-   {
-      if (InRect(mi->Rect, X, Y))
-      {
-         break;
-      }
-      mi = mi->Next;
-   }
-
-   RETURN( (mi ? i : NO_SELECTED_ITEM));
-
-CLEANUP:
-   DPRINT("Leave NtUserMenuItemFromPoint, ret=%i\n",_ret_);
-   UserLeave();
-   END_CLEANUP;
-}
-
-
-
-static
-BOOL FASTCALL
-UserMenuItemInfo(
-   PMENU_OBJECT Menu,
-   UINT Item,
-   BOOL ByPosition,
-   PROSMENUITEMINFO UnsafeItemInfo,
-   BOOL SetOrGet)
-{
-   PMENU_ITEM MenuItem;
-   ROSMENUITEMINFO ItemInfo;
-   NTSTATUS Status;
-   UINT Size;
-   BOOL Ret;
-
-   Status = MmCopyFromCaller(&Size, &UnsafeItemInfo->cbSize, sizeof(UINT));
-   if (! NT_SUCCESS(Status))
-   {
-      SetLastNtError(Status);
-      return( FALSE);
-   }
-   if (sizeof(MENUITEMINFOW) != Size
-         && FIELD_OFFSET(MENUITEMINFOW, hbmpItem) != Size
-         && sizeof(ROSMENUITEMINFO) != Size)
-   {
-      SetLastWin32Error(ERROR_INVALID_PARAMETER);
-      return( FALSE);
-   }
-   Status = MmCopyFromCaller(&ItemInfo, UnsafeItemInfo, Size);
-   if (! NT_SUCCESS(Status))
-   {
-      SetLastNtError(Status);
-      return( FALSE);
-   }
-   /* If this is a pre-0x0500 _WIN32_WINNT MENUITEMINFOW, you can't
-      set/get hbmpItem */
-   if (FIELD_OFFSET(MENUITEMINFOW, hbmpItem) == Size
-         && 0 != (ItemInfo.fMask & MIIM_BITMAP))
-   {
-      SetLastWin32Error(ERROR_INVALID_PARAMETER);
-      return( FALSE);
-   }
-
-   if (IntGetMenuItemByFlag(Menu, Item,
-                            (ByPosition ? MF_BYPOSITION : MF_BYCOMMAND),
-                            &MenuItem, NULL) < 0)
-   {
-      SetLastWin32Error(ERROR_INVALID_PARAMETER);
-      return( FALSE);
-   }
-
-   if (SetOrGet)
-   {
-      Ret = IntSetMenuItemInfo(Menu, MenuItem, &ItemInfo);
-   }
-   else
-   {
-      Ret = IntGetMenuItemInfo(Menu, MenuItem, &ItemInfo);
-      if (Ret)
-      {
-         Status = MmCopyToCaller(UnsafeItemInfo, &ItemInfo, Size);
-         if (! NT_SUCCESS(Status))
-         {
-            SetLastNtError(Status);
-            return( FALSE);
-         }
-      }
-   }
-
-   return( Ret);
-}
-
-
-
-/*
- * @implemented
- */
-BOOL
-STDCALL
-NtUserMenuItemInfo(
-   HMENU hMenu,
-   UINT Item,
-   BOOL ByPosition,
-   PROSMENUITEMINFO UnsafeItemInfo,
-   BOOL SetOrGet)
-{
-   PMENU_OBJECT Menu;
-   DECLARE_RETURN(BOOL);
-
-   DPRINT("Enter NtUserMenuItemInfo\n");
-   UserEnterExclusive();
-
-   if (!(Menu = UserGetMenuObject(hMenu)))
-   {
-      RETURN(FALSE);
-   }
-
-   RETURN( UserMenuItemInfo(Menu, Item, ByPosition, UnsafeItemInfo, SetOrGet));
-
-CLEANUP:
-   DPRINT("Leave NtUserMenuItemInfo, ret=%i\n",_ret_);
-   UserLeave();
-   END_CLEANUP;
-
-}
-
-
-/*
- * @implemented
- */
-BOOL STDCALL
-NtUserRemoveMenu(
-   HMENU hMenu,
-   UINT uPosition,
-   UINT uFlags)
-{
-   PMENU_OBJECT Menu;
-   DECLARE_RETURN(BOOL);
-
-   DPRINT("Enter NtUserRemoveMenu\n");
-   UserEnterExclusive();
-
-   if(!(Menu = UserGetMenuObject(hMenu)))
-   {
-      RETURN( FALSE);
-   }
-
-   RETURN(IntRemoveMenuItem(Menu, uPosition, uFlags, FALSE));
-
-CLEANUP:
-   DPRINT("Leave NtUserRemoveMenu, ret=%i\n",_ret_);
-   UserLeave();
-   END_CLEANUP;
-
-}
-
-
-/*
- * @implemented
- */
-BOOL STDCALL
-NtUserSetMenuContextHelpId(
-   HMENU hMenu,
-   DWORD dwContextHelpId)
-{
-   PMENU_OBJECT Menu;
-   DECLARE_RETURN(BOOL);
-
-   DPRINT("Enter NtUserSetMenuContextHelpId\n");
-   UserEnterExclusive();
-
-   if(!(Menu = UserGetMenuObject(hMenu)))
-   {
-      RETURN( FALSE);
-   }
-
-   RETURN(IntSetMenuContextHelpId(Menu, dwContextHelpId));
-
-CLEANUP:
-   DPRINT("Leave NtUserSetMenuContextHelpId, ret=%i\n",_ret_);
-   UserLeave();
-   END_CLEANUP;
-}
-
-
-
-/*
- * @implemented
- */
-BOOL STDCALL
-NtUserSetMenuDefaultItem(
-   HMENU hMenu,
-   UINT uItem,
-   UINT fByPos)
-{
-   PMENU_OBJECT Menu;
-   DECLARE_RETURN(BOOL);
-
-   DPRINT("Enter NtUserSetMenuDefaultItem\n");
-   UserEnterExclusive();
-
-   if(!(Menu = UserGetMenuObject(hMenu)))
-   {
-      RETURN( FALSE);
-   }
-
-   RETURN( UserSetMenuDefaultItem(Menu, uItem, fByPos));
-
-CLEANUP:
-   DPRINT("Leave NtUserSetMenuDefaultItem, ret=%i\n",_ret_);
-   UserLeave();
-   END_CLEANUP;
-}
-
-
-/*
- * @implemented
- */
-BOOL STDCALL
-NtUserSetMenuFlagRtoL(
-   HMENU hMenu)
-{
-   PMENU_OBJECT Menu;
-   DECLARE_RETURN(BOOL);
-
-   DPRINT("Enter NtUserSetMenuFlagRtoL\n");
-   UserEnterExclusive();
-
-   if(!(Menu = UserGetMenuObject(hMenu)))
-   {
-      RETURN( FALSE);
-   }
-
-   RETURN(IntSetMenuFlagRtoL(Menu));
-
-CLEANUP:
-   DPRINT("Leave NtUserSetMenuFlagRtoL, ret=%i\n",_ret_);
-   UserLeave();
-   END_CLEANUP;
-}
-
-
-/*
- * @unimplemented
- */
-DWORD STDCALL
-NtUserThunkedMenuInfo(
-   HMENU hMenu,
-   LPCMENUINFO lpcmi)
-{
-   UNIMPLEMENTED
-   /* This function seems just to call SetMenuInfo() */
-   return 0;
-}
-
-
-/*
- * @unimplemented
- */
-DWORD STDCALL
-NtUserThunkedMenuItemInfo(
-   HMENU hMenu,
-   UINT uItem,
-   BOOL fByPosition,
-   BOOL bInsert,
-   LPMENUITEMINFOW lpmii,
-   PUNICODE_STRING lpszCaption)
-{
-   UNIMPLEMENTED
-   /* lpszCaption may be NULL, check for it and call RtlInitUnicodeString()
-      if bInsert == TRUE call NtUserInsertMenuItem() else NtUserSetMenuItemInfo()
-   */
-   return 0;
-}
-
-
-/*
- * @implemented
- */
-/* NOTE: unused function */
-BOOL STDCALL
-NtUserTrackPopupMenuEx(
-   HMENU hMenu,
-   UINT fuFlags,
-   int x,
-   int y,
-   HWND hWnd,
-   LPTPMPARAMS lptpm)
-{
-   UNIMPLEMENTED
-
-   return FALSE;
-}
-
-
-/* EOF */