Skip to content

Commit 5cb17ae

Browse files
committed
Add TraceLogging GUID names to handle window
1 parent 984b335 commit 5cb17ae

File tree

3 files changed

+151
-2
lines changed

3 files changed

+151
-2
lines changed

ProcessHacker/hndlprp.c

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* handle properties
44
*
55
* Copyright (C) 2010-2013 wj32
6-
* Copyright (C) 2018-2019 dmex
6+
* Copyright (C) 2018-2020 dmex
77
*
88
* This file is part of Process Hacker.
99
*
@@ -44,6 +44,7 @@ typedef enum _PHP_HANDLE_GENERAL_CATEGORY
4444
PH_HANDLE_GENERAL_CATEGORY_SECTION,
4545
PH_HANDLE_GENERAL_CATEGORY_MUTANT,
4646
PH_HANDLE_GENERAL_CATEGORY_PROCESSTHREAD,
47+
PH_HANDLE_GENERAL_CATEGORY_ETW,
4748

4849
PH_HANDLE_GENERAL_CATEGORY_MAXIMUM
4950
} PHP_HANDLE_GENERAL_CATEGORY;
@@ -82,6 +83,9 @@ typedef enum _PHP_HANDLE_GENERAL_INDEX
8283
PH_HANDLE_GENERAL_INDEX_PROCESSTHREADEXITTIME,
8384
PH_HANDLE_GENERAL_INDEX_PROCESSTHREADEXITCODE,
8485

86+
PH_HANDLE_GENERAL_INDEX_ETWORIGINALNAME,
87+
PH_HANDLE_GENERAL_INDEX_ETWGROUPNAME,
88+
8589
PH_HANDLE_GENERAL_INDEX_MAXIMUM
8690
} PHP_PROCESS_STATISTICS_INDEX;
8791

@@ -386,6 +390,24 @@ VOID PhpUpdateHandleGeneralListViewGroups(
386390
NULL
387391
);
388392
}
393+
else if (PhEqualString2(Context->HandleItem->TypeName, L"EtwRegistration", TRUE))
394+
{
395+
PhAddListViewGroup(Context->ListViewHandle, PH_HANDLE_GENERAL_CATEGORY_ETW, L"Event trace information");
396+
Context->ListViewRowCache[PH_HANDLE_GENERAL_INDEX_ETWORIGINALNAME] = PhAddListViewGroupItem(
397+
Context->ListViewHandle,
398+
PH_HANDLE_GENERAL_CATEGORY_ETW,
399+
PH_HANDLE_GENERAL_INDEX_ETWORIGINALNAME,
400+
L"GUID",
401+
NULL
402+
);
403+
//Context->ListViewRowCache[PH_HANDLE_GENERAL_INDEX_ETWGROUPNAME] = PhAddListViewGroupItem(
404+
// Context->ListViewHandle,
405+
// PH_HANDLE_GENERAL_CATEGORY_ETW,
406+
// PH_HANDLE_GENERAL_INDEX_ETWGROUPNAME,
407+
// L"Group GUID",
408+
// NULL
409+
// );
410+
}
389411
else if (PhEqualStringRef2(&Context->HandleItem->TypeName->sr, L"File", TRUE))
390412
{
391413
PhAddListViewGroup(Context->ListViewHandle, PH_HANDLE_GENERAL_CATEGORY_FILE, L"File information");
@@ -679,6 +701,10 @@ VOID PhpUpdateHandleGeneral(
679701
NtClose(alpcPortHandle);
680702
}
681703
}
704+
else if (PhEqualString2(Context->HandleItem->TypeName, L"EtwRegistration", TRUE))
705+
{
706+
PhSetListViewSubItem(Context->ListViewHandle, Context->ListViewRowCache[PH_HANDLE_GENERAL_INDEX_ETWORIGINALNAME], 1, PhGetString(Context->HandleItem->ObjectName));
707+
}
682708
else if (PhEqualString2(Context->HandleItem->TypeName, L"File", TRUE))
683709
{
684710
NTSTATUS status;

ProcessHacker/resources/etwguids.txt

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

phlib/hndlinfo.c

Lines changed: 123 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
#include <ph.h>
2525
#include <hndlinfo.h>
26+
#include <json.h>
2627

2728
#include <kphuser.h>
2829
#include <lsasup.h>
@@ -416,6 +417,122 @@ NTSTATUS PhpGetEtwObjectName(
416417
return status;
417418
}
418419

420+
typedef struct _PH_ETW_TRACEGUID_ENTRY
421+
{
422+
PPH_STRING Name;
423+
PGUID Guid;
424+
} PH_ETW_TRACEGUID_ENTRY, *PPH_ETW_TRACEGUID_ENTRY;
425+
426+
VOID PhInitializeEtwTraceGuidCache(
427+
_Inout_ PPH_ARRAY EtwTraceGuidArrayList
428+
)
429+
{
430+
PPH_STRING applicationDirectory;
431+
PPH_BYTES capabilityListString = NULL;
432+
PVOID jsonObject;
433+
ULONG arrayLength;
434+
435+
if (applicationDirectory = PhGetApplicationDirectory())
436+
{
437+
PPH_STRING capabilityListFileName;
438+
439+
capabilityListFileName = PhConcatStringRefZ(&applicationDirectory->sr, L"etwguids.txt");
440+
PhDereferenceObject(applicationDirectory);
441+
442+
capabilityListString = PhFileReadAllText(capabilityListFileName->Buffer, FALSE);
443+
PhDereferenceObject(capabilityListFileName);
444+
}
445+
446+
if (!capabilityListString)
447+
return;
448+
449+
PhInitializeArray(EtwTraceGuidArrayList, sizeof(PH_ETW_TRACEGUID_ENTRY), 2000);
450+
451+
if (!(jsonObject = PhCreateJsonParser(capabilityListString->Buffer)))
452+
return;
453+
454+
if (!(arrayLength = PhGetJsonArrayLength(jsonObject)))
455+
{
456+
PhFreeJsonParser(jsonObject);
457+
return;
458+
}
459+
460+
for (ULONG i = 0; i < arrayLength; i++)
461+
{
462+
PVOID jsonArrayObject;
463+
PPH_STRING guidString;
464+
PPH_STRING guidName;
465+
UNICODE_STRING guidStringUs;
466+
GUID guid;
467+
PH_ETW_TRACEGUID_ENTRY result;
468+
469+
if (!(jsonArrayObject = PhGetJsonArrayIndexObject(jsonObject, i)))
470+
continue;
471+
472+
guidString = PhGetJsonValueAsString(jsonArrayObject, "guid");
473+
guidName = PhGetJsonValueAsString(jsonArrayObject, "name");
474+
//guidGroup = PhGetJsonValueAsString(jsonArrayObject, "group");
475+
476+
if (!PhStringRefToUnicodeString(&guidString->sr, &guidStringUs))
477+
{
478+
PhDereferenceObject(guidName);
479+
PhDereferenceObject(guidString);
480+
continue;
481+
}
482+
483+
if (!NT_SUCCESS(RtlGUIDFromString(
484+
&guidStringUs,
485+
&guid
486+
)))
487+
{
488+
PhDereferenceObject(guidName);
489+
PhDereferenceObject(guidString);
490+
continue;
491+
}
492+
493+
result.Name = guidName;
494+
result.Guid = PhAllocateCopy(&guid, sizeof(GUID));
495+
496+
PhAddItemArray(EtwTraceGuidArrayList, &result);
497+
498+
PhDereferenceObject(guidString);
499+
}
500+
501+
PhDereferenceObject(capabilityListString);
502+
PhFreeJsonParser(jsonObject);
503+
}
504+
505+
PPH_STRING PhGetEtwTraceGuidName(
506+
_In_ PGUID Guid
507+
)
508+
{
509+
static PH_INITONCE initOnce = PH_INITONCE_INIT;
510+
static PH_ARRAY etwTraceGuidArrayList;
511+
PPH_ETW_TRACEGUID_ENTRY entry;
512+
SIZE_T i;
513+
514+
if (WindowsVersion < WINDOWS_8)
515+
return NULL;
516+
517+
if (PhBeginInitOnce(&initOnce))
518+
{
519+
PhInitializeEtwTraceGuidCache(&etwTraceGuidArrayList);
520+
PhEndInitOnce(&initOnce);
521+
}
522+
523+
for (i = 0; i < etwTraceGuidArrayList.Count; i++)
524+
{
525+
entry = PhItemArray(&etwTraceGuidArrayList, i);
526+
527+
if (IsEqualGUID(entry->Guid, Guid))
528+
{
529+
return PhReferenceObject(entry->Name);
530+
}
531+
}
532+
533+
return NULL;
534+
}
535+
419536
PPH_STRING PhGetEtwPublisherName(
420537
_In_ PGUID Guid
421538
)
@@ -456,11 +573,16 @@ PPH_STRING PhGetEtwPublisherName(
456573
if (publisherName)
457574
{
458575
PhDereferenceObject(guidString);
459-
460576
return publisherName;
461577
}
462578
else
463579
{
580+
if (publisherName = PhGetEtwTraceGuidName(Guid))
581+
{
582+
PhDereferenceObject(guidString);
583+
return publisherName;
584+
}
585+
464586
return guidString;
465587
}
466588
}

0 commit comments

Comments
 (0)