diff --git a/2.x/trunk/ProcessHacker/ProcessHacker.vcproj b/2.x/trunk/ProcessHacker/ProcessHacker.vcproj
index 5949ec6f2..0cf08bfdf 100644
--- a/2.x/trunk/ProcessHacker/ProcessHacker.vcproj
+++ b/2.x/trunk/ProcessHacker/ProcessHacker.vcproj
@@ -548,6 +548,10 @@
RelativePath=".\include\phapp.h"
>
+
+
diff --git a/2.x/trunk/ProcessHacker/include/phplug.h b/2.x/trunk/ProcessHacker/include/phplug.h
index 3f463eca4..3ee05fe05 100644
--- a/2.x/trunk/ProcessHacker/include/phplug.h
+++ b/2.x/trunk/ProcessHacker/include/phplug.h
@@ -6,7 +6,8 @@
typedef enum _PH_GENERAL_CALLBACK
{
GeneralCallbackMainWindowShowing = 0, // INT ShowCommand
- GeneralCallbackGetProcessHighlightingColor = 1, // PPH_GET_HIGHLIGHTING_COLOR Data
+ GeneralCallbackGetProcessHighlightingColor = 1, // PPH_PLUGIN_GET_HIGHLIGHTING_COLOR Data
+ GeneralCallbackGetProcessTooltipText = 2, // PPH_PLUGIN_GET_TOOLTIP_TEXT Data
GeneralCallbackMaximum
} PH_GENERAL_CALLBACK, *PPH_GENERAL_CALLBACK;
@@ -22,6 +23,15 @@ typedef struct _PH_PLUGIN_GET_HIGHLIGHTING_COLOR
BOOLEAN Cache;
} PH_PLUGIN_GET_HIGHLIGHTING_COLOR, *PPH_PLUGIN_GET_HIGHLIGHTING_COLOR;
+typedef struct _PH_PLUGIN_GET_TOOLTIP_TEXT
+{
+ // Parameter is:
+ // PPH_PROCESS_ITEM for GeneralCallbackGetProcessTooltipText
+
+ PVOID Parameter;
+ PPH_STRING_BUILDER StringBuilder;
+} PH_PLUGIN_GET_TOOLTIP_TEXT, *PPH_PLUGIN_GET_TOOLTIP_TEXT;
+
typedef enum _PH_PLUGIN_CALLBACK
{
PluginCallbackLoad = 0,
diff --git a/2.x/trunk/ProcessHacker/itemtips.c b/2.x/trunk/ProcessHacker/itemtips.c
index dd9c0d7d2..f0b07111d 100644
--- a/2.x/trunk/ProcessHacker/itemtips.c
+++ b/2.x/trunk/ProcessHacker/itemtips.c
@@ -21,6 +21,7 @@
*/
#include
+#include
#define CINTERFACE
#define COBJMACROS
#include
@@ -253,6 +254,17 @@ PPH_STRING PhGetProcessTooltipText(
PhDeleteStringBuilder(&tasks);
}
+ // Plugin
+ if (PhPluginsEnabled)
+ {
+ PH_PLUGIN_GET_TOOLTIP_TEXT getTooltipText;
+
+ getTooltipText.Parameter = Process;
+ getTooltipText.StringBuilder = &stringBuilder;
+
+ PhInvokeCallback(PhGetGeneralCallback(GeneralCallbackGetProcessTooltipText), &getTooltipText);
+ }
+
// Notes
{
diff --git a/2.x/trunk/ProcessHacker/sdk/phapppub.h b/2.x/trunk/ProcessHacker/sdk/phapppub.h
new file mode 100644
index 000000000..261f71ee8
--- /dev/null
+++ b/2.x/trunk/ProcessHacker/sdk/phapppub.h
@@ -0,0 +1,350 @@
+#ifndef _PH_PHAPPPUB_H
+#define _PH_PHAPPPUB_H
+
+// Process Hacker application functions exposed to plugins
+
+PHAPPAPI
+VOID PhRegisterDialog(
+ __in HWND DialogWindowHandle
+ );
+
+PHAPPAPI
+VOID PhUnregisterDialog(
+ __in HWND DialogWindowHandle
+ );
+
+PHAPPAPI extern HWND PhMainWndHandle;
+
+#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_ToggleVisible(hWnd) \
+ SendMessage(hWnd, WM_PH_TOGGLE_VISIBLE, 0, 0)
+
+PHAPPAPI
+VOID PhLogMessageEntry(
+ __in UCHAR Type,
+ __in PPH_STRING Message
+ );
+
+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
+ );
+
+// settings
+
+typedef enum _PH_SETTING_TYPE
+{
+ StringSettingType,
+ IntegerSettingType,
+ IntegerPairSettingType
+} PH_SETTING_TYPE, PPH_SETTING_TYPE;
+
+PHAPPAPI
+__mayRaise ULONG PhGetIntegerSetting(
+ __in PWSTR Name
+ );
+
+PHAPPAPI
+__mayRaise PH_INTEGER_PAIR PhGetIntegerPairSetting(
+ __in PWSTR Name
+ );
+
+PHAPPAPI
+__mayRaise PPH_STRING PhGetStringSetting(
+ __in PWSTR Name
+ );
+
+PHAPPAPI
+__mayRaise VOID PhSetIntegerSetting(
+ __in PWSTR Name,
+ __in ULONG Value
+ );
+
+PHAPPAPI
+__mayRaise VOID PhSetIntegerPairSetting(
+ __in PWSTR Name,
+ __in PH_INTEGER_PAIR Value
+ );
+
+PHAPPAPI
+__mayRaise VOID PhSetStringSetting(
+ __in PWSTR Name,
+ __in PWSTR Value
+ );
+
+PHAPPAPI
+__mayRaise VOID PhSetStringSetting2(
+ __in PWSTR Name,
+ __in PPH_STRINGREF Value
+ );
+
+// High-level settings creation
+
+typedef struct _PH_CREATE_SETTING
+{
+ PH_SETTING_TYPE Type;
+ PWSTR Name;
+ PWSTR DefaultValue;
+} PH_SETTING_CREATE, *PPH_SETTING_CREATE;
+
+PHAPPAPI
+VOID PhAddSettings(
+ __in PPH_SETTING_CREATE Settings,
+ __in ULONG NumberOfSettings
+ );
+
+#endif
diff --git a/2.x/trunk/ProcessHacker/sdk/phdk.h b/2.x/trunk/ProcessHacker/sdk/phdk.h
index 26e138b93..88985a3dc 100644
--- a/2.x/trunk/ProcessHacker/sdk/phdk.h
+++ b/2.x/trunk/ProcessHacker/sdk/phdk.h
@@ -12,350 +12,6 @@
#include "circbuf.h"
#include "providers.h"
-// phapp
-
-PHAPPAPI
-VOID PhRegisterDialog(
- __in HWND DialogWindowHandle
- );
-
-PHAPPAPI
-VOID PhUnregisterDialog(
- __in HWND DialogWindowHandle
- );
-
-PHAPPAPI extern HWND PhMainWndHandle;
-
-#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_ToggleVisible(hWnd) \
- SendMessage(hWnd, WM_PH_TOGGLE_VISIBLE, 0, 0)
-
-PHAPPAPI
-VOID PhLogMessageEntry(
- __in UCHAR Type,
- __in PPH_STRING Message
- );
-
-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
- );
-
-// settings
-
-typedef enum _PH_SETTING_TYPE
-{
- StringSettingType,
- IntegerSettingType,
- IntegerPairSettingType
-} PH_SETTING_TYPE, PPH_SETTING_TYPE;
-
-PHAPPAPI
-__mayRaise ULONG PhGetIntegerSetting(
- __in PWSTR Name
- );
-
-PHAPPAPI
-__mayRaise PH_INTEGER_PAIR PhGetIntegerPairSetting(
- __in PWSTR Name
- );
-
-PHAPPAPI
-__mayRaise PPH_STRING PhGetStringSetting(
- __in PWSTR Name
- );
-
-PHAPPAPI
-__mayRaise VOID PhSetIntegerSetting(
- __in PWSTR Name,
- __in ULONG Value
- );
-
-PHAPPAPI
-__mayRaise VOID PhSetIntegerPairSetting(
- __in PWSTR Name,
- __in PH_INTEGER_PAIR Value
- );
-
-PHAPPAPI
-__mayRaise VOID PhSetStringSetting(
- __in PWSTR Name,
- __in PWSTR Value
- );
-
-PHAPPAPI
-__mayRaise VOID PhSetStringSetting2(
- __in PWSTR Name,
- __in PPH_STRINGREF Value
- );
-
-// High-level settings creation
-
-typedef struct _PH_CREATE_SETTING
-{
- PH_SETTING_TYPE Type;
- PWSTR Name;
- PWSTR DefaultValue;
-} PH_SETTING_CREATE, *PPH_SETTING_CREATE;
-
-PHAPPAPI
-VOID PhAddSettings(
- __in PPH_SETTING_CREATE Settings,
- __in ULONG NumberOfSettings
- );
+#include "phapppub.h"
#endif
diff --git a/2.x/trunk/build/sdk/makesdk.cmd b/2.x/trunk/build/sdk/makesdk.cmd
index b5ada29ee..8cdf209de 100644
--- a/2.x/trunk/build/sdk/makesdk.cmd
+++ b/2.x/trunk/build/sdk/makesdk.cmd
@@ -1,3 +1,5 @@
+@echo off
+
rmdir /S /Q ..\..\sdk
mkdir ..\..\sdk\include
mkdir ..\..\sdk\lib\amd64
@@ -59,7 +61,10 @@ for %%a in (
providers.h
) do copy ..\..\ProcessHacker\include\%%a ..\..\sdk\include\
-copy ..\..\ProcessHacker\sdk\phdk.h ..\..\sdk\include\
+for %%a in (
+ phapppub.h
+ phdk.h
+ ) do copy ..\..\ProcessHacker\sdk\%%a ..\..\sdk\include\
rem Libraries
diff --git a/2.x/trunk/plugins/SbieSupport/main.c b/2.x/trunk/plugins/SbieSupport/main.c
index c6e9455d4..af04c4b8e 100644
--- a/2.x/trunk/plugins/SbieSupport/main.c
+++ b/2.x/trunk/plugins/SbieSupport/main.c
@@ -1,6 +1,12 @@
#include
#include "sbiedll.h"
+typedef struct _BOXED_PROCESS
+{
+ HANDLE ProcessId;
+ WCHAR BoxName[34];
+} BOXED_PROCESS, *PBOXED_PROCESS;
+
VOID NTAPI LoadCallback(
__in PVOID Parameter,
__in PVOID Context
@@ -16,6 +22,11 @@ VOID NTAPI GetProcessHighlightingColorCallback(
__in PVOID Context
);
+VOID NTAPI GetProcessTooltipTextCallback(
+ __in PVOID Parameter,
+ __in PVOID Context
+ );
+
VOID NTAPI RefreshBoxedPids(
__in PVOID Context,
__in BOOLEAN TimerOrWaitFired
@@ -25,13 +36,13 @@ PPH_PLUGIN PluginInstance;
PH_CALLBACK_REGISTRATION PluginLoadCallbackRegistration;
PH_CALLBACK_REGISTRATION PluginUnloadCallbackRegistration;
PH_CALLBACK_REGISTRATION GetProcessHighlightingColorCallbackRegistration;
+PH_CALLBACK_REGISTRATION GetProcessTooltipTextCallbackRegistration;
P_SbieApi_EnumBoxes SbieApi_EnumBoxes;
P_SbieApi_EnumProcessEx SbieApi_EnumProcessEx;
-PH_QUEUED_LOCK BoxedPidsLock = PH_QUEUED_LOCK_INIT;
-ULONG BoxedPids[512];
-ULONG NumberOfBoxedPids = 0;
+PPH_HASHTABLE BoxedProcessesHashtable;
+PH_QUEUED_LOCK BoxedProcessesLock = PH_QUEUED_LOCK_INIT;
LOGICAL DllMain(
__in HINSTANCE Instance,
@@ -64,6 +75,12 @@ LOGICAL DllMain(
NULL,
&GetProcessHighlightingColorCallbackRegistration
);
+ PhRegisterCallback(
+ PhGetGeneralCallback(GeneralCallbackGetProcessTooltipText),
+ GetProcessTooltipTextCallback,
+ NULL,
+ &GetProcessTooltipTextCallbackRegistration
+ );
}
break;
}
@@ -71,6 +88,21 @@ LOGICAL DllMain(
return TRUE;
}
+BOOLEAN NTAPI BoxedProcessesCompareFunction(
+ __in PVOID Entry1,
+ __in PVOID Entry2
+ )
+{
+ return ((PBOXED_PROCESS)Entry1)->ProcessId == ((PBOXED_PROCESS)Entry2)->ProcessId;
+}
+
+ULONG NTAPI BoxedProcessesHashFunction(
+ __in PVOID Entry
+ )
+{
+ return (ULONG)((PBOXED_PROCESS)Entry)->ProcessId / 4;
+}
+
VOID NTAPI LoadCallback(
__in PVOID Parameter,
__in PVOID Context
@@ -80,6 +112,13 @@ VOID NTAPI LoadCallback(
HANDLE timerQueueHandle;
HANDLE timerHandle;
+ BoxedProcessesHashtable = PhCreateHashtable(
+ sizeof(BOXED_PROCESS),
+ BoxedProcessesCompareFunction,
+ BoxedProcessesHashFunction,
+ 32
+ );
+
module = LoadLibrary(L"C:\\Program Files\\Sandboxie\\SbieDll.dll");
SbieApi_EnumBoxes = (PVOID)GetProcAddress(module, "_SbieApi_EnumBoxes@8");
SbieApi_EnumProcessEx = (PVOID)GetProcAddress(module, "_SbieApi_EnumProcessEx@16");
@@ -103,22 +142,42 @@ VOID NTAPI GetProcessHighlightingColorCallback(
)
{
PPH_PLUGIN_GET_HIGHLIGHTING_COLOR getHighlightingColor = Parameter;
- ULONG i;
+ BOXED_PROCESS lookupBoxedProcess;
+ PBOXED_PROCESS boxedProcess;
- PhAcquireQueuedLockShared(&BoxedPidsLock);
+ PhAcquireQueuedLockShared(&BoxedProcessesLock);
- for (i = 0; i < NumberOfBoxedPids; i++)
+ lookupBoxedProcess.ProcessId = ((PPH_PROCESS_ITEM)getHighlightingColor->Parameter)->ProcessId;
+
+ if (boxedProcess = PhGetHashtableEntry(BoxedProcessesHashtable, &lookupBoxedProcess))
{
- if (BoxedPids[i] == (ULONG)((PPH_PROCESS_ITEM)getHighlightingColor->Parameter)->ProcessId)
- {
- getHighlightingColor->BackColor = RGB(0x33, 0x33, 0x00);
- getHighlightingColor->Cache = TRUE;
- getHighlightingColor->Handled = TRUE;
- break;
- }
+ getHighlightingColor->BackColor = RGB(0x33, 0x33, 0x00);
+ getHighlightingColor->Cache = TRUE;
+ getHighlightingColor->Handled = TRUE;
}
- PhReleaseQueuedLockShared(&BoxedPidsLock);
+ PhReleaseQueuedLockShared(&BoxedProcessesLock);
+}
+
+VOID NTAPI GetProcessTooltipTextCallback(
+ __in PVOID Parameter,
+ __in PVOID Context
+ )
+{
+ PPH_PLUGIN_GET_TOOLTIP_TEXT getTooltipText = Parameter;
+ BOXED_PROCESS lookupBoxedProcess;
+ PBOXED_PROCESS boxedProcess;
+
+ PhAcquireQueuedLockShared(&BoxedProcessesLock);
+
+ lookupBoxedProcess.ProcessId = ((PPH_PROCESS_ITEM)getTooltipText->Parameter)->ProcessId;
+
+ if (boxedProcess = PhGetHashtableEntry(BoxedProcessesHashtable, &lookupBoxedProcess))
+ {
+ PhStringBuilderAppendFormat(getTooltipText->StringBuilder, L"Sandboxie:\n Box name: %s\n", boxedProcess->BoxName);
+ }
+
+ PhReleaseQueuedLockShared(&BoxedProcessesLock);
}
VOID NTAPI RefreshBoxedPids(
@@ -133,9 +192,9 @@ VOID NTAPI RefreshBoxedPids(
if (!SbieApi_EnumBoxes || !SbieApi_EnumProcessEx)
return;
- PhAcquireQueuedLockExclusive(&BoxedPidsLock);
+ PhAcquireQueuedLockExclusive(&BoxedProcessesLock);
- NumberOfBoxedPids = 0;
+ PhClearHashtable(BoxedProcessesHashtable);
index = -1;
@@ -149,9 +208,14 @@ VOID NTAPI RefreshBoxedPids(
count = pids[0];
pid = &pids[1];
- while (count != 0 && NumberOfBoxedPids < 512)
+ while (count != 0)
{
- BoxedPids[NumberOfBoxedPids++] = *pid;
+ BOXED_PROCESS boxedProcess;
+
+ boxedProcess.ProcessId = ULongToHandle(*pid);
+ memcpy(boxedProcess.BoxName, boxName, sizeof(boxName));
+
+ PhAddHashtableEntry(BoxedProcessesHashtable, &boxedProcess);
count--;
pid++;
@@ -159,5 +223,5 @@ VOID NTAPI RefreshBoxedPids(
}
}
- PhReleaseQueuedLockExclusive(&BoxedPidsLock);
+ PhReleaseQueuedLockExclusive(&BoxedProcessesLock);
}