读取IDE硬盘信息类

查阅了很多资料,成功读取到IDE硬盘与SCSI硬盘的相关信息,为感谢众多网友的帮助,不敢独占,特将IDE部分的代码加上部分中文注释共享出来。
类:HDSerial,已经封装好,能够读出硬盘的大部分信息,如序列号,厂商,型号,硬盘结构等。要取得硬盘序列号,只需要创建一个HDSerial对象,调用相应的get***()即可。
原理:调用windows API或者通过汇编中断服务程序读取,本文实现的前者。
本文只实现了IDE硬盘信息的读取,而且必须要拥有管理员权限。需要读SCSI硬盘信息或者需要突破管理员权限读取的朋友可以联系我。
实现:首先通过CreateFile函数取得当前第一个物理驱动器(一般是硬盘)句柄,然后调用DeviceIOCotrol()通过进一步判断该驱动器的类型(如IDE、SCSI等),然后再根据不同的驱动器类型调用WinNTReadIDEHDSerial()获得硬盘信息。 在windows XP,VC6下编译通过。

// HDSerial.h: inte***ce for the HDSerial class.
//
//

#if !defined(AFX_HDSERIAL_H__469873D2_1336_4B56_AE16_AACD71EAB117__INCLUDED_)
#define AFX_HDSERIAL_H__469873D2_1336_4B56_AE16_AACD71EAB117__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "WinIOCtl.h"
#include "stdio.h"

#define  IDENTIFY_BUFFER_SIZE    512
#define  IOCTL_GET_VERSION    0x00074080
#define  IDE_ATAPI_IDENTIFY  0xA1  //  Returns ID sector for ATAPI.
#define  IDE_ATA_IDENTIFY    0xEC  //  Returns ID sector for ATA.
#define  IOCTL_GET_DRIVE_INFO   0x0007c088

class HDSerial  
{
private:
    typedef struct _DRIVERSTATUS
    {
        BYTE  bDriverError;  //  Error code from driver, or 0 if no error.
        BYTE  bIDEStatus;    //  Contents of IDE Error register.
        //  Only valid when bDriverError is SMART_IDE_ERROR.
        BYTE  bReserved[2];  //  Reserved for future expansion.
        DWORD  dwReserved[2];  //  Reserved for future expansion.
    } DRIVERSTATUS, *PDRIVERSTATUS, *LPDRIVERSTATUS;

    typedef struct _IDEREGS
    {
        BYTE bFeaturesReg;       // Used for specifying SMART "commands".
        BYTE bSectorCountReg;    // IDE sector count register
        BYTE bSectorNumberReg;   // IDE sector number register
        BYTE bCylLowReg;         // IDE low order cylinder value
        BYTE bCylHighReg;        // IDE high order cylin
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值