mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 00:45:24 +00:00
[Win32k]
- Patch by Maxim Andreyanov : CreateWindowEx have to set error when menu handle is invalid. - See CORE-7980. svn path=/trunk/; revision=62494
This commit is contained in:
parent
5783342323
commit
fa3242a619
3 changed files with 52 additions and 0 deletions
|
@ -554,6 +554,47 @@ HANDLE FASTCALL ValidateHandleNoErr(HANDLE handle, HANDLE_TYPE type)
|
|||
if (handle) return (PWND)UserGetObjectNoErr(gHandleTable, handle, type);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
PVOID FASTCALL ValidateHandle(HANDLE handle, HANDLE_TYPE type)
|
||||
{
|
||||
PVOID pObj;
|
||||
DWORD dwError = 0;
|
||||
if (handle)
|
||||
{
|
||||
pObj = UserGetObjectNoErr(gHandleTable, handle, type);
|
||||
if (!pObj)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case TYPE_WINDOW:
|
||||
dwError = ERROR_INVALID_WINDOW_HANDLE;
|
||||
break;
|
||||
case TYPE_MENU:
|
||||
dwError = ERROR_INVALID_MENU_HANDLE;
|
||||
break;
|
||||
case TYPE_CURSOR:
|
||||
dwError = ERROR_INVALID_CURSOR_HANDLE;
|
||||
break;
|
||||
case TYPE_SETWINDOWPOS:
|
||||
dwError = ERROR_INVALID_DWP_HANDLE;
|
||||
break;
|
||||
case TYPE_HOOK:
|
||||
dwError = ERROR_INVALID_HOOK_HANDLE;
|
||||
break;
|
||||
case TYPE_ACCELTABLE:
|
||||
dwError = ERROR_INVALID_ACCEL_HANDLE;
|
||||
break;
|
||||
default:
|
||||
dwError = ERROR_INVALID_HANDLE;
|
||||
break;
|
||||
}
|
||||
EngSetLastError(dwError);
|
||||
return NULL;
|
||||
}
|
||||
return pObj;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* NtUserValidateHandleSecure
|
||||
|
|
|
@ -19,6 +19,7 @@ BOOL FASTCALL UserObjectInDestroy(HANDLE);
|
|||
void DbgUserDumpHandleTable();
|
||||
VOID FASTCALL UserSetObjectOwner(PVOID obj, HANDLE_TYPE type, PVOID owner);
|
||||
HANDLE FASTCALL ValidateHandleNoErr(HANDLE handle, HANDLE_TYPE type);
|
||||
PVOID FASTCALL ValidateHandle(HANDLE handle, HANDLE_TYPE type);
|
||||
|
||||
static __inline VOID
|
||||
UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
|
||||
|
|
|
@ -2571,6 +2571,16 @@ NtUserCreateWindowEx(
|
|||
|
||||
ASSERT(plstrWindowName);
|
||||
|
||||
if ( (dwStyle & (WS_POPUP|WS_CHILD)) != WS_CHILD)
|
||||
{
|
||||
/* check hMenu is valid handle */
|
||||
if (hMenu && !ValidateHandle(hMenu, TYPE_MENU))
|
||||
{
|
||||
/* error is set in ValidateHandle */
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* Copy the window name to kernel mode */
|
||||
Status = ProbeAndCaptureLargeString(&lstrWindowName, plstrWindowName);
|
||||
if (!NT_SUCCESS(Status))
|
||||
|
|
Loading…
Reference in a new issue