- Add some annotations
- Fix some 64bit issues
- Fix a typo
- reduce ENUM_RECT_LIMIT to 32, which is more than enough and doesn't waste as much stack space
- remove some unused macros

svn path=/trunk/; revision=58076
This commit is contained in:
Timo Kreuzer 2013-01-01 09:40:48 +00:00
parent 319425e1d9
commit 737708cfb0
21 changed files with 311 additions and 273 deletions

View file

@ -17,13 +17,14 @@
*/
BOOL
APIENTRY
EngAlphaBlend(IN SURFOBJ *psoDest,
IN SURFOBJ *psoSource,
IN CLIPOBJ *ClipRegion,
IN XLATEOBJ *ColorTranslation,
IN PRECTL DestRect,
IN PRECTL SourceRect,
IN BLENDOBJ *BlendObj)
EngAlphaBlend(
_Inout_ SURFOBJ *psoDest,
_In_ SURFOBJ *psoSource,
_In_opt_ CLIPOBJ *ClipRegion,
_In_opt_ XLATEOBJ *ColorTranslation,
_In_ RECTL *DestRect,
_In_ RECTL *SourceRect,
_In_ BLENDOBJ *BlendObj)
{
RECTL InputRect;
RECTL OutputRect;

View file

@ -296,18 +296,20 @@ NtGdiEngBitBlt(
/*
* @implemented
*/
BOOL APIENTRY
EngBitBlt(SURFOBJ *DestObj,
SURFOBJ *SourceObj,
SURFOBJ *Mask,
CLIPOBJ *ClipRegion,
XLATEOBJ *ColorTranslation,
RECTL *DestRect,
POINTL *SourcePoint,
POINTL *MaskOrigin,
BRUSHOBJ *pbo,
POINTL *BrushOrigin,
ROP4 Rop4)
BOOL
APIENTRY
EngBitBlt(
_Inout_ SURFOBJ *psoTrg,
_In_opt_ SURFOBJ *psoSrc,
_In_opt_ SURFOBJ *psoMask,
_In_opt_ CLIPOBJ *pco,
_In_opt_ XLATEOBJ *pxlo,
_In_ RECTL *prclTrg,
_When_(psoSrc, _In_) POINTL *pptlSrc,
_When_(psoMask, _In_) POINTL *pptlMask,
_In_opt_ BRUSHOBJ *pbo,
_When_(pbo, _In_) POINTL *pptlBrush,
_In_ ROP4 rop4)
{
BYTE clippingType;
RECTL CombinedRect;
@ -321,36 +323,36 @@ EngBitBlt(SURFOBJ *DestObj,
PBLTRECTFUNC BltRectFunc;
BOOLEAN Ret = TRUE;
RECTL ClipRect;
unsigned i;
ULONG i;
POINTL Pt;
ULONG Direction;
BOOL UsesSource, UsesMask;
POINTL AdjustedBrushOrigin;
UsesSource = ROP4_USES_SOURCE(Rop4);
UsesMask = ROP4_USES_MASK(Rop4);
UsesSource = ROP4_USES_SOURCE(rop4);
UsesMask = ROP4_USES_MASK(rop4);
if (Rop4 == ROP4_NOOP)
if (rop4 == ROP4_NOOP)
{
/* Copy destination onto itself: nop */
return TRUE;
}
//DPRINT1("Rop4 : 0x%08x\n", Rop4);
//DPRINT1("rop4 : 0x%08x\n", rop4);
OutputRect = *DestRect;
OutputRect = *prclTrg;
RECTL_vMakeWellOrdered(&OutputRect);
if (UsesSource)
{
if (NULL == SourcePoint)
if (!psoSrc || !pptlSrc)
{
return FALSE;
}
/* Make sure we don't try to copy anything outside the valid source
region */
InputPoint = *SourcePoint;
InputPoint = *pptlSrc;
if (InputPoint.x < 0)
{
OutputRect.left -= InputPoint.x;
@ -361,17 +363,17 @@ EngBitBlt(SURFOBJ *DestObj,
OutputRect.top -= InputPoint.y;
InputPoint.y = 0;
}
if (SourceObj->sizlBitmap.cx < InputPoint.x +
if (psoSrc->sizlBitmap.cx < InputPoint.x +
OutputRect.right - OutputRect.left)
{
OutputRect.right = OutputRect.left +
SourceObj->sizlBitmap.cx - InputPoint.x;
psoSrc->sizlBitmap.cx - InputPoint.x;
}
if (SourceObj->sizlBitmap.cy < InputPoint.y +
if (psoSrc->sizlBitmap.cy < InputPoint.y +
OutputRect.bottom - OutputRect.top)
{
OutputRect.bottom = OutputRect.top +
SourceObj->sizlBitmap.cy - InputPoint.y;
psoSrc->sizlBitmap.cy - InputPoint.y;
}
InputRect.left = InputPoint.x;
@ -379,40 +381,40 @@ EngBitBlt(SURFOBJ *DestObj,
InputRect.top = InputPoint.y;
InputRect.bottom = InputPoint.y + (OutputRect.bottom - OutputRect.top);
InputObj = SourceObj;
InputObj = psoSrc;
}
else
{
InputPoint.x = InputPoint.y = 0;
InputRect.left = 0;
InputRect.right = DestRect->right - DestRect->left;
InputRect.right = prclTrg->right - prclTrg->left;
InputRect.top = 0;
InputRect.bottom = DestRect->bottom - DestRect->top;
InputRect.bottom = prclTrg->bottom - prclTrg->top;
}
if (NULL != ClipRegion)
if (NULL != pco)
{
if (OutputRect.left < ClipRegion->rclBounds.left)
if (OutputRect.left < pco->rclBounds.left)
{
InputRect.left += ClipRegion->rclBounds.left - OutputRect.left;
InputPoint.x += ClipRegion->rclBounds.left - OutputRect.left;
OutputRect.left = ClipRegion->rclBounds.left;
InputRect.left += pco->rclBounds.left - OutputRect.left;
InputPoint.x += pco->rclBounds.left - OutputRect.left;
OutputRect.left = pco->rclBounds.left;
}
if (ClipRegion->rclBounds.right < OutputRect.right)
if (pco->rclBounds.right < OutputRect.right)
{
InputRect.right -= OutputRect.right - ClipRegion->rclBounds.right;
OutputRect.right = ClipRegion->rclBounds.right;
InputRect.right -= OutputRect.right - pco->rclBounds.right;
OutputRect.right = pco->rclBounds.right;
}
if (OutputRect.top < ClipRegion->rclBounds.top)
if (OutputRect.top < pco->rclBounds.top)
{
InputRect.top += ClipRegion->rclBounds.top - OutputRect.top;
InputPoint.y += ClipRegion->rclBounds.top - OutputRect.top;
OutputRect.top = ClipRegion->rclBounds.top;
InputRect.top += pco->rclBounds.top - OutputRect.top;
InputPoint.y += pco->rclBounds.top - OutputRect.top;
OutputRect.top = pco->rclBounds.top;
}
if (ClipRegion->rclBounds.bottom < OutputRect.bottom)
if (pco->rclBounds.bottom < OutputRect.bottom)
{
InputRect.bottom -= OutputRect.bottom - ClipRegion->rclBounds.bottom;
OutputRect.bottom = ClipRegion->rclBounds.bottom;
InputRect.bottom -= OutputRect.bottom - pco->rclBounds.bottom;
OutputRect.bottom = pco->rclBounds.bottom;
}
}
@ -424,12 +426,12 @@ EngBitBlt(SURFOBJ *DestObj,
return TRUE;
}
OutputObj = DestObj;
OutputObj = psoTrg;
if (BrushOrigin)
if (pptlBrush)
{
AdjustedBrushOrigin.x = BrushOrigin->x;
AdjustedBrushOrigin.y = BrushOrigin->y;
AdjustedBrushOrigin.x = pptlBrush->x;
AdjustedBrushOrigin.y = pptlBrush->y;
}
else
{
@ -438,20 +440,20 @@ EngBitBlt(SURFOBJ *DestObj,
}
/* Determine clipping type */
if (ClipRegion == (CLIPOBJ *) NULL)
if (pco == (CLIPOBJ *) NULL)
{
clippingType = DC_TRIVIAL;
}
else
{
clippingType = ClipRegion->iDComplexity;
clippingType = pco->iDComplexity;
}
if (UsesMask)
{
BltRectFunc = BltMask;
}
else if ((Rop4 & 0xFF) == R3_OPINDEX_PATCOPY)
else if ((rop4 & 0xFF) == R3_OPINDEX_PATCOPY)
{
if (pbo && pbo->iSolidColor == 0xFFFFFFFF)
BltRectFunc = CallDibBitBlt;
@ -512,10 +514,10 @@ EngBitBlt(SURFOBJ *DestObj,
{
Direction = CD_ANY;
}
CLIPOBJ_cEnumStart(ClipRegion, FALSE, CT_RECTANGLES, Direction, 0);
CLIPOBJ_cEnumStart(pco, FALSE, CT_RECTANGLES, Direction, 0);
do
{
EnumMore = CLIPOBJ_bEnum(ClipRegion,(ULONG) sizeof(RectEnum),
EnumMore = CLIPOBJ_bEnum(pco, sizeof(RectEnum),
(PVOID) &RectEnum);
for (i = 0; i < RectEnum.c; i++)
@ -535,10 +537,16 @@ EngBitBlt(SURFOBJ *DestObj,
#endif
Pt.x = InputPoint.x + CombinedRect.left - OutputRect.left;
Pt.y = InputPoint.y + CombinedRect.top - OutputRect.top;
Ret = (*BltRectFunc)(OutputObj, InputObj, Mask,
ColorTranslation, &CombinedRect, &Pt,
MaskOrigin, pbo, &AdjustedBrushOrigin,
Rop4) && Ret;
Ret = (*BltRectFunc)(OutputObj,
InputObj,
psoMask,
pxlo,
&CombinedRect,
&Pt,
pptlMask,
pbo,
&AdjustedBrushOrigin,
rop4) && Ret;
}
}
}
@ -965,7 +973,7 @@ IntEngMaskBlt(SURFOBJ *psoDest,
{
BOOLEAN ret;
RECTL OutputRect;
POINTL InputPoint;
POINTL InputPoint = {0,0};
//SURFACE *psurfDest;
ASSERT(psoMask);

View file

@ -188,13 +188,15 @@ CompareSpans(
return Cmp;
}
VOID FASTCALL
VOID
FASTCALL
IntEngDeleteClipRegion(CLIPOBJ *ClipObj)
{
EngFreeMem(ObjToGDI(ClipObj, CLIP));
}
CLIPOBJ* FASTCALL
CLIPOBJ*
FASTCALL
IntEngCreateClipRegion(ULONG count, PRECTL pRect, PRECTL rcBounds)
{
CLIPGDI *Clip;
@ -250,7 +252,8 @@ IntEngCreateClipRegion(ULONG count, PRECTL pRect, PRECTL rcBounds)
/*
* @implemented
*/
CLIPOBJ * APIENTRY
CLIPOBJ *
APIENTRY
EngCreateClip(VOID)
{
CLIPGDI *Clip = EngAllocMem(FL_ZERO_MEMORY, sizeof(CLIPGDI), GDITAG_CLIPOBJ);
@ -265,32 +268,35 @@ EngCreateClip(VOID)
/*
* @implemented
*/
VOID APIENTRY
EngDeleteClip(CLIPOBJ *ClipRegion)
VOID
APIENTRY
EngDeleteClip(
_In_ _Post_ptr_invalid_ CLIPOBJ *pco)
{
EngFreeMem(ObjToGDI(ClipRegion, CLIP));
EngFreeMem(ObjToGDI(pco, CLIP));
}
/*
* @implemented
*/
ULONG APIENTRY
ULONG
APIENTRY
CLIPOBJ_cEnumStart(
IN CLIPOBJ* ClipObj,
IN BOOL ShouldDoAll,
IN ULONG ClipType,
IN ULONG BuildOrder,
IN ULONG MaxRects)
_Inout_ CLIPOBJ *pco,
_In_ BOOL bAll,
_In_ ULONG iType,
_In_ ULONG iDirection,
_In_ ULONG cMaxRects)
{
CLIPGDI *ClipGDI = ObjToGDI(ClipObj, CLIP);
CLIPGDI *ClipGDI = ObjToGDI(pco, CLIP);
SORTCOMP CompareFunc;
ClipGDI->EnumPos = 0;
ClipGDI->EnumMax = (MaxRects > 0) ? MaxRects : ClipGDI->EnumRects.c;
ClipGDI->EnumMax = (cMaxRects > 0) ? cMaxRects : ClipGDI->EnumRects.c;
if (CD_ANY != BuildOrder && ClipGDI->EnumOrder != BuildOrder)
if (CD_ANY != iDirection && ClipGDI->EnumOrder != iDirection)
{
switch (BuildOrder)
switch (iDirection)
{
case CD_RIGHTDOWN:
CompareFunc = (SORTCOMP) CompareRightDown;
@ -320,11 +326,11 @@ CLIPOBJ_cEnumStart(
EngSort((PBYTE) ClipGDI->EnumRects.arcl, sizeof(RECTL), ClipGDI->EnumRects.c, CompareFunc);
}
ClipGDI->EnumOrder = BuildOrder;
ClipGDI->EnumOrder = iDirection;
}
/* Return the number of rectangles enumerated */
if ((MaxRects > 0) && (ClipGDI->EnumRects.c > MaxRects))
if ((cMaxRects > 0) && (ClipGDI->EnumRects.c > cMaxRects))
{
return 0xFFFFFFFF;
}
@ -335,21 +341,22 @@ CLIPOBJ_cEnumStart(
/*
* @implemented
*/
BOOL APIENTRY
BOOL
APIENTRY
CLIPOBJ_bEnum(
IN CLIPOBJ* ClipObj,
IN ULONG ObjSize,
OUT ULONG *EnumRects)
_In_ CLIPOBJ *pco,
_In_ ULONG cj,
_Out_bytecap_(cj) ULONG *pulEnumRects)
{
RECTL *dest, *src;
CLIPGDI *ClipGDI = ObjToGDI(ClipObj, CLIP);
CLIPGDI *ClipGDI = ObjToGDI(pco, CLIP);
ULONG nCopy, i;
ENUMRECTS* pERects = (ENUMRECTS*)EnumRects;
ENUMRECTS* pERects = (ENUMRECTS*)pulEnumRects;
// Calculate how many rectangles we should copy
nCopy = min( ClipGDI->EnumMax - ClipGDI->EnumPos,
min( ClipGDI->EnumRects.c - ClipGDI->EnumPos,
(ObjSize - sizeof(ULONG)) / sizeof(RECTL)));
(cj - sizeof(ULONG)) / sizeof(RECTL)));
if(nCopy == 0)
{

View file

@ -15,12 +15,13 @@
* @implemented
*/
BOOL APIENTRY
EngCopyBits(SURFOBJ *psoDest,
SURFOBJ *psoSource,
CLIPOBJ *Clip,
XLATEOBJ *ColorTranslation,
RECTL *DestRect,
POINTL *SourcePoint)
EngCopyBits(
_In_ SURFOBJ *psoDest,
_In_ SURFOBJ *psoSource,
_In_opt_ CLIPOBJ *Clip,
_In_opt_ XLATEOBJ *ColorTranslation,
_In_ RECTL *DestRect,
_In_ POINTL *SourcePoint)
{
BOOL ret;
BYTE clippingType;
@ -50,7 +51,7 @@ EngCopyBits(SURFOBJ *psoDest,
rclDest.bottom = psoDest->sizlBitmap.cy;
if (RECTL_bIsEmptyRect(&rclDest)) return TRUE;
DestRect = &rclDest;
// FIXME: Don't punt to the driver's DrvCopyBits immediately. Instead,
// mark the copy block function to be DrvCopyBits instead of the
// GDI's copy bit function so as to remove clipping from the

View file

@ -1,4 +1,4 @@
/*
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* PURPOSE:
@ -14,10 +14,12 @@
/*
* @implemented
*/
VOID APIENTRY
EngDebugPrint(PCHAR StandardPrefix,
PCHAR DebugMessage,
va_list ap)
VOID
APIENTRY
EngDebugPrint(
_In_z_ PCHAR StandardPrefix,
_In_z_ PCHAR DebugMessage,
_In_ va_list ap)
{
vDbgPrintExWithPrefix(StandardPrefix,
-1,

View file

@ -47,6 +47,7 @@ EngpRegisterGraphicsDevice(
NTSTATUS Status;
PWSTR pwsz;
ULONG i, cj, cModes = 0;
SIZE_T cjWritten;
BOOL bEnable = TRUE;
PDEVMODEINFO pdminfo;
PDEVMODEW pdm, pdmEnd;
@ -77,7 +78,7 @@ EngpRegisterGraphicsDevice(
}
/* Enable the device */
EngFileWrite(pFileObject, &bEnable, sizeof(BOOL), &cj);
EngFileWrite(pFileObject, &bEnable, sizeof(BOOL), &cjWritten);
/* Copy the device and file object pointers */
pGraphicsDevice->DeviceObject = pDeviceObject;
@ -288,11 +289,11 @@ static
NTSTATUS
EngpFileIoRequest(
PFILE_OBJECT pFileObject,
ULONG ulMajorFunction,
LPVOID lpBuffer,
DWORD nBufferSize,
ULONGLONG ullStartOffset,
OUT LPDWORD lpInformation)
ULONG ulMajorFunction,
LPVOID lpBuffer,
SIZE_T nBufferSize,
ULONGLONG ullStartOffset,
OUT PULONG_PTR lpInformation)
{
PDEVICE_OBJECT pDeviceObject;
KEVENT Event;
@ -316,7 +317,7 @@ EngpFileIoRequest(
pIrp = IoBuildSynchronousFsdRequest(ulMajorFunction,
pDeviceObject,
lpBuffer,
nBufferSize,
(ULONG)nBufferSize,
&liStartOffset,
&Event,
&Iosb);
@ -367,7 +368,7 @@ EngFileIoControl(
IN SIZE_T nInBufferSize,
OUT PVOID lpOutBuffer,
IN SIZE_T nOutBufferSize,
OUT LPDWORD lpInformation)
OUT PULONG_PTR lpInformation)
{
PDEVICE_OBJECT pDeviceObject;
KEVENT Event;
@ -389,9 +390,9 @@ EngFileIoControl(
pIrp = IoBuildDeviceIoControlRequest(dwIoControlCode,
pDeviceObject,
lpInBuffer,
nInBufferSize,
(ULONG)nInBufferSize,
lpOutBuffer,
nOutBufferSize,
(ULONG)nOutBufferSize,
FALSE,
&Event,
&Iosb);
@ -422,13 +423,13 @@ EngFileIoControl(
*/
DWORD APIENTRY
EngDeviceIoControl(
HANDLE hDevice,
DWORD dwIoControlCode,
LPVOID lpInBuffer,
DWORD nInBufferSize,
LPVOID lpOutBuffer,
DWORD nOutBufferSize,
DWORD *lpBytesReturned)
_In_ HANDLE hDevice,
_In_ DWORD dwIoControlCode,
_In_opt_bytecount_(cjInBufferSize) LPVOID lpInBuffer,
_In_ DWORD cjInBufferSize,
_Out_opt_bytecap_(cjOutBufferSize) LPVOID lpOutBuffer,
_In_ DWORD cjOutBufferSize,
_Out_ LPDWORD lpBytesReturned)
{
PIRP Irp;
NTSTATUS Status;
@ -445,9 +446,12 @@ EngDeviceIoControl(
Irp = IoBuildDeviceIoControlRequest(dwIoControlCode,
DeviceObject,
lpInBuffer,
nInBufferSize,
cjInBufferSize,
lpOutBuffer,
nOutBufferSize, FALSE, &Event, &Iosb);
cjOutBufferSize,
FALSE,
&Event,
&Iosb);
if (!Irp) return ERROR_NOT_ENOUGH_MEMORY;
Status = IoCallDriver(DeviceObject, Irp);
@ -462,7 +466,7 @@ EngDeviceIoControl(
Iosb.Information);
/* Return information to the caller about the operation. */
*lpBytesReturned = Iosb.Information;
*lpBytesReturned = (DWORD)Iosb.Information;
/* Convert NT status values to win32 error codes. */
switch (Status)

View file

@ -36,12 +36,13 @@ DRIVEROBJ_Cleanup(PVOID pObject)
/** Public interface **********************************************************/
_Must_inspect_result_
HDRVOBJ
APIENTRY
EngCreateDriverObj(
IN PVOID pvObj,
IN FREEOBJPROC pFreeObjProc,
IN HDEV hdev)
_In_ PVOID pvObj,
_In_opt_ FREEOBJPROC pFreeObjProc,
_In_ HDEV hdev)
{
PEDRIVEROBJ pedo;
HDRVOBJ hdo;
@ -72,9 +73,9 @@ EngCreateDriverObj(
BOOL
APIENTRY
EngDeleteDriverObj(
IN HDRVOBJ hdo,
IN BOOL bCallBack,
IN BOOL bLocked)
_In_ _Post_ptr_invalid_ HDRVOBJ hdo,
_In_ BOOL bCallBack,
_In_ BOOL bLocked)
{
PEDRIVEROBJ pedo;
@ -111,7 +112,7 @@ EngDeleteDriverObj(
PDRIVEROBJ
APIENTRY
EngLockDriverObj(
IN HDRVOBJ hdo)
_In_ HDRVOBJ hdo)
{
PEDRIVEROBJ pedo;
@ -126,7 +127,7 @@ EngLockDriverObj(
BOOL
APIENTRY
EngUnlockDriverObj(
IN HDRVOBJ hdo)
_In_ _Post_ptr_invalid_ HDRVOBJ hdo)
{
PEDRIVEROBJ pedo;
ULONG cLocks;

View file

@ -287,7 +287,7 @@ NTAPI
EBRUSHOBJ_bRealizeBrush(EBRUSHOBJ *pebo, BOOL bCallDriver)
{
BOOL bResult;
PFN_DrvRealizeBrush pfnRealzizeBrush = NULL;
PFN_DrvRealizeBrush pfnRealizeBrush = NULL;
PSURFACE psurfPattern, psurfMask;
PPDEVOBJ ppdev;
EXLATEOBJ exlo;
@ -303,10 +303,10 @@ EBRUSHOBJ_bRealizeBrush(EBRUSHOBJ *pebo, BOOL bCallDriver)
if (!ppdev) ppdev = gppdevPrimary;
if (bCallDriver)
pfnRealzizeBrush = ppdev->DriverFunctions.RealizeBrush;
pfnRealizeBrush = ppdev->DriverFunctions.RealizeBrush;
if (!pfnRealzizeBrush)
pfnRealzizeBrush = EngRealizeBrush;
if (!pfnRealizeBrush)
pfnRealizeBrush = EngRealizeBrush;
/* Check if this is a hatch brush */
if (pbr->flAttrs & BR_IS_HATCH)
@ -351,12 +351,12 @@ EBRUSHOBJ_bRealizeBrush(EBRUSHOBJ *pebo, BOOL bCallDriver)
pebo->crCurrentText);
/* Create the realization */
bResult = pfnRealzizeBrush(&pebo->BrushObject,
&pebo->psurfTrg->SurfObj,
&psurfPattern->SurfObj,
psurfMask ? &psurfMask->SurfObj : NULL,
&exlo.xlo,
iHatch);
bResult = pfnRealizeBrush(&pebo->BrushObject,
&pebo->psurfTrg->SurfObj,
&psurfPattern->SurfObj,
psurfMask ? &psurfMask->SurfObj : NULL,
&exlo.xlo,
iHatch);
/* Cleanup the XLATEOBJ */
EXLATEOBJ_vCleanup(&exlo);

View file

@ -17,7 +17,8 @@
BOOL
APIENTRY
EngCreateEvent(OUT PEVENT* Event)
EngCreateEvent(
_Deref_out_opt_ PEVENT* Event)
{
BOOLEAN Result = TRUE;
PENG_EVENT EngEvent;
@ -54,7 +55,8 @@ EngCreateEvent(OUT PEVENT* Event)
BOOL
APIENTRY
EngDeleteEvent(IN PEVENT Event)
EngDeleteEvent(
_In_ _Post_ptr_invalid_ PEVENT Event)
{
DPRINT("EngDeleteEvent(%p)\n", Event);
@ -75,7 +77,8 @@ EngDeleteEvent(IN PEVENT Event)
VOID
APIENTRY
EngClearEvent(IN PEVENT Event)
EngClearEvent(
_In_ PEVENT Event)
{
/* Clear the event */
KeClearEvent(Event->pKEvent);
@ -83,7 +86,8 @@ EngClearEvent(IN PEVENT Event)
LONG
APIENTRY
EngSetEvent(IN PEVENT Event)
EngSetEvent(
_In_ PEVENT Event)
{
/* Set the event */
return KeSetEvent(Event->pKEvent,
@ -93,7 +97,8 @@ EngSetEvent(IN PEVENT Event)
LONG
APIENTRY
EngReadStateEvent(IN PEVENT Event)
EngReadStateEvent(
_In_ PEVENT Event)
{
/* Read the event state */
return KeReadStateEvent(Event->pKEvent);
@ -101,11 +106,12 @@ EngReadStateEvent(IN PEVENT Event)
PEVENT
APIENTRY
EngMapEvent(IN HDEV hDev,
IN HANDLE hUserObject,
IN PVOID Reserved1,
IN PVOID Reserved2,
IN PVOID Reserved3)
EngMapEvent(
_In_ HDEV hDev,
_In_ HANDLE hUserObject,
_Reserved_ PVOID Reserved1,
_Reserved_ PVOID Reserved2,
_Reserved_ PVOID Reserved3)
{
PENG_EVENT EngEvent;
NTSTATUS Status;
@ -147,7 +153,8 @@ EngMapEvent(IN HDEV hDev,
BOOL
APIENTRY
EngUnmapEvent(IN PEVENT Event)
EngUnmapEvent(
_In_ PEVENT Event)
{
/* Must be a usermapped event */
if (!(Event->fFlags & ENG_EVENT_USERMAPPED)) return FALSE;
@ -162,8 +169,9 @@ EngUnmapEvent(IN PEVENT Event)
BOOL
APIENTRY
EngWaitForSingleObject(IN PEVENT Event,
IN PLARGE_INTEGER TimeOut)
EngWaitForSingleObject(
_In_ PEVENT Event,
_In_opt_ PLARGE_INTEGER TimeOut)
{
NTSTATUS Status;
DPRINT("EngWaitForSingleObject(%p %I64d)\n", Event, TimeOut->QuadPart);

View file

@ -229,8 +229,9 @@ EngGetProcessHandle(VOID)
VOID
APIENTRY
EngGetCurrentCodePage(OUT PUSHORT OemCodePage,
OUT PUSHORT AnsiCodePage)
EngGetCurrentCodePage(
_Out_ PUSHORT OemCodePage,
_Out_ PUSHORT AnsiCodePage)
{
/* Forward to kernel */
RtlGetDefaultCodePage(AnsiCodePage, OemCodePage);
@ -239,8 +240,8 @@ EngGetCurrentCodePage(OUT PUSHORT OemCodePage,
BOOL
APIENTRY
EngQuerySystemAttribute(
IN ENG_SYSTEM_ATTRIBUTE CapNum,
OUT PDWORD pCapability)
_In_ ENG_SYSTEM_ATTRIBUTE CapNum,
_Out_ PDWORD pCapability)
{
SYSTEM_BASIC_INFORMATION sbi;
SYSTEM_PROCESSOR_INFORMATION spi;

View file

@ -24,7 +24,7 @@ EngGetLastError(VOID)
*/
VOID
APIENTRY
EngSetLastError(IN ULONG iError)
EngSetLastError(_In_ ULONG iError)
{
PTEB pTeb = NtCurrentTeb();
if (pTeb)

View file

@ -18,7 +18,7 @@
BOOL
APIENTRY
EngRestoreFloatingPointState(
IN VOID *Buffer)
_In_ VOID *Buffer)
{
NTSTATUS Status;
@ -34,8 +34,8 @@ EngRestoreFloatingPointState(
ULONG
APIENTRY
EngSaveFloatingPointState(
OUT VOID *Buffer,
IN ULONG BufferSize)
_Out_ VOID *Buffer,
_In_ ULONG BufferSize)
{
KFLOATING_SAVE TempBuffer;
NTSTATUS Status;

View file

@ -1,4 +1,4 @@
/*
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* PURPOSE: GDI Driver Gradient Functions
@ -443,16 +443,16 @@ IntEngIsNULLTriangle(TRIVERTEX *pVertex, GRADIENT_TRIANGLE *gt)
BOOL APIENTRY
EngGradientFill(
IN SURFOBJ *psoDest,
IN CLIPOBJ *pco,
IN XLATEOBJ *pxlo,
IN TRIVERTEX *pVertex,
IN ULONG nVertex,
IN PVOID pMesh,
IN ULONG nMesh,
IN RECTL *prclExtents,
IN POINTL *pptlDitherOrg,
IN ULONG ulMode)
_Inout_ SURFOBJ *psoDest,
_In_ CLIPOBJ *pco,
_In_opt_ XLATEOBJ *pxlo,
_In_ TRIVERTEX *pVertex,
_In_ ULONG nVertex,
_In_ PVOID pMesh,
_In_ ULONG nMesh,
_In_ RECTL *prclExtents,
_In_ POINTL *pptlDitherOrg,
_In_ ULONG ulMode)
{
ULONG i;
BOOL ret = FALSE;

View file

@ -2,7 +2,7 @@
typedef ULONG HCLIP;
#define ENUM_RECT_LIMIT 50
#define ENUM_RECT_LIMIT 32
typedef struct _RECT_ENUM
{

View file

@ -324,7 +324,7 @@ EngLoadImageEx(
WCHAR acwBuffer[MAX_PATH];
PLDEVOBJ pldev;
UNICODE_STRING strDriverName;
ULONG cwcLength;
SIZE_T cwcLength;
LPWSTR pwsz;
DPRINT("EngLoadImageEx(%ls, %lu)\n", pwszDriverName, ldevtype);
@ -442,7 +442,7 @@ leave:
HANDLE
APIENTRY
EngLoadImage(
LPWSTR pwszDriverName)
_In_ LPWSTR pwszDriverName)
{
return (HANDLE)EngLoadImageEx(pwszDriverName, LDEV_IMAGE);
}
@ -451,7 +451,7 @@ EngLoadImage(
VOID
APIENTRY
EngUnloadImage(
IN HANDLE hModule)
_In_ HANDLE hModule)
{
PLDEVOBJ pldev = (PLDEVOBJ)hModule;
@ -486,8 +486,8 @@ EngUnloadImage(
PVOID
APIENTRY
EngFindImageProcAddress(
IN HANDLE hModule,
IN LPSTR lpProcName)
_In_ HANDLE hModule,
_In_ LPSTR lpProcName)
{
PLDEVOBJ pldev = (PLDEVOBJ)hModule;

View file

@ -316,15 +316,16 @@ SEtoNW(SURFOBJ* OutputObj, CLIPOBJ* Clip,
* @implemented
*/
BOOL APIENTRY
EngLineTo(SURFOBJ *DestObj,
CLIPOBJ *Clip,
BRUSHOBJ *pbo,
LONG x1,
LONG y1,
LONG x2,
LONG y2,
RECTL *RectBounds,
MIX mix)
EngLineTo(
_Inout_ SURFOBJ *DestObj,
_In_ CLIPOBJ *Clip,
_In_ BRUSHOBJ *pbo,
_In_ LONG x1,
_In_ LONG y1,
_In_ LONG x2,
_In_ LONG y2,
_In_opt_ RECTL *RectBounds,
_In_ MIX mix)
{
LONG x, y, deltax, deltay, xchange, ychange, hx, vy;
ULONG i;

View file

@ -419,7 +419,8 @@ EngLoadModuleEx(
HANDLE
APIENTRY
EngLoadModule(LPWSTR pwsz)
EngLoadModule(
_In_ LPWSTR pwsz)
{
/* Forward to EngLoadModuleEx */
return (HANDLE)EngLoadModuleEx(pwsz, 0, FVF_READONLY | FVF_SYSTEMROOT);
@ -428,8 +429,8 @@ EngLoadModule(LPWSTR pwsz)
HANDLE
APIENTRY
EngLoadModuleForWrite(
IN LPWSTR pwsz,
IN ULONG cjSizeOfModule)
_In_ LPWSTR pwsz,
_In_ ULONG cjSizeOfModule)
{
/* Forward to EngLoadModuleEx */
return (HANDLE)EngLoadModuleEx(pwsz, cjSizeOfModule, FVF_SYSTEMROOT);
@ -438,15 +439,15 @@ EngLoadModuleForWrite(
PVOID
APIENTRY
EngMapModule(
IN HANDLE h,
OUT PULONG pulSize)
_In_ HANDLE h,
_Out_ PULONG pulSize)
{
PFILEVIEW pFileView = (PFILEVIEW)h;
NTSTATUS Status;
pFileView->cjView = 0;
/* FIXME: Use system space because ARM3 doesn't support executable sections yet */
/* FIXME: Use system space because ARM3 doesn't support executable sections yet */
Status = MmMapViewInSystemSpace(pFileView->pSection,
&pFileView->pvKView,
&pFileView->cjView);
@ -457,18 +458,19 @@ EngMapModule(
return NULL;
}
*pulSize = pFileView->cjView;
*pulSize = (ULONG)pFileView->cjView;
return pFileView->pvKView;
}
VOID
APIENTRY
EngFreeModule(IN HANDLE h)
EngFreeModule(
_In_ HANDLE h)
{
PFILEVIEW pFileView = (PFILEVIEW)h;
NTSTATUS Status;
/* FIXME: Use system space because ARM3 doesn't support executable sections yet */
/* FIXME: Use system space because ARM3 doesn't support executable sections yet */
Status = MmUnmapViewInSystemSpace(pFileView->pvKView);
if (!NT_SUCCESS(Status))
{
@ -483,12 +485,14 @@ EngFreeModule(IN HANDLE h)
EngFreeMem(pFileView);
}
_Success_(return != 0)
_When_(cjSize != 0, _At_(return, _Out_writes_bytes_(cjSize)))
PVOID
APIENTRY
EngMapFile(
IN LPWSTR pwsz,
IN ULONG cjSize,
OUT ULONG_PTR *piFile)
_In_ LPWSTR pwsz,
_In_ ULONG cjSize,
_Out_ ULONG_PTR *piFile)
{
HANDLE hModule;
PVOID pvBase;
@ -517,7 +521,7 @@ EngMapFile(
BOOL
APIENTRY
EngUnmapFile(
IN ULONG_PTR iFile)
_In_ ULONG_PTR iFile)
{
HANDLE hModule = (HANDLE)iFile;
@ -530,9 +534,9 @@ EngUnmapFile(
BOOL
APIENTRY
EngMapFontFileFD(
IN ULONG_PTR iFile,
OUT PULONG *ppjBuf,
OUT ULONG *pcjBuf)
_In_ ULONG_PTR iFile,
_Outptr_result_bytebuffer_(*pcjBuf) PULONG *ppjBuf,
_Out_ ULONG *pcjBuf)
{
// www.osr.com/ddk/graphics/gdifncs_0co7.htm
UNIMPLEMENTED;
@ -542,7 +546,7 @@ EngMapFontFileFD(
VOID
APIENTRY
EngUnmapFontFileFD(
IN ULONG_PTR iFile)
_In_ ULONG_PTR iFile)
{
// http://www.osr.com/ddk/graphics/gdifncs_6wbr.htm
UNIMPLEMENTED;
@ -551,9 +555,9 @@ EngUnmapFontFileFD(
BOOL
APIENTRY
EngMapFontFile(
ULONG_PTR iFile,
PULONG *ppjBuf,
ULONG *pcjBuf)
_In_ ULONG_PTR iFile,
_Outptr_result_bytebuffer_(*pcjBuf) PULONG *ppjBuf,
_Out_ ULONG *pcjBuf)
{
// www.osr.com/ddk/graphics/gdifncs_3up3.htm
return EngMapFontFileFD(iFile, ppjBuf, pcjBuf);
@ -562,7 +566,7 @@ EngMapFontFile(
VOID
APIENTRY
EngUnmapFontFile(
IN ULONG_PTR iFile)
_In_ ULONG_PTR iFile)
{
// www.osr.com/ddk/graphics/gdifncs_09wn.htm
EngUnmapFontFileFD(iFile);

View file

@ -275,11 +275,11 @@ SURFACE_AllocSurface(
HBITMAP
APIENTRY
EngCreateBitmap(
IN SIZEL sizl,
IN LONG lWidth,
IN ULONG iFormat,
IN ULONG fl,
IN PVOID pvBits)
_In_ SIZEL sizl,
_In_ LONG lWidth,
_In_ ULONG iFormat,
_In_ ULONG fl,
_In_ PVOID pvBits)
{
PSURFACE psurf;
HBITMAP hbmp;
@ -315,9 +315,9 @@ EngCreateBitmap(
HBITMAP
APIENTRY
EngCreateDeviceBitmap(
IN DHSURF dhsurf,
IN SIZEL sizl,
IN ULONG iFormat)
_In_ DHSURF dhsurf,
_In_ SIZEL sizl,
_In_ ULONG iFormat)
{
PSURFACE psurf;
HBITMAP hbmp;
@ -353,9 +353,9 @@ EngCreateDeviceBitmap(
HSURF
APIENTRY
EngCreateDeviceSurface(
IN DHSURF dhsurf,
IN SIZEL sizl,
IN ULONG iFormat)
_In_ DHSURF dhsurf,
_In_ SIZEL sizl,
_In_ ULONG iFormat)
{
PSURFACE psurf;
HSURF hsurf;
@ -391,9 +391,9 @@ EngCreateDeviceSurface(
BOOL
APIENTRY
EngAssociateSurface(
IN HSURF hsurf,
IN HDEV hdev,
IN FLONG flHooks)
_In_ HSURF hsurf,
_In_ HDEV hdev,
_In_ FLONG flHooks)
{
SURFOBJ *pso;
PSURFACE psurf;
@ -431,14 +431,14 @@ EngAssociateSurface(
BOOL
APIENTRY
EngModifySurface(
IN HSURF hsurf,
IN HDEV hdev,
IN FLONG flHooks,
IN FLONG flSurface,
IN DHSURF dhsurf,
OUT VOID *pvScan0,
IN LONG lDelta,
IN VOID *pvReserved)
_In_ HSURF hsurf,
_In_ HDEV hdev,
_In_ FLONG flHooks,
_In_ FLONG flSurface,
_In_ DHSURF dhsurf,
_In_ VOID *pvScan0,
_In_ LONG lDelta,
_Reserved_ VOID *pvReserved)
{
SURFOBJ *pso;
PSURFACE psurf;
@ -478,7 +478,8 @@ EngModifySurface(
BOOL
APIENTRY
EngDeleteSurface(IN HSURF hsurf)
EngDeleteSurface(
_In_ HSURF hsurf)
{
PSURFACE psurf;
@ -496,9 +497,9 @@ EngDeleteSurface(IN HSURF hsurf)
BOOL
APIENTRY
EngEraseSurface(
SURFOBJ *pso,
RECTL *prcl,
ULONG iColor)
_In_ SURFOBJ *pso,
_In_ RECTL *prcl,
_In_ ULONG iColor)
{
ASSERT(pso);
ASSERT(prcl);
@ -517,7 +518,8 @@ NtGdiEngLockSurface(IN HSURF hsurf)
SURFOBJ *
APIENTRY
EngLockSurface(IN HSURF hsurf)
EngLockSurface(
_In_ HSURF hsurf)
{
SURFACE *psurf = SURFACE_ShareLockSurface(hsurf);
@ -534,7 +536,8 @@ NtGdiEngUnlockSurface(IN SURFOBJ *pso)
VOID
APIENTRY
EngUnlockSurface(IN SURFOBJ *pso)
EngUnlockSurface(
_In_ SURFOBJ *pso)
{
if (pso != NULL)
{

View file

@ -42,7 +42,9 @@ _Always_(_Post_satisfies_(return==iColor))
_Function_class_(FN_XLATE)
ULONG
FASTCALL
EXLATEOBJ_iXlateTrivial(PEXLATEOBJ pexlo, ULONG iColor)
EXLATEOBJ_iXlateTrivial(
_In_ PEXLATEOBJ pexlo,
_In_ ULONG iColor)
{
return iColor;
}
@ -50,7 +52,7 @@ EXLATEOBJ_iXlateTrivial(PEXLATEOBJ pexlo, ULONG iColor)
_Function_class_(FN_XLATE)
ULONG
FASTCALL
EXLATEOBJ_iXlateToMono(PEXLATEOBJ pexlo, ULONG iColor)
EXLATEOBJ_iXlateToMono(_In_ PEXLATEOBJ pexlo, ULONG iColor)
{
return (iColor == pexlo->xlo.pulXlate[0]);
}
@ -354,12 +356,12 @@ EXLATEOBJ_iXlateBitfieldsToPal(PEXLATEOBJ pexlo, ULONG iColor)
VOID
NTAPI
EXLATEOBJ_vInitialize(
PEXLATEOBJ pexlo,
PALETTE *ppalSrc,
PALETTE *ppalDst,
COLORREF crSrcBackColor,
COLORREF crDstBackColor,
COLORREF crDstForeColor)
_Out_ PEXLATEOBJ pexlo,
_In_opt_ PALETTE *ppalSrc,
_In_opt_ PALETTE *ppalDst,
_In_ COLORREF crSrcBackColor,
_In_ COLORREF crDstBackColor,
_In_ COLORREF crDstForeColor)
{
ULONG cEntries;
ULONG i, ulColor;
@ -607,9 +609,9 @@ EXLATEOBJ_vInitialize(
VOID
NTAPI
EXLATEOBJ_vInitXlateFromDCs(
EXLATEOBJ* pexlo,
PDC pdcSrc,
PDC pdcDst)
_Out_ EXLATEOBJ* pexlo,
_In_ PDC pdcSrc,
_In_ PDC pdcDst)
{
PSURFACE psurfDst, psurfSrc;
@ -644,7 +646,8 @@ VOID NTAPI EXLATEOBJ_vInitSrcMonoXlate(
VOID
NTAPI
EXLATEOBJ_vCleanup(PEXLATEOBJ pexlo)
EXLATEOBJ_vCleanup(
_Inout_ PEXLATEOBJ pexlo)
{
if (pexlo->xlo.pulXlate != pexlo->aulXlate)
{
@ -658,7 +661,9 @@ EXLATEOBJ_vCleanup(PEXLATEOBJ pexlo)
#undef XLATEOBJ_iXlate
ULONG
NTAPI
XLATEOBJ_iXlate(XLATEOBJ *pxlo, ULONG iColor)
XLATEOBJ_iXlate(
_In_ XLATEOBJ *pxlo,
_In_ ULONG iColor)
{
PEXLATEOBJ pexlo = (PEXLATEOBJ)pxlo;
@ -671,7 +676,11 @@ XLATEOBJ_iXlate(XLATEOBJ *pxlo, ULONG iColor)
ULONG
NTAPI
XLATEOBJ_cGetPalette(XLATEOBJ *pxlo, ULONG iPal, ULONG cPal, ULONG *pPalOut)
XLATEOBJ_cGetPalette(
_In_ XLATEOBJ *pxlo,
_In_ ULONG iPal,
_In_ ULONG cPal,
_Out_cap_(cPal) ULONG *pPalOut)
{
PEXLATEOBJ pexlo = (PEXLATEOBJ)pxlo;
PPALETTE ppal;
@ -741,7 +750,8 @@ XLATEOBJ_cGetPalette(XLATEOBJ *pxlo, ULONG iPal, ULONG cPal, ULONG *pPalOut)
HANDLE
NTAPI
XLATEOBJ_hGetColorTransform(XLATEOBJ *pxlo)
XLATEOBJ_hGetColorTransform(
_In_ XLATEOBJ *pxlo)
{
PEXLATEOBJ pexlo = (PEXLATEOBJ)pxlo;
return pexlo->hColorTransform;
@ -749,7 +759,8 @@ XLATEOBJ_hGetColorTransform(XLATEOBJ *pxlo)
PULONG
NTAPI
XLATEOBJ_piVector(XLATEOBJ *pxlo)
XLATEOBJ_piVector(
_In_ XLATEOBJ *pxlo)
{
if (pxlo->iSrcType == PAL_INDEXED)
{

View file

@ -1,5 +1,10 @@
#pragma once
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable:28110) // disable "Drivers must protect floating point hardware state" warning
#endif
typedef struct tagFLOAT_POINT
{
FLOAT x, y;
@ -99,3 +104,7 @@ static __inline void INTERNAL_LPTODP(DC *dc, LPPOINT point)
MulDiv((tx), (pdcattr)->szlViewportExt.cx, (pdcattr)->szlWindowExt.cx)
#define YLSTODS(pdcattr,ty) \
MulDiv((ty), (pdcattr)->szlViewportExt.cy, (pdcattr)->szlWindowExt.cy)
#ifdef _MSC_VER
#pragma warning(pop)
#endif

View file

@ -6,29 +6,6 @@ typedef struct _USER_REFERENCE_ENTRY
PVOID obj;
} USER_REFERENCE_ENTRY, *PUSER_REFERENCE_ENTRY;
#define USER_ASSERT(exp,file,line) \
if (!(exp)) {RtlAssert(#exp,(PVOID)file,line,"");}
static __inline VOID
UserAssertLastRef(PVOID obj, const char *file, int line)
{
PTHREADINFO W32Thread;
PSINGLE_LIST_ENTRY ReferenceEntry;
PUSER_REFERENCE_ENTRY UserReferenceEntry;
USER_ASSERT(obj != NULL, file, line);
W32Thread = PsGetCurrentThreadWin32Thread();
USER_ASSERT(W32Thread != NULL, file, line);
ReferenceEntry = W32Thread->ReferencesList.Next;
USER_ASSERT(ReferenceEntry != NULL, file, line);
UserReferenceEntry = CONTAINING_RECORD(ReferenceEntry, USER_REFERENCE_ENTRY, Entry);
USER_ASSERT(UserReferenceEntry != NULL, file, line);
USER_ASSERT(obj == UserReferenceEntry->obj, file, line);
}
#define ASSERT_LAST_REF(_obj_) UserAssertLastRef(_obj,__FILE__,__LINE__)
#undef USER_ASSERT
extern PUSER_HANDLE_TABLE gHandleTable;
VOID FASTCALL UserReferenceObject(PVOID obj);
PVOID FASTCALL UserReferenceObjectByHandle(HANDLE handle, HANDLE_TYPE type);