• WindowsAPIC#版_设备管理常用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设备管理-程序以管理员权限运行
        }
    }
  • 相关阅读:
    2014上半年-学习目录
    c++中智能输出文件
    如何在微博侧栏中加入自己的微博[js]
    oracle数据库性能
    Arcgis for Android 空间数据WKT与JSON描述
    echart 折线图、柱状图、饼图、环形图颜色修改
    Echarts横坐标倾斜,顶部显示数字
    解决svn中“工作副本已经锁定”,或者svn清理失败的解决方法
    Oracle 空间查询, 数据类型为 sdo_geometry
    OSS上无法使用字体文件解决方案
  • 原文地址:https://www.cnblogs.com/qq2806933146xiaobai/p/16895258.html
Copyright © 2020-2023  润新知