资源简介
内含获取硬盘信息的主要源代码,附带一个可视化相关的工具(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语言语法分析器
相关资源
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
- c++ 虚拟摄像头
- hook,捕获所有案件,查找所有窗口,
- C语言课设计算器
- c++ 简易贪吃蛇源码
- 高精度加法(c++代码)
- C++调用百度地图案例
- 北京化工大学计算方法(C/C++)讲义
- 基于VC++的SolidWorks二次开发SolidWorks
- c++ 模拟鼠标按键
- OFD编辑器
- Beginning C++17 From Novice to Professional
- C++ STL实现
- opencv手部轮廓识别以及轨迹识别
- 百度C++编码规范
- C++ sql2008 WebServer通讯.docx
- c++ 定时关机程序源码
- 基于VSCode和CMake实现C++开发
- c++语法查询工具
- c++ 账务系统源码
- GBT 28169-2011 嵌入式软件 C语言编码规范
- c++ 猜拳小游戏
- XUnZip Zip解压缩.rar
评论
共有 条评论