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); }