mirror of
https://github.com/mirror/processhacker
synced 2026-06-08 16:03:24 +00:00
* bump to 2.24
* added PhxfFillMemoryUlong * added GC_STYLE_FADEOUT to graph control * experimenting with graph appearance git-svn-id: svn://svn.code.sf.net/p/processhacker/code@4812 21ef857c-d57f-4fe0-8362-d861dc6d29cd
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
Process Hacker
|
||||
|
||||
2.24
|
||||
* NEW/IMPROVED:
|
||||
* FIXED:
|
||||
|
||||
2.23
|
||||
* NEW/IMPROVED:
|
||||
* Added display of token capabilities, user/device claims
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#define PHAPP_VERSION_MAJOR 2
|
||||
#define PHAPP_VERSION_MINOR 23
|
||||
#define PHAPP_VERSION_MINOR 24
|
||||
#define PHAPP_VERSION_REVISION 0
|
||||
#define PHAPP_VERSION_STRING "2.23"
|
||||
#define PHAPP_VERSION_STRING "2.24"
|
||||
|
||||
@@ -417,7 +417,7 @@ INT_PTR CALLBACK PhpSysInfoDlgProc(
|
||||
CpuGraphHandle = CreateWindow(
|
||||
PH_GRAPH_CLASSNAME,
|
||||
NULL,
|
||||
WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS,
|
||||
WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_BORDER | GC_STYLE_FADEOUT,
|
||||
0,
|
||||
0,
|
||||
3,
|
||||
@@ -433,7 +433,7 @@ INT_PTR CALLBACK PhpSysInfoDlgProc(
|
||||
IoGraphHandle = CreateWindow(
|
||||
PH_GRAPH_CLASSNAME,
|
||||
NULL,
|
||||
WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS,
|
||||
WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_BORDER | GC_STYLE_FADEOUT,
|
||||
0,
|
||||
0,
|
||||
3,
|
||||
@@ -449,7 +449,7 @@ INT_PTR CALLBACK PhpSysInfoDlgProc(
|
||||
PhysicalGraphHandle = CreateWindow(
|
||||
PH_GRAPH_CLASSNAME,
|
||||
NULL,
|
||||
WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS,
|
||||
WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_BORDER | GC_STYLE_FADEOUT,
|
||||
0,
|
||||
0,
|
||||
3,
|
||||
@@ -526,6 +526,8 @@ INT_PTR CALLBACK PhpSysInfoDlgProc(
|
||||
PostQuitMessage(0);
|
||||
}
|
||||
break;
|
||||
case WM_CTLCOLORDLG:
|
||||
return (LONG_PTR)GetSysColorBrush(COLOR_WINDOW);
|
||||
case WM_SHOWWINDOW:
|
||||
{
|
||||
RECT margin;
|
||||
@@ -749,10 +751,10 @@ INT_PTR CALLBACK PhpSysInfoDlgProc(
|
||||
}
|
||||
|
||||
drawInfo->Flags = PH_GRAPH_USE_GRID | PH_GRAPH_USE_LINE_2;
|
||||
drawInfo->LineColor1 = PhCsColorCpuKernel;
|
||||
drawInfo->LineColor2 = PhCsColorCpuUser;
|
||||
drawInfo->LineBackColor1 = PhHalveColorBrightness(PhCsColorCpuKernel);
|
||||
drawInfo->LineBackColor2 = PhHalveColorBrightness(PhCsColorCpuUser);
|
||||
drawInfo->LineColor1 = PhHalveColorBrightness(PhCsColorCpuKernel);
|
||||
drawInfo->LineColor2 = PhHalveColorBrightness(PhCsColorCpuUser);
|
||||
drawInfo->LineBackColor1 = PhMakeColorBrighter(PhCsColorCpuKernel, 125);
|
||||
drawInfo->LineBackColor2 = PhMakeColorBrighter(PhCsColorCpuUser, 125);
|
||||
|
||||
PhGraphStateGetDrawInfo(
|
||||
&CpuGraphState,
|
||||
@@ -793,10 +795,10 @@ INT_PTR CALLBACK PhpSysInfoDlgProc(
|
||||
}
|
||||
|
||||
drawInfo->Flags = PH_GRAPH_USE_GRID | PH_GRAPH_USE_LINE_2;
|
||||
drawInfo->LineColor1 = PhCsColorIoReadOther;
|
||||
drawInfo->LineColor2 = PhCsColorIoWrite;
|
||||
drawInfo->LineBackColor1 = PhHalveColorBrightness(PhCsColorIoReadOther);
|
||||
drawInfo->LineBackColor2 = PhHalveColorBrightness(PhCsColorIoWrite);
|
||||
drawInfo->LineColor1 = PhHalveColorBrightness(PhCsColorIoReadOther);
|
||||
drawInfo->LineColor2 = PhHalveColorBrightness(PhCsColorIoWrite);
|
||||
drawInfo->LineBackColor1 = PhMakeColorBrighter(PhCsColorIoReadOther, 125);
|
||||
drawInfo->LineBackColor2 = PhMakeColorBrighter(PhCsColorIoWrite, 125);
|
||||
|
||||
PhGraphStateGetDrawInfo(
|
||||
&IoGraphState,
|
||||
@@ -873,8 +875,8 @@ INT_PTR CALLBACK PhpSysInfoDlgProc(
|
||||
}
|
||||
|
||||
drawInfo->Flags = PH_GRAPH_USE_GRID;
|
||||
drawInfo->LineColor1 = PhCsColorPhysical;
|
||||
drawInfo->LineBackColor1 = PhHalveColorBrightness(PhCsColorPhysical);
|
||||
drawInfo->LineColor1 = PhHalveColorBrightness(PhCsColorPhysical);
|
||||
drawInfo->LineBackColor1 = PhMakeColorBrighter(PhCsColorPhysical, 125);
|
||||
|
||||
PhGraphStateGetDrawInfo(
|
||||
&PhysicalGraphState,
|
||||
|
||||
@@ -272,6 +272,101 @@ unsigned short __cdecl ph_chksum(unsigned long sum, unsigned short *buf, unsigne
|
||||
|
||||
#endif
|
||||
|
||||
VOID FASTCALL PhxpfFillMemoryUlongFallback(
|
||||
__inout PULONG Memory,
|
||||
__in ULONG Value,
|
||||
__in ULONG Count
|
||||
)
|
||||
{
|
||||
if (Count != 0)
|
||||
{
|
||||
do
|
||||
{
|
||||
*Memory++ = Value;
|
||||
} while (--Count != 0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fills a memory block with a ULONG pattern.
|
||||
*
|
||||
* \param Memory The memory block. The block must be
|
||||
* 4 byte aligned.
|
||||
* \param Value The ULONG pattern.
|
||||
* \param Count The number of elements.
|
||||
*/
|
||||
PHLIBAPI
|
||||
VOID
|
||||
FASTCALL
|
||||
PhxfFillMemoryUlong(
|
||||
__inout PULONG Memory,
|
||||
__in ULONG Value,
|
||||
__in ULONG Count
|
||||
)
|
||||
{
|
||||
__m128i pattern;
|
||||
ULONG count;
|
||||
|
||||
if (!USER_SHARED_DATA->ProcessorFeatures[PF_XMMI64_INSTRUCTIONS_AVAILABLE])
|
||||
{
|
||||
PhxpfFillMemoryUlongFallback(Memory, Value, Count);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((ULONG_PTR)Memory & 0xf)
|
||||
{
|
||||
switch ((ULONG_PTR)Memory & 0xf)
|
||||
{
|
||||
case 0x4:
|
||||
if (Count >= 1)
|
||||
{
|
||||
*Memory++ = Value;
|
||||
Count--;
|
||||
}
|
||||
__fallthrough;
|
||||
case 0x8:
|
||||
if (Count >= 1)
|
||||
{
|
||||
*Memory++ = Value;
|
||||
Count--;
|
||||
}
|
||||
__fallthrough;
|
||||
case 0xc:
|
||||
if (Count >= 1)
|
||||
{
|
||||
*Memory++ = Value;
|
||||
Count--;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
pattern = _mm_set1_epi32(Value);
|
||||
count = Count / 4;
|
||||
|
||||
if (count != 0)
|
||||
{
|
||||
do
|
||||
{
|
||||
_mm_store_si128((__m128i *)Memory, pattern);
|
||||
Memory += 4;
|
||||
} while (--count != 0);
|
||||
}
|
||||
|
||||
switch (Count & 0x3)
|
||||
{
|
||||
case 0x3:
|
||||
*Memory++ = Value;
|
||||
__fallthrough;
|
||||
case 0x2:
|
||||
*Memory++ = Value;
|
||||
__fallthrough;
|
||||
case 0x1:
|
||||
*Memory++ = Value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
VOID FASTCALL PhxpfAddInt32Fallback(
|
||||
__inout PLONG A,
|
||||
__in PLONG B,
|
||||
|
||||
+161
-8
@@ -29,6 +29,7 @@
|
||||
typedef struct _PHP_GRAPH_CONTEXT
|
||||
{
|
||||
HWND Handle;
|
||||
ULONG Style;
|
||||
PH_GRAPH_DRAW_INFO DrawInfo;
|
||||
|
||||
HDC BufferedContext;
|
||||
@@ -37,6 +38,12 @@ typedef struct _PHP_GRAPH_CONTEXT
|
||||
PVOID BufferedBits;
|
||||
RECT BufferedContextRect;
|
||||
|
||||
HDC FadeOutContext;
|
||||
HBITMAP FadeOutOldBitmap;
|
||||
HBITMAP FadeOutBitmap;
|
||||
PVOID FadeOutBits;
|
||||
RECT FadeOutContextRect;
|
||||
|
||||
HWND TooltipHandle;
|
||||
WNDPROC TooltipOldWndProc;
|
||||
BOOLEAN TooltipVisible;
|
||||
@@ -400,7 +407,6 @@ FORCEINLINE VOID PhpGetGraphPoint(
|
||||
* \li \a Step is fixed at 2.
|
||||
* \li If \ref PH_GRAPH_USE_LINE_2 is specified in \a Flags, \ref PH_GRAPH_OVERLAY_LINE_2
|
||||
* is never used.
|
||||
* \li \a BackColor is fixed at RGB(0, 0, 0).
|
||||
*/
|
||||
VOID PhDrawGraphDirect(
|
||||
__in HDC hdc,
|
||||
@@ -457,7 +463,14 @@ VOID PhDrawGraphDirect(
|
||||
lineColor2 = COLORREF_TO_BITS(DrawInfo->LineColor2);
|
||||
lineBackColor2 = COLORREF_TO_BITS(DrawInfo->LineBackColor2);
|
||||
|
||||
memset(bits, 0, numberOfPixels * 4);
|
||||
if (DrawInfo->BackColor == 0)
|
||||
{
|
||||
memset(bits, 0, numberOfPixels * 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
PhxfFillMemoryUlong(bits, COLORREF_TO_BITS(DrawInfo->BackColor), numberOfPixels);
|
||||
}
|
||||
|
||||
x = width - 1;
|
||||
intermediate = FALSE;
|
||||
@@ -635,7 +648,7 @@ VOID PhDrawGraphDirect(
|
||||
gridYCounter = 0;
|
||||
|
||||
// Draw the horizontal grid line.
|
||||
for (i = x; i < numberOfPixels; i += gridXIncrement)
|
||||
for (i = x + gridXIncrement; i < numberOfPixels; i += gridXIncrement)
|
||||
{
|
||||
bits[i] = gridColor;
|
||||
}
|
||||
@@ -745,7 +758,7 @@ VOID PhpCreateGraphContext(
|
||||
context->DrawInfo.Height = 3;
|
||||
context->DrawInfo.Flags = PH_GRAPH_USE_GRID;
|
||||
context->DrawInfo.Step = 2;
|
||||
context->DrawInfo.BackColor = RGB(0x00, 0x00, 0x00);
|
||||
context->DrawInfo.BackColor = RGB(0xef, 0xef, 0xef);
|
||||
context->DrawInfo.LineDataCount = 0;
|
||||
context->DrawInfo.LineData1 = NULL;
|
||||
context->DrawInfo.LineData2 = NULL;
|
||||
@@ -753,9 +766,9 @@ VOID PhpCreateGraphContext(
|
||||
context->DrawInfo.LineColor2 = RGB(0xff, 0x00, 0x00);
|
||||
context->DrawInfo.LineBackColor1 = RGB(0x00, 0x77, 0x00);
|
||||
context->DrawInfo.LineBackColor2 = RGB(0x77, 0x00, 0x00);
|
||||
context->DrawInfo.GridColor = RGB(0x00, 0x77, 0x00);
|
||||
context->DrawInfo.GridWidth = 12;
|
||||
context->DrawInfo.GridHeight = 12;
|
||||
context->DrawInfo.GridColor = RGB(0xaf, 0xaf, 0xaf);
|
||||
context->DrawInfo.GridWidth = 20;
|
||||
context->DrawInfo.GridHeight = 40;
|
||||
context->DrawInfo.GridStart = 0;
|
||||
context->DrawInfo.TextColor = RGB(0x00, 0xff, 0x00);
|
||||
context->DrawInfo.TextBoxColor = RGB(0x00, 0x22, 0x00);
|
||||
@@ -824,12 +837,81 @@ static VOID PhpCreateBufferedContext(
|
||||
header.biHeight = Context->BufferedContextRect.bottom;
|
||||
header.biPlanes = 1;
|
||||
header.biBitCount = 32;
|
||||
|
||||
Context->BufferedBitmap = CreateDIBSection(hdc, (BITMAPINFO *)&header, DIB_RGB_COLORS, &Context->BufferedBits, NULL, 0);
|
||||
|
||||
ReleaseDC(Context->Handle, hdc);
|
||||
Context->BufferedOldBitmap = SelectObject(Context->BufferedContext, Context->BufferedBitmap);
|
||||
}
|
||||
|
||||
static VOID PhpDeleteFadeOutContext(
|
||||
__in PPHP_GRAPH_CONTEXT Context
|
||||
)
|
||||
{
|
||||
if (Context->FadeOutContext)
|
||||
{
|
||||
SelectObject(Context->FadeOutContext, Context->FadeOutOldBitmap);
|
||||
DeleteObject(Context->FadeOutBitmap);
|
||||
DeleteDC(Context->FadeOutContext);
|
||||
|
||||
Context->FadeOutContext = NULL;
|
||||
Context->FadeOutBitmap = NULL;
|
||||
Context->FadeOutBits = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static VOID PhpCreateFadeOutContext(
|
||||
__in PPHP_GRAPH_CONTEXT Context
|
||||
)
|
||||
{
|
||||
HDC hdc;
|
||||
BITMAPINFOHEADER header;
|
||||
ULONG i;
|
||||
ULONG j;
|
||||
ULONG height;
|
||||
COLORREF backColor;
|
||||
ULONG currentAlpha;
|
||||
ULONG currentColor;
|
||||
|
||||
PhpDeleteFadeOutContext(Context);
|
||||
|
||||
GetClientRect(Context->Handle, &Context->FadeOutContextRect);
|
||||
Context->FadeOutContextRect.right = GC_FADEOUT_WIDTH;
|
||||
|
||||
hdc = GetDC(Context->Handle);
|
||||
Context->FadeOutContext = CreateCompatibleDC(hdc);
|
||||
|
||||
memset(&header, 0, sizeof(BITMAPINFOHEADER));
|
||||
header.biSize = sizeof(BITMAPINFOHEADER);
|
||||
header.biWidth = Context->FadeOutContextRect.right;
|
||||
header.biHeight = Context->FadeOutContextRect.bottom;
|
||||
header.biPlanes = 1;
|
||||
header.biBitCount = 32;
|
||||
|
||||
Context->FadeOutBitmap = CreateDIBSection(hdc, (BITMAPINFO *)&header, DIB_RGB_COLORS, &Context->FadeOutBits, NULL, 0);
|
||||
|
||||
ReleaseDC(Context->Handle, hdc);
|
||||
Context->FadeOutOldBitmap = SelectObject(Context->FadeOutContext, Context->FadeOutBitmap);
|
||||
|
||||
height = Context->FadeOutContextRect.bottom;
|
||||
backColor = GetSysColor(COLOR_WINDOW);
|
||||
|
||||
for (i = 0; i < GC_FADEOUT_WIDTH; i++)
|
||||
{
|
||||
currentAlpha = 255 - (ULONG)((FLOAT)(i * i) / (GC_FADEOUT_WIDTH * GC_FADEOUT_WIDTH) * 255);
|
||||
currentColor =
|
||||
((backColor & 0xff) * currentAlpha / 255) +
|
||||
((((backColor >> 8) & 0xff) * currentAlpha / 255) << 8) +
|
||||
((((backColor >> 16) & 0xff) * currentAlpha / 255) << 16) +
|
||||
(currentAlpha << 24);
|
||||
|
||||
for (j = i; j < height * GC_FADEOUT_WIDTH; j += GC_FADEOUT_WIDTH)
|
||||
{
|
||||
((PULONG)Context->FadeOutBits)[j] = currentColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static VOID PhpUpdateTooltip(
|
||||
__in PPHP_GRAPH_CONTEXT Context
|
||||
)
|
||||
@@ -971,7 +1053,10 @@ LRESULT CALLBACK PhpGraphWndProc(
|
||||
{
|
||||
case WM_CREATE:
|
||||
{
|
||||
CREATESTRUCT *createStruct = (CREATESTRUCT *)lParam;
|
||||
|
||||
context->Handle = hwnd;
|
||||
context->Style = createStruct->style;
|
||||
}
|
||||
break;
|
||||
case WM_DESTROY:
|
||||
@@ -979,6 +1064,7 @@ LRESULT CALLBACK PhpGraphWndProc(
|
||||
if (context->TooltipHandle)
|
||||
DestroyWindow(context->TooltipHandle);
|
||||
|
||||
PhpDeleteFadeOutContext(context);
|
||||
PhpDeleteBufferedContext(context);
|
||||
PhpFreeGraphContext(context);
|
||||
SetWindowLongPtr(hwnd, 0, (LONG_PTR)NULL);
|
||||
@@ -988,6 +1074,10 @@ LRESULT CALLBACK PhpGraphWndProc(
|
||||
{
|
||||
// Force a re-create of the buffered context.
|
||||
PhpCreateBufferedContext(context);
|
||||
|
||||
if (context->Style & GC_STYLE_FADEOUT)
|
||||
PhpCreateFadeOutContext(context);
|
||||
|
||||
SendMessage(hwnd, GCM_DRAW, 0, 0);
|
||||
}
|
||||
break;
|
||||
@@ -1009,9 +1099,46 @@ LRESULT CALLBACK PhpGraphWndProc(
|
||||
EndPaint(hwnd, &paintStruct);
|
||||
}
|
||||
}
|
||||
break;
|
||||
return 0;
|
||||
case WM_ERASEBKGND:
|
||||
return 1;
|
||||
case WM_NCPAINT:
|
||||
{
|
||||
HRGN updateRegion;
|
||||
|
||||
updateRegion = (HRGN)wParam;
|
||||
|
||||
if (updateRegion == (HRGN)1) // HRGN_FULL
|
||||
updateRegion = NULL;
|
||||
|
||||
// Themed border
|
||||
if (context->Style & WS_BORDER)
|
||||
{
|
||||
HDC hdc;
|
||||
ULONG flags;
|
||||
RECT rect;
|
||||
|
||||
// Note the use of undocumented flags below. GetDCEx doesn't work without these.
|
||||
|
||||
flags = DCX_WINDOW | DCX_LOCKWINDOWUPDATE | 0x10000;
|
||||
|
||||
if (updateRegion)
|
||||
flags |= DCX_INTERSECTRGN | 0x40000;
|
||||
|
||||
if (hdc = GetDCEx(hwnd, updateRegion, flags))
|
||||
{
|
||||
GetClientRect(hwnd, &rect);
|
||||
rect.right += 2;
|
||||
rect.bottom += 2;
|
||||
SetDCBrushColor(hdc, RGB(0x8f, 0x8f, 0x8f));
|
||||
FrameRect(hdc, &rect, GetStockObject(DC_BRUSH));
|
||||
|
||||
ReleaseDC(hwnd, hdc);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WM_NOTIFY:
|
||||
{
|
||||
LPNMHDR header = (LPNMHDR)lParam;
|
||||
@@ -1139,6 +1266,32 @@ LRESULT CALLBACK PhpGraphWndProc(
|
||||
|
||||
if (context->BufferedBits)
|
||||
PhDrawGraphDirect(context->BufferedContext, context->BufferedBits, &context->DrawInfo);
|
||||
|
||||
if (context->Style & GC_STYLE_FADEOUT)
|
||||
{
|
||||
BLENDFUNCTION blendFunction;
|
||||
|
||||
if (!context->FadeOutContext)
|
||||
PhpCreateFadeOutContext(context);
|
||||
|
||||
blendFunction.BlendOp = AC_SRC_OVER;
|
||||
blendFunction.BlendFlags = 0;
|
||||
blendFunction.SourceConstantAlpha = 255;
|
||||
blendFunction.AlphaFormat = AC_SRC_ALPHA;
|
||||
GdiAlphaBlend(
|
||||
context->BufferedContext,
|
||||
0,
|
||||
0,
|
||||
GC_FADEOUT_WIDTH,
|
||||
context->FadeOutContextRect.bottom,
|
||||
context->FadeOutContext,
|
||||
0,
|
||||
0,
|
||||
GC_FADEOUT_WIDTH,
|
||||
context->FadeOutContextRect.bottom,
|
||||
blendFunction
|
||||
);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
case GCM_MOVEGRID:
|
||||
|
||||
@@ -75,6 +75,14 @@ VOID PhSetGraphText(
|
||||
__in ULONG Align
|
||||
);
|
||||
|
||||
// Configuration
|
||||
|
||||
#define GC_FADEOUT_WIDTH 100
|
||||
|
||||
// Styles
|
||||
|
||||
#define GC_STYLE_FADEOUT 0x1
|
||||
|
||||
// Messages
|
||||
|
||||
#define GCM_GETDRAWINFO (WM_APP + 1301)
|
||||
|
||||
@@ -3291,6 +3291,15 @@ PhaSubstring(
|
||||
|
||||
// basesupx (extra)
|
||||
|
||||
PHLIBAPI
|
||||
VOID
|
||||
FASTCALL
|
||||
PhxfFillMemoryUlong(
|
||||
__inout PULONG Memory,
|
||||
__in ULONG Value,
|
||||
__in ULONG Count
|
||||
);
|
||||
|
||||
PHLIBAPI
|
||||
VOID
|
||||
FASTCALL
|
||||
|
||||
Reference in New Issue
Block a user