mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 15:55:57 +00:00
[NTUSER][USER32_APITEST] TrackPopupMenuEx: Check flags (#8094)
Validate flags. JIRA issue: CORE-3247 - In NtUserTrackPopupMenuEx function, validate the flags. - If validation failed, then set last error and return FALSE. - Add SAL annotations to NtUserTrackPopupMenuEx. - Keep reference to menu in the function. - Add TrackPopupMenuEx testcase to user32_apitest.
This commit is contained in:
parent
4cf350a716
commit
3c35117f97
6 changed files with 395 additions and 27 deletions
|
@ -1425,12 +1425,12 @@ NtUserThunkedMenuItemInfo(
|
|||
BOOL
|
||||
NTAPI
|
||||
NtUserTrackPopupMenuEx(
|
||||
HMENU hmenu,
|
||||
UINT fuFlags,
|
||||
int x,
|
||||
int y,
|
||||
HWND hwnd,
|
||||
LPTPMPARAMS lptpm);
|
||||
_In_ HMENU hMenu,
|
||||
_In_ UINT fuFlags,
|
||||
_In_ INT x,
|
||||
_In_ INT y,
|
||||
_In_ HWND hwnd,
|
||||
_In_opt_ LPTPMPARAMS lptpm);
|
||||
|
||||
HKL
|
||||
NTAPI
|
||||
|
|
|
@ -4571,11 +4571,14 @@ track_menu:
|
|||
MENU_ExitTracking( pwnd, FALSE, wFlags);
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* TrackPopupMenuEx (USER32.@)
|
||||
*/
|
||||
BOOL WINAPI IntTrackPopupMenuEx( PMENU menu, UINT wFlags, int x, int y,
|
||||
PWND pWnd, LPTPMPARAMS lpTpm)
|
||||
BOOL FASTCALL
|
||||
IntTrackPopupMenuEx(
|
||||
_Inout_ PMENU menu,
|
||||
_In_ UINT wFlags,
|
||||
_In_ INT x,
|
||||
_In_ INT y,
|
||||
_In_ PWND pWnd,
|
||||
_In_opt_ const TPMPARAMS *lpTpm)
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
PTHREADINFO pti = PsGetCurrentThreadWin32Thread();
|
||||
|
@ -6624,27 +6627,39 @@ Cleanup:
|
|||
return Ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
BOOL APIENTRY
|
||||
#define VALID_TPM_FLAGS ( \
|
||||
TPM_LAYOUTRTL | TPM_NOANIMATION | TPM_VERNEGANIMATION | TPM_VERPOSANIMATION | \
|
||||
TPM_HORNEGANIMATION | TPM_HORPOSANIMATION | TPM_RETURNCMD | \
|
||||
TPM_NONOTIFY | TPM_VERTICAL | TPM_BOTTOMALIGN | TPM_VCENTERALIGN | \
|
||||
TPM_RIGHTALIGN | TPM_CENTERALIGN | TPM_RIGHTBUTTON | TPM_RECURSE \
|
||||
)
|
||||
|
||||
/* @implemented */
|
||||
BOOL NTAPI
|
||||
NtUserTrackPopupMenuEx(
|
||||
HMENU hMenu,
|
||||
UINT fuFlags,
|
||||
int x,
|
||||
int y,
|
||||
HWND hWnd,
|
||||
LPTPMPARAMS lptpm)
|
||||
_In_ HMENU hMenu,
|
||||
_In_ UINT fuFlags,
|
||||
_In_ INT x,
|
||||
_In_ INT y,
|
||||
_In_ HWND hWnd,
|
||||
_In_opt_ LPTPMPARAMS lptpm)
|
||||
{
|
||||
PMENU menu;
|
||||
PWND pWnd;
|
||||
TPMPARAMS tpm;
|
||||
BOOL Ret = FALSE;
|
||||
USER_REFERENCE_ENTRY Ref;
|
||||
USER_REFERENCE_ENTRY WndRef, MenuRef;
|
||||
|
||||
TRACE("Enter NtUserTrackPopupMenuEx\n");
|
||||
UserEnterExclusive();
|
||||
|
||||
if (fuFlags & ~VALID_TPM_FLAGS)
|
||||
{
|
||||
ERR("TPME : Invalid flags 0x%X (valid flags are 0x%X)\n", fuFlags, VALID_TPM_FLAGS);
|
||||
EngSetLastError(ERROR_INVALID_FLAGS);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
/* Parameter check */
|
||||
if (!(menu = UserGetMenuObject( hMenu )))
|
||||
{
|
||||
|
@ -6673,8 +6688,10 @@ NtUserTrackPopupMenuEx(
|
|||
_SEH2_END
|
||||
}
|
||||
|
||||
UserRefObjectCo(pWnd, &Ref);
|
||||
Ret = IntTrackPopupMenuEx(menu, fuFlags, x, y, pWnd, lptpm ? &tpm : NULL);
|
||||
UserRefObjectCo(pWnd, &WndRef);
|
||||
UserRefObjectCo(menu, &MenuRef);
|
||||
Ret = IntTrackPopupMenuEx(menu, fuFlags, x, y, pWnd, (lptpm ? &tpm : NULL));
|
||||
UserDerefObjectCo(menu);
|
||||
UserDerefObjectCo(pWnd);
|
||||
|
||||
Exit:
|
||||
|
@ -6682,5 +6699,3 @@ Exit:
|
|||
UserLeave();
|
||||
return Ret;
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -169,4 +169,12 @@ PWND MENU_IsMenuActive(VOID);
|
|||
void MENU_EndMenu( PWND pwnd );
|
||||
void FASTCALL MENU_InitSysMenuPopup(PMENU menu, DWORD style, DWORD clsStyle, LONG HitTest );
|
||||
INT FASTCALL IntMenuItemFromPoint(PWND pWnd, HMENU hMenu, POINT ptScreen);
|
||||
BOOL WINAPI IntTrackPopupMenuEx( PMENU menu, UINT wFlags, int x, int y, PWND pWnd, LPTPMPARAMS lpTpm);
|
||||
|
||||
BOOL FASTCALL
|
||||
IntTrackPopupMenuEx(
|
||||
_Inout_ PMENU menu,
|
||||
_In_ UINT wFlags,
|
||||
_In_ INT x,
|
||||
_In_ INT y,
|
||||
_In_ PWND pWnd,
|
||||
_In_opt_ const TPMPARAMS *lpTpm);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue