基于WinApi硬盘监测系统设计与实现.docVIP

  • 15
  • 0
  • 约2.77千字
  • 约 7页
  • 2018-08-28 发布于福建
  • 举报
基于WinApi硬盘监测系统设计与实现

基于WinApi硬盘监测系统设计与实现   摘要:针对基于WinApi的硬盘监测系统的设计,采取了window下的DeviceIoControl API函数为主要技术,利用C++中的MFC框架实现整个系统工程,给出了基于WinApi的硬盘监测系统设计关键架构与实现伪代码,搭建具体环境针对系统大体功能进行测试,运行正常。   关键词:DeviceIoControl,硬盘监测,MFC,Windows   1.引言   目前,家用计算机大多是Windows操作系统,计算机也采用经典的冯诺依曼结构,具有独立的存储器,随着计算机越来越普及,作为计算机存储器硬盘的性能越来越受到关注,能有效的检测一个正在运行的硬盘的性能好坏,对硬盘的损坏有一定的预警,及时提醒用户保存转移备份硬盘上的重要数据有非常重要的作用。   2.系统设计与基本原理   针对系统功能的需求,主流的设计实现方式有几种,基于WinApi函数,基于外部的驱动程序,基于外接扩展卡即,基于SATA TO PCIE核的嵌入式扩展卡,基于外部驱动程序,自由度比较高,设计者自定义通讯命令格式,不足之处需要控制驱动与Windows自身文件系统的冲突,基于SATA TO PCIE核的嵌入式扩展卡,系统的反盗版机制,安全系数会较好,能对软件进行硬件绑定,不足之处除了前者,成本相对也较高,设计者针对这些不足之处,采用基于WinApi的方式实现系统的功能需求。   2.1系统基本原理   硬盘的最小处理单元是扇区,针对硬盘出现的慢扇区和坏扇区,系统能监测到,并且能及时的预警提醒用户。WinApi是windows系统对外提供的应用程序编程接口,设计者通过调用WinApi函数实现特定的windows系统功能,设计者根据系统的功能需要,主要用WinApi中的DeviceIoControl函数与挂载在计算机上的系统硬盘进行通讯,通过发送给硬盘的检测命令的相隔时间,得到一个监测扇区的超时值是否在正常范围,利用这个时间值,反应在系统的用户交互界面中。   2.2系统功能设计   设计者给出系统的UML功能用例图显示,用户的交互达到预期,客户端是一个全后台工作的系统,对外提供InI配置文件接口,同时能完成自启动过程,完成初始化工作,自动获取系统硬盘的基本信息,同时做好空闲扫描的准备工作,功能的详细用例。   3.硬盘监测系统设计实现   针对硬盘级别监测领域国内外都处于启蒙阶段,设计者提出基于WinApi的硬盘监控系统的完整解决方案,对硬盘数据保护领域有着至关重要的作用,系统有别于国内市场的鲁大师等基于系统级别的检测,该系统是基于硬盘扇区级别的检测,其预警准确性较高,系统的实现采用C++中的MFC技术。   3.1系统扇区监测核心模块设计   由于整个系统单元数较多,代码量大,设计者在此仅给出初始化,硬盘扇区监测模块的具体设计思路和伪代码。   程序初始化   设计实现,初始化需要读取系统的Ini配置文件,初始化完成,系统的自启动注册,防火墙设置,用户名,密码等需要初始化完成的步骤。设计者运用到了很多C++编程技巧以及C++的编程技术实现该模块,由于篇幅有限,在此仅给出了部分伪代码如下:   //初始化客户端用户信息   ::GetPrivateProfileString(_T(“settings”),_T(“SN”),NULL,SN.GetBufferSetLength(MAX_PATH),MAX_PATH,strText);   //注册自启动   RegisterSelfStart();   keyStr=_T(“Software\\Microsoft\\Windows\\CurrentVersion\\Run”);   ::RegSetValueEx(hRegKey,…)   硬盘扇区监测模块   设计者采用的主要技术是WinApi函数DeviceIoControl实现,利用该函数发送监测扇区标准ATA命令,统计命令处理时间,得到扇区的超时时间,系统根据超时时间判断硬盘的本次监测结果,由于篇幅有限,在此仅给出了部分伪代码如下:   //填充命令字中的LBA地址,和扫描区块大小   btIn[30]=BYTE(ulLBA24);……btIn[36]=btBlockSize;   //==开始计时==//   DWORD dwTimeBegin=GetTickCount();   if(!::DeviceIoControl(hDevice,0x4d004,btIn,0x4c,NULL,0,dwSize,NULL))   DWORD dwTimeEnd=GetTickCount();   dwTime=dwTimeEnd-dwTimeBegin

文档评论(0)

1亿VIP精品文档

相关文档