23 static ULONG ulGlobalBrushUnique = 0;
83 PBRUSH pbr = static_cast<PBRUSH>(pvObject);
101 ERR(
"Could not allocate brush attr\n");
164 plb->lbHatch = this->
iHatch;
205 pbr =
new BRUSH(flAttrs, crColor,
iHatch, hbmPattern, pvClient);
208 ERR(
"Failed to allocate a brush\n");
218 if (!pbr->bAllocateBrushAttr())
220 ERR(
"Failed to allocate brush attribute\n");
227 owner = (flAttrs &
BR_IS_GLOBAL) ? BASEOBJECT::OWNER::PUBLIC :
228 BASEOBJECT::OWNER::POWNED;
231 hbr = static_cast<HBRUSH>(pbr->hInsertObject(owner));
234 ERR(
"Failed to insert brush\n");
265 return pbr->cjGetObject(
cjBuffer, plbBuffer);
313 pbr = BRUSH::LockAny(hbr);
316 ERR(
"Failed to lock brush %p\n", hbr);
321 pbr->vSetSolidColor(crColor);
336 WARN(
"hbr is not supported, ignoring\n");
355 WARN(
"bPen is not supported, ignoring\n");
389 WARN(
"b8X8 is not supported, ignoring\n");
394 WARN(
"bPen is not supported, ignoring\n");
399 if (hbmPattern ==
NULL)
401 ERR(
"Failed to copy the bitmap %p\n", hbmPattern);
427 WARN(
"b8X8 is not supported, ignoring\n");
432 WARN(
"bPen is not supported, ignoring\n");
437 ERR(
"Invalid uUsage value: %lu\n", uUsage);
444 if (pvPackedDIB ==
NULL)
446 ERR(
"Failed to allocate temp buffer of %u bytes\n",
cj);
458 ERR(
"Got exception, pv = %p, cj = %lu\n", pv,
cj);
485 ERR(
"Failed to create bitmap from DIB\n");
511 pbr = BRUSH::LockForRead(hbr);
514 ERR(
"Failed to lock brush %p\n", hbr);
519 hbm = pbr->hbmGetBitmapHandle(&uUsage);
531 ERR(
"Got exception! piUsage = %p\n", piUsage);
BOOL bAllocateBrushAttr(VOID)
#define ERROR_INVALID_PARAMETER
__kernel_entry HBRUSH APIENTRY NtGdiCreatePatternBrushInternal(_In_ HBITMAP hbmClient, _In_ BOOL bPen, _In_ BOOL b8X8)
BOOL NTAPI GreDeleteObject(HGDIOBJ hobj)
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
HBRUSH APIENTRY IntGdiCreateSolidBrush(COLORREF crColor)
BOOL NTAPI GreIsHandleValid(HGDIOBJ hobj)
#define DIB_PAL_BRUSHHACK
VOID NTAPI GdiPoolFree(PGDI_POOL pPool, PVOID pvAlloc)
static VOID vDeleteObject(_In_ PVOID pvObject)
PGDI_POOL GetBrushAttrPool(VOID)
HACK!
INT FASTCALL BRUSH_GetObject(PBRUSH pbr, INT cjBuffer, LPLOGBRUSH plbBuffer)
void __cdecl __debugbreak(void)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
__kernel_entry HBITMAP APIENTRY NtGdiGetObjectBitmapHandle(_In_ HBRUSH hbr, _Out_ UINT *piUsage)
VOID NTAPI BRUSH_vDeleteObject(PVOID pvObject)
__kernel_entry HBRUSH APIENTRY NtGdiCreateHatchBrushInternal(_In_ ULONG iHatch, _In_ COLORREF crColor, _In_ BOOL bPen)
HBRUSH NTAPI IntGdiCreatePatternBrush(HBITMAP hbmPattern)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
__kernel_entry HBRUSH APIENTRY NtGdiCreateSolidBrush(_In_ COLORREF crColor, _In_opt_ HBRUSH hbr)
#define EXCEPTION_EXECUTE_HANDLER
DBG_DEFAULT_CHANNEL(GdiBrush)
PVOID NTAPI GdiPoolAllocate(PGDI_POOL pPool)
#define GDI_HANDLE_GET_TYPE(h)
HBITMAP NTAPI GreCreateDIBitmapFromPackedDIB(_In_reads_(cjPackedDIB) PVOID pvPackedDIB, _In_ UINT cjPackedDIB, _In_ ULONG uUsage)
VOID NTAPI IntGdiSetSolidBrushColor(_In_ HBRUSH hbr, _In_ COLORREF crColor)
#define ExAllocatePoolWithTag(hernya, size, tag)
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
__kernel_entry HBRUSH APIENTRY NtGdiSetBrushAttributes(_In_ HBRUSH hbr, _In_ DWORD dwFlags)
#define _In_reads_bytes_(size)
_Inout_ SURFOBJ _In_opt_ SURFOBJ _In_opt_ SURFOBJ _In_opt_ XLATEOBJ _In_ ULONG iHatch
__kernel_entry HBRUSH APIENTRY NtGdiClearBrushAttributes(_In_ HBRUSH hbr, _In_ DWORD dwFlags)
#define BR_IS_DIBPALINDICES
__kernel_entry HBRUSH APIENTRY NtGdiCreateDIBBrush(_In_reads_bytes_(cj) PVOID pv, _In_ FLONG uUsage, _In_ UINT cj, _In_ BOOL b8X8, _In_ BOOL bPen, _In_ PVOID pvClient)
HBITMAP FASTCALL BITMAP_CopyBitmap(HBITMAP hBitmap)
#define InterlockedIncrementUL(Addend)
#define BR_IS_DEFAULTSTYLE
#define BR_IS_DIBPALCOLORS
#define _Out_bytecap_(size)
BOOL NTAPI GreSetBitmapOwner(_In_ HBITMAP hbmp, _In_ ULONG ulOwner)
BRUSH(_In_ FLONG flAttrs, _In_ COLORREF crColor, _In_ ULONG iHatch, _In_opt_ HBITMAP hbmPattern, _In_opt_ PVOID pvClient, _In_ GDILOOBJTYPE objtype)
char * cleanup(char *str)
#define _SEH2_EXCEPT(...)
UINT cjGetObject(_In_ UINT cjBuffer, _Out_bytecap_(cjBuffer) PLOGBRUSH plbBuffer) const
#define ExFreePoolWithTag(_P, _T)
enum GDILoObjType GDILOOBJTYPE
struct tagLOGBRUSH LOGBRUSH
static HBRUSH CreateBrushInternal(_In_ ULONG flAttrs, _In_ COLORREF crColor, _In_ ULONG iHatch, _In_opt_ HBITMAP hbmPattern, _In_opt_ PVOID pvClient)
HBITMAP hbmGetBitmapHandle(_Out_ PUINT puUsage) const
HBRUSH NTAPI IntGdiCreateNullBrush(VOID)
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
VOID vSetObjectAttr(_In_opt_ PVOID pvUserAttr)
VOID vSetSolidColor(_In_ COLORREF crColor)