added more columns to modules list

git-svn-id: svn://svn.code.sf.net/p/processhacker/code@3844 21ef857c-d57f-4fe0-8362-d861dc6d29cd
This commit is contained in:
wj32
2010-11-18 11:33:16 +00:00
parent c0c0b52c41
commit 1cabb980df
12 changed files with 193 additions and 3 deletions
+2
View File
@@ -2,10 +2,12 @@ Process Hacker
2.9
* NEW/IMPROVED:
* Added column selection for modules list
* Environment variables and current directory are
now correctly shown for WOW64 processes
* FIXED:
* Network list bug
* Memory leaks
2.8
* NEW/IMPROVED:
@@ -459,6 +459,8 @@ typedef struct _PH_MODULE_ITEM
ULONG Size;
ULONG Flags;
ULONG Type;
USHORT Reserved;
USHORT LoadCount;
PPH_STRING Name;
PPH_STRING FileName;
PH_IMAGE_VERSION_INFO VersionInfo;
+12 -1
View File
@@ -404,7 +404,14 @@ VOID PhWriteServiceList(
#define PHMOTLC_SIZE 2
#define PHMOTLC_DESCRIPTION 3
#define PHMOTLC_MAXIMUM 4
#define PHMOTLC_COMPANYNAME 4
#define PHMOTLC_VERSION 5
#define PHMOTLC_FILENAME 6
#define PHMOTLC_TYPE 7
#define PHMOTLC_LOADCOUNT 8
#define PHMOTLC_MAXIMUM 9
typedef struct _PH_MODULE_NODE
{
@@ -419,6 +426,8 @@ typedef struct _PH_MODULE_NODE
ULONG ValidMask;
PPH_STRING TooltipText;
WCHAR LoadCountString[PH_INT32_STR_LEN_1];
} PH_MODULE_NODE, *PPH_MODULE_NODE;
typedef struct _PH_MODULE_LIST_CONTEXT
@@ -433,6 +442,8 @@ typedef struct _PH_MODULE_LIST_CONTEXT
BOOLEAN EnableStateHighlighting;
PPH_POINTER_LIST NodeStateList;
HFONT BoldFont;
} PH_MODULE_LIST_CONTEXT, *PPH_MODULE_LIST_CONTEXT;
VOID PhInitializeModuleList(
+1
View File
@@ -3980,6 +3980,7 @@ VOID PhMainWndOnServiceAdded(
}
serviceNode = PhAddServiceNode(ServiceItem, RunId);
PhDereferenceObject(ServiceItem);
}
else
{
+111 -2
View File
@@ -96,6 +96,13 @@ VOID PhInitializeModuleList(
PhAddTreeListColumn(hwnd, PHMOTLC_SIZE, TRUE, L"Size", 60, PH_ALIGN_RIGHT, 2, DT_RIGHT);
PhAddTreeListColumn(hwnd, PHMOTLC_DESCRIPTION, TRUE, L"Description", 160, PH_ALIGN_LEFT, 3, 0);
PhAddTreeListColumn(hwnd, PHMOTLC_COMPANYNAME, FALSE, L"Company Name", 180, PH_ALIGN_LEFT, -1, 0);
PhAddTreeListColumn(hwnd, PHMOTLC_VERSION, FALSE, L"Version", 100, PH_ALIGN_LEFT, -1, 0);
PhAddTreeListColumn(hwnd, PHMOTLC_FILENAME, FALSE, L"File Name", 180, PH_ALIGN_LEFT, -1, DT_PATH_ELLIPSIS);
PhAddTreeListColumn(hwnd, PHMOTLC_TYPE, FALSE, L"Type", 80, PH_ALIGN_LEFT, -1, 0);
PhAddTreeListColumn(hwnd, PHMOTLC_LOADCOUNT, FALSE, L"Load Count", 40, PH_ALIGN_LEFT, -1, 0);
TreeList_SetTriState(hwnd, TRUE);
TreeList_SetSort(hwnd, 0, NoSortOrder);
}
@@ -106,6 +113,9 @@ VOID PhDeleteModuleList(
{
ULONG i;
if (Context->BoldFont)
DeleteObject(Context->BoldFont);
for (i = 0; i < Context->NodeList->Count; i++)
PhpDestroyModuleNode(Context->NodeList->Items[i]);
@@ -345,6 +355,36 @@ BEGIN_SORT_FUNCTION(Description)
}
END_SORT_FUNCTION
BEGIN_SORT_FUNCTION(CompanyName)
{
sortResult = PhCompareStringWithNull(moduleItem1->VersionInfo.CompanyName, moduleItem2->VersionInfo.CompanyName, TRUE);
}
END_SORT_FUNCTION
BEGIN_SORT_FUNCTION(Version)
{
sortResult = PhCompareStringWithNull(moduleItem1->VersionInfo.FileVersion, moduleItem2->VersionInfo.FileVersion, TRUE);
}
END_SORT_FUNCTION
BEGIN_SORT_FUNCTION(FileName)
{
sortResult = PhCompareStringWithNull(moduleItem1->FileName, moduleItem2->FileName, TRUE);
}
END_SORT_FUNCTION
BEGIN_SORT_FUNCTION(Type)
{
sortResult = uintcmp(moduleItem1->Type, moduleItem2->Type);
}
END_SORT_FUNCTION
BEGIN_SORT_FUNCTION(LoadCount)
{
sortResult = uintcmp(moduleItem1->LoadCount, moduleItem2->LoadCount);
}
END_SORT_FUNCTION
BOOLEAN NTAPI PhpModuleTreeListCallback(
__in HWND hwnd,
__in PH_TREELIST_MESSAGE Message,
@@ -371,7 +411,12 @@ BOOLEAN NTAPI PhpModuleTreeListCallback(
SORT_FUNCTION(Name),
SORT_FUNCTION(BaseAddress),
SORT_FUNCTION(Size),
SORT_FUNCTION(Description)
SORT_FUNCTION(Description),
SORT_FUNCTION(CompanyName),
SORT_FUNCTION(Version),
SORT_FUNCTION(FileName),
SORT_FUNCTION(Type),
SORT_FUNCTION(LoadCount)
};
int (__cdecl *sortFunction)(void *, const void *, const void *);
@@ -421,6 +466,59 @@ BOOLEAN NTAPI PhpModuleTreeListCallback(
case PHMOTLC_DESCRIPTION:
getNodeText->Text = PhGetStringRef(moduleItem->VersionInfo.FileDescription);
break;
case PHMOTLC_COMPANYNAME:
getNodeText->Text = PhGetStringRef(moduleItem->VersionInfo.CompanyName);
break;
case PHMOTLC_VERSION:
getNodeText->Text = PhGetStringRef(moduleItem->VersionInfo.FileVersion);
break;
case PHMOTLC_FILENAME:
getNodeText->Text = PhGetStringRef(moduleItem->FileName);
break;
case PHMOTLC_TYPE:
{
PWSTR typeString;
switch (moduleItem->Type)
{
case PH_MODULE_TYPE_MODULE:
typeString = L"DLL";
break;
case PH_MODULE_TYPE_MAPPED_FILE:
typeString = L"Mapped File";
break;
case PH_MODULE_TYPE_WOW64_MODULE:
typeString = L"WOW64 DLL";
break;
case PH_MODULE_TYPE_KERNEL_MODULE:
typeString = L"Kernel Module";
break;
default:
typeString = L"Unknown";
break;
}
PhInitializeStringRef(&getNodeText->Text, typeString);
}
break;
case PHMOTLC_LOADCOUNT:
if (moduleItem->Type != PH_MODULE_TYPE_MAPPED_FILE)
{
if (moduleItem->LoadCount != (USHORT)-1)
{
PhPrintInt32(node->LoadCountString, moduleItem->LoadCount);
PhInitializeStringRef(&getNodeText->Text, node->LoadCountString);
}
else
{
PhInitializeStringRef(&getNodeText->Text, L"Static");
}
}
else
{
PhInitializeEmptyStringRef(&getNodeText->Text);
}
break;
default:
return FALSE;
}
@@ -455,7 +553,18 @@ BOOLEAN NTAPI PhpModuleTreeListCallback(
// Make the executable file module item bold.
if (node->ModuleItem->IsFirst)
{
getNodeFont->Font = PhBoldListViewFont;
if (!context->BoldFont)
{
LOGFONT logFont;
if (GetObject((HFONT)SendMessage(hwnd, WM_GETFONT, 0, 0), sizeof(LOGFONT), &logFont))
{
logFont.lfWeight = FW_BOLD;
context->BoldFont = CreateFontIndirect(&logFont);
}
}
getNodeFont->Font = context->BoldFont ? context->BoldFont : PhBoldListViewFont;
getNodeFont->Flags = TLC_CACHE;
return TRUE;
}
+2
View File
@@ -359,6 +359,8 @@ VOID PhModuleProviderUpdate(
moduleItem->Size = module->Size;
moduleItem->Flags = module->Flags;
moduleItem->Type = module->Type;
moduleItem->Reserved = 0;
moduleItem->LoadCount = module->LoadCount;
moduleItem->Name = module->Name;
PhReferenceObject(moduleItem->Name);
+1
View File
@@ -3337,6 +3337,7 @@ INT_PTR CALLBACK PhpProcessModulesDlgProc(
}
PhAddModuleNode(&modulesContext->ListContext, moduleItem, runId);
PhDereferenceObject(moduleItem);
}
break;
case WM_PH_MODULE_REMOVED:
+2
View File
@@ -32,6 +32,7 @@ _IsThemeActive IsThemeActive_I;
_OpenThemeData OpenThemeData_I;
_CloseThemeData CloseThemeData_I;
_DrawThemeBackground DrawThemeBackground_I;
_DrawThemeText DrawThemeText_I;
_SHAutoComplete SHAutoComplete_I;
_SHCreateShellItem SHCreateShellItem_I;
_SHOpenFolderAndSelectItems SHOpenFolderAndSelectItems_I;
@@ -56,6 +57,7 @@ VOID PhGuiSupportInitialization()
OpenThemeData_I = (PVOID)GetProcAddress(uxthemeHandle, "OpenThemeData");
CloseThemeData_I = (PVOID)GetProcAddress(uxthemeHandle, "CloseThemeData");
DrawThemeBackground_I = (PVOID)GetProcAddress(uxthemeHandle, "DrawThemeBackground");
DrawThemeText_I = (PVOID)GetProcAddress(uxthemeHandle, "DrawThemeText");
SHAutoComplete_I = (PVOID)GetProcAddress(shlwapiHandle, "SHAutoComplete");
SHCreateShellItem_I = (PVOID)GetProcAddress(shell32Handle, "SHCreateShellItem");
SHOpenFolderAndSelectItems_I = (PVOID)GetProcAddress(shell32Handle, "SHOpenFolderAndSelectItems");
+3
View File
@@ -1008,6 +1008,9 @@ typedef struct _PH_MODULE_INFO
ULONG Flags;
PPH_STRING Name;
PPH_STRING FileName;
USHORT LoadOrderIndex; // -1 if N/A
USHORT LoadCount; // -1 if N/A
} PH_MODULE_INFO, *PPH_MODULE_INFO;
/**
+13
View File
@@ -72,6 +72,18 @@ typedef HRESULT (WINAPI *_DrawThemeBackground)(
__in const RECT *pClipRect
);
typedef HRESULT (WINAPI *_DrawThemeText)(
__in HTHEME hTheme,
__in HDC hdc,
__in int iPartId,
__in int iStateId,
__in_ecount(cchText) LPCWSTR pszText,
__in int cchText,
__in DWORD dwTextFlags,
__reserved DWORD dwTextFlags2,
__in LPCRECT pRect
);
typedef HRESULT (WINAPI *_SHAutoComplete)(
__in HWND hwndEdit,
__in DWORD dwFlags
@@ -91,6 +103,7 @@ extern _IsThemeActive IsThemeActive_I;
extern _OpenThemeData OpenThemeData_I;
extern _CloseThemeData CloseThemeData_I;
extern _DrawThemeBackground DrawThemeBackground_I;
extern _DrawThemeText DrawThemeText_I;
extern _SHAutoComplete SHAutoComplete_I;
extern _TaskDialogIndirect TaskDialogIndirect_I;
#endif
+32
View File
@@ -136,6 +136,38 @@ FORCEINLINE INT PhModifySort(
\
return 0
FORCEINLINE int charcmp(
__in signed char value1,
__in signed char value2
)
{
return C_1sTo4(value1 - value2);
}
FORCEINLINE int ucharcmp(
__in unsigned char value1,
__in unsigned char value2
)
{
PH_BUILTIN_COMPARE(value1, value2);
}
FORCEINLINE int shortcmp(
__in signed short value1,
__in signed short value2
)
{
return C_2sTo4(value1 - value2);
}
FORCEINLINE int ushortcmp(
__in unsigned short value1,
__in unsigned short value2
)
{
PH_BUILTIN_COMPARE(value1, value2);
}
FORCEINLINE int intcmp(
__in int value1,
__in int value2
+12
View File
@@ -6311,6 +6311,8 @@ typedef struct _ENUM_GENERIC_PROCESS_MODULES_CONTEXT
PVOID Context;
ULONG Type;
PPH_LIST BaseAddressList;
ULONG LoadOrderIndex;
} ENUM_GENERIC_PROCESS_MODULES_CONTEXT, *PENUM_GENERIC_PROCESS_MODULES_CONTEXT;
static BOOLEAN EnumGenericProcessModulesCallback(
@@ -6350,6 +6352,8 @@ static BOOLEAN EnumGenericProcessModulesCallback(
Module->BaseDllName.Length
);
moduleInfo.FileName = PhGetFileName(fileName);
moduleInfo.LoadOrderIndex = (USHORT)(context->LoadOrderIndex++);
moduleInfo.LoadCount = Module->LoadCount;
PhDereferenceObject(fileName);
@@ -6402,6 +6406,8 @@ VOID PhpRtlModulesToGenericModules(
moduleInfo.Flags = module->Flags;
moduleInfo.Name = PhCreateStringFromAnsi(&module->FullPathName[module->OffsetToFileName]);
moduleInfo.FileName = PhGetFileName(fileName); // convert to DOS file name
moduleInfo.LoadOrderIndex = module->LoadOrderIndex;
moduleInfo.LoadCount = module->LoadCount;
PhDereferenceObject(fileName);
@@ -6455,6 +6461,8 @@ VOID PhpRtlModulesExToGenericModules(
moduleInfo.Flags = module->ModuleInfo.Flags;
moduleInfo.Name = PhCreateStringFromAnsi(&module->ModuleInfo.FullPathName[module->ModuleInfo.OffsetToFileName]);
moduleInfo.FileName = PhGetFileName(fileName); // convert to DOS file name
moduleInfo.LoadOrderIndex = module->ModuleInfo.LoadOrderIndex;
moduleInfo.LoadCount = module->ModuleInfo.LoadCount;
PhDereferenceObject(fileName);
@@ -6527,6 +6535,8 @@ VOID PhpEnumGenericMappedFiles(
moduleInfo.Flags = 0;
moduleInfo.FileName = newFileName;
moduleInfo.Name = PhGetBaseName(newFileName);
moduleInfo.LoadOrderIndex = -1;
moduleInfo.LoadCount = -1;
cont = Callback(&moduleInfo, Context);
@@ -6644,6 +6654,7 @@ NTSTATUS PhEnumGenericModules(
context.Context = Context;
context.Type = PH_MODULE_TYPE_MODULE;
context.BaseAddressList = baseAddressList;
context.LoadOrderIndex = 0;
status = PhEnumProcessModules(
ProcessHandle,
@@ -6673,6 +6684,7 @@ NTSTATUS PhEnumGenericModules(
context.Context = Context;
context.Type = PH_MODULE_TYPE_WOW64_MODULE;
context.BaseAddressList = baseAddressList;
context.LoadOrderIndex = 0;
status = PhEnumProcessModules32(
ProcessHandle,