mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 12:06:52 +00:00
[WIN32K:NTUSER]
- Probe parameters in NtUserGetLayeredWindowAttributes - Don't call UserGetWindowObject without holding the user lock svn path=/trunk/; revision=69182
This commit is contained in:
parent
e88843426b
commit
953771f506
1 changed files with 24 additions and 13 deletions
|
@ -224,15 +224,15 @@ NtUserGetLayeredWindowAttributes(
|
||||||
BOOL Ret = FALSE;
|
BOOL Ret = FALSE;
|
||||||
|
|
||||||
TRACE("Enter NtUserGetLayeredWindowAttributes\n");
|
TRACE("Enter NtUserGetLayeredWindowAttributes\n");
|
||||||
|
UserEnterExclusive();
|
||||||
|
|
||||||
if (!(pWnd = UserGetWindowObject(hwnd)) ||
|
if (!(pWnd = UserGetWindowObject(hwnd)) ||
|
||||||
!(pWnd->ExStyle & WS_EX_LAYERED) )
|
!(pWnd->ExStyle & WS_EX_LAYERED) )
|
||||||
{
|
{
|
||||||
return FALSE;
|
ERR("Not a Layered Window!\n");
|
||||||
|
goto Exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
UserEnterExclusive();
|
|
||||||
|
|
||||||
pLrdProp = UserGetProp(pWnd, AtomLayer);
|
pLrdProp = UserGetProp(pWnd, AtomLayer);
|
||||||
|
|
||||||
if (!pLrdProp)
|
if (!pLrdProp)
|
||||||
|
@ -248,9 +248,21 @@ NtUserGetLayeredWindowAttributes(
|
||||||
|
|
||||||
_SEH2_TRY
|
_SEH2_TRY
|
||||||
{
|
{
|
||||||
if (pcrKey) *pcrKey = pLrdProp->Key;
|
if (pcrKey)
|
||||||
if (pbAlpha) *pbAlpha = pLrdProp->Alpha;
|
{
|
||||||
if (pdwFlags) *pdwFlags = pLrdProp->Flags;
|
ProbeForWrite(pcrKey, sizeof(*pcrKey), 1);
|
||||||
|
*pcrKey = pLrdProp->Key;
|
||||||
|
}
|
||||||
|
if (pbAlpha)
|
||||||
|
{
|
||||||
|
ProbeForWrite(pbAlpha, sizeof(*pbAlpha), 1);
|
||||||
|
*pbAlpha = pLrdProp->Alpha;
|
||||||
|
}
|
||||||
|
if (pdwFlags)
|
||||||
|
{
|
||||||
|
ProbeForWrite(pdwFlags, sizeof(*pdwFlags), 1);
|
||||||
|
*pdwFlags = pLrdProp->Flags;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
|
@ -322,10 +334,11 @@ NtUserUpdateLayeredWindow(
|
||||||
BOOL Ret = FALSE;
|
BOOL Ret = FALSE;
|
||||||
|
|
||||||
TRACE("Enter NtUserUpdateLayeredWindow\n");
|
TRACE("Enter NtUserUpdateLayeredWindow\n");
|
||||||
|
UserEnterExclusive();
|
||||||
|
|
||||||
if (!(pWnd = UserGetWindowObject(hwnd)))
|
if (!(pWnd = UserGetWindowObject(hwnd)))
|
||||||
{
|
{
|
||||||
return FALSE;
|
goto Exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
_SEH2_TRY
|
_SEH2_TRY
|
||||||
|
@ -356,12 +369,10 @@ NtUserUpdateLayeredWindow(
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
EngSetLastError( ERROR_INVALID_PARAMETER );
|
EngSetLastError( ERROR_INVALID_PARAMETER );
|
||||||
_SEH2_YIELD(return FALSE);
|
_SEH2_YIELD(goto Exit);
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
|
||||||
UserEnterExclusive();
|
|
||||||
|
|
||||||
if ( GetLayeredStatus(pWnd) ||
|
if ( GetLayeredStatus(pWnd) ||
|
||||||
dwFlags & ~(ULW_COLORKEY | ULW_ALPHA | ULW_OPAQUE | ULW_EX_NORESIZE) ||
|
dwFlags & ~(ULW_COLORKEY | ULW_ALPHA | ULW_OPAQUE | ULW_EX_NORESIZE) ||
|
||||||
!(pWnd->ExStyle & WS_EX_LAYERED) )
|
!(pWnd->ExStyle & WS_EX_LAYERED) )
|
||||||
|
@ -373,14 +384,14 @@ NtUserUpdateLayeredWindow(
|
||||||
|
|
||||||
info.cbSize = sizeof(info);
|
info.cbSize = sizeof(info);
|
||||||
info.hdcDst = hdcDst;
|
info.hdcDst = hdcDst;
|
||||||
info.pptDst = pptDst? &Dst : 0;
|
info.pptDst = pptDst? &Dst : NULL;
|
||||||
info.psize = &Size;
|
info.psize = &Size;
|
||||||
info.hdcSrc = hdcSrc;
|
info.hdcSrc = hdcSrc;
|
||||||
info.pptSrc = pptSrc ? &Src : 0;
|
info.pptSrc = pptSrc ? &Src : NULL;
|
||||||
info.crKey = crKey;
|
info.crKey = crKey;
|
||||||
info.pblend = &blend;
|
info.pblend = &blend;
|
||||||
info.dwFlags = dwFlags;
|
info.dwFlags = dwFlags;
|
||||||
info.prcDirty = prcDirty ? &Dirty : 0;
|
info.prcDirty = prcDirty ? &Dirty : NULL;
|
||||||
Ret = IntUpdateLayeredWindowI( pWnd, &info );
|
Ret = IntUpdateLayeredWindowI( pWnd, &info );
|
||||||
Exit:
|
Exit:
|
||||||
TRACE("Leave NtUserUpdateLayeredWindow, ret=%i\n", Ret);
|
TRACE("Leave NtUserUpdateLayeredWindow, ret=%i\n", Ret);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue