diff --git a/reactos/dll/win32/gdi32/gdi32.def b/reactos/dll/win32/gdi32/gdi32.def index 68aebe712ab..d1a05c02e99 100644 --- a/reactos/dll/win32/gdi32/gdi32.def +++ b/reactos/dll/win32/gdi32/gdi32.def @@ -164,7 +164,7 @@ EndPath@4 EngAcquireSemaphore@4 EngAlphaBlend@28=NtGdiEngAlphaBlend@28; EngAssociateSurface@12 -EngBitBlt@44 +EngBitBlt@44=NtGdiEngBitBlt@44; EngCheckAbort@4 EngComputeGlyphSet@12 EngCopyBits@24 diff --git a/reactos/dll/win32/gdi32/misc/stubs.c b/reactos/dll/win32/gdi32/misc/stubs.c index 586bd82dde6..f355814a1a4 100644 --- a/reactos/dll/win32/gdi32/misc/stubs.c +++ b/reactos/dll/win32/gdi32/misc/stubs.c @@ -2548,26 +2548,7 @@ EngAssociateSurface(IN HSURF Surface, return 0; } -/* - * @unimplemented - */ -BOOL STDCALL -EngBitBlt(SURFOBJ *Dest, - SURFOBJ *Source, - SURFOBJ *Mask, - CLIPOBJ *ClipRegion, - XLATEOBJ *ColorTranslation, - RECTL *DestRect, - POINTL *SourcePoint, - POINTL *MaskRect, - BRUSHOBJ *Brush, - POINTL *BrushOrigin, - ROP4 rop4) -{ - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; -} + /* * @unimplemented diff --git a/reactos/subsystems/win32/win32k/eng/bitblt.c b/reactos/subsystems/win32/win32k/eng/bitblt.c index 6e18f4d3565..ade750056b7 100644 --- a/reactos/subsystems/win32/win32k/eng/bitblt.c +++ b/reactos/subsystems/win32/win32k/eng/bitblt.c @@ -248,6 +248,50 @@ CallDibBitBlt(SURFOBJ* OutputObj, INT __cdecl abs(INT nm); + +BOOL STDCALL +NtGdiEngBitBlt( + IN SURFOBJ *psoTrg, + IN SURFOBJ *psoSrc, + IN SURFOBJ *psoMask, + IN CLIPOBJ *pco, + IN XLATEOBJ *pxlo, + IN RECTL *prclTrg, + IN POINTL *pptlSrc, + IN POINTL *pptlMask, + IN BRUSHOBJ *pbo, + IN POINTL *pptlBrush, + IN ROP4 rop4 ) +{ + RECTL rclTrg; + POINTL ptlSrc; + POINTL ptlMask; + POINTL ptlBrush; + + _SEH_TRY + { + ProbeForRead(prclTrg, sizeof(RECTL), 1); + RtlCopyMemory(&rclTrg,prclTrg, sizeof(POINTL)); + + ProbeForRead(pptlSrc, sizeof(RECTL), 1); + RtlCopyMemory(&ptlSrc, pptlSrc, sizeof(POINTL)); + + ProbeForRead(pptlMask, sizeof(RECTL), 1); + RtlCopyMemory(&ptlMask, pptlMask, sizeof(POINTL)); + + ProbeForRead(pptlBrush, sizeof(RECTL), 1); + RtlCopyMemory(&ptlBrush, pptlBrush, sizeof(POINTL)); + + } + _SEH_HANDLE + { + _SEH_YIELD(return FALSE); + } + _SEH_END; + + return EngBitBlt(psoTrg, psoSrc, psoMask, pco, pxlo, &rclTrg, &ptlSrc, &ptlMask, pbo, &ptlBrush, rop4); +} + /* * @implemented */ diff --git a/reactos/subsystems/win32/win32k/w32ksvc.db b/reactos/subsystems/win32/win32k/w32ksvc.db index e283e5f1f35..b3c1612f5eb 100644 --- a/reactos/subsystems/win32/win32k/w32ksvc.db +++ b/reactos/subsystems/win32/win32k/w32ksvc.db @@ -617,7 +617,7 @@ NtUserYieldTask 0 # NtGdiEngEraseSurface 3 # NtGdiEngUnlockSurface 1 # NtGdiEngLockSurface 1 -# NtGdiEngBitBlt 11 +NtGdiEngBitBlt 11 # NtGdiEngStretchBlt 11 # NtGdiEngPlgBlt 11 # NtGdiEngMarkBandingSurface 1