* 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:
wj32
2011-11-08 05:57:40 +00:00
parent 62abf0d345
commit cfe28d694e
7 changed files with 294 additions and 23 deletions
+4
View File
@@ -1,5 +1,9 @@
Process Hacker
2.24
* NEW/IMPROVED:
* FIXED:
2.23
* NEW/IMPROVED:
* Added display of token capabilities, user/device claims
+2 -2
View File
@@ -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"
+15 -13
View File
@@ -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,
+95
View File
@@ -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
View File
@@ -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:
+8
View File
@@ -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)
+9
View File
@@ -3291,6 +3291,15 @@ PhaSubstring(
// basesupx (extra)
PHLIBAPI
VOID
FASTCALL
PhxfFillMemoryUlong(
__inout PULONG Memory,
__in ULONG Value,
__in ULONG Count
);
PHLIBAPI
VOID
FASTCALL