WindowsAPI-C#版_设备管理常用API
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设备管理-程序以管理员权限运行
}
}
本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/p/16895258.html
分类:
C#+WindowsAPI
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
2021-11-16 C#-MD5算法 16 32 大小写