Skip to content

Commit cfc5c6d

Browse files
committed
HardwareDevices: Initial nvidia support
1 parent 1afb09d commit cfc5c6d

File tree

12 files changed

+12543
-8
lines changed

12 files changed

+12543
-8
lines changed

plugins/HardwareDevices/HardwareDevices.rc

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,45 @@ FONT 8, "MS Shell Dlg", 400, 0, 0x1
202202
BEGIN
203203
END
204204

205+
IDD_GPU_DIALOG DIALOGEX 0, 0, 315, 191
206+
STYLE DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
207+
EXSTYLE WS_EX_APPWINDOW
208+
CAPTION "Dialog"
209+
FONT 8, "MS Shell Dlg", 400, 0, 0x1
210+
BEGIN
211+
LTEXT "GPU",IDC_TITLE,0,0,72,21
212+
RTEXT "GPU Name",IDC_GPUNAME,83,4,232,16,SS_WORDELLIPSIS
213+
LTEXT "Panel layout",IDC_LAYOUT,0,145,315,46,NOT WS_VISIBLE
214+
LTEXT "Graph layout",IDC_GRAPH_LAYOUT,0,22,315,120,NOT WS_VISIBLE
215+
LTEXT "GPU:",IDC_GPU_L,73,0,17,8
216+
LTEXT "Memory:",IDC_MEMORY_L,73,5,29,8
217+
LTEXT "Memory Controller:",IDC_SHARED_L,74,11,62,8
218+
LTEXT "Bus Interface:",IDC_BUS_L,74,18,47,8
219+
END
220+
221+
IDD_GPU_PANEL DIALOGEX 0, 0, 372, 47
222+
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_SYSMENU
223+
FONT 8, "MS Shell Dlg", 400, 0, 0x1
224+
BEGIN
225+
GROUPBOX "Clocks",IDC_STATIC,0,0,118,43
226+
LTEXT "Core",IDC_STATIC,8,10,16,8
227+
LTEXT "Memory",IDC_STATIC,8,21,26,8
228+
RTEXT "Static",IDC_CLOCK_CORE,55,10,54,8,SS_ENDELLIPSIS
229+
RTEXT "Static",IDC_CLOCK_MEMORY,55,21,54,8,SS_ENDELLIPSIS
230+
GROUPBOX "Fan",IDC_STATIC,122,0,124,22
231+
LTEXT "Speed",IDC_STATIC,130,10,21,8
232+
RTEXT "Static",IDC_FAN_PERCENT,158,10,78,8,SS_ENDELLIPSIS
233+
LTEXT "Shader",IDC_STATIC,8,32,24,8
234+
RTEXT "Static",IDC_CLOCK_SHADER,55,32,54,8,SS_ENDELLIPSIS
235+
GROUPBOX "Temperature",IDC_STATIC,122,22,124,21
236+
LTEXT "Core",IDC_STATIC,130,32,16,8
237+
RTEXT "Static",IDC_TEMP_VALUE,158,32,78,8,SS_ENDELLIPSIS
238+
GROUPBOX "Voltage",IDC_STATIC,248,0,124,22
239+
LTEXT "Core",IDC_STATIC,256,10,16,8
240+
RTEXT "Static",IDC_VOLTAGE,284,10,78,8,SS_ENDELLIPSIS
241+
PUSHBUTTON "Details",IDC_DETAILS,249,27,50,14,NOT WS_VISIBLE
242+
END
243+
205244

206245
/////////////////////////////////////////////////////////////////////////////
207246
//
@@ -280,6 +319,14 @@ BEGIN
280319
TOPMARGIN, 7
281320
BOTTOMMARGIN, 255
282321
END
322+
323+
IDD_GPU_DIALOG, DIALOG
324+
BEGIN
325+
END
326+
327+
IDD_GPU_PANEL, DIALOG
328+
BEGIN
329+
END
283330
END
284331
#endif // APSTUDIO_INVOKED
285332

@@ -339,6 +386,16 @@ BEGIN
339386
0
340387
END
341388

389+
IDD_GPU_DIALOG AFX_DIALOG_LAYOUT
390+
BEGIN
391+
0
392+
END
393+
394+
IDD_GPU_PANEL AFX_DIALOG_LAYOUT
395+
BEGIN
396+
0
397+
END
398+
342399
#endif // English (Australia) resources
343400
/////////////////////////////////////////////////////////////////////////////
344401

plugins/HardwareDevices/HardwareDevices.vcxproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@
7979
<ClCompile Include="adapter.c" />
8080
<ClCompile Include="diskdetails.c" />
8181
<ClCompile Include="disknotify.c" />
82+
<ClCompile Include="gpudetails.c" />
83+
<ClCompile Include="gpugraph.c" />
8284
<ClCompile Include="netdetails.c" />
8385
<ClCompile Include="diskgraph.c" />
8486
<ClCompile Include="diskoptions.c" />
@@ -87,10 +89,14 @@
8789
<ClCompile Include="main.c" />
8890
<ClCompile Include="ndis.c" />
8991
<ClCompile Include="netoptions.c" />
92+
<ClCompile Include="nvidia.c" />
9093
<ClCompile Include="storage.c" />
9194
</ItemGroup>
9295
<ItemGroup>
9396
<ClInclude Include="devices.h" />
97+
<ClInclude Include="nvapi\nvapi.h" />
98+
<ClInclude Include="nvapi\nvapi_lite_common.h" />
99+
<ClInclude Include="nvidia.h" />
94100
<ClInclude Include="resource.h" />
95101
</ItemGroup>
96102
<ItemGroup>

plugins/HardwareDevices/HardwareDevices.vcxproj.filters

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@
1616
<Filter Include="Source Files\Network">
1717
<UniqueIdentifier>{c7c48d78-64cd-4559-87c1-74e2141dcd2e}</UniqueIdentifier>
1818
</Filter>
19+
<Filter Include="Source Files\Graphics">
20+
<UniqueIdentifier>{17660e06-b187-4eca-81d7-f6d3548f3c2f}</UniqueIdentifier>
21+
</Filter>
22+
<Filter Include="Header Files\Graphics">
23+
<UniqueIdentifier>{987f6036-c8df-4352-abc3-060d5a1bc7e4}</UniqueIdentifier>
24+
</Filter>
1925
</ItemGroup>
2026
<ItemGroup>
2127
<ClInclude Include="resource.h">
@@ -24,6 +30,15 @@
2430
<ClInclude Include="devices.h">
2531
<Filter>Header Files</Filter>
2632
</ClInclude>
33+
<ClInclude Include="nvapi\nvapi.h">
34+
<Filter>Header Files\Graphics</Filter>
35+
</ClInclude>
36+
<ClInclude Include="nvapi\nvapi_lite_common.h">
37+
<Filter>Header Files\Graphics</Filter>
38+
</ClInclude>
39+
<ClInclude Include="nvidia.h">
40+
<Filter>Header Files\Graphics</Filter>
41+
</ClInclude>
2742
</ItemGroup>
2843
<ItemGroup>
2944
<ClCompile Include="main.c">
@@ -62,6 +77,15 @@
6277
<ClCompile Include="disknotify.c">
6378
<Filter>Source Files\Disk</Filter>
6479
</ClCompile>
80+
<ClCompile Include="gpudetails.c">
81+
<Filter>Source Files\Graphics</Filter>
82+
</ClCompile>
83+
<ClCompile Include="gpugraph.c">
84+
<Filter>Source Files\Graphics</Filter>
85+
</ClCompile>
86+
<ClCompile Include="nvidia.c">
87+
<Filter>Source Files\Graphics</Filter>
88+
</ClCompile>
6589
</ItemGroup>
6690
<ItemGroup>
6791
<None Include="CHANGELOG.txt" />

plugins/HardwareDevices/devices.h

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
#define SETTING_NAME_ENABLE_NDIS (PLUGIN_NAME L".EnableNDIS")
2929
#define SETTING_NAME_INTERFACE_LIST (PLUGIN_NAME L".NetworkList")
3030
#define SETTING_NAME_DISK_LIST (PLUGIN_NAME L".DiskList")
31+
#define SETTING_NAME_ENABLE_GPU (PLUGIN_NAME L".EnableGpu")
32+
#define SETTING_NAME_ENABLE_FAHRENHEIT (PLUGIN_NAME L".ShowFahrenheit")
3133

3234
#define CINTERFACE
3335
#define COBJMACROS
@@ -721,4 +723,83 @@ VOID NetAdapterSysInfoInitializing(
721723
_In_ _Assume_refs_(1) PDV_NETADAPTER_ENTRY AdapterEntry
722724
);
723725

726+
// Graphics
727+
728+
extern ULONG GpuMemoryLimit;
729+
extern FLOAT GpuCurrentGpuUsage;
730+
extern FLOAT GpuCurrentCoreUsage;
731+
extern FLOAT GpuCurrentBusUsage;
732+
extern ULONG GpuCurrentMemUsage;
733+
extern ULONG GpuCurrentMemSharedUsage;
734+
extern ULONG GpuCurrentCoreTemp;
735+
extern ULONG GpuCurrentBoardTemp;
736+
extern ULONG GpuCurrentCoreClock;
737+
extern ULONG GpuCurrentMemoryClock;
738+
extern ULONG GpuCurrentShaderClock;
739+
extern ULONG GpuCurrentVoltage;
740+
741+
typedef struct _PH_NVGPU_SYSINFO_CONTEXT
742+
{
743+
PPH_STRING GpuName;
744+
HWND WindowHandle;
745+
HWND DetailsHandle;
746+
PPH_SYSINFO_SECTION Section;
747+
PH_LAYOUT_MANAGER LayoutManager;
748+
749+
RECT GpuGraphMargin;
750+
HWND GpuPanel;
751+
752+
HWND GpuLabelHandle;
753+
HWND MemLabelHandle;
754+
HWND SharedLabelHandle;
755+
HWND BusLabelHandle;
756+
757+
HWND GpuGraphHandle;
758+
HWND MemGraphHandle;
759+
HWND SharedGraphHandle;
760+
HWND BusGraphHandle;
761+
762+
PH_GRAPH_STATE GpuGraphState;
763+
PH_GRAPH_STATE MemGraphState;
764+
PH_GRAPH_STATE SharedGraphState;
765+
PH_GRAPH_STATE BusGraphState;
766+
767+
PH_CIRCULAR_BUFFER_FLOAT GpuUtilizationHistory;
768+
PH_CIRCULAR_BUFFER_ULONG GpuMemoryHistory;
769+
PH_CIRCULAR_BUFFER_FLOAT GpuBoardHistory;
770+
PH_CIRCULAR_BUFFER_FLOAT GpuBusHistory;
771+
} PH_NVGPU_SYSINFO_CONTEXT, *PPH_NVGPU_SYSINFO_CONTEXT;
772+
773+
VOID NvGpuSysInfoInitializing(
774+
_In_ PPH_PLUGIN_SYSINFO_POINTERS Pointers
775+
);
776+
777+
VOID ShowDetailsDialog(
778+
_In_ HWND ParentHandle,
779+
_In_ PVOID Context
780+
);
781+
782+
VOID InitializeNvApi(VOID);
783+
BOOLEAN DestroyNvApi(VOID);
784+
PPH_STRING NvGpuQueryDriverVersion(VOID);
785+
PPH_STRING NvGpuQueryVbiosVersionString(VOID);
786+
PPH_STRING NvGpuQueryName(VOID);
787+
PPH_STRING NvGpuQueryShortName(VOID);
788+
PPH_STRING NvGpuQueryRevision(VOID);
789+
PPH_STRING NvGpuQueryRamType(VOID);
790+
PPH_STRING NvGpuQueryFoundry(VOID);
791+
PPH_STRING NvGpuQueryDeviceId(VOID);
792+
PPH_STRING NvGpuQueryRopsCount(VOID);
793+
PPH_STRING NvGpuQueryShaderCount(VOID);
794+
PPH_STRING NvGpuQueryPciInfo(VOID);
795+
PPH_STRING NvGpuQueryBusWidth(VOID);
796+
PPH_STRING NvGpuQueryPcbValue(VOID);
797+
PPH_STRING NvGpuQueryDriverSettings(VOID);
798+
PPH_STRING NvGpuQueryFanSpeed(VOID);
799+
BOOLEAN NvGpuDriverIsWHQL(VOID);
800+
VOID NvGpuUpdateValues(VOID);
801+
802+
803+
804+
724805
#endif _DEVICES_H_

plugins/HardwareDevices/gpudetails.c

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
/*
2+
* Process Hacker Extra Plugins -
3+
* Nvidia GPU Plugin
4+
*
5+
* Copyright (C) 2015 dmex
6+
*
7+
* This file is part of Process Hacker.
8+
*
9+
* Process Hacker is free software; you can redistribute it and/or modify
10+
* it under the terms of the GNU General Public License as published by
11+
* the Free Software Foundation, either version 3 of the License, or
12+
* (at your option) any later version.
13+
*
14+
* Process Hacker is distributed in the hope that it will be useful,
15+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17+
* GNU General Public License for more details.
18+
*
19+
* You should have received a copy of the GNU General Public License
20+
* along with Process Hacker. If not, see <http://www.gnu.org/licenses/>.
21+
*/
22+
23+
#include "devices.h"
24+
25+
static VOID NvUpdateDetails(
26+
_Inout_ PPH_NVGPU_SYSINFO_CONTEXT Context
27+
)
28+
{
29+
//SetDlgItemText(Context->DetailsHandle, IDC_EDIT1, ((PPH_STRING)PH_AUTO(NvGpuQueryName()))->Buffer);
30+
//SetDlgItemText(Context->DetailsHandle, IDC_EDIT2, ((PPH_STRING)PH_AUTO(NvGpuQueryShortName()))->Buffer);
31+
//SetDlgItemText(Context->DetailsHandle, IDC_EDIT3, ((PPH_STRING)PH_AUTO(NvGpuQueryVbiosVersionString()))->Buffer);
32+
//SetDlgItemText(Context->DetailsHandle, IDC_EDIT4, ((PPH_STRING)PH_AUTO(NvGpuQueryRevision()))->Buffer);
33+
//SetDlgItemText(Context->DetailsHandle, IDC_EDIT5, ((PPH_STRING)PH_AUTO(NvGpuQueryDeviceId()))->Buffer);
34+
//SetDlgItemText(Context->DetailsHandle, IDC_EDIT6, ((PPH_STRING)PH_AUTO(NvGpuQueryRopsCount()))->Buffer);
35+
//SetDlgItemText(Context->DetailsHandle, IDC_EDIT7, ((PPH_STRING)PH_AUTO(NvGpuQueryShaderCount()))->Buffer);
36+
////SetDlgItemText(Context->DetailsHandle, IDC_EDIT8, ((PPH_STRING)PhAutoDereferenceObject(NvGpuQueryPciInfo()))->Buffer);
37+
//SetDlgItemText(Context->DetailsHandle, IDC_EDIT9, ((PPH_STRING)PH_AUTO(NvGpuQueryBusWidth()))->Buffer);
38+
//SetDlgItemText(Context->DetailsHandle, IDC_EDIT10, ((PPH_STRING)PH_AUTO(NvGpuQueryDriverVersion()))->Buffer);
39+
//SetDlgItemText(Context->DetailsHandle, IDC_EDIT12, ((PPH_STRING)PH_AUTO(NvGpuQueryDriverSettings()))->Buffer);
40+
//SetDlgItemText(Context->DetailsHandle, IDC_EDIT14, ((PPH_STRING)PH_AUTO(NvGpuQueryRamType()))->Buffer);
41+
////SetDlgItemText(Context->DetailsHandle, IDC_EDIT13, ((PPH_STRING)PhAutoDereferenceObject(NvGpuQueryRamMaker()))->Buffer);
42+
////SetDlgItemText(Context->DetailsHandle, IDC_EDIT13, NvGpuDriverIsWHQL() ? L"WHQL" : L"");
43+
//SetDlgItemText(Context->DetailsHandle, IDC_EDIT13, ((PPH_STRING)PH_AUTO(NvGpuQueryFoundry()))->Buffer);
44+
//SetDlgItemText(Context->DetailsHandle, IDC_EDIT11, ((PPH_STRING)PH_AUTO(NvGpuQueryPcbValue()))->Buffer);
45+
}
46+
47+
static INT_PTR CALLBACK DetailsDlgProc(
48+
_In_ HWND hwndDlg,
49+
_In_ UINT uMsg,
50+
_In_ WPARAM wParam,
51+
_In_ LPARAM lParam
52+
)
53+
{
54+
PPH_NVGPU_SYSINFO_CONTEXT context = NULL;
55+
56+
if (uMsg == WM_INITDIALOG)
57+
{
58+
context = (PPH_NVGPU_SYSINFO_CONTEXT)lParam;
59+
60+
SetProp(hwndDlg, L"Context", (HANDLE)context);
61+
}
62+
else
63+
{
64+
context = (PPH_NVGPU_SYSINFO_CONTEXT)GetProp(hwndDlg, L"Context");
65+
66+
if (uMsg == WM_NCDESTROY)
67+
{
68+
RemoveProp(hwndDlg, L"Context");
69+
}
70+
}
71+
72+
if (context == NULL)
73+
return FALSE;
74+
75+
switch (uMsg)
76+
{
77+
case WM_INITDIALOG:
78+
{
79+
context->DetailsHandle = hwndDlg;
80+
81+
PhCenterWindow(hwndDlg, GetParent(hwndDlg));
82+
83+
//HBITMAP bitmapRefresh = NULL;
84+
//bitmapRefresh = LoadImageFromResources(96, 64, MAKEINTRESOURCE(IDB_NV_LOGO_PNG));
85+
//SendMessage(GetDlgItem(hwndDlg, IDC_NVIMAGE), STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)bitmapRefresh);
86+
//DeleteObject(bitmapRefresh);
87+
88+
NvUpdateDetails(context);
89+
}
90+
break;
91+
case WM_DESTROY:
92+
{
93+
context->DetailsHandle = NULL;
94+
}
95+
break;
96+
case WM_COMMAND:
97+
{
98+
switch (LOWORD(wParam))
99+
{
100+
case IDCANCEL:
101+
case IDOK:
102+
EndDialog(hwndDlg, IDOK);
103+
break;
104+
}
105+
}
106+
break;
107+
case UPDATE_MSG:
108+
{
109+
NvUpdateDetails(context);
110+
}
111+
break;
112+
}
113+
114+
return FALSE;
115+
}
116+
117+
VOID ShowDetailsDialog(
118+
_In_ HWND ParentHandle,
119+
_In_ PVOID Context
120+
)
121+
{
122+
//DialogBoxParam(
123+
// PluginInstance->DllBase,
124+
// MAKEINTRESOURCE(IDD_GPU_DETAILS),
125+
// ParentHandle,
126+
// DetailsDlgProc,
127+
// (LPARAM)Context
128+
// );
129+
}

0 commit comments

Comments
 (0)