永发信息网

C++如何用windowsAPI读取分区表

答案:2  悬赏:20  手机版
解决时间 2021-01-26 15:29
  • 提问者网友:贪了杯
  • 2021-01-25 19:46
要读取硬盘的分区信息,包括每个分区的大小,起始扇区和盘符以及使用情况,改怎么做?
我试过createfile然后直接物理读取的方法,但是读取出来的每个分区无法和实际的盘符分配情况一一对应,所以想问问有没有什么windowsapi可以使用?
刚发现使用IOCTL_DISK_GET_DRIVE_LAYOUT_EX这个控制码似乎可以进行deviceioctl后获得,但是我写了段测试代码无效,返回PartitionCount为一个很大的数,代码如下
#include
#include
#include
#include
using namespace std;

int main()
{
DWORD junk;
DRIVE_LAYOUT_INFORMATION_EX pt;
HANDLE hDevice = CreateFileA("\\\\.\\PHYSICALDRIVE0",
GENERIC_READ,
FILE_SHARE_READ,// |
// FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
if(hDevice==INVALID_HANDLE_VALUE)
{
printf("error,no such device!");
exit(0);
}
//DeviceIoControl(hFile,IOCTL_DISK_GET_DRIVE_LAYOUT,.....);
BOOL bResult = DeviceIoControl(hDevice, // device to be queried
IOCTL_DISK_GET_DRIVE_LAYOUT_EX, // operation to perform
NULL, 0, // no input buffer
&pt, sizeof(pt), // output buffer
&junk, // # bytes returned
(LPOVERLAPPED) NULL); // synchronous I/O
cout< system("PAUSE");
}

拜托,我的代码是有错的,那个叫孙冰男的,你原原本本复制一遍干嘛
最佳答案
  • 五星知识达人网友:酒醒三更
  • 2021-01-25 20:30
#include
#include
#include
#include
using namespace std;

int main()
{
DWORD junk;
DRIVE_LAYOUT_INFORMATION_EX pt;
HANDLE hDevice = CreateFileA("\\\\.\\PHYSICALDRIVE0",
GENERIC_READ,
FILE_SHARE_READ,// |
// FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
if(hDevice==INVALID_HANDLE_VALUE)
{
printf("error,no such device!");
exit(0);
}
//DeviceIoControl(hFile,IOCTL_DISK_GET_DRIVE_LAYOUT,.....);
BOOL bResult = DeviceIoControl(hDevice, // device to be queried
IOCTL_DISK_GET_DRIVE_LAYOUT_EX, // operation to perform
NULL, 0, // no input buffer
&pt, sizeof(pt), // output buffer
&junk, // # bytes returned
(LPOVERLAPPED) NULL); // synchronous I/O
cout< system("PAUSE");
}
全部回答
  • 1楼网友:天凉才是好个秋
  • 2021-01-25 21:38
虽然我很聪明,但这么说真的难到我了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯