读取IDE硬盘信息类

[AI] 本地部署 Dify 遇到 Internal Error?一文彻底解决密码不一致引发的问题 摘要:Dify本地部署常见InternalError错误主要由配置残留或密码不一致导致,特别是修改.env文件后未同步清除数据库记录。彻底解决方案包括:1)清理Docker数据;2)删除旧配置和数据库;3)还原源代码;4)重建.env文件;5)重新初始化部署。关键提醒:记录部署路径、备份.env文件并妥善保存密码。该错误本质是配置冲突,最有效方法是完全重置而非调试,保持清晰的部署管理可避免多数InternalError问题。(149字) 阅读详情
查阅了很多资料,成功读取到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 cylinder value
        BYTE bDriveHeadReg;      // IDE drive/head register
        BYTE bCommandReg;        // Actual IDE command.
        BYTE bReserved;          // reserved for future use.  Must be zero.
    } IDEREGS, *PIDEREGS, *LPIDEREGS;

    typedef struct _SENDC
汇编语言实现硬盘信息读取教程 SMART(Self-Monitoring, Analysis, and Reporting Technology)是一种硬盘监控技术,它允许硬盘检测和报告其自身的状态,包括读写错误、驱动器性能下降等问题。通过SMART,用户可以提前得知硬盘可能出现的故障,及时采取措施备份数据,避免数据丢失。SMART技术通常在硬盘的固件中实现,它可以对硬盘的多种参数进行监控,如启动次数、校准次数、读写错误率等。用户或系统管理员可以通过软件工具查询SMART信息,从而评估硬盘的健康状况。 阅读详情

相关推荐

IDE接口硬盘读写技术

分析了IDE接口硬盘控制寄存器模型;论述了IDE接口硬盘的读写几项技术;给出了设计硬盘克 隆软件的思想和方法,方法针对硬盘物理扇区进行读写,与硬盘上安装的具体操作系统的型无关,并与硬 盘驱动器的物理结构无关。结合C语言与汇编语言,经实际应用验证,方法简便,具有较强的实用性。

VB读取硬盘序列号

PrivateConstMAX_IDE_DRIVESAsLong=4PrivateConstIDENTIFY_BUFFER_SIZEAsLong=512PrivateConstDFP_SEND_DRIVE_COMMANDAsLong=&H7C084PrivateConstDFP_RECEIVE_DRIVE...

aonb43971的博客 503

ocean-master_opengl_海洋模拟_ocean_

通过OpenGL实现一个简单的海洋模拟,不涉及光照。

获取硬盘的详细信息 (转)

Q 用IOCTL_DISK_GET_DRIVE_GEOMETRY或IOCTL_STORAGE_GET_MEDIA_TYPES_EX只能得到很少的磁盘参数,我想获得包括硬盘序列号在内的更加详细的信息,有什么办法呀? A 确实,用你所说的I/O控制码,只能得到最基本的磁盘参数。获取磁盘出厂信息的I/O控制码,微软在VC/MFC环境中没有开放,在DDK中可以发现一些线索。早先,Lynn McGui...

weixin_33774883的博客 487

IDE 和SCSI简介

IDE 和SCSI 的简介         一、背景         在学习Linux的过程中,经常会遇到IDE和SCSI概念。由于不了解IDE和SCSI,所以找了点资料学习。

冰冻三尺非一日之寒 8541

vsstudio2019,windows平台,使用DeviceIOControl向大容量存储设备发起SCSI通信,读写其扇区,绕过文件系统的排查;

遇到的问题:返回的可用长度一直是44,但是我强制输出512的长度时发现缓冲区的数据都是正确的;如下使用DeviceIOControl发送MSC规定的SCSI通信指令中。指定读0扇区,读1长度的扇区,一共长度为512字节。电脑插入U盘,为物理驱动器3。

qq_64777806的博客 668

计算机是白色的两种英文翻译,电脑一开机就出现这种黑屏白色英文单词, 这上面到底讲什么内容呢?...

这组黑屏在生活中会经常遇到英文:IDE Channel 0,Master Disk HDD S.M.A.R.T Capability ..... Disabled翻译:IDE通道0,主硬盘HDD性能无效。英文:PCI Devices Listing......翻译:PCI设备列表。英文:Bus Dev Fun Vendor Device SVID SSID Class Device Class翻译...

weixin_39608116的博客 2257

在Win平台得到磁盘、CPU、用户信息

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34257076的博客 202

C# 读取IDE硬盘序列号

public class IDE{    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]    internal struct IDSECTOR    {        public ushort wGenConfig;        public ushort wNumCyls;        public ushort

Firestone的C#学习历程 1422

linux 硬盘信息查看

hdparm命令磁盘管理 hdparm命令提供了一个命令行的接口用于读取和设置IDE或SCSI硬盘参数。 语法 hdparm(选项)(参数) 选项 -a<快取分区>:设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定; -A<0或1>:启动或关闭读取文件时的快取功能; -c<I/O模式>:设定IDE...

weixin_30872499的博客 2446

机械硬盘接口型(IDE、SATA、SCSI、SAS)

1、IDE接口(ATA同IDEIDE(Integrated Drive Electronics,电子集成驱动器),包括PIO(Programming I/O)和DMA(Direct Memory Access) 两种传输模式。 ATA(Advanced Technology Attachment,高技术配置),ATA本身可以支持串行或并行。最快的并行ATA(即ATA/133)所能达到133MB/sec,现在市场上几乎没有IDE接口的硬盘了。 IDE接口的硬盘价格低廉、兼容性强、性价比高。但是,数据传输速

Jack_LEGION的专栏 6万+

Win32 读取硬盘信息实例

WIN32 API读取硬盘信息打开硬盘句柄IDSECTOR方式读取STORAGE_PROPERTY_QUERY方式读取参考 打开硬盘句柄 使用CreateFile方式打开硬盘。 QString filePath = QString("\\\\.\\PhysicalDrive%1").arg(index); fileHandler = CreateFileA(filePath.toLocal8Bit().data(), GENERIC_READ | GEN

Albert_song的博客 1044

【物联网】磁介质存储设备——机械硬盘_硬盘信息分布

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

2401_83703951的博客 1278

磁盘驱动与虚拟磁盘Miniport驱动二

接上文。 上文讲了虚拟磁盘驱动的简单概念和如何初始化。 注意这里讨论的是磁盘存储的Miniport驱动,而非filedisk驱动,两者是不同的。 上文已经简单说明了他们的区别。 以微软的Stoport或Scsiport端口模型为依据,scsiport是微软的很早前的端口模型, 但是此接口很多地方都不如人意,尤其是没有虚拟磁盘的概念。 Storport是微软一直发展和推荐的端口模型,也是

fanxiushu的专栏 5908

通过DeviceIoControl以SCSI命令向USB设备写入数据

然而在实际使用中,会发现DeviceIoControl会失败,并且通过GetLastError返回的错误码为5,表示没有权限,后来查阅了资料发现在写入前需要锁定卷。其中关于SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER的声明依赖于spti.h,这个文件可以在微软官方找到。下面是ChatGpt给出的一段代码。如此之后,便可以正常写入。

weixin_42448372的博客 1477

台式机 接两块IDE串口硬盘

<br />有两种方法:<br />1. 接到不同的IDE线上,在没有光驱的情况下,一块硬盘接到硬盘IDE线上,还有一块接到光驱的IDE线上,这种方法简单,并且不需要进行任何设置<br />2. 接到同一根IDE线上。<br />    需要设置两块硬盘,一块为MASTER,一块为SLAVE,在硬盘的正面,一般会有图示或者文字,提示如何设置跳线。<br />    跳线也就是一个像小盖子一样的东西,嵌在硬盘4个针孔的那个插口里,位于电源和串口之间。<br />    一般情况下,主硬盘默认选择跳第一个就可

chengli42的专栏 2786

xv6对硬盘的操作

<br />硬盘IDE(integrate device electronics)的读取方式一chs (柱面,磁头,扇区)二:LBA(logicblockaddress)它是为了适应硬盘容量的快速生成出现的;<br />下面介绍在LBA的模式下的PIO(program IO)来实现对磁盘的读取操作;<br />主板有两个iDE通道,每个通道可挂载两个硬盘:访问第一个通道的第一个硬盘的扇区使用IO地址寄存器(0x1f0,0x1f1,0x1f2,0x1f3,0x1f4,0x1f5,0x1f6,0x1f7);访问

tianxingjian1980的专栏 1524

在驱动中写磁盘文件

驱动层是不可以调用标准库的,那么想要在驱动中直接写磁盘文件要怎么办? 一、到底可不可行? 这里的文章,详细地追踪了系统调用的实现,并提供了一种直接访问的方法。 总结如下:      1.在系统调用open的流程中,会调用getname()函数,里面会使用get_fs()判断文件名字符串的地址,如果属于3~4G,也就是内核空间,返回错误。是用户空间的,则拷贝到内核空间。在系统调用read的流

joker0910的专栏 2831

IDE硬盘驱动器读写过程

Linux内核在缺省配置下最多支持10个IDE接口,IDE接口用ide_hwif_t结构来描述,每个IDE接口具有一对主-从驱动器接口,它们用ide_drive_t结构来描述,每个驱动器接口可接不同种IDE设备,如IDE硬盘,光驱等,它们用ide_driver_t结构来描述.  每个驱动器接口包含一个命令请求队列,用request_queue_t结构来描述,具体的请求用request结构来描

ninver2007的专栏 1632
下一篇: 一个中年职场老油子对应届生谈招聘
qi374420
博客等级 码龄21年 0粉丝 1原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值