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设备管理-程序以管理员权限运行
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
- 88.
- 89.
- 90.
- 91.
- 92.
- 93.
- 94.
- 95.
- 96.
- 97.
- 98.
- 99.
- 100.
- 101.
- 102.
- 103.
- 104.
- 105.
- 106.
- 107.
- 108.
- 109.
- 110.
- 111.
- 112.
- 113.
- 114.
- 115.
- 116.
- 117.
- 118.
- 119.
- 120.
- 121.
- 122.
- 123.
- 124.
- 125.
- 126.
- 127.
- 128.
- 129.
- 130.
- 131.
- 132.
- 133.
- 134.
- 135.
- 136.
- 137.
- 138.
- 139.
- 140.
- 141.
- 142.
- 143.
- 144.
- 145.
- 146.
- 147.
- 148.
- 149.
- 150.
- 151.
- 152.
- 153.
- 154.
- 155.
- 156.
- 157.
作者:꧁执笔小白꧂