Fix gdi32:SetSysColors apitest

svn path=/trunk/; revision=51110
This commit is contained in:
Rafal Harabien 2011-03-21 14:52:08 +00:00
parent 347b8aee6f
commit f561f03d31
3 changed files with 31 additions and 28 deletions

View file

@ -156,8 +156,8 @@ IntGdiCombineTransform(LPXFORM XFormResult,
/* Stock objects */ /* Stock objects */
BOOL FASTCALL VOID FASTCALL
IntSetSysColors(UINT nColors, INT *Elements, COLORREF *Colors); IntSetSysColors(UINT nColors, CONST INT *Elements, CONST COLORREF *Colors);
HGDIOBJ FASTCALL HGDIOBJ FASTCALL
IntGetSysColorBrush(INT Object); IntGetSysColorBrush(INT Object);

View file

@ -538,36 +538,40 @@ NtUserSetSysColors(
IN CONST COLORREF *lpaRgbValues, IN CONST COLORREF *lpaRgbValues,
FLONG Flags) FLONG Flags)
{ {
DWORD Ret = FALSE; DWORD Ret = TRUE;
NTSTATUS Status = STATUS_SUCCESS; NTSTATUS Status = STATUS_SUCCESS;
UserEnterExclusive();
_SEH2_TRY if (cElements == 0)
{ return TRUE;
ProbeForRead(lpaElements,
UserEnterExclusive();
_SEH2_TRY
{
ProbeForRead(lpaElements,
sizeof(INT), sizeof(INT),
1); 1);
ProbeForRead(lpaRgbValues, ProbeForRead(lpaRgbValues,
sizeof(INT), sizeof(COLORREF),
1); 1);
// Developers: We are thread locked and calling gdi. // Developers: We are thread locked and calling gdi.
Ret = IntSetSysColors(cElements, (INT*)lpaElements, (COLORREF*)lpaRgbValues); IntSetSysColors(cElements, lpaElements, lpaRgbValues);
} }
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{ {
Status = _SEH2_GetExceptionCode(); Status = _SEH2_GetExceptionCode();
} }
_SEH2_END; _SEH2_END;
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
SetLastNtError(Status); SetLastNtError(Status);
Ret = FALSE; Ret = FALSE;
} }
if (Ret) if (Ret)
{ {
UserSendNotifyMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0); UserSendNotifyMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0);
} }
UserLeave(); UserLeave();
return Ret; return Ret;
} }
DWORD DWORD

View file

@ -216,8 +216,8 @@ NtGdiGetStockObject(INT Object)
return ((Object < 0) || (NB_STOCK_OBJECTS <= Object)) ? NULL : StockObjects[Object]; return ((Object < 0) || (NB_STOCK_OBJECTS <= Object)) ? NULL : StockObjects[Object];
} }
BOOL FASTCALL VOID FASTCALL
IntSetSysColors(UINT nColors, INT *Elements, COLORREF *Colors) IntSetSysColors(UINT nColors, CONST INT *Elements, CONST COLORREF *Colors)
{ {
UINT i; UINT i;
@ -234,7 +234,6 @@ IntSetSysColors(UINT nColors, INT *Elements, COLORREF *Colors)
Elements++; Elements++;
Colors++; Colors++;
} }
return nColors > 0;
} }
HGDIOBJ FASTCALL HGDIOBJ FASTCALL