同系列文章:
功能描述:
源代码出售:
- 实现基于WDK获取网卡原生Mac地址、硬盘序列号、CPU ID
- 实现基于WMI获取网卡原生Mac地址、硬盘序列号、CPU ID
- 实现基于WDK获取系统所有设备的VID和PID
动态库及测试程序下载:![]()
价格:壹仟元人民币
QQ:36748897
HWiNFO VC 2014-04-07.zip动态库接口文件:
/* ----------------------------------------------------------
文件名称:HWiNFO.h
作者:秦建辉
QQ:36748897
开发环境:
Visual Studio V2013
版本历史:
V1.6 2014年03月31日
在WDK中增加获取CPU ID
V1.5 2014年03月28日
增加在DLL中的调用支持
V1.4 2011年09月10日
实现结合设备安装类GUID和设备接口类GUID获取VID-PID
V1.3 2010年05月22日
增加获取硬盘序列号(WDK查询需要系统管理员权限)
V1.2 2010年05月20日
增加获取网卡原生MAC地址
V1.0 2010年04月15日
实现获取人机交互设备的VID-PID
功能说明:
1.获取网卡原生MAC地址
2.获取硬盘序列号
3.获取CPU ID
4.获取系统所有设备的VIDPID
------------------------------------------------------------ */
#pragma once
#include <windows.h>
#define PROPERTY_MAX_LEN 128 // 属性字段最大长度
typedef struct _T_DEVICE_PROPERTY
{
TCHAR Property[PROPERTY_MAX_LEN];
} T_DEVICE_PROPERTY;
typedef struct _T_VIDPID
{
USHORT VendorID; // 设备商标识
USHORT ProductID; // 产品标识
} T_VIDPID;
#ifdef __cplusplus
extern "C"
{
#endif
/*
功能:通过WDK获取网卡原生MAC地址和当前MAC地址
入口参数:
DevicePropertyCollection:存储网卡MAC地址,可以为NULL
iSize:可查询的最大网卡数目
isIncludeUSB:是否包含USB网卡,默认不包含USB网卡
返回值:
<0:HRESULT错误类型
>=0:实际获取到的网卡数
*/
HRESULT WINAPI WDK_QueryMacAddress(T_DEVICE_PROPERTY *DevicePropertyCollection, INT iSize, BOOL isIncludeUSB = FALSE);
/*
功能:基于WDK获取硬盘序列号(需要系统管理员权限)
参数说明:
DevicePropertyCollection:存储硬盘序列号,可以为NULL
iSize:可查询的最大硬盘数
返回值:
<0:HRESULT错误类型
>=0:实际获取到的硬盘数
*/
HRESULT WINAPI WDK_QueryDiskDrive(T_DEVICE_PROPERTY *DevicePropertyCollection, INT iSize);
/*
功能:获取CPU ID
参数说明:
DevicePropertyCollection:存储CPU ID
iSize:可查询的最大CPU数目
返回值:
<0:HRESULT错误类型
>=0:实际获取到的CPU数目
说明:只适合Intel CPU
*/
HRESULT WINAPI WDK_QueryCPUID(T_DEVICE_PROPERTY *DevicePropertyCollection, INT iSize);
/*
功能:获取系统所有设备的VIDPID
入口参数:
VidPidCollection:存储返回的VIDPID,会自动过滤掉重复的VIDPID
iSize:可查询的设备数,建议为32
SetupClassGuid:设备安装类GUID,默认为NULL
InterfaceClassGuid:设备接口类GUID,默认为NULL
返回值:
<0:HRESULT错误类型
>=0:实际获取到的VID和PID数目
优点:
直接通过设备实例ID提取VIDPID,从而无需获取设备路径来读写IO。
*/
HRESULT WINAPI WDK_QueryVidPid(T_VIDPID* VidPidCollection, INT iSize, const GUID* SetupClassGuid = NULL, const GUID* InterfaceClassGuid = NULL);
/*
功能:验证设备的VIDPID
入口参数:
VendorID:设备VID
ProductID:设备PID
SetupClassGuid:设备安装类GUID,默认为NULL
InterfaceClassGuid:设备接口类GUID,默认为NULL
返回值:
E_ACCESSDENIED:验证未通过
S_OK:验证通过
其它HRESULT错误类型
*/
HRESULT WINAPI WDK_VIDPIDMatch(USHORT VendorID, USHORT ProductID, const GUID* SetupClassGuid = NULL, const GUID* InterfaceClassGuid = NULL);
/*
功能:查看系统中是否存在指定标识的硬件设备
参数说明:
CPUID:处理器标识,可以为NULL
HardDiskSerialNumber:硬盘序列号,可以为NULL
MacAddress:网卡MAC地址(已剔除虚拟网卡和USB网卡),可以为NULL
返回值:
E_ACCESSDENIED:验证未通过
S_OK:验证通过
其它HRESULT错误类型
说明:
对设备标识不区分大小写
为NULL的项不做判断,不为NULL的项必须全部满足
比WMI_DeviceMatch速度更快,但只能识别一颗CPU
*/
HRESULT WINAPI WDK_DeviceMatch(const TCHAR* CPUID, const TCHAR* HardDiskSerialNumber, const TCHAR *MacAddress);
/*
功能:输出VIDPID信息到指定INI文件
返回值:
S_OK:成功
其它HRESULT错误类型
*/
HRESULT WINAPI WDK_VIDPIDPrint(const TCHAR* iniFileName);
/*
功能:输出硬件信息到指定INI文件
返回值:
S_OK:成功
其它HRESULT错误类型
说明:
比WMI_DeviceInfoPrint速度更快,但只能识别一颗CPU
*/
HRESULT WINAPI WDK_DeviceInfoPrint(const TCHAR* iniFileName);
/*
功能:通过WMI获取设备属性
参数说明:
iQueryIndex:需要查询的设备属性
0:网卡原生MAC地址(剔除虚拟网卡)
1:网卡原生MAC地址(剔除虚拟网卡和USB网卡)
2:硬盘序列号
3:主板序列号
4:CPU ID
5:BIOS序列号
6:主板型号
7:网卡当前MAC地址(剔除虚拟网卡)
8:网卡当前MAC地址(剔除虚拟网卡和USB网卡)
DevicePropertyCollection:存储设备属性值
iSize:可存储的最大设备个数
返回值:
<0:HRESULT错误类型
>=0:实际获取到的设备个数
*/
HRESULT WINAPI WMI_DeviceQuery(INT iQueryIndex, T_DEVICE_PROPERTY *DevicePropertyCollection, INT iSize);
/*
功能:查看系统中是否存在指定标识的硬件设备
参数说明:
CPUID:处理器标识,可以为NULL
HardDiskSerialNumber:硬盘序列号,可以为NULL
MacAddress:网卡MAC地址(已剔除虚拟网卡和USB网卡),可以为NULL
返回值:
E_ACCESSDENIED:验证未通过
S_OK:验证通过
其它HRESULT错误类型
说明:
对设备标识不区分大小写
为NULL的项不做判断,不为NULL的项必须全部满足
*/
HRESULT WINAPI WMI_DeviceMatch(const TCHAR* CPUID, const TCHAR* HardDiskSerialNumber, const TCHAR *MacAddress);
/*
功能:输出硬件信息到指定INI文件
返回值:
S_OK:成功
其它HRESULT错误类型
*/
HRESULT WINAPI WMI_DeviceInfoPrint(const TCHAR* iniFileName);
/*
功能:获取版权信息
*/
TCHAR* WINAPI GetHWiNFOCopyright();
#ifdef __cplusplus
}
#endif
测试软件界面: