WindowsAPI_设备管理器:
/**
*┌──────────────────────────────────────────────────────────────┐
*│ 描 述:WindowsAPI_设备管理器
*│ 作 者:执笔小白
*│ 版 本:1.0
*│ 创建时间:2022-11-13 15:40:56
*└──────────────────────────────────────────────────────────────┘
*┌──────────────────────────────────────────────────────────────┐
*│ 命名空间: WindowAPIHelper
*│ 类 名:WindowsAPI_DeviceManagement
*└──────────────────────────────────────────────────────────────┘
*/
using System.Text;
using System.Runtime.InteropServices;
namespace WindowAPIHelper.API
{
/// <summary>
/// WindowsAPI_设备管理器
/// </summary>
public class WindowsAPI_DeviceManagement
{
#region 原始方法 Windows设备管理-程序以管理员权限运行
/// <summary>
/// 注册设备或者设备类型,在指定的窗口返回相关的信息
/// </summary>DEV_BROADCAST_DEVICEINTERFACE
/// <param name="recipient">窗口或服务的句柄</param>
/// <param name="notificationFilter">设备信息</param>
/// <param name="flags"></param>
/// <returns></returns>
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr RegisterDeviceNotification(IntPtr hRecipient, DEV_BROADCAST_DEVICEINTERFACE notificationFilter, Flags flags);
/// <summary>
/// 注册设备RegisterDeviceNotification-设备类型
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct DEV_BROADCAST_DEVICEINTERFACE
{
public int dbch_size; // DEV_BROADCAST_DEVICEINTERFACE对象大小
public DEV_BROADCAST_DEVICEINTERFACE_Devicetype dbch_devicetype; // 设备类型
public int dbch_reserved; // 保留;
public Guid dbch_classguid; // 定义一个通知的GUID
public char dbch_name; // 不需要,一般给'0'
}
/// <summary>
/// 设备事件相关的信息的标准标头类型
/// </summary>
public enum DEV_BROADCAST_DEVICEINTERFACE_Devicetype
{
DBT_DEVTYP_OEM = 0x00000000, // OEM 或 IHV 定义的设备类型
DBT_DEVTYP_VOLUME = 0x00000002, // 逻辑卷
DBT_DEVTYP_PORT = 0x00000003, // 端口设备 (串行或并行)
DBT_DEVTYP_DEVICEINTERFACE = 0x00000005, // 设备类型
DBT_DEVTYP_HANDLE = 0x00000006, // 文件系统句柄
}
/// <summary>
/// 通知类型
/// </summary>
public enum Flags
{
DEVICE_NOTIFY_WINDOW_HANDLE = 0, // 窗口句柄
DEVICE_NOTIFY_SERVICE_HANDLE = 1, // 服务状态句柄
DEVICE_NOTIFY_ALL_INTERFACE_CLASSES = 4, // 通知所有设备接口类的设备接口事件的接收方。 (忽略 dbcc_classguid 成员。)仅当 dbch_devicetype 成员 DBT_DEVTYP_DEVICEINTERFACE时,才能使用此值。
}
/// <summary>
/// 通过句柄,关闭指定设备的信息
/// </summary>
/// <param name="handle"></param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern bool UnregisterDeviceNotification(IntPtr handle);
/// <summary>
/// 获取一个指定类别或全部类别的所有已安装设备的信息
/// </summary>
/// <param name="gClass"></param>
/// <param name="iEnumerator"></param>
/// <param name="hParent"></param>
/// <param name="nFlags"></param>
/// <returns></returns>
[DllImport(" setupapi.dll ", SetLastError = true)]
public static extern IntPtr SetupDiGetClassDevs(ref Guid gClass, int iEnumerator, IntPtr hParent, int nFlags);
/// <summary>
/// 销毁一个设备信息集合,并且释放所有关联的内存
/// </summary>
/// <param name="lpInfoSet"></param>
/// <returns></returns>
[DllImport(" setupapi.dll ", SetLastError = true)]
public static extern int SetupDiDestroyDeviceInfoList(IntPtr lpInfoSet);
/// <summary>
/// 枚举指定设备信息集合的成员,并将数据放在SP_DEVINFO_DATA中
/// </summary>
/// <param name="lpInfoSet"></param>
/// <param name="dwIndex"></param>
/// <param name="devInfoData"></param>
/// <returns></returns>
[DllImport(" setupapi.dll ", SetLastError = true)]
public static extern bool SetupDiEnumDeviceInfo(IntPtr lpInfoSet, uint dwIndex, SP_DEVINFO_DATA devInfoData);
/// <summary>
/// 枚举指定设备信息集合的成员SetupDiEnumDeviceInfo-设备信息数据
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public class SP_DEVINFO_DATA
{
public int cbSize;
public Guid classGuid;
public int devInst;
public ulong reserved;
};
/// <summary>
/// 获取指定设备的属性
/// </summary>
/// <param name="lpInfoSet"></param>
/// <param name="DeviceInfoData"></param>
/// <param name="Property"></param>
/// <param name="PropertyRegDataType"></param>
/// <param name="PropertyBuffer"></param>
/// <param name="PropertyBufferSize"></param>
/// <param name="RequiredSize"></param>
/// <returns></returns>
[DllImport(" setupapi.dll ", SetLastError = true)]
public static extern bool SetupDiGetDeviceRegistryProperty(IntPtr lpInfoSet, SP_DEVINFO_DATA DeviceInfoData, uint Property, uint PropertyRegDataType, StringBuilder PropertyBuffer, uint PropertyBufferSize, IntPtr RequiredSize);
/// <summary>
/// 停用设备
/// </summary>
/// <param name="DeviceInfoSet"></param>
/// <param name="DeviceInfoData"></param>
/// <param name="ClassInstallParams"></param>
/// <param name="ClassInstallParamsSize"></param>
/// <returns></returns>
[DllImport(" setupapi.dll ", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool SetupDiSetClassInstallParams(IntPtr DeviceInfoSet, IntPtr DeviceInfoData, IntPtr ClassInstallParams, int ClassInstallParamsSize);
/// <summary>
/// 启用设备
/// </summary>
/// <param name="InstallFunction"></param>
/// <param name="DeviceInfoSet"></param>
/// <param name="DeviceInfoData"></param>
/// <returns></returns>
[DllImport(" setupapi.dll ", CharSet = CharSet.Auto)]
public static extern bool SetupDiCallClassInstaller(uint InstallFunction, IntPtr DeviceInfoSet, IntPtr DeviceInfoData);
// 检索 USB 设备的序列号 DeviceIoControl函数
#endregion 原始方法 Windows设备管理-程序以管理员权限运行
}
}