diff --git a/2.x/trunk/ProcessHacker/ProcessHacker.vcproj b/2.x/trunk/ProcessHacker/ProcessHacker.vcproj
index 326b3e3f2..d9aa989c8 100644
--- a/2.x/trunk/ProcessHacker/ProcessHacker.vcproj
+++ b/2.x/trunk/ProcessHacker/ProcessHacker.vcproj
@@ -47,7 +47,7 @@
AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="../phlib/include;../phlib/pcre;include"
- PreprocessorDefinitions="WIN32;DEBUG;_WINDOWS;PHLIB_EXPORT"
+ PreprocessorDefinitions="WIN32;DEBUG;_WINDOWS;PHLIB_EXPORT;PHAPP_EXPORT"
StringPooling="true"
MinimalRebuild="false"
BasicRuntimeChecks="3"
@@ -128,7 +128,7 @@
AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="../phlib/include;../phlib/pcre;include"
- PreprocessorDefinitions="WIN64;DEBUG;_WINDOWS;PHLIB_EXPORT"
+ PreprocessorDefinitions="WIN64;DEBUG;_WINDOWS;PHLIB_EXPORT;PHAPP_EXPORT"
StringPooling="true"
MinimalRebuild="false"
BasicRuntimeChecks="3"
@@ -211,7 +211,7 @@
Optimization="2"
EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories="../phlib/include;../phlib/pcre;include"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;PHLIB_EXPORT"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;PHLIB_EXPORT;PHAPP_EXPORT"
StringPooling="true"
RuntimeLibrary="0"
BufferSecurityCheck="false"
@@ -296,7 +296,7 @@
Optimization="2"
EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories="../phlib/include;../phlib/pcre;include"
- PreprocessorDefinitions="WIN64;NDEBUG;_WINDOWS;PHLIB_EXPORT"
+ PreprocessorDefinitions="WIN64;NDEBUG;_WINDOWS;PHLIB_EXPORT;PHAPP_EXPORT"
StringPooling="true"
RuntimeLibrary="0"
BufferSecurityCheck="false"
@@ -548,6 +548,14 @@
RelativePath=".\include\phapp.h"
>
+
+
+
+
diff --git a/2.x/trunk/ProcessHacker/include/phapp.h b/2.x/trunk/ProcessHacker/include/phapp.h
index 2b663f563..ec2481d61 100644
--- a/2.x/trunk/ProcessHacker/include/phapp.h
+++ b/2.x/trunk/ProcessHacker/include/phapp.h
@@ -1,6 +1,12 @@
#ifndef PHAPP_H
#define PHAPP_H
+#ifdef PHAPP_EXPORT
+#define PHAPPAPI __declspec(dllexport)
+#else
+#define PHAPPAPI
+#endif
+
#include
#include
#include
@@ -73,10 +79,12 @@ typedef struct _PH_STARTUP_PARAMETERS
INT PhMainMessageLoop();
+PHAPPAPI
VOID PhRegisterDialog(
__in HWND DialogWindowHandle
);
+PHAPPAPI
VOID PhUnregisterDialog(
__in HWND DialogWindowHandle
);
@@ -718,6 +726,7 @@ VOID PhLogServiceEntry(
__in PPH_STRING DisplayName
);
+PHAPPAPI
VOID PhLogMessageEntry(
__in UCHAR Type,
__in PPH_STRING Message
@@ -740,163 +749,195 @@ typedef enum _PH_ACTION_ELEVATION_LEVEL
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,
@@ -904,36 +945,42 @@ BOOLEAN PhUiForceTerminateThreads(
__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,
@@ -941,6 +988,7 @@ BOOLEAN PhUiFreeMemory(
__in BOOLEAN Free
);
+PHAPPAPI
BOOLEAN PhUiCloseHandles(
__in HWND hWnd,
__in HANDLE ProcessId,
@@ -949,6 +997,7 @@ BOOLEAN PhUiCloseHandles(
__in BOOLEAN Warn
);
+PHAPPAPI
BOOLEAN PhUiSetAttributesHandle(
__in HWND hWnd,
__in HANDLE ProcessId,
diff --git a/2.x/trunk/ProcessHacker/include/phplug.h b/2.x/trunk/ProcessHacker/include/phplug.h
new file mode 100644
index 000000000..0592b6b14
--- /dev/null
+++ b/2.x/trunk/ProcessHacker/include/phplug.h
@@ -0,0 +1,6 @@
+#ifndef _PH_PHPLUG_H
+#define _PH_PHPLUG_H
+
+
+
+#endif
diff --git a/2.x/trunk/ProcessHacker/include/providers.h b/2.x/trunk/ProcessHacker/include/providers.h
index 3484e0da9..edb92b77b 100644
--- a/2.x/trunk/ProcessHacker/include/providers.h
+++ b/2.x/trunk/ProcessHacker/include/providers.h
@@ -8,10 +8,10 @@
#ifndef PROCPRV_PRIVATE
extern PPH_OBJECT_TYPE PhProcessItemType;
-extern PH_CALLBACK PhProcessAddedEvent;
-extern PH_CALLBACK PhProcessModifiedEvent;
-extern PH_CALLBACK PhProcessRemovedEvent;
-extern PH_CALLBACK PhProcessesUpdatedEvent;
+PHAPPAPI extern PH_CALLBACK PhProcessAddedEvent;
+PHAPPAPI extern PH_CALLBACK PhProcessModifiedEvent;
+PHAPPAPI extern PH_CALLBACK PhProcessRemovedEvent;
+PHAPPAPI extern PH_CALLBACK PhProcessesUpdatedEvent;
extern PPH_LIST PhProcessRecordList;
extern PH_QUEUED_LOCK PhProcessRecordListLock;
@@ -218,10 +218,12 @@ typedef struct _PH_PROCESS_RECORD
BOOLEAN PhProcessProviderInitialization();
+PHAPPAPI
PPH_STRING PhGetClientIdName(
__in PCLIENT_ID ClientId
);
+PHAPPAPI
PWSTR PhGetProcessPriorityClassWin32String(
__in ULONG PriorityClassWin32
);
@@ -230,21 +232,25 @@ PPH_PROCESS_ITEM PhCreateProcessItem(
__in HANDLE ProcessId
);
+PHAPPAPI
PPH_PROCESS_ITEM PhReferenceProcessItem(
__in HANDLE ProcessId
);
+PHAPPAPI
VOID PhEnumProcessItems(
__out_opt PPH_PROCESS_ITEM **ProcessItems,
__out PULONG NumberOfProcessItems
);
+PHAPPAPI
BOOLEAN PhGetStatisticsTime(
__in_opt PPH_PROCESS_ITEM ProcessItem,
__in ULONG Index,
__out PLARGE_INTEGER Time
);
+PHAPPAPI
PPH_STRING PhGetStatisticsTimeString(
__in_opt PPH_PROCESS_ITEM ProcessItem,
__in ULONG Index
@@ -254,18 +260,22 @@ VOID PhProcessProviderUpdate(
__in PVOID Object
);
+PHAPPAPI
VOID PhReferenceProcessRecord(
__in PPH_PROCESS_RECORD ProcessRecord
);
+PHAPPAPI
BOOLEAN PhReferenceProcessRecordSafe(
__in PPH_PROCESS_RECORD ProcessRecord
);
+PHAPPAPI
VOID PhDereferenceProcessRecord(
__in PPH_PROCESS_RECORD ProcessRecord
);
+PHAPPAPI
PPH_PROCESS_RECORD PhFindProcessRecord(
__in_opt HANDLE ProcessId,
__in PLARGE_INTEGER Time
@@ -278,10 +288,10 @@ VOID PhPurgeProcessRecords();
#ifndef SRVPRV_PRIVATE
extern PPH_OBJECT_TYPE PhServiceItemType;
-extern PH_CALLBACK PhServiceAddedEvent;
-extern PH_CALLBACK PhServiceModifiedEvent;
-extern PH_CALLBACK PhServiceRemovedEvent;
-extern PH_CALLBACK PhServicesUpdatedEvent;
+PHAPPAPI extern PH_CALLBACK PhServiceAddedEvent;
+PHAPPAPI extern PH_CALLBACK PhServiceModifiedEvent;
+PHAPPAPI extern PH_CALLBACK PhServiceRemovedEvent;
+PHAPPAPI extern PH_CALLBACK PhServicesUpdatedEvent;
#endif
typedef struct _PH_SERVICE_ITEM
@@ -326,6 +336,7 @@ PPH_SERVICE_ITEM PhCreateServiceItem(
__in_opt LPENUM_SERVICE_STATUS_PROCESS Information
);
+PHAPPAPI
PPH_SERVICE_ITEM PhReferenceServiceItem(
__in PWSTR Name
);
@@ -334,6 +345,7 @@ VOID PhMarkNeedsConfigUpdateServiceItem(
__in PPH_SERVICE_ITEM ServiceItem
);
+PHAPPAPI
PH_SERVICE_CHANGE PhGetServiceChange(
__in PPH_SERVICE_MODIFIED_DATA Data
);
@@ -389,6 +401,7 @@ BOOLEAN PhNetworkProviderInitialization();
PPH_NETWORK_ITEM PhCreateNetworkItem();
+PHAPPAPI
PPH_NETWORK_ITEM PhReferenceNetworkItem(
__in ULONG ProtocolType,
__in PPH_IP_ENDPOINT LocalEndpoint,
@@ -404,10 +417,12 @@ VOID PhNetworkProviderUpdate(
__in PVOID Object
);
+PHAPPAPI
PWSTR PhGetProtocolTypeName(
__in ULONG ProtocolType
);
+PHAPPAPI
PWSTR PhGetTcpStateName(
__in ULONG State
);
diff --git a/2.x/trunk/ProcessHacker/main.c b/2.x/trunk/ProcessHacker/main.c
index 1ab5b804b..834c855cf 100644
--- a/2.x/trunk/ProcessHacker/main.c
+++ b/2.x/trunk/ProcessHacker/main.c
@@ -52,12 +52,16 @@ VOID PhDebugPrintLine(
)
{
va_list argptr;
- SYSTEMTIME time;
+ LARGE_INTEGER time;
+ TIME_FIELDS timeFields;
va_start(argptr, Format);
- GetLocalTime(&time);
- fwprintf(stderr, L"%02u:%02u:%02u.%03u: ", time.wHour, time.wMinute, time.wSecond, time.wMilliseconds);
+ PhQuerySystemTime(&time);
+ PhSystemTimeToLocalTime(&time, &time);
+ RtlTimeToTimeFields(&time, &timeFields);
+
+ fwprintf(stderr, L"%02u:%02u:%02u.%03u: ", timeFields.Hour, timeFields.Minute, timeFields.Second, timeFields.Milliseconds);
vfwprintf(stderr, Format, argptr);
fputwc('\n', stderr);
}
diff --git a/2.x/trunk/ProcessHacker/mainwnd.c b/2.x/trunk/ProcessHacker/mainwnd.c
index 20a5c0384..233157fa4 100644
--- a/2.x/trunk/ProcessHacker/mainwnd.c
+++ b/2.x/trunk/ProcessHacker/mainwnd.c
@@ -183,7 +183,7 @@ VOID PhMainWndOnNetworkItemRemoved(
VOID PhMainWndOnNetworkItemsUpdated();
-HWND PhMainWndHandle;
+PHAPPAPI HWND PhMainWndHandle;
BOOLEAN PhMainWndExiting = FALSE;
HMENU PhMainWndMenuHandle;
diff --git a/2.x/trunk/ProcessHacker/procprv.c b/2.x/trunk/ProcessHacker/procprv.c
index 6950cd4a9..83bbd5faa 100644
--- a/2.x/trunk/ProcessHacker/procprv.c
+++ b/2.x/trunk/ProcessHacker/procprv.c
@@ -118,10 +118,10 @@ PH_QUEUED_LOCK PhProcessHashtableLock = PH_QUEUED_LOCK_INIT;
SLIST_HEADER PhProcessQueryDataListHead;
-PH_CALLBACK PhProcessAddedEvent;
-PH_CALLBACK PhProcessModifiedEvent;
-PH_CALLBACK PhProcessRemovedEvent;
-PH_CALLBACK PhProcessesUpdatedEvent;
+PHAPPAPI PH_CALLBACK PhProcessAddedEvent;
+PHAPPAPI PH_CALLBACK PhProcessModifiedEvent;
+PHAPPAPI PH_CALLBACK PhProcessRemovedEvent;
+PHAPPAPI PH_CALLBACK PhProcessesUpdatedEvent;
PPH_LIST PhProcessRecordList;
PH_QUEUED_LOCK PhProcessRecordListLock = PH_QUEUED_LOCK_INIT;
diff --git a/2.x/trunk/ProcessHacker/sdk/phdk.h b/2.x/trunk/ProcessHacker/sdk/phdk.h
new file mode 100644
index 000000000..883fa9e26
--- /dev/null
+++ b/2.x/trunk/ProcessHacker/sdk/phdk.h
@@ -0,0 +1,297 @@
+#ifndef _PH_PHDK_H
+#define _PH_PHDK_H
+
+#pragma once
+
+#define PHLIB_IMPORT
+#define PHAPPAPI __declspec(dllimport)
+
+#include "ph.h"
+#include "phplug.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
+ );
+
+#endif
diff --git a/2.x/trunk/ProcessHacker/srvprv.c b/2.x/trunk/ProcessHacker/srvprv.c
index 121564a15..38b2db536 100644
--- a/2.x/trunk/ProcessHacker/srvprv.c
+++ b/2.x/trunk/ProcessHacker/srvprv.c
@@ -52,10 +52,10 @@ PPH_OBJECT_TYPE PhServiceItemType;
PPH_HASHTABLE PhServiceHashtable;
PH_QUEUED_LOCK PhServiceHashtableLock;
-PH_CALLBACK PhServiceAddedEvent;
-PH_CALLBACK PhServiceModifiedEvent;
-PH_CALLBACK PhServiceRemovedEvent;
-PH_CALLBACK PhServicesUpdatedEvent;
+PHAPPAPI PH_CALLBACK PhServiceAddedEvent;
+PHAPPAPI PH_CALLBACK PhServiceModifiedEvent;
+PHAPPAPI PH_CALLBACK PhServiceRemovedEvent;
+PHAPPAPI PH_CALLBACK PhServicesUpdatedEvent;
BOOLEAN PhServiceProviderInitialization()
{
diff --git a/2.x/trunk/build/sdk/makesdk.cmd b/2.x/trunk/build/sdk/makesdk.cmd
new file mode 100644
index 000000000..2d48ae3c9
--- /dev/null
+++ b/2.x/trunk/build/sdk/makesdk.cmd
@@ -0,0 +1,63 @@
+rmdir /S /Q ..\..\sdk
+mkdir ..\..\sdk\include
+mkdir ..\..\sdk\lib\amd64
+mkdir ..\..\sdk\lib\i386
+
+rem Header files
+
+for %%a in (
+ fastlock.h
+ graph.h
+ hexedit.h
+ kph.h
+ ntbasic.h
+ ntcm.h
+ ntdbg.h
+ ntexapi.h
+ ntgdi.h
+ ntimport.h
+ ntioapi.h
+ ntkeapi.h
+ ntldr.h
+ ntlpcapi.h
+ ntlsa.h
+ ntmisc.h
+ ntmmapi.h
+ ntobapi.h
+ ntpebteb.h
+ ntpnpapi.h
+ ntpoapi.h
+ ntpsapi.h
+ ntregapi.h
+ ntrtl.h
+ ntsam.h
+ ntseapi.h
+ nttmapi.h
+ nttp.h
+ ntwin.h
+ ntxcapi.h
+ ph.h
+ phbase.h
+ phgui.h
+ phnt.h
+ phnt.h
+ phsup.h
+ queuedlock.h
+ ref.h
+ rev.h
+ symprv.h
+ winsta.h
+ ) do copy ..\..\phlib\include\%%a ..\..\sdk\include\
+
+copy ..\..\ProcessHacker\include\providers.h ..\..\sdk\include\
+copy ..\..\ProcessHacker\sdk\phdk.h ..\..\sdk\include\
+
+rem Libraries
+
+copy ..\..\lib\lib32\ntdll.lib ..\..\sdk\lib\i386\
+copy ..\..\lib\lib64\ntdll.lib ..\..\sdk\lib\amd64\
+copy ..\..\lib\lib32\samlib.lib ..\..\sdk\lib\i386\
+copy ..\..\lib\lib64\samlib.lib ..\..\sdk\lib\amd64\
+
+copy ..\..\bin\Release32\ProcessHacker.lib ..\..\sdk\lib\i386\
+copy ..\..\bin\Release64\ProcessHacker.lib ..\..\sdk\lib\amd64\