获取硬盘总容量,柱面数,磁道数,扇区数
生活随笔
收集整理的這篇文章主要介紹了
获取硬盘总容量,柱面数,磁道数,扇区数
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?下面的代碼來(lái)自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); // 扇區(qū)/磁道printf("Bytes per sector = %ld\n", (ULONG) pdg.BytesPerSector); // Bytes/扇區(qū)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); }
運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的获取硬盘总容量,柱面数,磁道数,扇区数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机打印服务总是自动关闭,win10系
- 下一篇: RTP/RTCP/RTSP