• 获取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 "";
            }

        }

    }
  • 相关阅读:
    QuickFlash
    第五课:类的封装性 M
    第六课:构造方法、匿名对象 M
    第四课:面向对象(基础) M
    第八课:引用传递 M
    第七课:String类 M
    第二课:数组 M
    第三课:方法 M
    ASP .Net的应用程序域(The Application Domain)
    js 解数独程序
  • 原文地址:https://www.cnblogs.com/yvesliao/p/1587588.html
Copyright © 2020-2023  润新知