获取硬盘总容量,柱面数,磁道数,扇区数

news/2024/11/22 20:23:26/

 下面的代码来自MSDN

#include <stdio.h>
#include <windows.h>
#include <winioctl.h>BOOL GetDriveGeometry(DISK_GEOMETRY *pdg)
{HANDLE hDevice;               // handle to the drive to be examined BOOL bResult;                 // results flagDWORD junk;                   // discard resultshDevice = CreateFile("\\\\.\\PhysicalDrive0", // drive to open0,       // don't need any access to the driveFILE_SHARE_READ | FILE_SHARE_WRITE,  // share modeNULL,    // default security attributesOPEN_EXISTING,  // disposition0,       // file attributesNULL);   // don't copy any file's attributesif (hDevice == INVALID_HANDLE_VALUE) // we can't open the drive{return (FALSE);}bResult = DeviceIoControl(hDevice,  // device we are queryingIOCTL_DISK_GET_DRIVE_GEOMETRY,  // operation to performNULL, 0,						// no input buffer, so pass zeropdg, sizeof(*pdg),				// output buffer&junk,							// discard count of bytes returned(LPOVERLAPPED) NULL);			// synchronous I/OCloseHandle(hDevice);				// we're done with the handlereturn (bResult);
}int main(int argc, char *argv[])
{DISK_GEOMETRY pdg;					// disk drive geometry structureBOOL bResult;						// generic results flagULONGLONG DiskSize;					// size of the drive, in bytesbResult = GetDriveGeometry (&pdg);if (bResult) {printf("Cylinders = %I64d\n", pdg.Cylinders);							// 柱面printf("Tracks per cylinder = %ld\n", (ULONG) pdg.TracksPerCylinder);	// 磁道/柱面printf("Sectors per track = %ld\n", (ULONG) pdg.SectorsPerTrack);		// 扇区/磁道printf("Bytes per sector = %ld\n", (ULONG) pdg.BytesPerSector);			// Bytes/扇区DiskSize = pdg.Cylinders.QuadPart * (ULONG)pdg.TracksPerCylinder * (ULONG)pdg.SectorsPerTrack * (ULONG)pdg.BytesPerSector;printf("Disk size = %I64d (Bytes) = %I64d (MB)\n", DiskSize, DiskSize / (1024 * 1024));}else {printf ("Attempt to get drive geometry failed. Error %ld.\n", GetLastError ());}return ((int)bResult);
}


运行结果:

Cylinders = 60801
Tracks per cylinder = 255
Sectors per track = 63
Bytes per sector = 512
Disk size = 500105249280 (Bytes) = 476937 (MB)
Press any key to continue

http://www.ppmy.cn/news/869994.html

相关文章

不同磁道上扇区的长度不一样,为什么容量还一样

看鸟哥私房菜&#xff0c;这个问题不明白&#xff0c;百度了一下&#xff0c;找到如下文章&#xff0c;释然。 http://blog.csdn.net/badbad_boy/article/details/4313645 老硬盘内外圈的磁道长度不一样&#xff0c;但是所有磁道转动的角速度是一样的&#xff0c;单位时间转过…

问题排除——SVPWM模块为什么会出现扇区判断错误?

最近有小伙伴问我&#xff0c;在输入给定速度为0的时候&#xff0c;为什么SVPWM总会报如下的错误&#xff1f; 翻译过来的意思就是控制输入的端口值7不在1和6之间&#xff0c; 为了抑制这个错误&#xff0c;你可以将设置窗口中的报错选项改成None。但是虽然是可以改设置窗口让他…

逻辑扇区和物理扇区

1. 磁盘 磁盘&#xff08;disk&#xff09;是指利用磁记录技术存储数据的存储器。磁盘是计算机主要的存储介质&#xff0c;可以存储大量的二进制数据&#xff0c;并且断电后也能保持数据不丢失。如下图&#xff0c;磁盘是由圆形盘片再加上机械臂磁头构成。 1.1. 扇区 磁盘一…

ic卡扇区解读

介绍 每张IC卡都有16个扇区&#xff0c;包括1个公共区和15个数据区。每个扇区有4个块&#xff0c;每个块占16字节。 第0扇区的块0为厂商代码&#xff0c;已经固化。包括芯片序列号UID&#xff0c;ATQA和SAK 每个扇区的块3为控制块&#xff0c;用来存放密码和控制权限 &#x…

lotus 扇区一致性检测 删除错误扇区

lotus 扇区一致性检测 1&#xff0c;POST提交失败2&#xff0c;检测扇区3&#xff0c;扇区188已经上链3.1 查看扇区故障 4&#xff0c;指定扇区检测 1&#xff0c;POST提交失败 ERROR storageminer storage/wdpost_run.go:101 runPost failed: running window post failed:git…

为什么磁盘分区的时候,第一个分区前面总有一段空间(63或者2048个扇区)

背景 不论是MBR分区还是GPT分区&#xff0c;第一个分区的前面总有一段空闲的空间&#xff08;除了MBR之外的空间&#xff09;&#xff0c;这段空间不属于任何分区。 这一段空间的意义 早期的操作系统对应的分区工具在分区的时候&#xff0c;其第一个分区总是63号扇区开始的&…

windows下获取柱面、扇区数,扇区大小

物理硬盘命名为\\.\PhysicalDrive0 用CreateFile打开物理硬盘&#xff0c;然后用DeviceIoControl的参数IOCTL_DISK_GET_DRIVE_GEOMETRY&#xff0c;代码如下 #include <windows.h> #include <stdio.h> #include <winioctl.h>#define wszDrive L"\\\\.\…

OS | 磁盘地址结构 、柱面号 盘面号 扇区号的计算

一、前情回顾 1、磁盘读写时间 问题&#xff1a; 2、减少延迟时间的方法&#xff1a;交替编号 3、磁盘地址结构的设计 书里推荐的这种物理地址结构&#xff0c;也就是柱面号放在盘面号之前会发生什么情况呢&#xff1f; 为什么磁盘的物理地址是&#xff08;柱面号&#xff0c;盘…