本文章转载 ,转载请保留版权本文章转载 ,转载请保留版权硬盘序列号( Serial Number )不等于卷标号( Volume Name ) ,后者虽然很容易得到,但是格式化分区后就会重写,不可靠。遗憾的是很多朋友往往分不清这一点。要得到硬盘的物理序列号,可以通过 WMI ,也就是 。可惜的是 Windows 98/ME 的 WMI 并不支持这个类,访问时会出现异常。受陆麟的例子的启发,我们还可以通过 . 接口,直接从 RING3 调用 API DeviceIoControl() 来获取硬盘信息, 而不需要写 VXD 或者 DRIVER 。这样这个问题就解决了, 我对它进行了封装, 大量使用了 P/Invoke 技术, 一个完整的 Library 。支持 Windows 98-2003 。使用上很简单: HardDiskInfo hdd = (0); // 第一个硬盘 ("Module Number: {0}", ); ("Serial Number: {0}", ); ("Firmware: {0}", ); ("Capacity: {0} M", ); 下面是全部代码: using System; using ; using ; namespace { [Serializable] public struct HardDiskInfo { /// <summary> /// 型号/// </summary> public string ModuleNumber; /// <summary> /// 固件版本/// </summary> public string Firmware; 本文章转载 ,转载请保留版权本文章转载 ,转载请保留版权/// <summary> /// 序列号/// </summary> public string SerialNumber; /// <summary> /// 容量,以 M 为单位/// </summary> public uint Capacity; } #region Internal Structs [StructLayout(, Pack=1)] internal struct GetVersionOutParams { public byte bVersion; public byte bRevision; public byte bReserved; public byte bIDEDeviceMap; public uint fCapabilities; [MarshalAs(, SizeConst=4)] public uint[] dwReserved; // For future use. } [StructLayout(, 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(, Pack=1)] internal struct SendCmdInParams { 本文章转载 ,转载请保留版权本文章转载 ,转载请保留版权 public uint cBufferSize; public IdeRegs irDriveRegs; public byte bDriveNumber; [MarshalAs(, SizeConst=3)] public byte[] bReserved; [MarshalAs(Un
如何得到硬盘序列号[C#] 来自淘豆网www.taodocs.com转载请标明出处.