773 lines
21 KiB
C
773 lines
21 KiB
C
/*
|
|
* Process Hacker Plugins -
|
|
* Hardware Devices Plugin
|
|
*
|
|
* Copyright (C) 2015-2016 dmex
|
|
* Copyright (C) 2016 wj32
|
|
*
|
|
* This file is part of Process Hacker.
|
|
*
|
|
* Process Hacker is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* Process Hacker is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with Process Hacker. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef _DEVICES_H_
|
|
#define _DEVICES_H_
|
|
|
|
#define PLUGIN_NAME L"ProcessHacker.HardwareDevices"
|
|
#define SETTING_NAME_ENABLE_NDIS (PLUGIN_NAME L".EnableNDIS")
|
|
#define SETTING_NAME_INTERFACE_LIST (PLUGIN_NAME L".NetworkList")
|
|
#define SETTING_NAME_DISK_LIST (PLUGIN_NAME L".DiskList")
|
|
#ifdef _NV_GPU_BUILD
|
|
#define SETTING_NAME_ENABLE_GPU (PLUGIN_NAME L".EnableGpu")
|
|
#define SETTING_NAME_ENABLE_FAHRENHEIT (PLUGIN_NAME L".ShowFahrenheit")
|
|
#endif
|
|
|
|
#define CINTERFACE
|
|
#define COBJMACROS
|
|
#include <phdk.h>
|
|
#include <phappresource.h>
|
|
|
|
#include <windowsx.h>
|
|
#include <uxtheme.h>
|
|
#include <ws2def.h>
|
|
#include <ws2ipdef.h>
|
|
#include <ws2tcpip.h>
|
|
#include <iphlpapi.h>
|
|
#include <nldef.h>
|
|
#include <netioapi.h>
|
|
//#include <WinSock2.h>
|
|
|
|
#include "resource.h"
|
|
|
|
#define WM_SHOWDIALOG (WM_APP + 1)
|
|
#define UPDATE_MSG (WM_APP + 2)
|
|
|
|
extern PPH_PLUGIN PluginInstance;
|
|
|
|
extern PPH_OBJECT_TYPE NetAdapterEntryType;
|
|
extern PPH_LIST NetworkAdaptersList;
|
|
extern PH_QUEUED_LOCK NetworkAdaptersListLock;
|
|
|
|
extern PPH_OBJECT_TYPE DiskDriveEntryType;
|
|
extern PPH_LIST DiskDrivesList;
|
|
extern PH_QUEUED_LOCK DiskDrivesListLock;
|
|
|
|
// main.c
|
|
|
|
PPH_STRING TrimString(
|
|
_In_ PPH_STRING String
|
|
);
|
|
|
|
INT AddListViewGroup(
|
|
_In_ HWND ListViewHandle,
|
|
_In_ INT Index,
|
|
_In_ PWSTR Text
|
|
);
|
|
|
|
INT AddListViewItemGroupId(
|
|
_In_ HWND ListViewHandle,
|
|
_In_ INT GroupId,
|
|
_In_ INT Index,
|
|
_In_ PWSTR Text,
|
|
_In_opt_ PVOID Param
|
|
);
|
|
|
|
ULONG64 RegQueryUlong64(
|
|
_In_ HANDLE KeyHandle,
|
|
_In_ PWSTR ValueName
|
|
);
|
|
|
|
VOID ShowDeviceMenu(
|
|
_In_ HWND ParentWindow,
|
|
_In_ PPH_STRING DeviceInstance
|
|
);
|
|
|
|
// adapter.c
|
|
|
|
typedef struct _DV_NETADAPTER_ID
|
|
{
|
|
NET_IFINDEX InterfaceIndex;
|
|
IF_LUID InterfaceLuid;
|
|
PPH_STRING InterfaceGuid;
|
|
} DV_NETADAPTER_ID, *PDV_NETADAPTER_ID;
|
|
|
|
typedef struct _DV_NETADAPTER_ENTRY
|
|
{
|
|
DV_NETADAPTER_ID Id;
|
|
PPH_STRING AdapterName;
|
|
|
|
union
|
|
{
|
|
BOOLEAN BitField;
|
|
struct
|
|
{
|
|
BOOLEAN UserReference : 1;
|
|
BOOLEAN HaveFirstSample : 1;
|
|
BOOLEAN CheckedDeviceSupport : 1;
|
|
BOOLEAN DeviceSupported : 1;
|
|
BOOLEAN DevicePresent : 1;
|
|
BOOLEAN Spare : 3;
|
|
};
|
|
};
|
|
|
|
//ULONG64 LinkSpeed;
|
|
ULONG64 InboundValue;
|
|
ULONG64 OutboundValue;
|
|
ULONG64 LastInboundValue;
|
|
ULONG64 LastOutboundValue;
|
|
|
|
PH_CIRCULAR_BUFFER_ULONG64 InboundBuffer;
|
|
PH_CIRCULAR_BUFFER_ULONG64 OutboundBuffer;
|
|
} DV_NETADAPTER_ENTRY, *PDV_NETADAPTER_ENTRY;
|
|
|
|
typedef struct _DV_NETADAPTER_SYSINFO_CONTEXT
|
|
{
|
|
PDV_NETADAPTER_ENTRY AdapterEntry;
|
|
PPH_STRING SectionName;
|
|
|
|
HWND WindowHandle;
|
|
HWND PanelWindowHandle;
|
|
HWND GraphHandle;
|
|
|
|
PPH_SYSINFO_SECTION SysinfoSection;
|
|
PH_GRAPH_STATE GraphState;
|
|
PH_LAYOUT_MANAGER LayoutManager;
|
|
} DV_NETADAPTER_SYSINFO_CONTEXT, *PDV_NETADAPTER_SYSINFO_CONTEXT;
|
|
|
|
typedef struct _DV_NETADAPTER_DETAILS_CONTEXT
|
|
{
|
|
PPH_STRING AdapterName;
|
|
DV_NETADAPTER_ID AdapterId;
|
|
|
|
union
|
|
{
|
|
BOOLEAN BitField;
|
|
struct
|
|
{
|
|
BOOLEAN HaveFirstSample : 1;
|
|
BOOLEAN CheckedDeviceSupport : 1;
|
|
BOOLEAN DeviceSupported : 1;
|
|
BOOLEAN Spare : 5;
|
|
};
|
|
};
|
|
|
|
HWND WindowHandle;
|
|
HWND ParentHandle;
|
|
HWND ListViewHandle;
|
|
|
|
HANDLE NotifyHandle;
|
|
|
|
PH_LAYOUT_MANAGER LayoutManager;
|
|
PH_CALLBACK_REGISTRATION ProcessesUpdatedRegistration;
|
|
|
|
ULONG64 LastDetailsInboundValue;
|
|
ULONG64 LastDetailsIOutboundValue;
|
|
} DV_NETADAPTER_DETAILS_CONTEXT, *PDV_NETADAPTER_DETAILS_CONTEXT;
|
|
|
|
typedef struct _DV_NETADAPTER_CONTEXT
|
|
{
|
|
HWND ListViewHandle;
|
|
//HIMAGELIST ImageList;
|
|
BOOLEAN OptionsChanged;
|
|
BOOLEAN EnumeratingAdapters;
|
|
BOOLEAN UseAlternateMethod;
|
|
} DV_NETADAPTER_CONTEXT, *PDV_NETADAPTER_CONTEXT;
|
|
|
|
VOID NetAdaptersLoadList(
|
|
VOID
|
|
);
|
|
|
|
VOID ShowOptionsDialog(
|
|
_In_ HWND ParentHandle
|
|
);
|
|
|
|
// adapter.c
|
|
|
|
VOID NetAdaptersInitialize(
|
|
VOID
|
|
);
|
|
|
|
VOID NetAdaptersUpdate(
|
|
VOID
|
|
);
|
|
|
|
VOID InitializeNetAdapterId(
|
|
_Out_ PDV_NETADAPTER_ID Id,
|
|
_In_ NET_IFINDEX InterfaceIndex,
|
|
_In_ IF_LUID InterfaceLuid,
|
|
_In_ PPH_STRING InterfaceGuid
|
|
);
|
|
|
|
VOID CopyNetAdapterId(
|
|
_Out_ PDV_NETADAPTER_ID Destination,
|
|
_In_ PDV_NETADAPTER_ID Source
|
|
);
|
|
|
|
VOID DeleteNetAdapterId(
|
|
_Inout_ PDV_NETADAPTER_ID Id
|
|
);
|
|
|
|
BOOLEAN EquivalentNetAdapterId(
|
|
_In_ PDV_NETADAPTER_ID Id1,
|
|
_In_ PDV_NETADAPTER_ID Id2
|
|
);
|
|
|
|
PDV_NETADAPTER_ENTRY CreateNetAdapterEntry(
|
|
_In_ PDV_NETADAPTER_ID Id
|
|
);
|
|
|
|
// dialog.c
|
|
|
|
typedef enum _NETADAPTER_DETAILS_CATEGORY
|
|
{
|
|
NETADAPTER_DETAILS_CATEGORY_ADAPTER,
|
|
NETADAPTER_DETAILS_CATEGORY_UNICAST,
|
|
NETADAPTER_DETAILS_CATEGORY_BROADCAST,
|
|
NETADAPTER_DETAILS_CATEGORY_MULTICAST,
|
|
NETADAPTER_DETAILS_CATEGORY_ERRORS
|
|
} NETADAPTER_DETAILS_CATEGORY;
|
|
|
|
typedef enum _NETADAPTER_DETAILS_INDEX
|
|
{
|
|
NETADAPTER_DETAILS_INDEX_STATE,
|
|
//NETADAPTER_DETAILS_INDEX_CONNECTIVITY,
|
|
|
|
NETADAPTER_DETAILS_INDEX_IPADDRESS,
|
|
NETADAPTER_DETAILS_INDEX_SUBNET,
|
|
NETADAPTER_DETAILS_INDEX_GATEWAY,
|
|
NETADAPTER_DETAILS_INDEX_DNS,
|
|
NETADAPTER_DETAILS_INDEX_DOMAIN,
|
|
|
|
NETADAPTER_DETAILS_INDEX_LINKSPEED,
|
|
NETADAPTER_DETAILS_INDEX_SENT,
|
|
NETADAPTER_DETAILS_INDEX_RECEIVED,
|
|
NETADAPTER_DETAILS_INDEX_TOTAL,
|
|
NETADAPTER_DETAILS_INDEX_SENDING,
|
|
NETADAPTER_DETAILS_INDEX_RECEIVING,
|
|
NETADAPTER_DETAILS_INDEX_UTILIZATION,
|
|
|
|
NETADAPTER_DETAILS_INDEX_UNICAST_SENTPKTS,
|
|
NETADAPTER_DETAILS_INDEX_UNICAST_RECVPKTS,
|
|
NETADAPTER_DETAILS_INDEX_UNICAST_TOTALPKTS,
|
|
NETADAPTER_DETAILS_INDEX_UNICAST_SENT,
|
|
NETADAPTER_DETAILS_INDEX_UNICAST_RECEIVED,
|
|
NETADAPTER_DETAILS_INDEX_UNICAST_TOTAL,
|
|
//NETADAPTER_DETAILS_INDEX_UNICAST_SENDING,
|
|
//NETADAPTER_DETAILS_INDEX_UNICAST_RECEIVING,
|
|
//NETADAPTER_DETAILS_INDEX_UNICAST_UTILIZATION,
|
|
|
|
NETADAPTER_DETAILS_INDEX_BROADCAST_SENTPKTS,
|
|
NETADAPTER_DETAILS_INDEX_BROADCAST_RECVPKTS,
|
|
NETADAPTER_DETAILS_INDEX_BROADCAST_TOTALPKTS,
|
|
NETADAPTER_DETAILS_INDEX_BROADCAST_SENT,
|
|
NETADAPTER_DETAILS_INDEX_BROADCAST_RECEIVED,
|
|
NETADAPTER_DETAILS_INDEX_BROADCAST_TOTAL,
|
|
|
|
NETADAPTER_DETAILS_INDEX_MULTICAST_SENTPKTS,
|
|
NETADAPTER_DETAILS_INDEX_MULTICAST_RECVPKTS,
|
|
NETADAPTER_DETAILS_INDEX_MULTICAST_TOTALPKTS,
|
|
NETADAPTER_DETAILS_INDEX_MULTICAST_SENT,
|
|
NETADAPTER_DETAILS_INDEX_MULTICAST_RECEIVED,
|
|
NETADAPTER_DETAILS_INDEX_MULTICAST_TOTAL,
|
|
|
|
NETADAPTER_DETAILS_INDEX_ERRORS_SENTPKTS,
|
|
NETADAPTER_DETAILS_INDEX_ERRORS_RECVPKTS,
|
|
NETADAPTER_DETAILS_INDEX_ERRORS_TOTALPKTS,
|
|
NETADAPTER_DETAILS_INDEX_ERRORS_SENT,
|
|
NETADAPTER_DETAILS_INDEX_ERRORS_RECEIVED,
|
|
NETADAPTER_DETAILS_INDEX_ERRORS_TOTAL
|
|
} NETADAPTER_DETAILS_INDEX;
|
|
|
|
VOID ShowNetAdapterDetailsDialog(
|
|
_In_ PDV_NETADAPTER_SYSINFO_CONTEXT Context
|
|
);
|
|
|
|
// ndis.c
|
|
|
|
#define BITS_IN_ONE_BYTE 8
|
|
#define NDIS_UNIT_OF_MEASUREMENT 100
|
|
|
|
// dmex: rev
|
|
typedef ULONG (WINAPI* _GetInterfaceDescriptionFromGuid)(
|
|
_Inout_ PGUID InterfaceGuid,
|
|
_Out_opt_ PWSTR InterfaceDescription,
|
|
_Inout_ PSIZE_T LengthAddress,
|
|
PVOID Unknown1,
|
|
PVOID Unknown2
|
|
);
|
|
|
|
NTSTATUS NetworkAdapterCreateHandle(
|
|
_Out_ PHANDLE DeviceHandle,
|
|
_In_ PPH_STRING InterfaceGuid
|
|
);
|
|
|
|
BOOLEAN NetworkAdapterQuerySupported(
|
|
_In_ HANDLE DeviceHandle
|
|
);
|
|
|
|
BOOLEAN NetworkAdapterQueryNdisVersion(
|
|
_In_ HANDLE DeviceHandle,
|
|
_Out_opt_ PUINT MajorVersion,
|
|
_Out_opt_ PUINT MinorVersion
|
|
);
|
|
|
|
PPH_STRING NetworkAdapterQueryName(
|
|
_In_ HANDLE DeviceHandle,
|
|
_In_ PPH_STRING InterfaceGuid
|
|
);
|
|
|
|
NTSTATUS NetworkAdapterQueryStatistics(
|
|
_In_ HANDLE DeviceHandle,
|
|
_Out_ PNDIS_STATISTICS_INFO Info
|
|
);
|
|
|
|
NTSTATUS NetworkAdapterQueryLinkState(
|
|
_In_ HANDLE DeviceHandle,
|
|
_Out_ PNDIS_LINK_STATE State
|
|
);
|
|
|
|
BOOLEAN NetworkAdapterQueryMediaType(
|
|
_In_ HANDLE DeviceHandle,
|
|
_Out_ PNDIS_PHYSICAL_MEDIUM Medium
|
|
);
|
|
|
|
NTSTATUS NetworkAdapterQueryLinkSpeed(
|
|
_In_ HANDLE DeviceHandle,
|
|
_Out_ PULONG64 LinkSpeed
|
|
);
|
|
|
|
ULONG64 NetworkAdapterQueryValue(
|
|
_In_ HANDLE DeviceHandle,
|
|
_In_ NDIS_OID OpCode
|
|
);
|
|
|
|
BOOLEAN QueryInterfaceRowVista(
|
|
_In_ PDV_NETADAPTER_ID Id,
|
|
_Out_ PMIB_IF_ROW2 InterfaceRow
|
|
);
|
|
|
|
BOOLEAN QueryInterfaceRowXP(
|
|
_In_ PDV_NETADAPTER_ID Id,
|
|
_Out_ PMIB_IFROW InterfaceRow
|
|
);
|
|
|
|
// netoptions.c
|
|
|
|
INT_PTR CALLBACK NetworkAdapterOptionsDlgProc(
|
|
_In_ HWND hwndDlg,
|
|
_In_ UINT uMsg,
|
|
_In_ WPARAM wParam,
|
|
_In_ LPARAM lParam
|
|
);
|
|
|
|
// diskoptions.c
|
|
|
|
INT_PTR CALLBACK DiskDriveOptionsDlgProc(
|
|
_In_ HWND hwndDlg,
|
|
_In_ UINT uMsg,
|
|
_In_ WPARAM wParam,
|
|
_In_ LPARAM lParam
|
|
);
|
|
|
|
// disk.c
|
|
|
|
typedef struct _DV_DISK_ID
|
|
{
|
|
PPH_STRING DevicePath;
|
|
} DV_DISK_ID, *PDV_DISK_ID;
|
|
|
|
typedef struct _DV_DISK_ENTRY
|
|
{
|
|
DV_DISK_ID Id;
|
|
|
|
PPH_STRING DiskName;
|
|
PPH_STRING DiskIndexName;
|
|
ULONG DiskIndex;
|
|
|
|
union
|
|
{
|
|
BOOLEAN BitField;
|
|
struct
|
|
{
|
|
BOOLEAN UserReference : 1;
|
|
BOOLEAN HaveFirstSample : 1;
|
|
BOOLEAN DevicePresent : 1;
|
|
BOOLEAN Spare : 5;
|
|
};
|
|
};
|
|
|
|
PH_CIRCULAR_BUFFER_ULONG64 ReadBuffer;
|
|
PH_CIRCULAR_BUFFER_ULONG64 WriteBuffer;
|
|
|
|
PH_UINT64_DELTA BytesReadDelta;
|
|
PH_UINT64_DELTA BytesWrittenDelta;
|
|
PH_UINT64_DELTA ReadTimeDelta;
|
|
PH_UINT64_DELTA WriteTimeDelta;
|
|
PH_UINT64_DELTA IdleTimeDelta;
|
|
PH_UINT32_DELTA ReadCountDelta;
|
|
PH_UINT32_DELTA WriteCountDelta;
|
|
PH_UINT64_DELTA QueryTimeDelta;
|
|
|
|
FLOAT ResponseTime;
|
|
FLOAT ActiveTime;
|
|
ULONG QueueDepth;
|
|
ULONG SplitCount;
|
|
} DV_DISK_ENTRY, *PDV_DISK_ENTRY;
|
|
|
|
typedef struct _DV_DISK_SYSINFO_CONTEXT
|
|
{
|
|
PDV_DISK_ENTRY DiskEntry;
|
|
PPH_STRING SectionName;
|
|
|
|
HWND WindowHandle;
|
|
HWND PanelWindowHandle;
|
|
HWND GraphHandle;
|
|
|
|
PPH_SYSINFO_SECTION SysinfoSection;
|
|
PH_GRAPH_STATE GraphState;
|
|
PH_LAYOUT_MANAGER LayoutManager;
|
|
} DV_DISK_SYSINFO_CONTEXT, *PDV_DISK_SYSINFO_CONTEXT;
|
|
|
|
typedef struct _DV_DISK_OPTIONS_CONTEXT
|
|
{
|
|
HWND ListViewHandle;
|
|
//HIMAGELIST ImageList;
|
|
BOOLEAN OptionsChanged;
|
|
BOOLEAN EnumeratingDisks;
|
|
} DV_DISK_OPTIONS_CONTEXT, *PDV_DISK_OPTIONS_CONTEXT;
|
|
|
|
VOID DiskDrivesInitialize(VOID);
|
|
VOID DiskDrivesLoadList(VOID);
|
|
VOID DiskDrivesUpdate(VOID);
|
|
|
|
VOID DiskDriveUpdateDeviceInfo(
|
|
_In_opt_ HANDLE DeviceHandle,
|
|
_In_ PDV_DISK_ENTRY DiskEntry
|
|
);
|
|
|
|
VOID InitializeDiskId(
|
|
_Out_ PDV_DISK_ID Id,
|
|
_In_ PPH_STRING DevicePath
|
|
);
|
|
VOID CopyDiskId(
|
|
_Out_ PDV_DISK_ID Destination,
|
|
_In_ PDV_DISK_ID Source
|
|
);
|
|
VOID DeleteDiskId(
|
|
_Inout_ PDV_DISK_ID Id
|
|
);
|
|
BOOLEAN EquivalentDiskId(
|
|
_In_ PDV_DISK_ID Id1,
|
|
_In_ PDV_DISK_ID Id2
|
|
);
|
|
PDV_DISK_ENTRY CreateDiskEntry(
|
|
_In_ PDV_DISK_ID Id
|
|
);
|
|
|
|
// diskdetails.c
|
|
|
|
VOID ShowDiskDriveDetailsDialog(
|
|
_In_ PDV_DISK_SYSINFO_CONTEXT Context
|
|
);
|
|
|
|
// disknotify.c
|
|
|
|
VOID AddRemoveDeviceChangeCallback(
|
|
VOID
|
|
);
|
|
|
|
// storage.c
|
|
|
|
NTSTATUS DiskDriveCreateHandle(
|
|
_Out_ PHANDLE DeviceHandle,
|
|
_In_ PPH_STRING DevicePath
|
|
);
|
|
|
|
PPH_STRING DiskDriveQueryDosMountPoints(
|
|
_In_ ULONG DeviceNumber
|
|
);
|
|
|
|
BOOLEAN DiskDriveQueryDeviceInformation(
|
|
_In_ HANDLE DeviceHandle,
|
|
_Out_opt_ PPH_STRING* DiskVendor,
|
|
_Out_opt_ PPH_STRING* DiskModel,
|
|
_Out_opt_ PPH_STRING* DiskRevision,
|
|
_Out_opt_ PPH_STRING* DiskSerial
|
|
);
|
|
|
|
NTSTATUS DiskDriveQueryDeviceTypeAndNumber(
|
|
_In_ HANDLE DeviceHandle,
|
|
_Out_opt_ PULONG DeviceNumber,
|
|
_Out_opt_ DEVICE_TYPE* DeviceType
|
|
);
|
|
|
|
NTSTATUS DiskDriveQueryStatistics(
|
|
_In_ HANDLE DeviceHandle,
|
|
_Out_ PDISK_PERFORMANCE Info
|
|
);
|
|
|
|
PPH_STRING DiskDriveQueryGeometry(
|
|
_In_ HANDLE DeviceHandle
|
|
);
|
|
|
|
BOOLEAN DiskDriveQueryImminentFailure(
|
|
_In_ HANDLE DeviceHandle,
|
|
_Out_ PPH_LIST* DiskSmartAttributes
|
|
);
|
|
|
|
typedef struct _DISK_HANDLE_ENTRY
|
|
{
|
|
WCHAR DeviceLetter;
|
|
HANDLE DeviceHandle;
|
|
} DISK_HANDLE_ENTRY, *PDISK_HANDLE_ENTRY;
|
|
|
|
PPH_LIST DiskDriveQueryMountPointHandles(
|
|
_In_ ULONG DeviceNumber
|
|
);
|
|
|
|
typedef struct _NTFS_FILESYSTEM_STATISTICS
|
|
{
|
|
FILESYSTEM_STATISTICS FileSystemStatistics;
|
|
NTFS_STATISTICS NtfsStatistics;
|
|
} NTFS_FILESYSTEM_STATISTICS, *PNTFS_FILESYSTEM_STATISTICS;
|
|
|
|
typedef struct _FAT_FILESYSTEM_STATISTICS
|
|
{
|
|
FILESYSTEM_STATISTICS FileSystemStatistics;
|
|
NTFS_STATISTICS FatStatistics;
|
|
} FAT_FILESYSTEM_STATISTICS, *PFAT_FILESYSTEM_STATISTICS;
|
|
|
|
typedef struct _EXFAT_FILESYSTEM_STATISTICS
|
|
{
|
|
FILESYSTEM_STATISTICS FileSystemStatistics;
|
|
EXFAT_STATISTICS ExFatStatistics;
|
|
} EXFAT_FILESYSTEM_STATISTICS, *PEXFAT_FILESYSTEM_STATISTICS;
|
|
|
|
BOOLEAN DiskDriveQueryFileSystemInfo(
|
|
_In_ HANDLE DeviceHandle,
|
|
_Out_ USHORT* FileSystemType,
|
|
_Out_ PVOID* FileSystemStatistics
|
|
);
|
|
|
|
typedef struct _NTFS_VOLUME_INFO
|
|
{
|
|
NTFS_VOLUME_DATA_BUFFER VolumeData;
|
|
NTFS_EXTENDED_VOLUME_DATA ExtendedVolumeData;
|
|
} NTFS_VOLUME_INFO, *PNTFS_VOLUME_INFO;
|
|
|
|
BOOLEAN DiskDriveQueryNtfsVolumeInfo(
|
|
_In_ HANDLE DosDeviceHandle,
|
|
_Out_ PNTFS_VOLUME_INFO VolumeInfo
|
|
);
|
|
|
|
BOOLEAN DiskDriveQueryRefsVolumeInfo(
|
|
_In_ HANDLE DosDeviceHandle,
|
|
_Out_ PREFS_VOLUME_DATA_BUFFER VolumeInfo
|
|
);
|
|
|
|
NTSTATUS DiskDriveQueryVolumeInformation(
|
|
_In_ HANDLE DosDeviceHandle,
|
|
_Out_ PFILE_FS_VOLUME_INFORMATION* VolumeInfo
|
|
);
|
|
|
|
NTSTATUS DiskDriveQueryVolumeAttributes(
|
|
_In_ HANDLE DosDeviceHandle,
|
|
_Out_ PFILE_FS_ATTRIBUTE_INFORMATION* AttributeInfo
|
|
);
|
|
|
|
typedef enum _SMART_ATTRIBUTE_ID
|
|
{
|
|
SMART_ATTRIBUTE_ID_READ_ERROR_RATE = 0x01,
|
|
SMART_ATTRIBUTE_ID_THROUGHPUT_PERFORMANCE = 0x02,
|
|
SMART_ATTRIBUTE_ID_SPIN_UP_TIME = 0x03,
|
|
SMART_ATTRIBUTE_ID_START_STOP_COUNT = 0x04,
|
|
SMART_ATTRIBUTE_ID_REALLOCATED_SECTORS_COUNT = 0x05,
|
|
SMART_ATTRIBUTE_ID_READ_CHANNEL_MARGIN = 0x06,
|
|
SMART_ATTRIBUTE_ID_SEEK_ERROR_RATE = 0x07,
|
|
SMART_ATTRIBUTE_ID_SEEK_TIME_PERFORMANCE = 0x08,
|
|
SMART_ATTRIBUTE_ID_POWER_ON_HOURS = 0x09,
|
|
SMART_ATTRIBUTE_ID_SPIN_RETRY_COUNT = 0x0A,
|
|
SMART_ATTRIBUTE_ID_CALIBRATION_RETRY_COUNT = 0x0B,
|
|
SMART_ATTRIBUTE_ID_POWER_CYCLE_COUNT = 0x0C,
|
|
SMART_ATTRIBUTE_ID_SOFT_READ_ERROR_RATE = 0x0D,
|
|
// Unknown values 14-182
|
|
SMART_ATTRIBUTE_ID_SATA_DOWNSHIFT_ERROR_COUNT = 0xB7,
|
|
SMART_ATTRIBUTE_ID_END_TO_END_ERROR = 0xB8,
|
|
SMART_ATTRIBUTE_ID_HEAD_STABILITY = 0xB9,
|
|
SMART_ATTRIBUTE_ID_INDUCED_OP_VIBRATION_DETECTION = 0xBA,
|
|
SMART_ATTRIBUTE_ID_REPORTED_UNCORRECTABLE_ERRORS = 0xBB,
|
|
SMART_ATTRIBUTE_ID_COMMAND_TIMEOUT = 0xBC,
|
|
SMART_ATTRIBUTE_ID_HIGH_FLY_WRITES = 0xBD,
|
|
SMART_ATTRIBUTE_ID_TEMPERATURE_DIFFERENCE_FROM_100 = 0xBE, // AirflowTemperature
|
|
SMART_ATTRIBUTE_ID_GSENSE_ERROR_RATE = 0xBF,
|
|
SMART_ATTRIBUTE_ID_POWER_OFF_RETRACT_COUNT = 0xC0,
|
|
SMART_ATTRIBUTE_ID_LOAD_CYCLE_COUNT = 0xC1,
|
|
SMART_ATTRIBUTE_ID_TEMPERATURE = 0xC2,
|
|
SMART_ATTRIBUTE_ID_HARDWARE_ECC_RECOVERED = 0xC3,
|
|
SMART_ATTRIBUTE_ID_REALLOCATION_EVENT_COUNT = 0xC4,
|
|
SMART_ATTRIBUTE_ID_CURRENT_PENDING_SECTOR_COUNT = 0xC5,
|
|
SMART_ATTRIBUTE_ID_UNCORRECTABLE_SECTOR_COUNT = 0xC6,
|
|
SMART_ATTRIBUTE_ID_ULTRADMA_CRC_ERROR_COUNT = 0xC7,
|
|
SMART_ATTRIBUTE_ID_MULTI_ZONE_ERROR_RATE = 0xC8,
|
|
SMART_ATTRIBUTE_ID_OFFTRACK_SOFT_READ_ERROR_RATE = 0xC9,
|
|
SMART_ATTRIBUTE_ID_DATA_ADDRESS_MARK_ERRORS = 0xCA,
|
|
SMART_ATTRIBUTE_ID_RUN_OUT_CANCEL = 0xCB,
|
|
SMART_ATTRIBUTE_ID_SOFT_ECC_CORRECTION = 0xCC,
|
|
SMART_ATTRIBUTE_ID_THERMAL_ASPERITY_RATE_TAR = 0xCD,
|
|
SMART_ATTRIBUTE_ID_FLYING_HEIGHT = 0xCE,
|
|
SMART_ATTRIBUTE_ID_SPIN_HIGH_CURRENT = 0xCF,
|
|
SMART_ATTRIBUTE_ID_SPIN_BUZZ = 0xD0,
|
|
SMART_ATTRIBUTE_ID_OFFLINE_SEEK_PERFORMANCE = 0xD1,
|
|
SMART_ATTRIBUTE_ID_VIBRATION_DURING_WRITE = 0xD3,
|
|
SMART_ATTRIBUTE_ID_SHOCK_DURING_WRITE = 0xD4,
|
|
SMART_ATTRIBUTE_ID_DISK_SHIFT = 0xDC,
|
|
SMART_ATTRIBUTE_ID_GSENSE_ERROR_RATE_ALT = 0xDD,
|
|
SMART_ATTRIBUTE_ID_LOADED_HOURS = 0xDE,
|
|
SMART_ATTRIBUTE_ID_LOAD_UNLOAD_RETRY_COUNT = 0xDF,
|
|
SMART_ATTRIBUTE_ID_LOAD_FRICTION = 0xE0,
|
|
SMART_ATTRIBUTE_ID_LOAD_UNLOAD_CYCLE_COUNT = 0xE1,
|
|
SMART_ATTRIBUTE_ID_LOAD_IN_TIME = 0xE2,
|
|
SMART_ATTRIBUTE_ID_TORQUE_AMPLIFICATION_COUNT = 0xE3,
|
|
SMART_ATTRIBUTE_ID_POWER_OFF_RETTRACT_CYCLE = 0xE4,
|
|
// Unknown values 229
|
|
SMART_ATTRIBUTE_ID_GMR_HEAD_AMPLITUDE = 0xE6,
|
|
SMART_ATTRIBUTE_ID_DRIVE_TEMPERATURE = 0xE7,
|
|
// Unknown values 232-239
|
|
SMART_ATTRIBUTE_ID_HEAD_FLYING_HOURS = 0xF0,
|
|
SMART_ATTRIBUTE_ID_TOTAL_LBA_WRITTEN = 0xF1,
|
|
SMART_ATTRIBUTE_ID_TOTAL_LBA_READ = 0xF2,
|
|
// Unknown values 243-249
|
|
SMART_ATTRIBUTE_ID_READ_ERROR_RETY_RATE = 0xFA,
|
|
// Unknown values 251-253
|
|
SMART_ATTRIBUTE_ID_FREE_FALL_PROTECTION = 0xFE,
|
|
} SMART_ATTRIBUTE_ID;
|
|
|
|
|
|
#define SMART_HEADER_SIZE 2
|
|
|
|
#include <pshpack1.h>
|
|
typedef struct _SMART_ATTRIBUTE
|
|
{
|
|
BYTE Id;
|
|
USHORT Flags;
|
|
BYTE CurrentValue;
|
|
BYTE WorstValue;
|
|
BYTE RawValue[6];
|
|
BYTE Reserved;
|
|
} SMART_ATTRIBUTE, *PSMART_ATTRIBUTE;
|
|
#include <poppack.h>
|
|
|
|
typedef struct _SMART_ATTRIBUTES
|
|
{
|
|
SMART_ATTRIBUTE_ID AttributeId;
|
|
UINT CurrentValue;
|
|
UINT WorstValue;
|
|
UINT RawValue;
|
|
|
|
// Pre-fail/Advisory bit
|
|
// This bit is applicable only when the value of this attribute is less than or equal to its threshhold.
|
|
// 0 : Advisory: The device has exceeded its intended design life period.
|
|
// 1 : Pre-failure notification : Failure is predicted within 24 hours.
|
|
BOOLEAN Advisory;
|
|
BOOLEAN FailureImminent;
|
|
|
|
// Online data collection bit
|
|
// 0 : This value of this attribute is only updated during offline activities.
|
|
// 1 : The value of this attribute is updated during both normal operation and offline activities.
|
|
BOOLEAN OnlineDataCollection;
|
|
|
|
// TRUE: This attribute characterizes a performance aspect of the drive,
|
|
// degradation of which may indicate imminent drive failure, such as data throughput, seektimes, spin up time, etc.
|
|
BOOLEAN Performance;
|
|
|
|
// TRUE: This attribute is based on the expected, non-fatal errors that are inherent in disk drives,
|
|
// increases in which may indicate imminent drive failure, such as ECC errors, seek errors, etc.
|
|
BOOLEAN ErrorRate;
|
|
|
|
// TRUE: This attribute counts events, of which an excessive number of which may
|
|
// indicate imminent drive failure, such as number of re-allocated sectors, etc.
|
|
BOOLEAN EventCount;
|
|
|
|
// TRUE: This type is used to specify an attribute that is collected and saved by the drive automatically.
|
|
BOOLEAN SelfPreserving;
|
|
} SMART_ATTRIBUTES, *PSMART_ATTRIBUTES;
|
|
|
|
PWSTR SmartAttributeGetText(
|
|
_In_ SMART_ATTRIBUTE_ID AttributeId
|
|
);
|
|
|
|
PWSTR SmartAttributeGetDescription(
|
|
_In_ SMART_ATTRIBUTE_ID AttributeId
|
|
);
|
|
|
|
// diskgraph.c
|
|
|
|
VOID DiskDriveSysInfoInitializing(
|
|
_In_ PPH_PLUGIN_SYSINFO_POINTERS Pointers,
|
|
_In_ _Assume_refs_(1) PDV_DISK_ENTRY DiskEntry
|
|
);
|
|
|
|
// netgraph.c
|
|
|
|
VOID NetAdapterSysInfoInitializing(
|
|
_In_ PPH_PLUGIN_SYSINFO_POINTERS Pointers,
|
|
_In_ _Assume_refs_(1) PDV_NETADAPTER_ENTRY AdapterEntry
|
|
);
|
|
|
|
#ifdef _NV_GPU_BUILD
|
|
// Graphics
|
|
extern BOOLEAN NvApiInitialized;
|
|
extern ULONG GpuMemoryLimit;
|
|
extern FLOAT GpuCurrentGpuUsage;
|
|
extern FLOAT GpuCurrentCoreUsage;
|
|
extern FLOAT GpuCurrentBusUsage;
|
|
extern ULONG GpuCurrentMemUsage;
|
|
extern ULONG GpuCurrentMemSharedUsage;
|
|
extern ULONG GpuCurrentCoreTemp;
|
|
extern ULONG GpuCurrentBoardTemp;
|
|
extern ULONG GpuCurrentCoreClock;
|
|
extern ULONG GpuCurrentMemoryClock;
|
|
extern ULONG GpuCurrentShaderClock;
|
|
extern ULONG GpuCurrentVoltage;
|
|
extern PH_CIRCULAR_BUFFER_FLOAT GpuUtilizationHistory;
|
|
extern PH_CIRCULAR_BUFFER_ULONG GpuMemoryHistory;
|
|
extern PH_CIRCULAR_BUFFER_FLOAT GpuBoardHistory;
|
|
extern PH_CIRCULAR_BUFFER_FLOAT GpuBusHistory;
|
|
|
|
VOID NvGpuSysInfoInitializing(
|
|
_In_ PPH_PLUGIN_SYSINFO_POINTERS Pointers
|
|
);
|
|
|
|
VOID NvApiInitialize(VOID);
|
|
BOOLEAN DestroyNvApi(VOID);
|
|
PPH_STRING NvGpuQueryDriverVersion(VOID);
|
|
PPH_STRING NvGpuQueryVbiosVersionString(VOID);
|
|
PPH_STRING NvGpuQueryName(VOID);
|
|
PPH_STRING NvGpuQueryShortName(VOID);
|
|
PPH_STRING NvGpuQueryRevision(VOID);
|
|
PPH_STRING NvGpuQueryRamType(VOID);
|
|
PPH_STRING NvGpuQueryFoundry(VOID);
|
|
PPH_STRING NvGpuQueryDeviceId(VOID);
|
|
PPH_STRING NvGpuQueryRopsCount(VOID);
|
|
PPH_STRING NvGpuQueryShaderCount(VOID);
|
|
PPH_STRING NvGpuQueryPciInfo(VOID);
|
|
PPH_STRING NvGpuQueryBusWidth(VOID);
|
|
PPH_STRING NvGpuQueryPcbValue(VOID);
|
|
PPH_STRING NvGpuQueryDriverSettings(VOID);
|
|
PPH_STRING NvGpuQueryFanSpeed(VOID);
|
|
BOOLEAN NvGpuDriverIsWHQL(VOID);
|
|
VOID NvGpuUpdate(VOID);
|
|
#endif
|
|
|
|
#endif _DEVICES_H_ |