30#define MM_SETMENUHANDLE (WM_USER + 0)
31#define MM_GETMENUHANDLE (WM_USER + 1)
35#define TF_ENDMENU 0x10000
36#define TF_SUSPENDPOPUP 0x20000
37#define TF_SKIPREMOVE 0x40000
43#define MAXMENUDEPTH 30
45#define MNS_STYLE_MASK (MNS_NOCHECK|MNS_MODELESS|MNS_DRAGDROP|MNS_AUTODISMISS|MNS_NOTIFYBYPOS|MNS_CHECKORBMP)
47#define MENUITEMINFO_TYPE_MASK \
48 (MFT_STRING | MFT_BITMAP | MFT_OWNERDRAW | MFT_SEPARATOR | \
49 MFT_MENUBARBREAK | MFT_MENUBREAK | MFT_RADIOCHECK | \
50 MFT_RIGHTORDER | MFT_RIGHTJUSTIFY )
52#define TYPE_MASK (MENUITEMINFO_TYPE_MASK | MF_POPUP | MF_SYSMENU)
54#define STATE_MASK (~TYPE_MASK)
56#define MENUITEMINFO_STATE_MASK (STATE_MASK & ~(MF_BYPOSITION | MF_MOUSESELECT))
58#define MII_STATE_MASK (MFS_GRAYED|MFS_CHECKED|MFS_HILITE|MFS_DEFAULT)
60#define IS_SYSTEM_MENU(MenuInfo) \
61 (!!((MenuInfo)->fFlags & MNF_SYSMENU))
63#define IS_MAGIC_BITMAP(id) ((id) && ((INT_PTR)(id) < 12) && ((INT_PTR)(id) >= -1))
64#define IS_STRING_ITEM(flags) (MF_STRING == MENU_ITEM_TYPE(flags))
67#define MAX_MENU_ITEMS (0x4000)
68#define MAX_GOINTOSUBMENU (0x10)
71#define MENU_COL_SPACE 4
73#define MENU_ITEM_HBMP_SPACE (5)
74#define MENU_BAR_ITEMS_SPACE (12)
75#define SEPARATOR_HEIGHT (5)
76#define MENU_TAB_SPACE (8)
88#define TPM_INTERNAL 0xF0000000
89#define TPM_BUTTONDOWN 0x40000000
90#define TPM_POPUPMENU 0x20000000
95#define UpdateMenuItemState(state, change) \
97 if((change) & MF_GRAYED) { \
98 (state) |= MF_GRAYED; \
100 (state) &= ~MF_GRAYED; \
102 if((change) & MF_DISABLED) { \
103 (state) |= MF_DISABLED; \
105 (state) &= ~MF_DISABLED; \
107 if((change) & MFS_CHECKED) { \
108 (state) |= MFS_CHECKED; \
110 (state) &= ~MFS_CHECKED; \
112 if((change) & MFS_HILITE) { \
113 (state) |= MFS_HILITE; \
115 (state) &= ~MFS_HILITE; \
117 if((change) & MFS_DEFAULT) { \
118 (state) |= MFS_DEFAULT; \
120 (state) &= ~MFS_DEFAULT; \
122 if((change) & MF_MOUSESELECT) { \
123 (state) |= MF_MOUSESELECT; \
125 (state) &= ~MF_MOUSESELECT; \
183#define FreeMenuText(Menu,MenuItem) \
185 if((MENU_ITEM_TYPE((MenuItem)->fType) == MF_STRING) && \
186 (MenuItem)->lpstr.Length) { \
187 DesktopHeapFree(((PMENU)Menu)->head.rpdesk, (MenuItem)->lpstr.Buffer); \
196 Menu->
head.cLockObj++;
207 if (!pMenu)
return NULL;
223 ERR(
"Run away LOOP!\n");
231 ERR(
"Menu is marked for destruction!\n");
280 SubMenu =
item->spSubMenu;
294 if (bRecurse && SubMenu)
338 ERR(
"FIXME Pop up menu window thing'ie\n");
351 TRACE(
"IntDestroyMenuObject %d\n",
ret);
361 NONCLIENTMETRICSW ncm;
366 ncm.cbSize =
sizeof(ncm);
369 ERR(
"MenuInit(): SystemParametersInfo(SPI_GETNONCLIENTMETRICS) failed!\n");
376 ERR(
"MenuInit(): CreateFontIndirectW(hMenuFont) failed!\n");
383 ERR(
"MenuInit(): CreateFontIndirectW(hMenuFontBold) failed!\n");
410 if (!pmenu)
return depth;
421 if( bdepth > subdepth) subdepth = bdepth;
491 for(--
i;
i != 0; --
i) {
511 UINT fallback_pos = 0;
514 if (!menu)
return NULL;
536 else if (
item->wID == *nPos)
543 else if (
item->wID == *nPos)
552 *nPos = fallback_pos;
572 if (!
item->spSubMenu)
576 if (
item->spSubMenu == SubTarget)
601 TRACE(
"(menu=%p pos=%04x flags=%04x)\n",pMenu, nPos,
wFlags);
607 if (bRecurse &&
item->spSubMenu)
619 while (nPos < pMenu->cItems)
651 if (submenu) *submenu = menu;
673 WARN(
"allocation failed\n" );
687 return &newItems[
pos];
703 if (MAX_MENU_ITEMS <= MenuObject->cItems)
709 SubMenu = MenuObject;
723 TRACE(
"IntInsertMenuItemToList = %u %i\n", uItem, (
BOOL)((
INT)uItem >= 0));
780 if(!NewMenuItem)
return FALSE;
786 MenuItem =
Source->rgItems;
787 for (
i = 0;
i <
Source->cItems;
i++, MenuItem++, NewMenuItem++)
791 NewMenuItem->
wID = MenuItem->
wID;
866 ERR(
"SetMenuFlagRtoL\n");
881 if(lpmi->
fMask & MIM_BACKGROUND)
883 if(lpmi->
fMask & MIM_HELPID)
885 if(lpmi->
fMask & MIM_MAXHEIGHT)
887 if(lpmi->
fMask & MIM_MENUDATA)
889 if(lpmi->
fMask & MIM_STYLE)
916 if(lpmi->
fMask & MIM_BACKGROUND)
918 if(lpmi->
fMask & MIM_HELPID)
920 if(lpmi->
fMask & MIM_MAXHEIGHT)
922 if(lpmi->
fMask & MIM_MENUDATA)
924 if(lpmi->
fMask & MIM_STYLE)
926 if(lpmi->
fMask & MIM_APPLYTOSUBMENUS)
932 if (
item->spSubMenu )
952 if ( lpmi->
fMask & MIM_STYLE)
986 lpmii->
wID = MenuItem->
wID;
1035 PMENU SubMenuObject;
1038 if(!MenuItem || !MenuObject || !lpmii)
1044 MenuItem->
fType &= ~MENUITEMINFO_TYPE_MASK;
1052 ERR(
"IntSetMenuItemInfo: Invalid combination of fMask bits used\n");
1087 MenuItem->
fState &= ~MFS_HBMMENUBMP;
1100 MenuItem->
wID = lpmii->
wID;
1121 if (MenuObject == SubMenuObject)
1124 ERR(
"Pop Up Menu Double Trouble!\n");
1129 if (!SubMenuObject)
return FALSE;
1135 ERR(
"Loop detected in menu hierarchy or maximum menu depth exceeded!\n");
1222 if (!(MenuItem =
MENU_FindItem( &MenuObject, &uIDEnableItem, uEnable )))
return (
UINT)-1;
1231 switch (MenuItem->
wID)
1264 if (!(MenuItem =
MENU_FindItem( &MenuObject, &uIDCheckItem, uCheck )))
return -1;
1279 if (!MenuItem)
return FALSE;
1282 for (
i = 0;
i < MenuObject->
cItems;
i++, MenuItem++)
1284 MenuItem->
fState &= ~MFS_DEFAULT;
1288 if(uItem == (
UINT)-1)
1292 MenuItem = MenuObject->
rgItems;
1301 for (
i = 0;
i < MenuObject->
cItems;
i++, MenuItem++)
1303 if (MenuItem->
wID == uItem)
1321 if (!MenuItem)
return -1;
1326 if (
i >= MenuObject->
cItems )
return -1;
1339 if ( -1 !=
ret )
return ret;
1343 return ( fByPos ) ?
i : MenuItem->
wID;
1420 ERR(
"Invalid popup magic bitmap %d\n", (
int)popupMagic);
1466 UINT arrow_bitmap_height;
1468 rect->top += arrow_bitmap_height - menu->
iTop;
1469 rect->bottom += arrow_bitmap_height - menu->
iTop;
1524 if (!menu)
return -1;
1541 TRACE(
"\tlooking for '%c' (0x%02x) in [%p]\n", (
char)
Key,
Key, menu );
1549 if ( !ForceMenuChar )
1566 while (
p !=
NULL &&
p [1] ==
'&');
1643 size->cx = bm.bmWidth;
1644 size->cy = bm.bmHeight;
1662 int bmp_xoffset = 0;
1684 ERR(
"Get Item Data from this Window!!!\n");
1687 ERR(
"Draw Bitmap\n");
1783 top = (
h>bm.bmHeight) ?
rect->top+(
h-bm.bmHeight)/2 :
rect->top;
1795 NtGdiBitBlt(
hdc,
left,
top,
w,
h,
hdcMem, bmp_xoffset, 0,
rop , 0, 0);
1830 UINT arrow_bitmap_width;
1834 TRACE(
"dc=%x owner=%x (%d,%d)\n",
hdc, pwndOwner, orgX, orgY);
1866 TRACE(
"MF_OWNERDRAW id=%04lx size=%dx%d cx %d cy %d\n",
1878 lpitem->
xItem = orgX;
1879 lpitem->
yItem = orgY;
1905 itemheight =
size.cy + 2;
1908 lpitem->
cxItem += 2 * check_bitmap_width;
1911 lpitem->
cxItem += arrow_bitmap_width;
1916 itemheight =
size.cy;
1924 else if (!menuBar) {
1926 lpitem->
cxItem += check_bitmap_width;
1929 lpitem->
cxItem += arrow_bitmap_width;
1936 LONG txtheight, txtwidth;
1967 lpitem->
dxTab += txtwidth;
1968 txtheight =
max( txtheight, tmpheight);
1975 lpitem->
dxTab += txtwidth;
1977 lpitem->
cxItem += 2 + txtwidth;
1978 itemheight =
max( itemheight,
1985 }
else if( menuBar) {
1988 lpitem->
cyItem += itemheight;
2001 return lppop->
cyMax;
2017 int orgX, orgY, maxX, maxTab, maxTabWidth, maxHeight;
2021 if (Menu->
cItems == 0)
return;
2032 while (start < Menu->cItems)
2040 maxTab = maxTabWidth = 0;
2052 maxTab =
max( maxTab, lpitem->
dxTab );
2059 maxX =
max( maxX, maxTab + maxTabWidth );
2064 lpitem->
dxTab = maxTab;
2080 if (Menu->
cyMenu >= maxHeight)
2082 Menu->
cyMenu = maxHeight;
2105 int orgX, orgY, maxY;
2107 if ((lprect ==
NULL) || (lppop ==
NULL))
return;
2108 if (lppop->
cItems == 0)
return;
2116 while (start < lppop->cItems)
2119 orgX = lprect->
left;
2129 TRACE(
"calling MENU_CalcItemSize org=(%d, %d)\n", orgX, orgY );
2134 if (lpitem->cxItem > lprect->
right)
2137 else lpitem->cxItem = lprect->
right;
2139 maxY =
max( maxY, lpitem->cyItem );
2140 orgX = lpitem->cxItem;
2153 lprect->
bottom = maxY + 1;
2158 if (helpPos == ~0
U)
return;
2160 orgY = lpitem->yItem;
2161 orgX = lprect->
right;
2162 for (
i = lppop->
cItems - 1;
i >= helpPos;
i--, lpitem--) {
2163 if (lpitem->yItem != orgY)
break;
2164 if (lpitem->cxItem >= orgX)
break;
2165 lpitem->xItem += orgX - lpitem->cxItem;
2166 lpitem->cxItem = orgX;
2167 orgX = lpitem->xItem;
2178 UINT arrow_bitmap_height;
2187 rect.bottom = arrow_bitmap_height;
2191 rect.top = lppop->
cyMenu - arrow_bitmap_height;
2211 UINT arrow_bitmap_width = 0;
2229 bkgnd = (menuBar && flat_menu) ? COLOR_MENUBAR :
COLOR_MENU;
2235 if(menuBar && !flat_menu) {
2294 TRACE(
"Ownerdraw: owner=%p itemID=%d, itemState=%d, itemAction=%d, "
2295 "hwndItem=%p, hdc=%p, rcItem={%ld,%ld,%ld,%ld}\n", Wnd,
2413 bmprc.right = bmprc.left + lpitem->
cxBmp;
2420 bmprc.bottom = bmprc.top + lpitem->
cyBmp;
2445 check_bitmap_width, check_bitmap_height,
2454 r.right =
r.left + check_bitmap_width;
2465 bmpRect.
left += check_bitmap_width + 2;
2477 rectTemp.
left = rectTemp.
right - check_bitmap_width;
2482 rect.left += check_bitmap_width;
2483 rect.right -= arrow_bitmap_width;
2485 else if( lpitem->
hbmp)
2496 UINT uFormat = menuBar ?
2550 if (!menuBar &&
L'\0' !=
Text[
i])
2604 TRACE(
"DPM wnd=%p dc=%p menu=%p\n", wnd,
hdc, menu);
2622 if (menu && menu->
cItems)
2674 ERR(
"Already in End loop\n");
2790 TRACE(
"owner=%p hmenu=%p\n", pWndOwner, menu);
2813 if( !pWndCreated )
return FALSE;
2820 pPopupMenu = ((
PMENUWND)pWndCreated)->ppopupmenu;
2846#define SHOW_DEBUGRECT 0
2904 if (pExclude->
bottom + height < monitor->rcMonitor.bottom)
2924 if (pExclude->
right + width < monitor->rcMonitor.right)
2949 TRACE(
"owner=%p menu=%p id=0x%04x x=0x%04x y=0x%04x\n",
2950 pwndOwner, menu,
id,
x,
y);
2960 DebugRect(pExclude,
RGB(255, 0, 0));
2971 if (
flags & TPM_LAYOUTRTL)
2988 DebugPoint(
x,
y,
RGB(0, 0, 255));
3000 if (x < monitor->rcMonitor.left)
3005 if (x < monitor->rcMonitor.left ||
x >= monitor->
rcMonitor.
right || bIsPopup)
3010 if (y < monitor->rcMonitor.top)
3014 if (y < monitor->rcMonitor.top ||
y >= monitor->
rcMonitor.
bottom || bIsPopup)
3041 UINT flag_mods[] = {
3070 DebugRect(&rr,
RGB(0, 255, 0));
3078 ERR(
"menu->hWnd bad hwnd %p\n",menu->
hWnd);
3111 UINT arrow_bitmap_height;
3118 rc.
top += arrow_bitmap_height;
3119 rc.
bottom -= arrow_bitmap_height;
3123 if (
item->cyItem > lppop->
iTop + nMaxHeight)
3125 lppop->
iTop =
item->cyItem - nMaxHeight;
3130 else if (
item->yItem < lppop->
iTop)
3150 TRACE(
"M_SI: owner=%p menu=%p index=0x%04x select=0x%04x\n", pwndOwner, menu, wIndex, sendMenuSelect);
3152 if (!menu || !menu->
cItems)
return;
3158 if (menu->
iItem == wIndex)
return;
3183 menu->
iItem = wIndex;
3197 ip->fType |
ip->fState |
3204 else if (sendMenuSelect)
3235 TRACE(
"pwnd=%x menu=%x off=0x%04x\n", pwndOwner, menu,
offset);
3237 if ((!menu) || (!menu->
rgItems))
return;
3254 i >= 0 && i < menu->cItems ;
i +=
offset)
3270 TRACE(
"owner=%x menu=%x 0x%04x\n", pWndOwner, Menu, SendMenuSelect);
3279 if (!(
Item->spSubMenu) ||
3286 if (
Item->spSubMenu)
3328 TRACE(
"owner=%x menu=%p 0x%04x\n", WndOwner, Menu, SelectFirst);
3330 if (!Menu)
return Menu;
3429 if(
Flags & TPM_LAYOUTRTL)
3438 if(
Flags & TPM_LAYOUTRTL)
3450 Flags &= (~TPM_VERTICAL);
3465 return Item->spSubMenu;
3482 TRACE(
"%p menu=%p\n", pmt, Menu);
3493 if (!(
Item->spSubMenu))
3535 TRACE(
"%x menu=%x 0x%04x\n", pmt, PtMenu,
Index);
3537 if ( pmt->
TopMenu != PtMenu &&
3560 TRACE(
"%x PtMenu=%p\n", pmt, PtMenu);
3579 if (PtMenu->
iItem !=
id)
3605 TRACE(
"%p pmenu=%x\n", pmt, PtMenu);
3624 if (!(
item->spSubMenu))
3627 if (ExecutedMenuId == -1 || ExecutedMenuId == -2)
return -1;
3628 return ExecutedMenuId;
3657 if (!menu)
return NULL;
3663 if ( pItem ) pItem = &pItem[menu->
iItem];
3725 return item->spSubMenu;
3751 while (i < pmt->TopMenu->cItems) {
3784 TRACE(
"%p [%p] -> %p [%p]\n",
3814 else hNewMenu =
NULL;
3837 WARN(
" -- got confused.\n");
3921 PMENU MenuPrev, MenuTmp;
3923 MenuPrev = MenuTmp = pmt->
TopMenu;
3948 PMENU MenuTmp, MenuPrev;
3951 MenuPrev = MenuTmp = pmt->
TopMenu;
3999 TRACE(
"MenuKeyRight called, cur %p, top %p.\n",
4016 TRACE(
"Going to %d.\n", NextCol);
4055 INT executedMenuId = -1;
4064 if (pti != pwnd->
head.pti)
4066 ERR(
"Not the same PTI!!!!\n");
4076 TRACE(
"MTM : hmenu=%p flags=0x%08x (%d,%d) hwnd=%x\n",
4132 enterIdleSent =
TRUE;
4157 enterIdleSent=
FALSE;
4222 fRemove = (executedMenuId != -1);
4312 if (
msg.wParam ==
L'\r' ||
msg.wParam ==
L' ')
4315 fEndMenu = (executedMenuId != -2);
4322 if (
msg.wParam < 32)
break;
4332 fEndMenu = (executedMenuId != -2);
4397 if (executedMenuId == -1) executedMenuId = 0;
4398 return executedMenuId;
4491 TRACE(
"wnd=%p ht=0x%04x (%ld,%ld)\n", pWnd,
ht,
pt.x,
pt.y);
4547 if( wChar && wChar !=
' ' )
4550 if ( uItem >= (
UINT)(-2) )
4586 if (lpTpm && lpTpm->cbSize !=
sizeof(*lpTpm))
4588 ERR(
"Invalid TPMPARAMS size: got %u, expected %zu\n", lpTpm->cbSize,
sizeof(*lpTpm));
4593 if (pti != pWnd->head.pti)
4595 ERR(
"Must be the same pti!\n");
4599 TRACE(
"hmenu %p flags %04x (%d,%d) hwnd %p lpTpm %p \n",
4681 if (pPopupMenu ==
NULL)
4687 ((
PMENUWND)Wnd)->ppopupmenu = pPopupMenu;
4696 ERR(
"Wrong window class for Menu! fnid %x\n",Wnd->
fnid);
4699 pPopupMenu = ((
PMENUWND)Wnd)->ppopupmenu;
4751 ERR(
"No Window Pop Up!\n");
4773 ERR(
"Bad Menu Handle\n");
4781 pPopupMenu->
spmenu = pmenu;
4793 ERR(
"Someone is passing unknown menu messages %d\n",
Message);
4810 UINT uItem = uItemHilite;
4820 MenuItem->
fState &= ~MF_HILITE;
4822 if (MenuObject->
iItem == uItemHilite)
return TRUE;
4834 DWORD dwExStyle = 0;
4843 dwStyle = pWindowObject->
style;
4844 dwExStyle = pWindowObject->
ExStyle;
5043 PMENU menu, pSubTarget;
5080 ERR(
"Validation of window station handle (%p) failed\n",
5086 if (Menu && Menu->
head.
rpdesk->rpwinstaParent != WinStaObject)
5088 ERR(
"Desktop Window Station does not match Process one!\n");
5275 ERR(
"Failed Item Lookup! %u\n", uItem);
5296 Rect->left += XMove;
5298 Rect->right += XMove;
5299 Rect->bottom += YMove;
5313 if (
NULL == hSysMenu)
5318 if (
NULL == SysMenu)
5370 if (NewMenu ==
NULL)
5404 ERR(
"failed to load system menu!\n");
5463 OldMenu->
fFlags &= ~MNF_SYSMENU;
5518 if (
NULL == NewMenu)
5520 if (
NULL != OldMenu)
5530 if (
NULL != OldMenu)
5541 if (
NULL != NewMenu)
5546 if (
NULL != OldMenu)
5592 Rect.left = leftBorder;
5618 TRACE(
"Enter NtUserCheckMenuItem\n");
5627 TRACE(
"Leave NtUserCheckMenuItem, ret=%lu\n", Ret);
5644 TRACE(
"Enter NtUserDeleteMenu\n");
5653 TRACE(
"Leave NtUserDeleteMenu, ret=%i\n", Ret);
5692 TRACE(
"Enter NtUserGetSystemMenu\n");
5708 TRACE(
"Leave NtUserGetSystemMenu, ret=%p\n", Ret);
5727 TRACE(
"Enter NtUserSetSystemMenu\n");
5751 TRACE(
"Leave NtUserSetSystemMenu, ret=%i\n",
Result);
5768 TRACE(
"Enter NtUserGetTitleBarInfo\n");
5814 TRACE(
"Leave NtUserGetTitleBarInfo, ret=%u\n", retValue);
5850 TRACE(
"Enter NtUserDestroyMenu\n");
5865 TRACE(
"Leave NtUserDestroyMenu, ret=%i\n", Ret);
5882 TRACE(
"Enter NtUserEnableMenuItem\n");
5891 TRACE(
"Leave NtUserEnableMenuItem, ret=%u\n", Ret);
5903 TRACE(
"Enter NtUserEndMenu\n");
5922 TRACE(
"Leave NtUserEndMenu\n");
5945 TRACE(
"Enter NtUserGetMenuBarInfo\n");
5969 WARN(
"called on invalid window: %u\n", pWnd->
pcls->
fnid);
5975 pPopupMenu = ((
PMENUWND)pWnd)->ppopupmenu;
5976 if (pPopupMenu && pPopupMenu->
spmenu)
5988 TRACE(
"GMBI: OBJID_MENU hMenu %p\n",hMenu);
6027 if ((idItem < 0) || ((
ULONG)idItem > Menu->
cItems))
6035 TRACE(
"idItem a 0 %d\n",Ret);
6040 TRACE(
"idItem b %d %d\n", idItem-1, Ret);
6081 TRACE(
"Leave NtUserGetMenuBarInfo, ret=%i\n", Ret);
6094 PMENU Menu, SubMenu;
6097 UINT Ret = 0xFFFFFFFF;
6099 TRACE(
"Enter NtUserGetMenuIndex\n");
6107 for (
i = 0;
i < Menu->
cItems;
i++, MenuItem++)
6111 Ret = MenuItem->
wID;
6117 TRACE(
"Leave NtUserGetMenuIndex, ret=%u\n", Ret);
6140 TRACE(
"Enter NtUserGetMenuItemRect\n");
6163 if (lprcItem ==
NULL)
6182 Rect.right += XMove;
6183 Rect.bottom += YMove;
6203 TRACE(
"Leave NtUserGetMenuItemRect, ret=%i\n", Ret);
6222 TRACE(
"Enter NtUserHiliteMenuItem\n");
6240 TRACE(
"Leave NtUserHiliteMenuItem, ret=%i\n", Ret);
6263 ERR(
"Enter NtUserDrawMenuBarTemp\n");
6298 ERR(
"Leave NtUserDrawMenuBarTemp, ret=%lu\n", Ret);
6319 TRACE(
"Enter NtUserMenuItemFromPoint\n");
6343 Rect.bottom =
mi->cyItem;
6356 TRACE(
"Leave NtUserMenuItemFromPoint, ret=%i\n", Ret);
6385 Rect.left = leftBorder;
6409 TRACE(
"Enter NtUserRemoveMenu\n");
6418 TRACE(
"Leave NtUserRemoveMenu, ret=%i\n", Ret);
6436 TRACE(
"Enter NtUserSetMenu\n");
6461 TRACE(
"Leave NtUserSetMenu, ret=%i\n", Ret);
6472 DWORD dwContextHelpId)
6477 TRACE(
"Enter NtUserSetMenuContextHelpId\n");
6486 TRACE(
"Leave NtUserSetMenuContextHelpId, ret=%i\n", Ret);
6503 TRACE(
"Enter NtUserSetMenuDefaultItem\n");
6512 TRACE(
"Leave NtUserSetMenuDefaultItem, ret=%i\n", Ret);
6527 TRACE(
"Enter NtUserSetMenuFlagRtoL\n");
6536 TRACE(
"Leave NtUserSetMenuFlagRtoL, ret=%i\n", Ret);
6552 TRACE(
"Enter NtUserThunkedMenuInfo\n");
6561 TRACE(
"Leave NtUserThunkedMenuInfo, ret=%i\n", Ret);
6583 TRACE(
"Enter NtUserThunkedMenuItemInfo\n");
6589 RtlInitEmptyUnicodeString(&lstrCaption,
NULL, 0);
6597 if (lpszCaption && lpszCaption->
Buffer)
6605 ERR(
"Failed to capture MenuItem Caption (status 0x%08x)\n",
Status);
6625 TRACE(
"Leave NtUserThunkedMenuItemInfo, ret=%i\n", Ret);
6630#define VALID_TPM_FLAGS ( \
6631 TPM_LAYOUTRTL | TPM_NOANIMATION | TPM_VERNEGANIMATION | TPM_VERPOSANIMATION | \
6632 TPM_HORNEGANIMATION | TPM_HORPOSANIMATION | TPM_RETURNCMD | \
6633 TPM_NONOTIFY | TPM_VERTICAL | TPM_BOTTOMALIGN | TPM_VCENTERALIGN | \
6634 TPM_RIGHTALIGN | TPM_CENTERALIGN | TPM_RIGHTBUTTON | TPM_RECURSE \
6653 TRACE(
"Enter NtUserTrackPopupMenuEx\n");
6666 ERR(
"TPME : Invalid Menu handle.\n");
6673 ERR(
"TPME : Invalid Window handle.\n");
6698 TRACE(
"Leave NtUserTrackPopupMenuEx, ret=%i\n",Ret);
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn UINT32 *TableIdx UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE Parent
#define UlongToHandle(ul)
#define DBG_DEFAULT_CHANNEL(ch)
HBRUSH APIENTRY IntGdiCreateSolidBrush(COLORREF crColor)
COLORREF FASTCALL IntGdiSetBkColor(_In_ HDC hDC, _In_ COLORREF Color)
BOOL FASTCALL IntGdiDeleteDC(HDC, BOOL)
COLORREF FASTCALL IntGdiSetTextColor(HDC hDC, COLORREF color)
COLORREF FASTCALL IntSetDCPenColor(HDC, COLORREF)
COLORREF FASTCALL GreGetBkColor(HDC)
INT FASTCALL IntGdiSetBkMode(HDC hDC, INT backgroundMode)
int FASTCALL GreGetBkMode(HDC)
COLORREF FASTCALL GreGetTextColor(HDC)
#define ERROR_NOT_ENOUGH_MEMORY
#define NT_SUCCESS(StatCode)
#define ERROR_INVALID_PARAMETER
#define ERROR_ACCESS_DENIED
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
static const WCHAR Message[]
static const WCHAR Cleanup[]
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
HWND FASTCALL co_UserSetCapture(HWND hWnd)
HWND APIENTRY IntGetCapture(VOID)
#define KeRosDumpStackFrames(Frames, Count)
GLint GLint GLsizei GLsizei GLsizei depth
GLint GLint GLint GLint GLint x
GLint GLint GLint GLint GLint GLint y
GLint GLint GLsizei GLsizei height
GLdouble GLdouble GLdouble r
GLint GLint GLsizei width
GLdouble GLdouble GLdouble GLdouble q
GLdouble GLdouble GLdouble GLdouble top
GLubyte GLubyte GLubyte GLubyte w
GLfloat GLfloat GLfloat GLfloat h
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
static const struct newhuff ht[]
struct _MENUWND * PMENUWND
struct _PROCESSINFO * GetW32ProcessInfo(VOID)
#define UserHMGetHandle(obj)
struct _THREADINFO * GetW32ThreadInfo(VOID)
#define MSQ_STATE_MENUOWNER
#define EXCEPTION_EXECUTE_HANDLER
HGDIOBJ FASTCALL IntGetSysColorBrush(INT Object)
BOOL FASTCALL GreMoveTo(HDC hdc, INT x, INT y, LPPOINT pptOut)
DWORD FASTCALL IntGetSysColor(INT nIndex)
#define MmCopyToCaller(x, y, z)
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
HWND FASTCALL MsqSetStateWindow(PTHREADINFO pti, ULONG Type, HWND hWnd)
DWORD FASTCALL UserGetKeyState(DWORD dwKey)
unsigned __int3264 UINT_PTR
static int rop(int rop, int src, int dst)
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define UNICODE_STRING_MAX_CHARS
BOOL FASTCALL GreSetViewportOrgEx(HDC hDC, int X, int Y, LPPOINT Point)
__kernel_entry W32KAPI HDC APIENTRY NtGdiCreateCompatibleDC(_In_opt_ HDC hdc)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiBitBlt(_In_ HDC hdcDst, _In_ INT x, _In_ INT y, _In_ INT cx, _In_ INT cy, _In_opt_ HDC hdcSrc, _In_ INT xSrc, _In_ INT ySrc, _In_ DWORD rop4, _In_ DWORD crBackColor, _In_ FLONG fl)
__kernel_entry W32KAPI HBRUSH APIENTRY NtGdiSelectBrush(_In_ HDC hdc, _In_ HBRUSH hbrush)
__kernel_entry W32KAPI HANDLE APIENTRY NtGdiGetStockObject(_In_ INT iObject)
__kernel_entry W32KAPI HBITMAP APIENTRY NtGdiSelectBitmap(_In_ HDC hdc, _In_ HBITMAP hbm)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiDeleteObjectApp(_In_ HANDLE hobj)
__kernel_entry W32KAPI HPEN APIENTRY NtGdiSelectPen(_In_ HDC hdc, _In_ HPEN hpen)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiLineTo(_In_ HDC hdc, _In_ INT x, _In_ INT y)
__kernel_entry W32KAPI HFONT APIENTRY NtGdiSelectFont(_In_ HDC hdc, _In_ HFONT hf)
#define GDI_OBJ_HMGR_POWNED
#define GDI_OBJ_HMGR_PUBLIC
ULONG NTAPI PsGetCurrentProcessSessionId(VOID)
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
LRESULT FASTCALL IntDefWindowProc(PWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam, BOOL Ansi)
BOOL UserPaintCaption(PWND pWnd, INT Flags)
INT WINAPI DrawTextW(HDC hdc, LPCWSTR str, INT count, LPRECT rect, UINT flags)
BOOLEAN FASTCALL co_WinPosSetWindowPos(PWND Window, HWND WndInsertAfter, INT x, INT y, INT cx, INT cy, UINT flags)
BOOL FASTCALL IntGetWindowRect(PWND Wnd, RECTL *Rect)
BOOL FASTCALL IntScreenToClient(PWND Wnd, LPPOINT lpPoint)
NTSTATUS FASTCALL IntValidateWindowStationHandle(HWINSTA WindowStation, KPROCESSOR_MODE AccessMode, ACCESS_MASK DesiredAccess, PWINSTATION_OBJECT *Object, POBJECT_HANDLE_INFORMATION pObjectHandleInfo)
VOID FASTCALL UserLeave(VOID)
VOID FASTCALL UserEnterShared(VOID)
VOID FASTCALL UserEnterExclusive(VOID)
BOOL FASTCALL UserIsEnteredExclusive(VOID)
static __inline VOID UserDerefObjectCo(PVOID obj)
static __inline VOID UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
#define WS_EX_DLGMODALFRAME
_Out_opt_ int _Out_opt_ int * cy
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
static __inline NTSTATUS ProbeAndCaptureUnicodeString(OUT PUNICODE_STRING Dest, IN KPROCESSOR_MODE CurrentMode, IN const UNICODE_STRING *UnsafeSrc)
static __inline VOID ReleaseCapturedUnicodeString(IN PUNICODE_STRING CapturedString, IN KPROCESSOR_MODE CurrentMode)
WCHAR lfFaceName[LF_FACESIZE]
struct _USER_MESSAGE_QUEUE * MessageQueue
struct tagMENU * spSubMenu
DWORD rgstate[CCHILDREN_TITLEBAR+1]
static VOID ErrorExit(LPTSTR lpszMessage)
TW_UINT32 TW_UINT16 TW_UINT16 MSG
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define DFCS_MENUARROWDOWN
HDC FASTCALL IntBeginPaint(PWND Window, PPAINTSTRUCT Ps)
BOOL FASTCALL IntEndPaint(PWND Wnd, PPAINTSTRUCT Ps)
VOID FASTCALL co_IntUpdateWindows(PWND Wnd, ULONG Flags, BOOL Recurse)
_In_ HFONT _Out_ PUINT Height
FORCEINLINE PMENU UserGetMenuObject(HMENU hMenu)
PWND FASTCALL UserGetWindowObject(HWND hWnd)
PWND FASTCALL UserGetAncestor(PWND Wnd, UINT Type)
BOOLEAN co_UserDestroyWindow(PVOID Object)
INT FASTCALL UserReleaseDC(PWND Window, HDC hDc, BOOL EndPaint)
HDC FASTCALL UserGetDCEx(PWND Window OPTIONAL, HANDLE ClipRegion, ULONG Flags)
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ WDFCOLLECTION _In_ WDFOBJECT Item
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
VOID FASTCALL SetLastNtError(_In_ NTSTATUS Status)
HFONT FASTCALL GreCreateFontIndirectW(_In_ const LOGFONTW *lplf)
DWORD FASTCALL IntGetCharDimensions(_In_ HDC hdc, _Out_opt_ PTEXTMETRICW ptm, _Out_opt_ PDWORD height)
BOOL NTAPI GreSetObjectOwner(HGDIOBJ hobj, ULONG ulOwner)
BOOL NTAPI GreDeleteObject(HGDIOBJ hobj)
INT NTAPI GreGetObject(IN HGDIOBJ hobj, IN INT cbCount, OUT PVOID pvBuffer)
VOID FASTCALL RECTL_vInflateRect(_Inout_ RECTL *rect, _In_ INT dx, _In_ INT dy)
BOOL FASTCALL RECTL_bIntersectRect(_Out_ RECTL *prclDst, _In_ const RECTL *prcl1, _In_ const RECTL *prcl2)
FORCEINLINE VOID RECTL_vSetRect(_Out_ RECTL *prcl, _In_ LONG left, _In_ LONG top, _In_ LONG right, _In_ LONG bottom)
FORCEINLINE BOOL RECTL_bPointInRect(_In_ const RECTL *prcl, _In_ INT x, _In_ INT y)
FORCEINLINE VOID RECTL_vOffsetRect(_Inout_ RECTL *prcl, _In_ INT cx, _In_ INT cy)
FORCEINLINE VOID RECTL_vSetEmptyRect(_Out_ RECTL *prcl)
BOOL FASTCALL GreTextOutW(_In_ HDC hdc, _In_ INT nXStart, _In_ INT nYStart, _In_reads_(cchString) PCWCH lpString, _In_ INT cchString)
#define ValidateHwndNoErr(hwnd)
VOID FASTCALL co_IntSetupOBM(VOID)
HMENU APIENTRY co_IntCallLoadMenu(HINSTANCE hModule, PUNICODE_STRING pMenuName)
BOOL FASTCALL co_UserHideCaret(PWND Window OPTIONAL)
BOOL FASTCALL co_UserShowCaret(PWND Window OPTIONAL)
BOOL UserDrawIconEx(HDC hDc, INT xLeft, INT yTop, PCURICON_OBJECT pIcon, INT cxWidth, INT cyHeight, UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags)
PWND FASTCALL UserGetDesktopWindow(VOID)
static __inline PVOID DesktopHeapAlloc(IN PDESKTOP Desktop, IN SIZE_T Bytes)
static __inline BOOL DesktopHeapFree(IN PDESKTOP Desktop, IN PVOID lpMem)
static __inline PVOID DesktopHeapReAlloc(IN PDESKTOP Desktop, IN PVOID lpMem, IN SIZE_T Bytes)
VOID FASTCALL IntNotifyWinEvent(DWORD Event, PWND pWnd, LONG idObject, LONG idChild, DWORD flags)
BOOL FASTCALL IntTranslateKbdMessage(LPMSG lpMsg, UINT flags)
BOOL FASTCALL IntCallMsgFilter(LPMSG lpmsg, INT code)
LRESULT FASTCALL IntDispatchMessage(PMSG pMsg)
BOOL FASTCALL UserPostMessage(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)
BOOL FASTCALL co_IntWaitMessage(PWND Window, UINT MsgFilterMin, UINT MsgFilterMax)
BOOL APIENTRY co_IntGetPeekMessage(PMSG pMsg, HWND hWnd, UINT MsgFilterMin, UINT MsgFilterMax, UINT RemoveMsg, BOOL bGMSG)
LRESULT FASTCALL co_IntSendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
LONG NTAPI UserGetSystemMetrics(ULONG Index)
PMONITOR FASTCALL UserMonitorFromPoint(IN POINT pt, IN DWORD dwFlags)
PCURICON_OBJECT FASTCALL NC_IconForWindow(PWND pWnd)
DWORD FASTCALL GetNCHitEx(PWND pWnd, POINT pt)
BOOL UserDrawSysMenuButton(PWND pWnd, HDC hDC, LPRECT Rect, BOOL Down)
void FASTCALL NC_GetSysPopupPos(PWND Wnd, RECT *Rect)
void FASTCALL NC_GetInsideRect(PWND Wnd, RECT *rect)
BOOL FASTCALL UserMarkObjectDestroy(PVOID Object)
BOOL FASTCALL UserDereferenceObject(PVOID Object)
BOOL FASTCALL UserDeleteObject(HANDLE h, HANDLE_TYPE type)
PUSER_HANDLE_TABLE gHandleTable
BOOL FASTCALL UserObjectInDestroy(HANDLE h)
PVOID FASTCALL UserCreateObject(PUSER_HANDLE_TABLE ht, PDESKTOP pDesktop, PTHREADINFO pti, HANDLE *h, HANDLE_TYPE type, ULONG size)
VOID FASTCALL UserReferenceObject(PVOID obj)
BOOL FASTCALL UserSystemParametersInfo(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni)
PWND FASTCALL VerifyWnd(PWND pWnd)
PWND FASTCALL co_UserCreateWindowEx(CREATESTRUCTW *Cs, PUNICODE_STRING ClassName, PLARGE_STRING WindowName, PVOID acbiBuffer, DWORD dwVer)
BOOL FASTCALL IntIsWindow(HWND hWnd)
#define HAS_DLGFRAME(Style, ExStyle)
#define HAS_THINFRAME(Style, ExStyle)
#define HAS_THICKFRAME(Style, ExStyle)
VOID FASTCALL IntGetClientRect(PWND WindowObject, RECTL *Rect)
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
ENGAPI ULONG APIENTRY EngGetLastError(VOID)
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
#define ERROR_POPUP_ALREADY_ACTIVE
#define ERROR_MENU_ITEM_NOT_FOUND
#define ERROR_INVALID_MENU_HANDLE
#define ERROR_INVALID_WINDOW_HANDLE
#define ERROR_INVALID_FLAGS
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
#define SM_MENUDROPALIGNMENT
BOOL WINAPI EndMenu(void)
int WINAPI FrameRect(_In_ HDC, _In_ LPCRECT, _In_ HBRUSH)
#define HBMMENU_MBAR_RESTORE
#define COLOR_WINDOWFRAME
#define HELPINFO_MENUITEM
MENUINFO CONST * LPCMENUINFO
#define HBMMENU_POPUP_RESTORE
BOOL WINAPI DrawFrameControl(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
#define DFCS_CAPTIONCLOSE
#define HBMMENU_POPUP_MINIMIZE
#define HBMMENU_MBAR_MINIMIZE
#define CCHILDREN_TITLEBAR
#define HBMMENU_MBAR_MINIMIZE_D
#define WS_EX_PALETTEWINDOW
#define GMDI_GOINTOPOPUPS
#define STATE_SYSTEM_FOCUSABLE
BOOL WINAPI DrawEdge(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
#define HBMMENU_POPUP_CLOSE
#define DFCS_CAPTIONRESTORE
#define STATE_SYSTEM_INVISIBLE
#define COLOR_HIGHLIGHTTEXT
struct tagHELPINFO HELPINFO
#define HBMMENU_MBAR_CLOSE
#define STATE_SYSTEM_UNAVAILABLE
#define HBMMENU_MBAR_CLOSE_D
#define HBMMENU_POPUP_MAXIMIZE
#define WS_EX_CONTEXTHELP
#define COLOR_BTNHIGHLIGHT
struct tagMENUITEMINFOW MENUITEMINFOW
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
_Must_inspect_result_ _In_ ULONG Flags
#define ObDereferenceObject
#define PsGetCurrentProcess