zoukankan      html  css  js  c++  java
  • 获取CPU,硬盘,网卡信息

    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("Win32_Processor");
                ManagementObjectCollection moc 
    = cimobject.GetInstances();
                
    foreach (ManagementObject mo in moc)
                
    {
                    
    string cpuInfo = mo.Properties["ProcessorId"].Value.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("Win32_DiskDrive");
                ManagementObjectCollection moc 
    = cimobject.GetInstances();
                
    foreach (ManagementObject mo in moc)
                
    {
                    String HDid 
    = (string)mo.Properties["Model"].Value.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_NetworkAdapterConfiguration");
                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.Ansi)]
            
    internal 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.Ansi)]
            
    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 dwIoControlCode,
                                                      
    ref SENDCMDINPARAMS lpInBuffer,
                                                      
    int nInBufferSize,
                                                      
    ref SENDCMDOUTPARAMS lpOutBuffer,
                                                      
    int nOutBufferSize,
                                                      
    ref uint lpbytesReturned,
                                                      
    int lpOverlapped);

            [DllImport(
    "kernel32.dll")]
            
    private static extern int DeviceIoControl(uint hDevice,
                                                      
    uint dwIoControlCode,
                                                      
    int lpInBuffer,
                                                      
    int nInBufferSize,
                                                      
    ref GETVERSIONOUTPARAMS lpOutBuffer,
                                                      
    int nOutBufferSize,
                                                      
    ref uint lpbytesReturned,
                                                      
    int lpOverlapped);

            [DllImport(
    "kernel32.dll")]
            
    private static extern uint CreateFile(string lpFileName,
                                                  
    uint dwDesiredAccess,
                                                  
    uint dwShareMode,
                                                  
    int lpSecurityAttributes,
                                                  
    uint dwCreationDisposition,
                                                  
    uint dwFlagsAndAttributes,
                                                  
    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 ID sector 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 NotSupportedException("仅支持WindowsNT/2000/XP");

                
    //if (os.Version.Major < 5) throw new NotSupportedException("仅支持WindowsNT/2000/XP"); 

                
    string driveName = "\\\\.\\PhysicalDrive" + drive.ToString();
                
    uint device = CreateFile(driveName,
                                         GENERIC_READ 
    | GENERIC_WRITE,
                                         FILE_SHARE_READ 
    | FILE_SHARE_WRITE,
                                         
    0, OPEN_EXISTING, 00);
                
    if (device == INVALID_HANDLE_VALUE) return "";
                GETVERSIONOUTPARAMS verPara 
    = new GETVERSIONOUTPARAMS();
                
    uint bytRv = 0;

                
    if (0 != DeviceIoControl(device, DFP_GET_VERSION,
                                         
    00ref 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.SizeOf(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 "";
            }

        }

    }
  • 相关阅读:
    121. Best Time to Buy and Sell Stock
    70. Climbing Stairs
    647. Palindromic Substrings
    609. Find Duplicate File in System
    583. Delete Operation for Two Strings
    556 Next Greater Element III
    553. Optimal Division
    539. Minimum Time Difference
    537. Complex Number Multiplication
    227. Basic Calculator II
  • 原文地址:https://www.cnblogs.com/yvesliao/p/1587588.html
Copyright © 2011-2022 走看看