Files
mirror-processhacker/2.x/trunk/ProcessHacker/include/phapp.h
T
wj32 975b69ff0b added plugin for viewing service dependencies and dependents
git-svn-id: svn://svn.code.sf.net/p/processhacker/code@3625 21ef857c-d57f-4fe0-8362-d861dc6d29cd
2010-09-15 09:32:08 +00:00

1537 lines
33 KiB
C

#ifndef PHAPP_H
#define PHAPP_H
#ifdef PHAPP_EXPORT
#define PHAPPAPI __declspec(dllexport)
#else
#define PHAPPAPI
#endif
#include <phgui.h>
#include <treelist.h>
#include <circbuf.h>
#include <providers.h>
#include "resource.h"
#define KPH_ERROR_MESSAGE (L"KProcessHacker does not support your operating system " \
L"or could not be loaded. Make sure Process Hacker is running " \
L"on a 32-bit system and with administrative privileges.")
#ifndef PH_MAIN_PRIVATE
extern PPH_STRING PhApplicationDirectory;
extern PPH_STRING PhApplicationFileName;
extern HFONT PhApplicationFont;
extern HFONT PhBoldListViewFont;
extern HFONT PhBoldMessageFont;
extern PPH_STRING PhCurrentUserName;
extern HFONT PhIconTitleFont;
extern HINSTANCE PhInstanceHandle;
extern PPH_STRING PhLocalSystemName;
extern BOOLEAN PhPluginsEnabled;
extern PPH_STRING PhProcDbFileName;
extern PPH_STRING PhSettingsFileName;
extern PH_STARTUP_PARAMETERS PhStartupParameters;
extern PWSTR PhWindowClassName;
extern PH_PROVIDER_THREAD PhPrimaryProviderThread;
extern PH_PROVIDER_THREAD PhSecondaryProviderThread;
extern COLORREF PhSysWindowColor;
#endif
// debugging
#ifdef DEBUG
#define dwprintf(format, ...) fwprintf(stderr, format, __VA_ARGS__)
#define dwlprintf(format, ...) PhDebugPrintLine(format, __VA_ARGS__)
#else
#define dwprintf(format, ...)
#define dwlprintf(format, ...)
#endif
// main
VOID PhDebugPrintLine(
__in __format_string PWSTR Format,
...
);
typedef struct _PH_STARTUP_PARAMETERS
{
BOOLEAN NoKph;
BOOLEAN NoSettings;
PPH_STRING SettingsFileName;
BOOLEAN ShowHidden;
BOOLEAN ShowVisible;
BOOLEAN ShowOptions;
HWND WindowHandle;
POINT Point;
BOOLEAN CommandMode;
PPH_STRING CommandType;
PPH_STRING CommandObject;
PPH_STRING CommandAction;
BOOLEAN RunAsServiceMode;
BOOLEAN InstallKph;
BOOLEAN UninstallKph;
BOOLEAN Debug;
} PH_STARTUP_PARAMETERS, *PPH_STARTUP_PARAMETERS;
INT PhMainMessageLoop();
PHAPPAPI
VOID PhRegisterDialog(
__in HWND DialogWindowHandle
);
PHAPPAPI
VOID PhUnregisterDialog(
__in HWND DialogWindowHandle
);
VOID PhApplyUpdateInterval(
__in ULONG Interval
);
VOID PhActivatePreviousInstance();
VOID PhInitializeCommonControls();
VOID PhInitializeFont(
__in HWND hWnd
);
VOID PhInitializeKph();
BOOLEAN PhInitializeAppSystem();
ATOM PhRegisterWindowClass();
// proctree
// Columns
// Default columns should go first
#define PHTLC_NAME 0
#define PHTLC_PID 1
#define PHTLC_CPU 2
#define PHTLC_IOTOTAL 3
#define PHTLC_PVTMEMORY 4
#define PHTLC_USERNAME 5
#define PHTLC_DESCRIPTION 6
#define PHTLC_COMPANYNAME 7
#define PHTLC_VERSION 8
#define PHTLC_FILENAME 9
#define PHTLC_COMMANDLINE 10
#define PHTLC_PEAKPVTMEMORY 11
#define PHTLC_WORKINGSET 12
#define PHTLC_PEAKWORKINGSET 13
#define PHTLC_PRIVATEWS 14
#define PHTLC_SHAREDWS 15
#define PHTLC_SHAREABLEWS 16
#define PHTLC_VIRTUALSIZE 17
#define PHTLC_PEAKVIRTUALSIZE 18
#define PHTLC_PAGEFAULTS 19
#define PHTLC_SESSIONID 20
#define PHTLC_PRIORITYCLASS 21
#define PHTLC_BASEPRIORITY 22
#define PHTLC_THREADS 23
#define PHTLC_HANDLES 24
#define PHTLC_GDIHANDLES 25
#define PHTLC_USERHANDLES 26
#define PHTLC_IORO 27
#define PHTLC_IOW 28
#define PHTLC_INTEGRITY 29
#define PHTLC_IOPRIORITY 30
#define PHTLC_PAGEPRIORITY 31
#define PHTLC_STARTTIME 32
#define PHTLC_TOTALCPUTIME 33
#define PHTLC_KERNELCPUTIME 34
#define PHTLC_USERCPUTIME 35
#define PHTLC_VERIFICATIONSTATUS 36
#define PHTLC_VERIFIEDSIGNER 37
#define PHTLC_RESERVED1 38
#define PHTLC_RELATIVESTARTTIME 39
#define PHTLC_BITS 40
#define PHTLC_ELEVATION 41
#define PHTLC_WINDOWTITLE 42
#define PHTLC_WINDOWSTATUS 43
#define PHTLC_MAXIMUM 44
#define PHPN_WSCOUNTERS 0x1
#define PHPN_GDIUSERHANDLES 0x2
#define PHPN_IOPAGEPRIORITY 0x4
#define PHPN_WINDOW 0x8
typedef struct _PH_PROCESS_NODE
{
PH_TREELIST_NODE Node;
PH_HASH_ENTRY HashEntry;
PH_ITEM_STATE State;
HANDLE StateListHandle;
ULONG TickCount;
HANDLE ProcessId;
PPH_PROCESS_ITEM ProcessItem;
struct _PH_PROCESS_NODE *Parent;
PPH_LIST Children;
PH_STRINGREF TextCache[PHTLC_MAXIMUM];
// If the user has selected certain columns we need extra information
// that isn't retrieved by the process provider.
ULONG ValidMask;
// WS counters
PH_PROCESS_WS_COUNTERS WsCounters;
// GDI, USER handles
ULONG GdiHandles;
ULONG UserHandles;
// I/O, Page priority
ULONG IoPriority;
ULONG PagePriority;
// Window
HWND WindowHandle;
PPH_STRING WindowText;
BOOLEAN WindowHung;
PPH_STRING TooltipText;
WCHAR CpuUsageText[PH_INT32_STR_LEN_1];
PPH_STRING IoTotalText;
PPH_STRING PrivateMemoryText;
PPH_STRING PeakPrivateMemoryText;
PPH_STRING WorkingSetText;
PPH_STRING PeakWorkingSetText;
PPH_STRING PrivateWsText;
PPH_STRING SharedWsText;
PPH_STRING ShareableWsText;
PPH_STRING VirtualSizeText;
PPH_STRING PeakVirtualSizeText;
PPH_STRING PageFaultsText;
WCHAR BasePriorityText[PH_INT32_STR_LEN_1];
WCHAR ThreadsText[PH_INT32_STR_LEN_1];
WCHAR HandlesText[PH_INT32_STR_LEN_1];
WCHAR GdiHandlesText[PH_INT32_STR_LEN_1];
WCHAR UserHandlesText[PH_INT32_STR_LEN_1];
PPH_STRING IoRoText;
PPH_STRING IoWText;
WCHAR IoPriorityText[PH_INT32_STR_LEN_1];
WCHAR PagePriorityText[PH_INT32_STR_LEN_1];
PPH_STRING StartTimeText;
WCHAR TotalCpuTimeText[PH_TIMESPAN_STR_LEN_1];
WCHAR KernelCpuTimeText[PH_TIMESPAN_STR_LEN_1];
WCHAR UserCpuTimeText[PH_TIMESPAN_STR_LEN_1];
PPH_STRING RelativeStartTimeText;
PPH_STRING WindowTitleText;
} PH_PROCESS_NODE, *PPH_PROCESS_NODE;
VOID PhProcessTreeListInitialization();
VOID PhInitializeProcessTreeList(
__in HWND hwnd
);
PPH_PROCESS_NODE PhAddProcessNode(
__in PPH_PROCESS_ITEM ProcessItem,
__in ULONG RunId
);
PHAPPAPI
PPH_PROCESS_NODE PhFindProcessNode(
__in HANDLE ProcessId
);
VOID PhRemoveProcessNode(
__in PPH_PROCESS_NODE ProcessNode
);
PHAPPAPI
VOID PhUpdateProcessNode(
__in PPH_PROCESS_NODE ProcessNode
);
VOID PhTickProcessNodes();
HICON PhGetStockAppIcon();
PHAPPAPI
PPH_PROCESS_ITEM PhGetSelectedProcessItem();
PHAPPAPI
VOID PhGetSelectedProcessItems(
__out PPH_PROCESS_ITEM **Processes,
__out PULONG NumberOfProcesses
);
PHAPPAPI
VOID PhDeselectAllProcessNodes();
PHAPPAPI
VOID PhInvalidateAllProcessNodes();
PHAPPAPI
VOID PhSelectAndEnsureVisibleProcessNode(
__in PPH_PROCESS_NODE ProcessNode
);
typedef BOOLEAN (NTAPI *PPH_PROCESS_TREE_FILTER)(
__in PPH_PROCESS_NODE ProcessNode,
__in_opt PVOID Context
);
typedef struct _PH_PROCESS_TREE_FILTER_ENTRY
{
PPH_PROCESS_TREE_FILTER Filter;
PVOID Context;
} PH_PROCESS_TREE_FILTER_ENTRY, *PPH_PROCESS_TREE_FILTER_ENTRY;
PHAPPAPI
PPH_PROCESS_TREE_FILTER_ENTRY PhAddProcessTreeFilter(
__in PPH_PROCESS_TREE_FILTER Filter,
__in_opt PVOID Context
);
PHAPPAPI
VOID PhRemoveProcessTreeFilter(
__in PPH_PROCESS_TREE_FILTER_ENTRY Entry
);
PHAPPAPI
VOID PhApplyProcessTreeFilters();
VOID PhCopyProcessTree();
VOID PhWriteProcessTree(
__inout PPH_FILE_STREAM FileStream,
__in ULONG Mode
);
// appsup
PHAPPAPI
BOOLEAN PhGetProcessIsSuspended(
__in PSYSTEM_PROCESS_INFORMATION Process
);
typedef enum _PH_KNOWN_PROCESS_TYPE
{
UnknownProcessType,
SystemProcessType, // ntoskrnl/ntkrnlpa/...
SessionManagerProcessType, // smss
WindowsSubsystemProcessType, // csrss
WindowsStartupProcessType, // wininit
ServiceControlManagerProcessType, // services
LocalSecurityAuthorityProcessType, // lsass
LocalSessionManagerProcessType, // lsm
ServiceHostProcessType, // svchost
RunDllAsAppProcessType, // rundll32
ComSurrogateProcessType, // dllhost
TaskHostProcessType // taskeng, taskhost
} PH_KNOWN_PROCESS_TYPE, *PPH_KNOWN_PROCESS_TYPE;
PHAPPAPI
NTSTATUS PhGetProcessKnownType(
__in HANDLE ProcessHandle,
__out PPH_KNOWN_PROCESS_TYPE KnownProcessType
);
typedef union _PH_KNOWN_PROCESS_COMMAND_LINE
{
struct
{
PPH_STRING GroupName;
} ServiceHost;
struct
{
PPH_STRING FileName;
PPH_STRING ProcedureName;
} RunDllAsApp;
struct
{
GUID Guid;
PPH_STRING Name; // optional
PPH_STRING FileName; // optional
} ComSurrogate;
} PH_KNOWN_PROCESS_COMMAND_LINE, *PPH_KNOWN_PROCESS_COMMAND_LINE;
PHAPPAPI
BOOLEAN PhaGetProcessKnownCommandLine(
__in PPH_STRING CommandLine,
__in PH_KNOWN_PROCESS_TYPE KnownProcessType,
__out PPH_KNOWN_PROCESS_COMMAND_LINE KnownCommandLine
);
PPH_STRING PhGetSessionInformationString(
__in HANDLE ServerHandle,
__in ULONG SessionId,
__in ULONG InformationClass
);
PPH_STRING PhEscapeStringForDelimiter(
__in PPH_STRING String,
__in WCHAR Delimiter
);
PPH_STRING PhUnescapeStringForDelimiter(
__in PPH_STRING String,
__in WCHAR Delimiter
);
typedef struct mxml_node_s mxml_node_t;
PPH_STRING PhGetOpaqueXmlNodeText(
__in mxml_node_t *node
);
PHAPPAPI
VOID PhSearchOnlineString(
__in HWND hWnd,
__in PWSTR String
);
PHAPPAPI
VOID PhShellExecuteUserString(
__in HWND hWnd,
__in PWSTR Setting,
__in PWSTR String,
__in BOOLEAN UseShellExecute
);
PHAPPAPI
VOID PhLoadSymbolProviderOptions(
__inout PPH_SYMBOL_PROVIDER SymbolProvider
);
PHAPPAPI
VOID PhSetExtendedListViewWithSettings(
__in HWND hWnd
);
PHAPPAPI
VOID PhCopyListViewInfoTip(
__inout LPNMLVGETINFOTIP GetInfoTip,
__in PPH_STRINGREF Tip
);
PHAPPAPI
VOID PhCopyListView(
__in HWND ListViewHandle
);
PHAPPAPI
VOID PhHandleListViewNotifyForCopy(
__in LPARAM lParam,
__in HWND ListViewHandle
);
PHAPPAPI
VOID PhLoadWindowPlacementFromSetting(
__in PWSTR PositionSettingName,
__in PWSTR SizeSettingName,
__in HWND WindowHandle
);
PHAPPAPI
VOID PhSaveWindowPlacementToSetting(
__in PWSTR PositionSettingName,
__in PWSTR SizeSettingName,
__in HWND WindowHandle
);
PHAPPAPI
VOID PhLoadListViewColumnsFromSetting(
__in PWSTR Name,
__in HWND ListViewHandle
);
PHAPPAPI
VOID PhSaveListViewColumnsToSetting(
__in PWSTR Name,
__in HWND ListViewHandle
);
PHAPPAPI
VOID PhLoadTreeListColumnsFromSetting(
__in PWSTR Name,
__in HWND TreeListHandle
);
PHAPPAPI
VOID PhSaveTreeListColumnsToSetting(
__in PWSTR Name,
__in HWND TreeListHandle
);
PHAPPAPI
PPH_STRING PhGetPhVersion();
PHAPPAPI
VOID PhWritePhTextHeader(
__inout PPH_FILE_STREAM FileStream
);
#define PH_LOAD_SHARED_IMAGE(Name, Type) LoadImage(PhInstanceHandle, (Name), (Type), 0, 0, LR_SHARED)
FORCEINLINE PVOID PhpGenericPropertyPageHeader(
__in HWND hwndDlg,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam,
__in PWSTR ContextName
)
{
PVOID context;
switch (uMsg)
{
case WM_INITDIALOG:
{
LPPROPSHEETPAGE propSheetPage = (LPPROPSHEETPAGE)lParam;
context = (PVOID)propSheetPage->lParam;
SetProp(hwndDlg, ContextName, (HANDLE)context);
}
break;
case WM_DESTROY:
{
context = (PVOID)GetProp(hwndDlg, ContextName);
RemoveProp(hwndDlg, ContextName);
}
break;
default:
{
context = (PVOID)GetProp(hwndDlg, ContextName);
}
break;
}
return context;
}
// mainwnd
#ifndef PH_MAINWND_PRIVATE
extern HWND PhMainWndHandle;
extern BOOLEAN PhMainWndExiting;
#endif
#define WM_PH_ACTIVATE (WM_APP + 99)
#define PH_ACTIVATE_REPLY 0x1119
#define WM_PH_SHOW_PROCESS_PROPERTIES (WM_APP + 120)
#define WM_PH_DESTROY (WM_APP + 121)
#define WM_PH_SAVE_ALL_SETTINGS (WM_APP + 122)
#define WM_PH_PREPARE_FOR_EARLY_SHUTDOWN (WM_APP + 123)
#define WM_PH_CANCEL_EARLY_SHUTDOWN (WM_APP + 124)
#define WM_PH_DELAYED_LOAD_COMPLETED (WM_APP + 125)
#define WM_PH_NOTIFY_ICON_MESSAGE (WM_APP + 126)
#define WM_PH_TOGGLE_VISIBLE (WM_APP + 127)
#define WM_PH_SHOW_MEMORY_EDITOR (WM_APP + 128)
#define WM_PH_SHOW_MEMORY_RESULTS (WM_APP + 129)
#define WM_PH_SELECT_TAB_PAGE (WM_APP + 130)
#define WM_PH_GET_LAYOUT_PADDING (WM_APP + 131)
#define WM_PH_SET_LAYOUT_PADDING (WM_APP + 132)
#define WM_PH_SELECT_PROCESS_NODE (WM_APP + 133)
#define WM_PH_SELECT_SERVICE_ITEM (WM_APP + 134)
#define WM_PH_SELECT_NETWORK_ITEM (WM_APP + 135)
#define WM_PH_PROCESS_ADDED (WM_APP + 101)
#define WM_PH_PROCESS_MODIFIED (WM_APP + 102)
#define WM_PH_PROCESS_REMOVED (WM_APP + 103)
#define WM_PH_PROCESSES_UPDATED (WM_APP + 104)
#define WM_PH_SERVICE_ADDED (WM_APP + 105)
#define WM_PH_SERVICE_MODIFIED (WM_APP + 106)
#define WM_PH_SERVICE_REMOVED (WM_APP + 107)
#define WM_PH_SERVICES_UPDATED (WM_APP + 108)
#define WM_PH_NETWORK_ITEM_ADDED (WM_APP + 109)
#define WM_PH_NETWORK_ITEM_MODIFIED (WM_APP + 110)
#define WM_PH_NETWORK_ITEM_REMOVED (WM_APP + 111)
#define WM_PH_NETWORK_ITEMS_UPDATED (WM_APP + 112)
#define ProcessHacker_ShowProcessProperties(hWnd, ProcessItem) \
SendMessage(hWnd, WM_PH_SHOW_PROCESS_PROPERTIES, 0, (LPARAM)(ProcessItem))
#define ProcessHacker_Destroy(hWnd) \
SendMessage(hWnd, WM_PH_DESTROY, 0, 0)
#define ProcessHacker_SaveAllSettings(hWnd) \
SendMessage(hWnd, WM_PH_SAVE_ALL_SETTINGS, 0, 0)
#define ProcessHacker_PrepareForEarlyShutdown(hWnd) \
SendMessage(hWnd, WM_PH_PREPARE_FOR_EARLY_SHUTDOWN, 0, 0)
#define ProcessHacker_CancelEarlyShutdown(hWnd) \
SendMessage(hWnd, WM_PH_CANCEL_EARLY_SHUTDOWN, 0, 0)
#define ProcessHacker_ToggleVisible(hWnd) \
SendMessage(hWnd, WM_PH_TOGGLE_VISIBLE, 0, 0)
#define ProcessHacker_ShowMemoryEditor(hWnd, ShowMemoryEditor) \
PostMessage(hWnd, WM_PH_SHOW_MEMORY_EDITOR, 0, (LPARAM)(ShowMemoryEditor))
#define ProcessHacker_ShowMemoryResults(hWnd, ShowMemoryResults) \
PostMessage(hWnd, WM_PH_SHOW_MEMORY_RESULTS, 0, (LPARAM)(ShowMemoryResults))
#define ProcessHacker_SelectTabPage(hWnd, Index) \
SendMessage(hWnd, WM_PH_SELECT_TAB_PAGE, (WPARAM)(Index), 0)
#define ProcessHacker_GetLayoutPadding(hWnd, Rect) \
SendMessage(hWnd, WM_PH_GET_LAYOUT_PADDING, 0, (LPARAM)(Rect))
#define ProcessHacker_SetLayoutPadding(hWnd, Rect) \
SendMessage(hWnd, WM_PH_SET_LAYOUT_PADDING, 0, (LPARAM)(Rect))
#define ProcessHacker_SelectProcessNode(hWnd, ProcessNode) \
SendMessage(hWnd, WM_PH_SELECT_PROCESS_NODE, 0, (LPARAM)(ProcessNode))
#define ProcessHacker_SelectServiceItem(hWnd, ServiceItem) \
SendMessage(hWnd, WM_PH_SELECT_SERVICE_ITEM, 0, (LPARAM)(ServiceItem))
#define ProcessHacker_SelectNetworkItem(hWnd, NetworkItem) \
SendMessage(hWnd, WM_PH_SELECT_NETWORK_ITEM, 0, (LPARAM)(NetworkItem))
typedef struct _PH_SHOWMEMORYEDITOR
{
HANDLE ProcessId;
PVOID BaseAddress;
SIZE_T RegionSize;
ULONG SelectOffset;
ULONG SelectLength;
} PH_SHOWMEMORYEDITOR, *PPH_SHOWMEMORYEDITOR;
typedef struct _PH_SHOWMEMORYRESULTS
{
HANDLE ProcessId;
PPH_LIST Results;
} PH_SHOWMEMORYRESULTS, *PPH_SHOWMEMORYRESULTS;
#define PH_NOTIFY_MINIMUM 0x1
#define PH_NOTIFY_PROCESS_CREATE 0x1
#define PH_NOTIFY_PROCESS_DELETE 0x2
#define PH_NOTIFY_SERVICE_CREATE 0x4
#define PH_NOTIFY_SERVICE_DELETE 0x8
#define PH_NOTIFY_SERVICE_START 0x10
#define PH_NOTIFY_SERVICE_STOP 0x20
#define PH_NOTIFY_MAXIMUM 0x40
#define PH_NOTIFY_VALID_MASK 0x3f
BOOLEAN PhMainWndInitialization(
__in INT ShowCommand
);
LRESULT CALLBACK PhMainWndProc(
__in HWND hWnd,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
);
PHAPPAPI
VOID PhShowIconNotification(
__in PWSTR Title,
__in PWSTR Text,
__in ULONG Flags
);
VOID PhShowProcessContextMenu(
__in POINT Location
);
// plugins
#ifndef PLUGINS_PRIVATE
extern PH_AVL_TREE PhPluginsByName;
#endif
VOID PhPluginsInitialization();
VOID PhLoadPlugins();
VOID PhUnloadPlugins();
// procprp
#define PH_PROCESS_PROPCONTEXT_MAXPAGES 20
#ifndef DLGTEMPLATEEX
typedef struct _DLGTEMPLATEEX
{
WORD dlgVer;
WORD signature;
DWORD helpID;
DWORD exStyle;
DWORD style;
WORD cDlgItems;
short x;
short y;
short cx;
short cy;
} DLGTEMPLATEEX, *PDLGTEMPLATEEX;
#endif
typedef struct _PH_PROCESS_PROPCONTEXT
{
PPH_PROCESS_ITEM ProcessItem;
HWND WindowHandle;
PH_EVENT CreatedEvent;
PPH_STRING Title;
PROPSHEETHEADER PropSheetHeader;
HPROPSHEETPAGE *PropSheetPages;
HANDLE SelectThreadId;
} PH_PROCESS_PROPCONTEXT, *PPH_PROCESS_PROPCONTEXT;
typedef struct _PH_PROCESS_PROPPAGECONTEXT
{
PPH_PROCESS_PROPCONTEXT PropContext;
PVOID Context;
PROPSHEETPAGE PropSheetPage;
BOOLEAN LayoutInitialized;
} PH_PROCESS_PROPPAGECONTEXT, *PPH_PROCESS_PROPPAGECONTEXT;
BOOLEAN PhProcessPropInitialization();
PHAPPAPI
PPH_PROCESS_PROPCONTEXT PhCreateProcessPropContext(
__in HWND ParentWindowHandle,
__in PPH_PROCESS_ITEM ProcessItem
);
VOID PhRefreshProcessPropContext(
__inout PPH_PROCESS_PROPCONTEXT PropContext
);
PHAPPAPI
VOID PhSetSelectThreadIdProcessPropContext(
__inout PPH_PROCESS_PROPCONTEXT PropContext,
__in HANDLE ThreadId
);
PHAPPAPI
BOOLEAN PhAddProcessPropPage(
__inout PPH_PROCESS_PROPCONTEXT PropContext,
__in __assumeRefs(1) PPH_PROCESS_PROPPAGECONTEXT PropPageContext
);
PHAPPAPI
BOOLEAN PhAddProcessPropPage2(
__inout PPH_PROCESS_PROPCONTEXT PropContext,
__in HPROPSHEETPAGE PropSheetPageHandle
);
PHAPPAPI
PPH_PROCESS_PROPPAGECONTEXT PhCreateProcessPropPageContext(
__in LPCWSTR Template,
__in DLGPROC DlgProc,
__in_opt PVOID Context
);
PHAPPAPI
BOOLEAN PhPropPageDlgProcHeader(
__in HWND hwndDlg,
__in UINT uMsg,
__in LPARAM lParam,
__out LPPROPSHEETPAGE *PropSheetPage,
__out PPH_PROCESS_PROPPAGECONTEXT *PropPageContext,
__out PPH_PROCESS_ITEM *ProcessItem
);
PHAPPAPI
PPH_LAYOUT_ITEM PhAddPropPageLayoutItem(
__in HWND hwnd,
__in HWND Handle,
__in PPH_LAYOUT_ITEM ParentItem,
__in ULONG Anchor
);
PHAPPAPI
VOID PhDoPropPageLayout(
__in HWND hwnd
);
PHAPPAPI
BOOLEAN PhShowProcessProperties(
__in PPH_PROCESS_PROPCONTEXT Context
);
// notifico
#define PH_ICON_MINIMUM 0x1
#define PH_ICON_CPU_HISTORY 0x1
#define PH_ICON_IO_HISTORY 0x2
#define PH_ICON_COMMIT_HISTORY 0x4
#define PH_ICON_PHYSICAL_HISTORY 0x8
#define PH_ICON_CPU_USAGE 0x10
#define PH_ICON_MAXIMUM 0x20
VOID PhAddNotifyIcon(
__in ULONG Id
);
VOID PhRemoveNotifyIcon(
__in ULONG Id
);
VOID PhModifyNotifyIcon(
__in ULONG Id,
__in ULONG Flags,
__in_opt PWSTR Text,
__in_opt HICON Icon
);
VOID PhShowBalloonTipNotifyIcon(
__in ULONG Id,
__in PWSTR Title,
__in PWSTR Text,
__in ULONG Timeout,
__in ULONG Flags
);
HICON PhBitmapToIcon(
__in HBITMAP Bitmap
);
VOID PhUpdateIconCpuHistory();
VOID PhUpdateIconIoHistory();
VOID PhUpdateIconCommitHistory();
VOID PhUpdateIconPhysicalHistory();
VOID PhUpdateIconCpuUsage();
// log
#define PH_LOG_ENTRY_PROCESS_FIRST 1
#define PH_LOG_ENTRY_PROCESS_CREATE 1
#define PH_LOG_ENTRY_PROCESS_DELETE 2
#define PH_LOG_ENTRY_PROCESS_LAST 2
#define PH_LOG_ENTRY_SERVICE_FIRST 3
#define PH_LOG_ENTRY_SERVICE_CREATE 3
#define PH_LOG_ENTRY_SERVICE_DELETE 4
#define PH_LOG_ENTRY_SERVICE_START 5
#define PH_LOG_ENTRY_SERVICE_STOP 6
#define PH_LOG_ENTRY_SERVICE_CONTINUE 7
#define PH_LOG_ENTRY_SERVICE_PAUSE 8
#define PH_LOG_ENTRY_SERVICE_LAST 8
#define PH_LOG_ENTRY_MESSAGE 9
typedef struct _PH_LOG_ENTRY
{
UCHAR Type;
UCHAR Reserved1;
USHORT Flags;
LARGE_INTEGER Time;
union
{
struct
{
HANDLE ProcessId;
PPH_STRING Name;
HANDLE ParentProcessId;
PPH_STRING ParentName;
} Process;
struct
{
PPH_STRING Name;
PPH_STRING DisplayName;
} Service;
PPH_STRING Message;
};
UCHAR Buffer[1];
} PH_LOG_ENTRY, *PPH_LOG_ENTRY;
#ifndef PH_LOG_PRIVATE
PH_CIRCULAR_BUFFER_PVOID PhLogBuffer;
PH_CALLBACK PhLoggedCallback;
#endif
VOID PhLogInitialization();
VOID PhClearLogEntries();
VOID PhLogProcessEntry(
__in UCHAR Type,
__in HANDLE ProcessId,
__in PPH_STRING Name,
__in_opt HANDLE ParentProcessId,
__in_opt PPH_STRING ParentName
);
VOID PhLogServiceEntry(
__in UCHAR Type,
__in PPH_STRING Name,
__in PPH_STRING DisplayName
);
PHAPPAPI
VOID PhLogMessageEntry(
__in UCHAR Type,
__in PPH_STRING Message
);
PPH_STRING PhFormatLogEntry(
__in PPH_LOG_ENTRY Entry
);
// dbgcon
VOID PhShowDebugConsole();
// actions
typedef enum _PH_ACTION_ELEVATION_LEVEL
{
NeverElevateAction = 0,
PromptElevateAction = 1,
AlwaysElevateAction = 2
} PH_ACTION_ELEVATION_LEVEL;
PHAPPAPI
BOOLEAN PhUiLockComputer(
__in HWND hWnd
);
PHAPPAPI
BOOLEAN PhUiLogoffComputer(
__in HWND hWnd
);
PHAPPAPI
BOOLEAN PhUiSleepComputer(
__in HWND hWnd
);
PHAPPAPI
BOOLEAN PhUiHibernateComputer(
__in HWND hWnd
);
PHAPPAPI
BOOLEAN PhUiRestartComputer(
__in HWND hWnd
);
PHAPPAPI
BOOLEAN PhUiShutdownComputer(
__in HWND hWnd
);
PHAPPAPI
BOOLEAN PhUiPoweroffComputer(
__in HWND hWnd
);
PHAPPAPI
BOOLEAN PhUiConnectSession(
__in HWND hWnd,
__in ULONG SessionId
);
PHAPPAPI
BOOLEAN PhUiDisconnectSession(
__in HWND hWnd,
__in ULONG SessionId
);
PHAPPAPI
BOOLEAN PhUiLogoffSession(
__in HWND hWnd,
__in ULONG SessionId
);
PHAPPAPI
BOOLEAN PhUiTerminateProcesses(
__in HWND hWnd,
__in PPH_PROCESS_ITEM *Processes,
__in ULONG NumberOfProcesses
);
PHAPPAPI
BOOLEAN PhUiTerminateTreeProcess(
__in HWND hWnd,
__in PPH_PROCESS_ITEM Process
);
PHAPPAPI
BOOLEAN PhUiSuspendProcesses(
__in HWND hWnd,
__in PPH_PROCESS_ITEM *Processes,
__in ULONG NumberOfProcesses
);
PHAPPAPI
BOOLEAN PhUiResumeProcesses(
__in HWND hWnd,
__in PPH_PROCESS_ITEM *Processes,
__in ULONG NumberOfProcesses
);
PHAPPAPI
BOOLEAN PhUiRestartProcess(
__in HWND hWnd,
__in PPH_PROCESS_ITEM Process
);
PHAPPAPI
BOOLEAN PhUiDebugProcess(
__in HWND hWnd,
__in PPH_PROCESS_ITEM Process
);
PHAPPAPI
BOOLEAN PhUiReduceWorkingSetProcesses(
__in HWND hWnd,
__in PPH_PROCESS_ITEM *Processes,
__in ULONG NumberOfProcesses
);
PHAPPAPI
BOOLEAN PhUiSetVirtualizationProcess(
__in HWND hWnd,
__in PPH_PROCESS_ITEM Process,
__in BOOLEAN Enable
);
PHAPPAPI
BOOLEAN PhUiDetachFromDebuggerProcess(
__in HWND hWnd,
__in PPH_PROCESS_ITEM Process
);
PHAPPAPI
BOOLEAN PhUiInjectDllProcess(
__in HWND hWnd,
__in PPH_PROCESS_ITEM Process
);
PHAPPAPI
BOOLEAN PhUiSetIoPriorityProcess(
__in HWND hWnd,
__in PPH_PROCESS_ITEM Process,
__in ULONG IoPriority
);
PHAPPAPI
BOOLEAN PhUiSetPriorityProcess(
__in HWND hWnd,
__in PPH_PROCESS_ITEM Process,
__in ULONG PriorityClassWin32
);
PHAPPAPI
BOOLEAN PhUiSetDepStatusProcess(
__in HWND hWnd,
__in PPH_PROCESS_ITEM Process
);
PHAPPAPI
BOOLEAN PhUiSetProtectionProcess(
__in HWND hWnd,
__in PPH_PROCESS_ITEM Process
);
PHAPPAPI
BOOLEAN PhUiStartService(
__in HWND hWnd,
__in PPH_SERVICE_ITEM Service
);
PHAPPAPI
BOOLEAN PhUiContinueService(
__in HWND hWnd,
__in PPH_SERVICE_ITEM Service
);
PHAPPAPI
BOOLEAN PhUiPauseService(
__in HWND hWnd,
__in PPH_SERVICE_ITEM Service
);
PHAPPAPI
BOOLEAN PhUiStopService(
__in HWND hWnd,
__in PPH_SERVICE_ITEM Service
);
PHAPPAPI
BOOLEAN PhUiDeleteService(
__in HWND hWnd,
__in PPH_SERVICE_ITEM Service
);
PHAPPAPI
BOOLEAN PhUiCloseConnections(
__in HWND hWnd,
__in PPH_NETWORK_ITEM *Connections,
__in ULONG NumberOfConnections
);
PHAPPAPI
BOOLEAN PhUiTerminateThreads(
__in HWND hWnd,
__in PPH_THREAD_ITEM *Threads,
__in ULONG NumberOfThreads
);
PHAPPAPI
BOOLEAN PhUiForceTerminateThreads(
__in HWND hWnd,
__in HANDLE ProcessId,
__in PPH_THREAD_ITEM *Threads,
__in ULONG NumberOfThreads
);
PHAPPAPI
BOOLEAN PhUiSuspendThreads(
__in HWND hWnd,
__in PPH_THREAD_ITEM *Threads,
__in ULONG NumberOfThreads
);
PHAPPAPI
BOOLEAN PhUiResumeThreads(
__in HWND hWnd,
__in PPH_THREAD_ITEM *Threads,
__in ULONG NumberOfThreads
);
PHAPPAPI
BOOLEAN PhUiSetPriorityThread(
__in HWND hWnd,
__in PPH_THREAD_ITEM Thread,
__in ULONG ThreadPriorityWin32
);
PHAPPAPI
BOOLEAN PhUiSetIoPriorityThread(
__in HWND hWnd,
__in PPH_THREAD_ITEM Thread,
__in ULONG IoPriority
);
PHAPPAPI
BOOLEAN PhUiUnloadModule(
__in HWND hWnd,
__in HANDLE ProcessId,
__in PPH_MODULE_ITEM Module
);
PHAPPAPI
BOOLEAN PhUiFreeMemory(
__in HWND hWnd,
__in HANDLE ProcessId,
__in PPH_MEMORY_ITEM MemoryItem,
__in BOOLEAN Free
);
PHAPPAPI
BOOLEAN PhUiCloseHandles(
__in HWND hWnd,
__in HANDLE ProcessId,
__in PPH_HANDLE_ITEM *Handles,
__in ULONG NumberOfHandles,
__in BOOLEAN Warn
);
PHAPPAPI
BOOLEAN PhUiSetAttributesHandle(
__in HWND hWnd,
__in HANDLE ProcessId,
__in PPH_HANDLE_ITEM Handle,
__in ULONG Attributes
);
// itemtips
PPH_STRING PhGetProcessTooltipText(
__in PPH_PROCESS_ITEM Process
);
PPH_STRING PhGetServiceTooltipText(
__in PPH_SERVICE_ITEM Service
);
// cmdmode
NTSTATUS PhCommandModeStart();
// anawait
VOID PhUiAnalyzeWaitThread(
__in HWND hWnd,
__in HANDLE ProcessId,
__in HANDLE ThreadId,
__in PPH_SYMBOL_PROVIDER SymbolProvider
);
// mdump
BOOLEAN PhUiCreateDumpFileProcess(
__in HWND hWnd,
__in PPH_PROCESS_ITEM Process
);
// about
VOID PhShowAboutDialog(
__in HWND ParentWindowHandle
);
PPH_STRING PhGetDiagnosticsString();
// affinity
VOID PhShowProcessAffinityDialog(
__in HWND ParentWindowHandle,
__in_opt PPH_PROCESS_ITEM ProcessItem,
__in_opt PPH_THREAD_ITEM ThreadItem
);
PHAPPAPI
BOOLEAN PhShowProcessAffinityDialog2(
__in HWND ParentWindowHandle,
__in ULONG_PTR AffinityMask,
__out PULONG_PTR NewAffinityMask
);
// chcol
VOID PhShowChooseColumnsDialog(
__in HWND ParentWindowHandle,
__in HWND TreeListHandle
);
// chdlg
#define PH_CHOICE_DIALOG_SAVED_CHOICES 10
#define PH_CHOICE_DIALOG_CHOICE 0x0
#define PH_CHOICE_DIALOG_USER_CHOICE 0x1
#define PH_CHOICE_DIALOG_PASSWORD 0x2
#define PH_CHOICE_DIALOG_TYPE_MASK 0x3
BOOLEAN PhaChoiceDialog(
__in HWND ParentWindowHandle,
__in PWSTR Title,
__in PWSTR Message,
__in_opt PWSTR *Choices,
__in_opt ULONG NumberOfChoices,
__in_opt PWSTR Option,
__in ULONG Flags,
__inout PPH_STRING *SelectedChoice,
__inout_opt PBOOLEAN SelectedOption,
__in_opt PWSTR SavedChoicesSettingName
);
// chproc
PHAPPAPI
BOOLEAN PhShowChooseProcessDialog(
__in HWND ParentWindowHandle,
__in PWSTR Message,
__out PHANDLE ProcessId
);
// cpysave
PPH_FULL_STRING PhGetProcessTreeListText(
__in HWND TreeListHandle
);
#define PH_EXPORT_MODE_TABS 0
#define PH_EXPORT_MODE_SPACES 1
#define PH_EXPORT_MODE_CSV 2
PPH_LIST PhGetProcessTreeListLines(
__in HWND TreeListHandle,
__in ULONG NumberOfNodes,
__in PPH_LIST RootNodes,
__in ULONG Mode
);
PPH_FULL_STRING PhGetListViewText(
__in HWND ListViewHandle
);
// findobj
VOID PhShowFindObjectsDialog();
// gdihndl
VOID PhShowGdiHandlesDialog(
__in HWND ParentWindowHandle,
__in PPH_PROCESS_ITEM ProcessItem
);
// heapinfo
VOID PhShowProcessHeapsDialog(
__in HWND ParentWindowHandle,
__in PPH_PROCESS_ITEM ProcessItem
);
NTSTATUS PhGetProcessDefaultHeap(
__in HANDLE ProcessHandle,
__out PPVOID Heap
);
// hidnproc
VOID PhShowHiddenProcessesDialog();
// hndlprp
VOID PhShowHandleProperties(
__in HWND ParentWindowHandle,
__in HANDLE ProcessId,
__in PPH_HANDLE_ITEM HandleItem
);
// hndlstat
VOID PhShowHandleStatisticsDialog(
__in HWND ParentWindowHandle,
__in HANDLE ProcessId
);
// infodlg
VOID PhShowInformationDialog(
__in HWND ParentWindowHandle,
__in PWSTR String
);
// jobprp
VOID PhShowJobProperties(
__in HWND ParentWindowHandle,
__in PPH_OPEN_OBJECT OpenObject,
__in_opt PVOID Context,
__in_opt PWSTR Title
);
HPROPSHEETPAGE PhCreateJobPage(
__in PPH_OPEN_OBJECT OpenObject,
__in_opt PVOID Context,
__in_opt DLGPROC HookProc
);
// logwnd
VOID PhShowLogDialog();
// memedit
VOID PhShowMemoryEditorDialog(
__in HANDLE ProcessId,
__in PVOID BaseAddress,
__in SIZE_T RegionSize,
__in ULONG SelectOffset,
__in ULONG SelectLength
);
// memprot
VOID PhShowMemoryProtectDialog(
__in HWND ParentWindowHandle,
__in PPH_PROCESS_ITEM ProcessItem,
__in PPH_MEMORY_ITEM MemoryItem
);
// memrslt
VOID PhShowMemoryResultsDialog(
__in HANDLE ProcessId,
__in PPH_LIST Results
);
// memsrch
VOID PhShowMemoryStringDialog(
__in HWND ParentWindowHandle,
__in PPH_PROCESS_ITEM ProcessItem
);
// netstk
VOID PhShowNetworkStackDialog(
__in HWND ParentWindowHandle,
__in PPH_NETWORK_ITEM NetworkItem
);
// ntobjprp
HPROPSHEETPAGE PhCreateEventPage(
__in PPH_OPEN_OBJECT OpenObject,
__in_opt PVOID Context
);
HPROPSHEETPAGE PhCreateEventPairPage(
__in PPH_OPEN_OBJECT OpenObject,
__in_opt PVOID Context
);
HPROPSHEETPAGE PhCreateMutantPage(
__in PPH_OPEN_OBJECT OpenObject,
__in_opt PVOID Context
);
HPROPSHEETPAGE PhCreateSectionPage(
__in PPH_OPEN_OBJECT OpenObject,
__in_opt PVOID Context
);
HPROPSHEETPAGE PhCreateSemaphorePage(
__in PPH_OPEN_OBJECT OpenObject,
__in_opt PVOID Context
);
HPROPSHEETPAGE PhCreateTimerPage(
__in PPH_OPEN_OBJECT OpenObject,
__in_opt PVOID Context
);
// options
VOID PhShowOptionsDialog(
__in HWND ParentWindowHandle
);
// pagfiles
VOID PhShowPagefilesDialog(
__in HWND ParentWindowHandle
);
// plugman
VOID PhShowPluginsDialog(
__in HWND ParentWindowHandle
);
// procrec
VOID PhShowProcessRecordDialog(
__in HWND ParentWindowHandle,
__in PPH_PROCESS_RECORD Record
);
// runas
VOID PhShowRunAsDialog(
__in HWND ParentWindowHandle,
__in_opt HANDLE ProcessId
);
NTSTATUS PhRunAsCommandStart(
__in PWSTR ServiceCommandLine,
__in PWSTR ServiceName
);
NTSTATUS PhRunAsCommandStart2(
__in HWND hWnd,
__in PWSTR Program,
__in_opt PWSTR UserName,
__in_opt PWSTR Password,
__in_opt ULONG LogonType,
__in_opt HANDLE ProcessIdWithToken,
__in ULONG SessionId,
__in PWSTR DesktopName,
__in BOOLEAN UseLinkedToken
);
VOID PhRunAsServiceStart();
// sessprp
VOID PhShowSessionProperties(
__in HWND ParentWindowHandle,
__in ULONG SessionId
);
// srvcr
VOID PhShowCreateServiceDialog(
__in HWND ParentWindowHandle
);
// srvlist
#define WM_PH_SET_LIST_VIEW_SETTINGS (WM_APP + 701)
PHAPPAPI
HWND PhCreateServiceListControl(
__in HWND ParentWindowHandle,
__in PPH_SERVICE_ITEM *Services,
__in ULONG NumberOfServices
);
// srvprp
VOID PhShowServiceProperties(
__in HWND ParentWindowHandle,
__in PPH_SERVICE_ITEM ServiceItem
);
// ssndmsg
VOID PhShowSessionSendMessageDialog(
__in HWND ParentWindowHandle,
__in ULONG SessionId
);
// termator
VOID PhShowProcessTerminatorDialog(
__in HWND ParentWindowHandle,
__in PPH_PROCESS_ITEM ProcessItem
);
// sysinfo
VOID PhShowSystemInformationDialog();
// thrdstk
VOID PhShowThreadStackDialog(
__in HWND ParentWindowHandle,
__in HANDLE ProcessId,
__in HANDLE ThreadId,
__in PPH_SYMBOL_PROVIDER SymbolProvider
);
// tokprp
PPH_STRING PhGetGroupAttributesString(
__in ULONG Attributes
);
PWSTR PhGetPrivilegeAttributesString(
__in ULONG Attributes
);
VOID PhShowTokenProperties(
__in HWND ParentWindowHandle,
__in PPH_OPEN_OBJECT OpenObject,
__in_opt PVOID Context,
__in_opt PWSTR Title
);
HPROPSHEETPAGE PhCreateTokenPage(
__in PPH_OPEN_OBJECT OpenObject,
__in_opt PVOID Context,
__in_opt DLGPROC HookProc
);
#endif