zoukankan      html  css  js  c++  java
  • 【转】如何得到硬盘序列号?.NET版本[C#]

    硬盘序列号(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: {0}", hdd.ModuleNumber);
    Console.WriteLine("Serial Number: {0}", hdd.SerialNumber);
    Console.WriteLine("Firmware: {0}", hdd.Firmware);
    Console.WriteLine("Capacity: {0} M", hdd.Capacity);

    下面是全部代码:

    Code

    注:

    在Windows 98/ME中,S.M.A.R.T并不缺省安装,请将SMARTVSD.VXD拷贝到%SYSTEM%\IOSUBSYS目录下。
    在Windows 2000/2003下,需要Administrators组的权限。
    不要在装有SCSI硬盘的机器上尝试了,因为SCSI硬盘根本不存在序列号。

  • 相关阅读:
    h5 百度获取地址
    Vue Cli项目使用PDF.js预览pdf无法访问到viewer.html
    Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead...
    VUE ES6转ES5,(ios 10.2版本,白屏,猜想es6语法原因)
    Vue+element-ui Upload 的http-request自定义上传文件
    vuejs中如何动态拼接生成字段名
    el-cascader 使用
    hdu 3555 数位dp入门
    codeforces Registration system
    hdu 1166 敌兵布阵
  • 原文地址:https://www.cnblogs.com/CCJVL/p/1369586.html
Copyright © 2011-2022 走看看