如何得到硬碟序列號 C

2021-12-29 16:36:35 字數 1810 閱讀 5548

硬碟序列號(serial number)不等於卷標號(volume name),後者雖然很容易得到,但是格式化分割槽後就會重寫,不可靠。遺憾的是很多朋友往往分不清這一點。

要得到硬碟的物理序列號,可以通過wmi,也就是win32_physicalmedia.serialnumber。可惜的是windows 98/me的wmi並不支援這個類,訪問時會出現異常。

受陸麟的例子的啟發,我們還可以通過s.m.a.r.t.介面,直接從ring3呼叫api deviceiocontrol()來獲取硬碟資訊,而不需要寫vxd或者driver。這樣這個問題就解決了,我對它進行了封裝,大量使用了p/invoke技術,乙個完整的library。支援windows 98-2003。

使用上很簡單:

harddiskinfo hdd = atapidevice.gethddinfo(0); // 第乙個硬碟

console.writeline("module number: ", hdd.modulenumber);

console.writeline("serial number: ", hdd.serialnumber);

console.writeline("firmware: ", hdd.firmware);

console.writeline("capacity: m", hdd.capacity);

下面是全部**:

using system;

using system.runtime.interopservices;

using system.text;

namespace sunmast.hardware

#region internal structs

[structlayout(layoutkind.sequential, pack=1)]

internal struct getversionoutparams

[structlayout(layoutkind.sequential, pack=1)]

internal struct ideregs

[structlayout(layoutkind.sequential, pack=1)]

internal struct sendcmdinparams

[structlayout(layoutkind.sequential, pack=1)]

internal struct driverstatus

[structlayout(layoutkind.sequential, pack=1)]

internal struct sendcmdoutparams

[structlayout(layoutkind.sequential, pack=1, size=512)]

internal struct idsector

#endregion

///

/// atapi驅動器相關

///

public class atapidevice

}#region gethddinfo9x

private static harddiskinfo gethddinfo9x(byte driveindex)

{ getversionoutparams vers = new getversionoutparams();

sendcmdinparams inparam = new sendcmdinparams();

sendcmdoutparams outparam = new sendcmdoutparams();

uint bytesreturned = 0;

intpt

C 讀取硬碟的序列號

include include include define dfp get version 0x00074080 define dfp send drive command 0x0007c084 define dfp receive drive data 0x0007c088 pragma pac...

檢視硬碟序列號

windows下使用diskpart命令 win r鍵執行cmd,進入命令列介面 1.diskpart 2.list disk 檢視有幾塊硬碟 3.select disk 0 選擇第一塊硬碟 4.detail disk 顯示選擇的硬碟詳細資訊 顯示的第一行是硬碟型號,第二行id是序列號。5.若有多塊...

讀取硬碟序列號

pragma hdrstop pragma argsused include include include include hdd.h const word ide atapi identify 0xa1 讀取atapi裝置的命令 const word ide ata identify 0xec ...