VC:基于WDK和WMI获取机器指纹

同系列文章:
  • VC:基于WDK和WMI获取机器指纹
  • C#:基于WDK和WMI获取机器指纹
功能描述:
  1. 实现基于WDK获取网卡原生Mac地址、硬盘序列号、CPU ID
  2. 实现基于WMI获取网卡原生Mac地址、硬盘序列号、CPU ID
  3. 实现基于WDK获取系统所有设备的VID和PID
源代码出售:
VC:基于WDK和WMI获取机器指纹_第1张图片
价格:壹仟元人民币
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

测试软件界面:

VC:基于WDK和WMI获取机器指纹_第2张图片VC:基于WDK和WMI获取机器指纹_第3张图片

你可能感兴趣的:(VC:基于WDK和WMI获取机器指纹)