资源简介
内含获取硬盘信息的主要源代码,附带一个可视化相关的工具(win7需要以管理员身份运行)
PS:本资源为网络资源,非本人原创
代码片段和文件信息
// MyDiskInfo.cpp: implementation of the CMyDiskInfo class.
//
//////////////////////////////////////////////////////////////////////
#include “stdafx.h“
#include “DiskInfo.h“
#include “MyDiskInfo.h“
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
const WORD IDE_ATAPI_IDENTIFY = 0xA1; // 读取ATAPI设备的命令
const WORD IDE_ATA_IDENTIFY = 0xEC; // 读取ATA设备的命令
#define _WIN32_WINNT 0x0400
#include “winioctl.h“
//#include “NTDDSCSI.h“
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMyDiskInfo::CMyDiskInfo()
{
}
CMyDiskInfo::~CMyDiskInfo()
{
}
BOOL __fastcall DoIdentify( HANDLE hPhysicalDriveIOCTL
PSENDCMDINPARAMS pSCIP
PSENDCMDOUTPARAMS pSCOP
BYTE btIDCmd
BYTE btDriveNum
PDWORD pdwBytesReturned)
{
pSCIP->cBufferSize = IDENTIFY_BUFFER_SIZE;
pSCIP->irDriveRegs.bFeaturesReg = 0;
pSCIP->irDriveRegs.bSectorCountReg = 1;
pSCIP->irDriveRegs.bSectorNumberReg = 1;
pSCIP->irDriveRegs.bCylLowReg = 0;
pSCIP->irDriveRegs.bCylHighReg = 0;
pSCIP->irDriveRegs.bDriveHeadReg = (btDriveNum & 1) ? 0xB0 : 0xA0;
pSCIP->irDriveRegs.bCommandReg = btIDCmd;
pSCIP->bDriveNumber = btDriveNum;
pSCIP->cBufferSize = IDENTIFY_BUFFER_SIZE;
return DeviceIoControl( hPhysicalDriveIOCTL
SMART_RCV_DRIVE_DATA
(LPVOID)pSCIP
sizeof(SENDCMDINPARAMS) - 1
(LPVOID)pSCOP
sizeof(SENDCMDOUTPARAMS) + IDENTIFY_BUFFER_SIZE - 1
pdwBytesReturned NULL);
}
char *__fastcall ConvertToString(DWORD dwDiskData[256] int nFirstIndex int nLastIndex)
{
static char szResBuf[1024];
char ss[256];
int nIndex = 0;
int nPosition = 0;
for(nIndex = nFirstIndex; nIndex <= nLastIndex; nIndex++)
{
ss[nPosition] = (char)(dwDiskData[nIndex] / 256);
nPosition++;
// Get low BYTE for 2nd character
ss[nPosition] = (char)(dwDiskData[nIndex] % 256);
nPosition++;
}
// End the string
ss[nPosition] = ‘\0‘;
int i index=0;
for(i=0; i {
if(ss[i]==0 || ss[i]==32) continue;
szResBuf[index]=ss[i];
index++;
}
szResBuf[index]=0;
return szResBuf;
}
int CMyDiskInfo::GetDiskInfo(int driver)
{
CString sFilePath;
sFilePath.Format(“\\\\.\\PHYSICALDRIVE%d“ driver);
HANDLE hFile = INVALID_HANDLE_VALUE;
hFile = ::CreateFile(sFilePath
GENERIC_READ | GENERIC_WRITE
FILE_SHARE_READ | FILE_SHARE_WRITE
NULL OPEN_EXISTING
0 NULL);
if (hFile == INVALID_HANDLE_VALUE) return -1;
DWORD dwBytesReturned;
GETVERSIONINPARAMS gvopVersionParams;
DeviceIoControl(hFile
SMART_GET_VERSION
NULL
0
&gvopVersionParams
sizeof(gvopVersionParams)
&dwBytesReturned NULL);
if(gvopVersionParams.bIDEDeviceMap <= 0) r
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 28672 2005-12-01 02:15 DiskInfo.exe
文件 612 2005-12-01 02:16 MyDiskInfo.h
文件 3983 2005-12-01 02:16 MyDiskInfo.cpp
- 上一篇:编写程序实现对M位学生的N门课程成绩进行统计分析
- 下一篇:简单的c语言语法分析器
相关资源
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
评论
共有 条评论