You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

231 lines
8.3 KiB
C#

9 months ago
/* ----------------------------------------------------------
* SetupApi.cs
*
*
*
* QQ36748897
*
* http://www.firstsolver.com/wordpress/
*
*
* Visual Studio V2010
* .NET Framework 4 Client Profile
*
*
* V1.0 20110905
* setupapi.dllPInvoke
*
*
* http://www.pinvoke.net/
------------------------------------------------------------ */
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace POSV.HWiNFO
{
/// <summary>
/// SetupApi.dll的PInvoke
/// </summary>
internal class SetupApi
{
#region ENUM
[Flags]
public enum DIGCF
{
DIGCF_DEFAULT = 0x00000001,
DIGCF_PRESENT = 0x00000002,
DIGCF_ALLCLASSES = 0x00000004, // 设备安装类
DIGCF_PROFILE = 0x00000008,
DIGCF_INTERFACEDEVICE = 0x00000010, // 设备接口类
}
#endregion
#region STRUCT
[StructLayout(LayoutKind.Sequential)]
public struct SP_DEVINFO_DATA
{
public static readonly SP_DEVINFO_DATA Empty = new SP_DEVINFO_DATA(Marshal.SizeOf(typeof(SP_DEVINFO_DATA)));
public uint cbSize;
public Guid ClassGuid;
public uint DevInst;
public IntPtr Reserved;
private SP_DEVINFO_DATA(int size)
{
cbSize = (uint)size;
ClassGuid = Guid.Empty;
DevInst = 0;
Reserved = IntPtr.Zero;
}
}
[StructLayout(LayoutKind.Sequential)]
public struct SP_DEVICE_INTERFACE_DATA
{
public static readonly SP_DEVICE_INTERFACE_DATA Empty = new SP_DEVICE_INTERFACE_DATA(Marshal.SizeOf(typeof(SP_DEVICE_INTERFACE_DATA)));
public uint cbSize;
public Guid InterfaceClassGuid;
public uint Flags;
public UIntPtr Reserved;
private SP_DEVICE_INTERFACE_DATA(int size)
{
cbSize = (uint)size;
InterfaceClassGuid = Guid.Empty;
Flags = 0;
Reserved = UIntPtr.Zero;
}
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct SP_DEVICE_INTERFACE_DETAIL_DATA
{
public int cbSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string DevicePath;
}
#endregion
#region API
#region SetupDiGetClassDevs
[DllImport("setupapi.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SetupDiGetClassDevs(
ref Guid ClassGuid,
[MarshalAs(UnmanagedType.LPTStr)] string Enumerator,
IntPtr hwndParent,
DIGCF Flags
);
[DllImport("setupapi.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SetupDiGetClassDevs(
IntPtr ClassGuid, // null
string Enumerator,
IntPtr hwndParent,
DIGCF Flags
);
#endregion
#region SetupDiGetClassDevsEx
[DllImport("setupapi.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SetupDiGetClassDevsEx(
ref Guid ClassGuid,
[MarshalAs(UnmanagedType.LPTStr)] string Enumerator,
IntPtr hwndParent,
DIGCF Flags,
IntPtr DeviceInfoSet,
[MarshalAs(UnmanagedType.LPTStr)] string MachineName,
IntPtr Reserved
);
[DllImport("setupapi.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SetupDiGetClassDevsEx(
IntPtr ClassGuid,
[MarshalAs(UnmanagedType.LPTStr)] string Enumerator,
IntPtr hwndParent,
DIGCF Flags,
IntPtr DeviceInfoSet,
[MarshalAs(UnmanagedType.LPTStr)] string MachineName,
IntPtr Reserved
);
#endregion
#region SetupDiEnumDeviceInterfaces
[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool SetupDiEnumDeviceInterfaces(
IntPtr hDevInfo,
ref SP_DEVINFO_DATA devInfo,
ref Guid interfaceClassGuid,
uint memberIndex,
ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData
);
[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool SetupDiEnumDeviceInterfaces(
IntPtr hDevInfo,
[MarshalAs(UnmanagedType.AsAny)] Object devInfo,
ref Guid interfaceClassGuid,
uint memberIndex,
ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData
);
#endregion
#region SetupDiGetDeviceInterfaceDetail
[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool SetupDiGetDeviceInterfaceDetail(
IntPtr hDevInfo,
ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData,
ref SP_DEVICE_INTERFACE_DETAIL_DATA deviceInterfaceDetailData,
int deviceInterfaceDetailDataSize,
out int requiredSize,
ref SP_DEVINFO_DATA deviceInfoData
);
[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool SetupDiGetDeviceInterfaceDetail(
IntPtr hDevInfo,
ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData,
ref SP_DEVICE_INTERFACE_DETAIL_DATA deviceInterfaceDetailData,
int deviceInterfaceDetailDataSize,
out int requiredSize,
[MarshalAs(UnmanagedType.AsAny)] object deviceInfoData // null
);
[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool SetupDiGetDeviceInterfaceDetail(
IntPtr hDevInfo,
ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData,
ref SP_DEVICE_INTERFACE_DETAIL_DATA deviceInterfaceDetailData,
int deviceInterfaceDetailDataSize,
IntPtr requiredSize, // null
[MarshalAs(UnmanagedType.AsAny)] object deviceInfoData // null
);
[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool SetupDiGetDeviceInterfaceDetail(
IntPtr hDevInfo,
ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData,
ref SP_DEVICE_INTERFACE_DETAIL_DATA deviceInterfaceDetailData,
int deviceInterfaceDetailDataSize,
IntPtr requiredSize, // null
IntPtr deviceInfoData
);
#endregion
#region SetupDiCreateDeviceInfoList
[DllImport("setupapi.dll", SetLastError = true)]
public static extern IntPtr SetupDiCreateDeviceInfoList(ref Guid ClassGuid, IntPtr hwndParent);
[DllImport("setupapi.dll", SetLastError = true)]
public static extern IntPtr SetupDiCreateDeviceInfoList(IntPtr ClassGuid, IntPtr hwndParent);
#endregion
[DllImport("setupapi.dll", SetLastError = true)]
public static extern bool SetupDiDestroyDeviceInfoList(IntPtr DeviceInfoSet);
[DllImport("setupapi.dll", SetLastError = true)]
public static extern bool SetupDiEnumDeviceInfo(IntPtr DeviceInfoSet, uint MemberIndex, ref SP_DEVINFO_DATA DeviceInfoData);
#region SetupDiGetDeviceInstanceId
[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool SetupDiGetDeviceInstanceId(
IntPtr DeviceInfoSet,
ref SP_DEVINFO_DATA DeviceInfoData,
StringBuilder DeviceInstanceId,
int DeviceInstanceIdSize,
out int RequiredSize
);
[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool SetupDiGetDeviceInstanceId(
IntPtr DeviceInfoSet,
ref SP_DEVINFO_DATA DeviceInfoData,
StringBuilder DeviceInstanceId,
int DeviceInstanceIdSize,
IntPtr RequiredSize
);
#endregion
#endregion
}
}