国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
C#讀取硬盤序列號(hào)

使用上很簡(jiǎn)單:

HardDiskInfo hdd = AtapiDevice.GetHddInfo(0); // 第一個(gè)硬盤
Console.WriteLine("Module Number: {0}", hdd.ModuleNumber);
Console.WriteLine("Serial Number: {0}", hdd.SerialNumber);
Console.WriteLine("Firmware: {0}", hdd.Firmware);
Console.WriteLine("Capacity: {0} M", hdd.Capacity);
 

下面是全部代碼:

using System;

using System.Runtime.InteropServices;

using System.Text;

namespace Sunmast.Hardware

{

         [Serializable]

         public struct HardDiskInfo

         {

                   /// <summary>

                   /// 型號(hào)

                   /// </summary>

                   public string ModuleNumber;

                   /// <summary>

                   /// 固件版本

                   /// </summary>

                   public string Firmware;

                   /// <summary>

                   /// 序列號(hào)

                   /// </summary>

                   public string SerialNumber;

                   /// <summary>

                   /// 容量,以M為單位

                   /// </summary>

                   public uint Capacity;

         }

 

         #region Internal Structs

 

         [StructLayout(LayoutKind.Sequential, Pack=1)]

         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.

         }

 

         [StructLayout(LayoutKind.Sequential, Pack=1)]

         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, Pack=1)]

         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, Pack=1)]

         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, Pack=1)]

         internal struct SendCmdOutParams

         {

                   public uint cBufferSize;

                   public DriverStatus DriverStatus;

                   public IdSector bBuffer;

         }

 

         [StructLayout(LayoutKind.Sequential, Pack=1, Size=512)]

         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.ByValArray, SizeConst=20)]

                   public byte[] sSerialNumber;

                   public ushort wBufferType;

                   public ushort wBufferSize;

                   public ushort wECCSize;

                   [MarshalAs(UnmanagedType.ByValArray, SizeConst=8)]

                   public byte[] sFirmwareRev;

                   [MarshalAs(UnmanagedType.ByValArray, SizeConst=40)]

                   public byte[] 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;

         }

 

         #endregion

 

         /// <summary>

         /// ATAPI驅(qū)動(dòng)器相關(guān)

         /// </summary>

         public class AtapiDevice

         {

 

                   #region DllImport

 

                   [DllImport("kernel32.dll", SetLastError=true)]

                   static extern int CloseHandle(IntPtr hObject);

 

                   [DllImport("kernel32.dll", SetLastError=true)]

                   static extern IntPtr CreateFile(

                            string lpFileName,

                            uint dwDesiredAccess,

                            uint dwShareMode,

                            IntPtr lpSecurityAttributes,

                            uint dwCreationDisposition,

                            uint dwFlagsAndAttributes,

                            IntPtr hTemplateFile);

 

                   [DllImport("kernel32.dll")]

                   static extern int DeviceIoControl(

                            IntPtr hDevice,

                            uint dwIoControlCode,

                            IntPtr lpInBuffer,

                            uint nInBufferSize,

                            ref GetVersionOutParams lpOutBuffer,

                            uint nOutBufferSize,

                            ref uint lpBytesReturned,

                            [Out] IntPtr lpOverlapped);

 

                   [DllImport("kernel32.dll")]

                   static extern int DeviceIoControl(

                            IntPtr hDevice,

                            uint dwIoControlCode,

                            ref SendCmdInParams lpInBuffer,

                            uint nInBufferSize,

                            ref SendCmdOutParams lpOutBuffer,

                            uint nOutBufferSize,

                            ref uint lpBytesReturned,

                            [Out] IntPtr lpOverlapped);

 

                   const uint DFP_GET_VERSION = 0x00074080;

                   const uint DFP_SEND_DRIVE_COMMAND = 0x0007c084;

                   const uint DFP_RECEIVE_DRIVE_DATA = 0x0007c088;

 

                   const uint GENERIC_READ = 0x80000000;

                   const uint GENERIC_WRITE = 0x40000000;

                   const uint FILE_SHARE_READ = 0x00000001;

                   const uint FILE_SHARE_WRITE = 0x00000002;

                   const uint CREATE_NEW = 1;

                   const uint OPEN_EXISTING = 3;

 

                   #endregion

 

                   #region GetHddInfo

 

                   /// <summary>

                   /// 獲得硬盤信息

                   /// </summary>

                   /// <param name="driveIndex">硬盤序號(hào)</param>

                   /// <returns>硬盤信息</returns>

                   /// <remarks>

                   /// 參考lu0的文章:http://lu0s1.3322.org/App/2k1103.html

                   /// by sunmast for everyone

                   /// thanks lu0 for his great works

                   /// Windows 98/ME中,S.M.A.R.T并不缺省安裝,請(qǐng)將SMARTVSD.VXD拷貝到%SYSTEM%\IOSUBSYS目錄下。

                   /// Windows 2000/2003下,需要Administrators組的權(quán)限。

                   /// </remarks>

                   /// <example>

                   /// AtapiDevice.GetHddInfo()

                   /// </example>

                   public static HardDiskInfo GetHddInfo(byte driveIndex)

                   {

                            switch(Environment.OSVersion.Platform)

                            {

                                     case PlatformID.Win32Windows:

                                               return GetHddInfo9x(driveIndex);

                                     case PlatformID.Win32NT:

                                               return GetHddInfoNT(driveIndex);

                                     case PlatformID.Win32S:

                                               throw new NotSupportedException("Win32s is not supported.");

                                     case PlatformID.WinCE:

                                               throw new NotSupportedException("WinCE is not supported.");

                                     default:

                                               throw new NotSupportedException("Unknown Platform.");

                            }

                   }

 

                   #region GetHddInfo9x

 

                   private static HardDiskInfo GetHddInfo9x(byte driveIndex)

                   {

                            GetVersionOutParams vers = new GetVersionOutParams();

                            SendCmdInParams inParam = new SendCmdInParams();

                            SendCmdOutParams outParam = new SendCmdOutParams();

                            uint bytesReturned = 0;

 

                            IntPtr hDevice = CreateFile(

                                     @"\\.\Smartvsd",

                                     0,

                                     0,

                                     IntPtr.Zero,

                                     CREATE_NEW,

                                     0,

                                     IntPtr.Zero);

                            if (hDevice == IntPtr.Zero)

                            {

                                     throw new Exception("Open smartvsd.vxd failed.");

                            }

                            if (0 == DeviceIoControl(

                                     hDevice,

                                     DFP_GET_VERSION,

                                     IntPtr.Zero,

                                     0,

                                     ref vers,

                                     (uint)Marshal.SizeOf(vers),

                                     ref bytesReturned,

                                     IntPtr.Zero))

                            {

                                     CloseHandle(hDevice);

                                     throw new Exception("DeviceIoControl failed:DFP_GET_VERSION");

                            }

                            // If IDE identify command not supported, fails

                            if (0 == (vers.fCapabilities & 1))

                            {

                                     CloseHandle(hDevice);

                                     throw new Exception("Error: IDE identify command not supported.");

                            }

                            if (0 != (driveIndex & 1))

                            {

                                     inParam.irDriveRegs.bDriveHeadReg = 0xb0;

                            }

                            else

                            {

                                     inParam.irDriveRegs.bDriveHeadReg = 0xa0;

                            }

                            if (0 != (vers.fCapabilities & (16 >> driveIndex)))

                            {

                                     // We don't detect a ATAPI device.

                                     CloseHandle(hDevice);

                                     throw new Exception(string.Format("Drive {0} is a ATAPI device, we don't detect it",driveIndex + 1));

                            }

                            else

                            {

                                     inParam.irDriveRegs.bCommandReg = 0xec;

                            }

                            inParam.bDriveNumber = driveIndex;

                            inParam.irDriveRegs.bSectorCountReg = 1;

                            inParam.irDriveRegs.bSectorNumberReg = 1;

                            inParam.cBufferSize = 512;

                            if (0 == DeviceIoControl(

                                     hDevice,

                                     DFP_RECEIVE_DRIVE_DATA,

                                     ref inParam,

                                     (uint)Marshal.SizeOf(inParam),

                                     ref outParam,

                                     (uint)Marshal.SizeOf(outParam),

                                     ref bytesReturned,

                                     IntPtr.Zero))

                            {

                                     CloseHandle(hDevice);

                                     throw new Exception("DeviceIoControl failed: DFP_RECEIVE_DRIVE_DATA");

                            }

                            CloseHandle(hDevice);

 

                            return GetHardDiskInfo(outParam.bBuffer);

                   }

 

                   #endregion

 

                   #region GetHddInfoNT

 

                   private static HardDiskInfo GetHddInfoNT(byte driveIndex)

                   {

                            GetVersionOutParams vers = new GetVersionOutParams();

                            SendCmdInParams inParam = new SendCmdInParams();

                            SendCmdOutParams outParam = new SendCmdOutParams();

                            uint bytesReturned = 0;

 

                            // We start in NT/Win2000

                            IntPtr hDevice = CreateFile(

                                     string.Format(@"\\.\PhysicalDrive{0}",driveIndex),

                                     GENERIC_READ | GENERIC_WRITE,

                                     FILE_SHARE_READ | FILE_SHARE_WRITE,

                                     IntPtr.Zero,

                                     OPEN_EXISTING,

                                     0,

                                     IntPtr.Zero);

                            if (hDevice == IntPtr.Zero)

                            {

                                     throw new Exception("CreateFile faild.");

                            }

                            if (0 == DeviceIoControl(

                                     hDevice,

                                     DFP_GET_VERSION,

                                     IntPtr.Zero,

                                     0,

                                     ref vers,

                                     (uint)Marshal.SizeOf(vers),

                                     ref bytesReturned,

                                     IntPtr.Zero))

                            {

                                     CloseHandle(hDevice);

                                     throw new Exception(string.Format("Drive {0} may not exists.",driveIndex + 1));

                            }

                            // If IDE identify command not supported, fails

                            if (0 == (vers.fCapabilities & 1))

                            {

                                     CloseHandle(hDevice);

                                     throw new Exception("Error: IDE identify command not supported.");

                            }

                            // Identify the IDE drives

                            if (0 != (driveIndex & 1))

                            {

                                     inParam.irDriveRegs.bDriveHeadReg = 0xb0;

                            }

                            else

                            {

                                     inParam.irDriveRegs.bDriveHeadReg=0xa0;

                            }

                            if (0 != (vers.fCapabilities & (16 >> driveIndex)))

                            {

                                     // We don't detect a ATAPI device.

                                     CloseHandle(hDevice);

                                     throw new Exception(string.Format("Drive {0} is a ATAPI device, we don't detect it.",driveIndex + 1));

                            }

                            else

                            {

                                     inParam.irDriveRegs.bCommandReg = 0xec;

                            }

                            inParam.bDriveNumber = driveIndex;

                            inParam.irDriveRegs.bSectorCountReg = 1;

                            inParam.irDriveRegs.bSectorNumberReg = 1;

                            inParam.cBufferSize = 512;

 

                            if (0 == DeviceIoControl(

                                     hDevice,

                                     DFP_RECEIVE_DRIVE_DATA,

                                     ref inParam,

                                     (uint)Marshal.SizeOf(inParam),

                                     ref outParam,

                                     (uint)Marshal.SizeOf(outParam),

                                     ref bytesReturned,

                                     IntPtr.Zero))

                            {

                                     CloseHandle(hDevice);

                                     throw new Exception("DeviceIoControl failed: DFP_RECEIVE_DRIVE_DATA");

                            }

                            CloseHandle(hDevice);

 

                            return GetHardDiskInfo(outParam.bBuffer);

                   }

 

                   #endregion

 

                   private static HardDiskInfo GetHardDiskInfo(IdSector phdinfo)

                   {

                            HardDiskInfo hddInfo = new HardDiskInfo();

 

                            ChangeByteOrder(phdinfo.sModelNumber);

                            hddInfo.ModuleNumber = Encoding.ASCII.GetString(phdinfo.sModelNumber).Trim();

 

                            ChangeByteOrder(phdinfo.sFirmwareRev);

                            hddInfo.Firmware = Encoding.ASCII.GetString(phdinfo.sFirmwareRev).Trim();

 

                            ChangeByteOrder(phdinfo.sSerialNumber);

                            hddInfo.SerialNumber = Encoding.ASCII.GetString(phdinfo.sSerialNumber).Trim();

 

                            hddInfo.Capacity = phdinfo.ulTotalAddressableSectors / 2 / 1024;

 

                            return hddInfo;

                   }

 

                   private static void ChangeByteOrder(byte[] charArray)

                   {

                            byte temp;

                            for(int i = 0; i < charArray.Length; i += 2)

                            {

                                     temp = charArray[i];

                                     charArray[i] = charArray[i+1];

                                     charArray[i+1] = temp;

                            }

                   }

 

                   #endregion

         }

}

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C#和C++下數(shù)據(jù)類型對(duì)應(yīng)表
基于C#的通信協(xié)議封包(附代碼)
使用C#獲取CPU及硬盤序列號(hào)的源代碼
.net下簡(jiǎn)單快捷的數(shù)值高低位切換
c#類,封裝了鍵盤,和鼠標(biāo)模擬,和內(nèi)存讀取(申精)(頁(yè) 1) - 網(wǎng)絡(luò)安全 - ZDNet...
C# 使用Google API進(jìn)行手機(jī)基站定位資料整理
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服