(1)先用函数
CreateFile
获取硬盘的句柄
h;
(2)然后用函数
DeviceIoControl
得到硬盘扇区大小;
(3)之后用函数
SetFilePointerEx
将硬盘的文件指针移动到要读取的位置;
(4)最后用
ReadFile
读取数据。
第二步是必要的,因为对硬盘的ReadFile/WriteFile/SetFilePointer等 *** 作,必须读/写/将指针移动扇区大小的整数倍
得到磁盘方法如下:
CString CurDiskNo; //当前录像的盘符号
CString TotalDiskSize; //当前录像盘的总大小
CString FreeDiskSize; //当前录像盘和剩余空间
char cName[4 m_iMaxCount] = {0};
char sDiskPath[4 m_iMaxCount] = {0};
GetModuleFileName(NULL, cName, sizeof(cName)); //得到当前运行程序的路径
CString sSettingFile;
sSettingFileFormat("%s", cName);
sSettingFile = sSettingFileLeft(sSettingFileReverseFind('//'));
sSettingFile = sSettingFile + "//" + "Settingini";
//得到配置文件的全路径,录像盘的盘符保存在Settingini中
GetPrivateProfileString("disk", "path", NULL, sDiskPath, sizeof(sDiskPath), sSettingFile);
//从配置文件中得到盘符
char DiskName[4];
DiskName[0] = sDiskPath[0];
DiskName[1] = sDiskPath[1];
DiskName[2] = sDiskPath[2];
DiskName[3] = '/0';
ULARGE_INTEGER lpuse;
ULARGE_INTEGER lptotal;
ULARGE_INTEGER lpfree;
GetDiskFreeSpaceEx(DiskName,&lpuse,&lptotal,&lpfree);
//得到DiskName盘符的的总容量、已用空间大小、剩余空间大小
TotalDiskSizeFormat("总空间:%42fGB",lptotalQuadPart/10240/10240/10240);
FreeDiskSizeFormat("可用空间:%42fGB",lpfreeQuadPart/10240/10240/10240);
CurDiskNoFormat("当前磁盘:%s",sDiskPath);
Settingini文件内容如下:
[package]
time=1
[disk]
path=E:/
那么上面的DiskName就是 E:/ 得到的就是E盘的空间大小
备注:要把Settingini文件放到执行文件的目录下。
BOOL __fastcall DoIdentify( HANDLE hPhysicalDriveIOCTL,
PSENDCMDINPARAMS pSCIP,
PSENDCMDOUTPARAMS pSCOP,
BYTE btIDCmd,
BYTE btDriveNum,
PDWORD pdwBytesReturned)
{
pSCIP->cBufferSize = IDENTIFY_BUFFER_SIZE;
pSCIP->irDriveRegsbFeaturesReg = 0;
pSCIP->irDriveRegsbSectorCountReg = 1;
pSCIP->irDriveRegsbSectorNumberReg = 1;
pSCIP->irDriveRegsbCylLowReg = 0;
pSCIP->irDriveRegsbCylHighReg = 0;
pSCIP->irDriveRegsbDriveHeadReg = (btDriveNum & 1) 0xB0 : 0xA0;
pSCIP->irDriveRegsbCommandReg = 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<nPosition; i++)
{
if(ss[i]==0 || ss[i]==32) continue;
szResBuf[index]=ss[i];
index++;
}
szResBuf[index]=0;
return szResBuf;
}
int GetID() //主函数
{
//创建设备对象,得到设备句柄,设备为硬盘。
CString sFilePath;
sFilePathFormat("\\\\\\PHYSICALDRIVE%d", driver);
HANDLE hFile=::CreateFile(sFilePath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING,
0, NULL);
DWORD dwBytesReturned;
GETVERSIONINPARAMS gvopVersionParams;
DeviceIoControl(hFile, //向设备对象发送SMART_GET_VERSION设备请求,获取硬盘属性
SMART_GET_VERSION,
NULL,
0,
&gvopVersionParams,
sizeof(gvopVersionParams),
&dwBytesReturned, NULL);
if(gvopVersionParamsbIDEDeviceMap <= 0) return -2;
//发送SMART_RCV_DRIVE_DATA设备请求,获取硬盘详细信息。
// IDE or ATAPI IDENTIFY cmd
int btIDCmd = 0;
SENDCMDINPARAMS InParams;
int nDrive =0;
btIDCmd = (gvopVersionParamsbIDEDeviceMap >> nDrive & 0x10) IDE_ATAPI_IDENTIFY : IDE_ATA_IDENTIFY;
// 输出参数
BYTE btIDOutCmd[sizeof(SENDCMDOUTPARAMS) + IDENTIFY_BUFFER_SIZE - 1];
if(DoIdentify(hFile,
&InParams,
(PSENDCMDOUTPARAMS)btIDOutCmd,
(BYTE)btIDCmd,
(BYTE)nDrive, &dwBytesReturned) == FALSE) return -3;
::CloseHandle(hFile);
DWORD dwDiskData[256]; USHORT pIDSector; // 对应结构IDSECTOR,见头文件
pIDSector = (USHORT)((SENDCMDOUTPARAMS)btIDOutCmd)->bBuffer; for(int i=0; i < 256; i++) dwDiskData[i] = pIDSector[i];
// 取系列号
ZeroMemory(szSerialNumber, sizeof(szSerialNumber));
strcpy(szSerialNumber, ConvertToString(dwDiskData, 10, 19));
// 取模型号
ZeroMemory(szModelNumber, sizeof(szModelNumber));
strcpy(szModelNumber, ConvertToString(dwDiskData, 27, 46));
return 0;}
更改本地磁盘的名称方法如下:
1打开桌面图标我的电脑(或者计算机)。
2在d出的窗口,看到本地磁盘的标志,右击图标,选择重命名,然后输入想更改的名称。
3 最后再单击任意一处即可保存更改。
本地磁盘(Local disk)是指安装于同一台计算机主板上,不可随意插拔、移动的磁盘(硬盘),一般包括计算机 *** 作系统所在分区及其他分区。
在Matlab中,可以使用函数diskinfo来查看磁盘的信息,通过该函数可以查看磁盘的颗粒大小、磁盘类型、字节顺序等信息。例如:
disksize = diskinfo('C:\');
disksizeBytesPerSector %查看颗粒大小
JS是没有对应的命令来直接获取这些信息的。
1、如果需要使用JS获取这些信息,可以通过JS释放一个VB文件,通过该脚本间接获取这些信息,不需要直接提取。
2、VB语言中的一些函数可以用于获取这些信息,并储存在特定的地方;JS自带的XML>
3、JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
4、JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种 *** 作。
以上就是关于怎么通过程序获取磁盘指定扇区的数据全部的内容,包括:怎么通过程序获取磁盘指定扇区的数据、VC如何得到磁盘的剩余空间、C++如何获取硬盘的ID求代码!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)