C# 获取CPU,硬盘,网卡信息
- 格式:docx
- 大小:36.88 KB
- 文档页数:8
using System;using System.Runtime.InteropServices;using System.Text;using System.Management;using System.Collections.Generic;namespace Hardware{public class HardwareInfo{///<summary>/// cpu序列号///</summary>public static List<string> GetCPUIds(){List<string> cpuInfos = new List<string>();ManagementClass cimobject = new ManagementClass("Win 32_Processor");ManagementObjectCollection moc = cimobject.GetInstan ces();foreach (ManagementObject mo in moc){string cpuInfo = mo.Properties["ProcessorId"].Va lue.ToString();if (!string.IsNullOrEmpty(cpuInfo)) {cpuInfos.Add(cpuInfo);}}return cpuInfos;}///<summary>///获取硬盘ID///</summary>public static List<string> GetHDIds(){List<string> hdIds = new List<string>();ManagementClass cimobject = new ManagementClass("Win 32_DiskDrive");ManagementObjectCollection moc = cimobject.GetInstanforeach (ManagementObject mo in moc){String HDid = (string)mo.Properties["Model"].Val ue.ToString();if (!string.IsNullOrEmpty(HDid)){hdIds.Add(HDid);}}return hdIds;}///<summary>///获取网卡MAC地址///</summary>public static List<string> GetMacAddresses() {List<string> macs = new List<string>();ManagementClass mc = new ManagementClass("Win32_Netw orkAdapterConfiguration");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){if ((bool)mo["IPEnabled"] == true) {string mac = mo["MacAddress"].ToString();if (!string.IsNullOrEmpty(mac)) {macs.Add(mac);}}}return macs;}}partial class IDE{[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ainternal struct IDSECTOR{public ushort wGenConfig;public ushort wNumCyls;public ushort wReserved;public ushort wNumHeads;public ushort wBytesPerTrack;public ushort wBytesPerSector;public ushort wSectorsPerTrack;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public ushort[] wVendorUnique;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] public string sSerialNumber;public ushort wBufferType;public ushort wBufferSize;public ushort wECCSize;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] public string sFirmwareRev;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)] public string sModelNumber;public ushort wMoreVendorUnique;public ushort wDoubleWordIO;public ushort wCapabilities;public ushort wReserved1;public ushort wPIOTiming;public ushort wDMATiming;public ushort wBS;public ushort wNumCurrentCyls;public ushort wNumCurrentHeads;public ushort wNumCurrentSectorsPerTrack;public uint ulCurrentSectorCapacity;public ushort wMultSectorStuff;public uint ulTotalAddressableSectors;public ushort wSingleWordDMA;public ushort wMultiWordDMA;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 128 )]public byte[] bReserved;}[StructLayout(LayoutKind.Sequential)]internal struct DRIVERSTATUS{public byte bDriverError;public byte bIDEStatus;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] bReserved;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public uint[] dwReserved;}[StructLayout(LayoutKind.Sequential)]internal struct SENDCMDOUTPARAMS{public uint cBufferSize;public DRIVERSTATUS DriverStatus;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 513 )]public byte[] bBuffer;}[StructLayout(LayoutKind.Sequential, CharSet = CharSet.A nsi)]internal struct SRB_IO_CONTROL{public uint HeaderLength;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] public string Signature;public uint Timeout;public uint ControlCode;public uint ReturnCode;public uint Length;}[StructLayout(LayoutKind.Sequential)]internal struct IDEREGS{public byte bFeaturesReg;public byte bSectorCountReg;public byte bSectorNumberReg;public byte bCylLowReg;public byte bCylHighReg;public byte bDriveHeadReg;public byte bCommandReg;public byte bReserved;}[StructLayout(LayoutKind.Sequential)]internal struct SENDCMDINPARAMS{public uint cBufferSize;public IDEREGS irDriveRegs;public byte bDriveNumber;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] bReserved;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public uint[] dwReserved;public byte bBuffer;}[StructLayout(LayoutKind.Sequential)]internal struct GETVERSIONOUTPARAMS{public byte bVersion;public byte bRevision;public byte bReserved;public byte bIDEDeviceMap;public uint fCapabilities;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public uint[] dwReserved; // For future use.}[DllImport("kernel32.dll")]private static extern int CloseHandle(uint hObject);[DllImport("kernel32.dll")]private static extern int DeviceIoControl(uint hDevice,uint dwIoContr olCode,ref SENDCMDINP ARAMS lpInBuffer,int nInBufferS ize,ref SENDCMDOUT PARAMS lpOutBuffer,int nOutBuffer Size,ref uint lpbyt esReturned,int lpOverlapp ed);[DllImport("kernel32.dll")]private static extern int DeviceIoControl(uint hDevice,uint dwIoContr olCode,int lpInBuffer,int nInBufferS ize,ref GETVERSION OUTPARAMS lpOutBuffer,int nOutBuffer Size,ref uint lpbyt esReturned,int lpOverlapp ed);[DllImport("kernel32.dll")]private static extern uint CreateFile(string lpFileName,uint dwDesiredAcce ss,uint dwShareMode,int lpSecurityAttr ibutes,uint dwCreationDis position,uint dwFlagsAndAtt ributes,int hTemplateFile);private const uint GENERIC_READ = 0x80000000;private const uint GENERIC_WRITE = 0x40000000;private const uint FILE_SHARE_READ = 0x00000001;private const uint FILE_SHARE_WRITE = 0x00000002;private const uint OPEN_EXISTING = 3;private const uint INVALID_HANDLE_VALUE = 0xffffffff;private const uint DFP_GET_VERSION = 0x00074080;private const int IDE_ATAPI_IDENTIFY = 0xA1; // Returns ID sector for ATAPI.private const int IDE_ATA_IDENTIFY = 0xEC; // Returns IDsector for ATA.private const int IDENTIFY_BUFFER_SIZE = 512;private const uint DFP_RECEIVE_DRIVE_DATA = 0x0007c088;public static string Read(byte drive){OperatingSystem os = Environment.OSVersion;if (os.Platform != PlatformID.Win32NT) throw new Not SupportedException("仅支持WindowsNT/2000/XP");//if (os.Version.Major < 5) throw new NotSupportedEx ception("仅支持WindowsNT/2000/XP");string driveName = "\\\\.\\PhysicalDrive" + drive.To String();uint device = CreateFile(driveName,GENERIC_READ | GENERIC_WRIT E,FILE_SHARE_READ | FILE_SHARE_WRITE,0, OPEN_EXISTING, 0, 0);if (device == INVALID_HANDLE_VALUE) return"";GETVERSIONOUTPARAMS verPara = new GETVERSIONOUTPARAMS();uint bytRv = 0;if (0 != DeviceIoControl(device, DFP_GET_VERSION,0, 0, ref verPara, Marshal. SizeOf(verPara),ref bytRv, 0)){if (verPara.bIDEDeviceMap > 0){byte bIDCmd = (byte)(((verPara.bIDEDeviceMap >> drive & 0x10) != 0) ? IDE_ATAPI_IDENTIFY : IDE_ATA_IDENTIFY);SENDCMDINPARAMS scip = new SENDCMDINPARAMS();SENDCMDOUTPARAMS scop = new SENDCMDOUTPARAMS ();scip.cBufferSize = IDENTIFY_BUFFER_SIZE;scip.irDriveRegs.bFeaturesReg = 0;scip.irDriveRegs.bSectorCountReg = 1;scip.irDriveRegs.bCylLowReg = 0;scip.irDriveRegs.bCylHighReg = 0;scip.irDriveRegs.bDriveHeadReg = (byte)(0xA0| ((drive & 1) << 4));scip.irDriveRegs.bCommandReg = bIDCmd;scip.bDriveNumber = drive;if (0 != DeviceIoControl(device, DFP_RECEIVE _DRIVE_DATA,ref scip, Marshal.S izeOf(scip), ref scop,Marshal.SizeOf(scop ), ref bytRv, 0)){StringBuilder s = new StringBuilder();for (int i = 20; i < 40; i += 2) {s.Append((char)(scop.bBuffer[i + 1]) );s.Append((char)scop.bBuffer[i]);}CloseHandle(device);return s.ToString().Trim();}}}CloseHandle(device);return"";}}}。