mirror of
https://github.com/reactos/reactos.git
synced 2024-07-07 21:25:05 +00:00
Speed optimize NtUserEnumDisplaySettings bit by remove
COPY_DEVMODE_VALUE_TO_CALLER macro and using SEH directly svn path=/trunk/; revision=33270
This commit is contained in:
parent
5e393b5c8d
commit
8ef0a1282d
|
@ -890,15 +890,6 @@ NtUserGetDC(HWND hWnd)
|
||||||
return NtUserGetDCEx(hWnd, NULL, NULL == hWnd ? DCX_CACHE | DCX_WINDOW : DCX_USESTYLE);
|
return NtUserGetDCEx(hWnd, NULL, NULL == hWnd ? DCX_CACHE | DCX_WINDOW : DCX_USESTYLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define COPY_DEVMODE_VALUE_TO_CALLER(dst, src, member) \
|
|
||||||
Status = MmCopyToCaller(&(dst)->member, &(src)->member, sizeof ((src)->member)); \
|
|
||||||
if (!NT_SUCCESS(Status)) \
|
|
||||||
{ \
|
|
||||||
SetLastNtError(Status); \
|
|
||||||
ExFreePool(src); \
|
|
||||||
return FALSE; \
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
NtUserEnumDisplaySettings(
|
NtUserEnumDisplaySettings(
|
||||||
|
@ -916,7 +907,7 @@ NtUserEnumDisplaySettings(
|
||||||
/* Copy the devmode */
|
/* Copy the devmode */
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForRead(&lpDevMode->dmSize, sizeof(DEVMODEW), 1);
|
ProbeForRead(lpDevMode, sizeof(DEVMODEW), 1);
|
||||||
Size = lpDevMode->dmSize;
|
Size = lpDevMode->dmSize;
|
||||||
ExtraSize = lpDevMode->dmDriverExtra;
|
ExtraSize = lpDevMode->dmDriverExtra;
|
||||||
}
|
}
|
||||||
|
@ -963,11 +954,23 @@ NtUserEnumDisplaySettings(
|
||||||
RtlFreeUnicodeString(pSafeDeviceName);
|
RtlFreeUnicodeString(pSafeDeviceName);
|
||||||
|
|
||||||
/* Copy some information back */
|
/* Copy some information back */
|
||||||
COPY_DEVMODE_VALUE_TO_CALLER(lpDevMode, pSafeDevMode, dmPelsWidth);
|
_SEH_TRY
|
||||||
COPY_DEVMODE_VALUE_TO_CALLER(lpDevMode, pSafeDevMode, dmPelsHeight);
|
{
|
||||||
COPY_DEVMODE_VALUE_TO_CALLER(lpDevMode, pSafeDevMode, dmBitsPerPel);
|
ProbeForWrite(lpDevMode,Size, 1);
|
||||||
COPY_DEVMODE_VALUE_TO_CALLER(lpDevMode, pSafeDevMode, dmDisplayFrequency);
|
lpDevMode->dmPelsWidth = pSafeDevMode->dmPelsWidth;
|
||||||
COPY_DEVMODE_VALUE_TO_CALLER(lpDevMode, pSafeDevMode, dmDisplayFlags);
|
lpDevMode->dmPelsHeight = pSafeDevMode->dmPelsHeight;
|
||||||
|
lpDevMode->dmBitsPerPel = pSafeDevMode->dmBitsPerPel;
|
||||||
|
lpDevMode->dmDisplayFrequency = pSafeDevMode->dmDisplayFrequency;
|
||||||
|
lpDevMode->dmDisplayFlags = pSafeDevMode->dmDisplayFlags;
|
||||||
|
}
|
||||||
|
_SEH_HANDLE
|
||||||
|
{
|
||||||
|
DPRINT1("Warning crash here \n");
|
||||||
|
SetLastNtError(_SEH_GetExceptionCode());
|
||||||
|
_SEH_YIELD(return FALSE);
|
||||||
|
}
|
||||||
|
_SEH_END;
|
||||||
|
|
||||||
|
|
||||||
/* output private/extra driver data */
|
/* output private/extra driver data */
|
||||||
if (ExtraSize > 0)
|
if (ExtraSize > 0)
|
||||||
|
@ -985,8 +988,6 @@ NtUserEnumDisplaySettings(
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef COPY_DEVMODE_VALUE_TO_CALLER
|
|
||||||
|
|
||||||
LONG
|
LONG
|
||||||
STDCALL
|
STDCALL
|
||||||
NtUserChangeDisplaySettings(
|
NtUserChangeDisplaySettings(
|
||||||
|
|
Loading…
Reference in a new issue