diff --git a/reactos/subsys/win32k/objects/text.c b/reactos/subsys/win32k/objects/text.c index 89589eaeab9..13fb9571f21 100644 --- a/reactos/subsys/win32k/objects/text.c +++ b/reactos/subsys/win32k/objects/text.c @@ -1488,17 +1488,6 @@ NtGdiExtTextOut( // TODO: Write test-cases to exactly match real Windows in different // bad parameters (e.g. does Windows check the DC or the RECT first?). - if (lprc && (fuOptions & (ETO_OPAQUE | ETO_CLIPPED))) - { - // At least one of the two flags were specified. Copy lprc. Once. - Status = MmCopyFromCaller(&SpecifiedDestRect, lprc, sizeof(RECT)); - if (!NT_SUCCESS(Status)) - { - SetLastWin32Error(ERROR_INVALID_PARAMETER); - return FALSE; - } - } - dc = DC_LockDc(hDC); if (!dc) { @@ -1512,6 +1501,18 @@ NtGdiExtTextOut( return TRUE; } + if (lprc && (fuOptions & (ETO_OPAQUE | ETO_CLIPPED))) + { + // At least one of the two flags were specified. Copy lprc. Once. + Status = MmCopyFromCaller(&SpecifiedDestRect, lprc, sizeof(RECT)); + if (!NT_SUCCESS(Status)) + { + SetLastWin32Error(ERROR_INVALID_PARAMETER); + return FALSE; + } + IntLPtoDP(dc, (POINT *) &SpecifiedDestRect, 2); + } + if (NULL != UnsafeDx && Count > 0) { Dx = ExAllocatePoolWithTag(PagedPool, Count * sizeof(INT), TAG_GDITEXT);