plugins can now add to process tooltips

git-svn-id: svn://svn.code.sf.net/p/processhacker/code@3430 21ef857c-d57f-4fe0-8362-d861dc6d29cd
This commit is contained in:
wj32
2010-07-25 01:01:58 +00:00
parent 84a929e36a
commit 82506ae220
7 changed files with 467 additions and 366 deletions
@@ -548,6 +548,10 @@
RelativePath=".\include\phapp.h"
>
</File>
<File
RelativePath=".\sdk\phapppub.h"
>
</File>
<File
RelativePath=".\sdk\phdk.h"
>
+11 -1
View File
@@ -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,
+12
View File
@@ -21,6 +21,7 @@
*/
#include <phapp.h>
#include <phplug.h>
#define CINTERFACE
#define COBJMACROS
#include <taskschd.h>
@@ -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
{
+350
View File
@@ -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
+1 -345
View File
@@ -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
+6 -1
View File
@@ -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
+83 -19
View File
@@ -1,6 +1,12 @@
#include <phdk.h>
#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);
}