获得自己电脑硬盘的分区信息,代码如下:
int DiskIndex=m_ComboUsbDrive.GetCurSel();
CString DiskFileName;
DiskFileName.Format(L"\\\\.\\PhysicalDrive%d",DiskIndex);
//AfxMessageBox(DiskFileName); HANDLE hDisk=::CreateFile(DiskFileName,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
if (hDisk==INVALID_HANDLE_VALUE)
{
AfxMessageBox(L"打开磁盘驱动器失败:"+GetLastError());
return;
}
//获取分区信息
DWORD DiskBytesRead=0;
DWORD DiskBufferSize=sizeof(DRIVE_LAYOUT_INFORMATION_EX)+sizeof(PARTITION_INFORMATION_EX)*104;
PDRIVE_LAYOUT_INFORMATION pDiskPartInfo=(PDRIVE_LAYOUT_INFORMATION_EX)malloc(DiskBufferSize);
//DRIVE_LAYOUT_INFORMATION_EX DiskPartInfo[20];
//DWORD DiskBufferSize=sizeof(DRIVE_LAYOUT_INFORMATION_EX)*20;
memset(pDiskPartInfo,0,DiskBufferSize);//清空缓冲区
if (pDiskPartInfo==NULL)
{
AfxMessageBox(L"缓冲区分配出错:"+GetLastError());
return;
}
BOOL ret=::DeviceIoControl(hDisk,IOCTL_DISK_GET_DRIVE_LAYOUT_EX,
NULL,NULL,
(LPVOID)pDiskPartInfo,
DiskBufferSize,
&DiskBytesRead,
NULL);
DWORD temp;
if (!ret)
{
temp=GetLastError();
}最后这个pDiskPartInfo这个变量里面应该保存了硬盘的分区信息,
debug的情况如下:这个PartitionStyle的值为0,按照MSDN的说法,为0的话是磁盘分区不可用,这个是我笔记本的硬盘,分了3个区,怎么回事,下面的PartitionCount的值也不对,有了解的么?谢了
磁盘disklayout
int DiskIndex=m_ComboUsbDrive.GetCurSel();
CString DiskFileName;
DiskFileName.Format(L"\\\\.\\PhysicalDrive%d",DiskIndex);
//AfxMessageBox(DiskFileName); HANDLE hDisk=::CreateFile(DiskFileName,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
if (hDisk==INVALID_HANDLE_VALUE)
{
AfxMessageBox(L"打开磁盘驱动器失败:"+GetLastError());
return;
}
//获取分区信息
DWORD DiskBytesRead=0;
DWORD DiskBufferSize=sizeof(DRIVE_LAYOUT_INFORMATION_EX)+sizeof(PARTITION_INFORMATION_EX)*104;
PDRIVE_LAYOUT_INFORMATION pDiskPartInfo=(PDRIVE_LAYOUT_INFORMATION_EX)malloc(DiskBufferSize);
//DRIVE_LAYOUT_INFORMATION_EX DiskPartInfo[20];
//DWORD DiskBufferSize=sizeof(DRIVE_LAYOUT_INFORMATION_EX)*20;
memset(pDiskPartInfo,0,DiskBufferSize);//清空缓冲区
if (pDiskPartInfo==NULL)
{
AfxMessageBox(L"缓冲区分配出错:"+GetLastError());
return;
}
BOOL ret=::DeviceIoControl(hDisk,IOCTL_DISK_GET_DRIVE_LAYOUT_EX,
NULL,NULL,
(LPVOID)pDiskPartInfo,
DiskBufferSize,
&DiskBytesRead,
NULL);
DWORD temp;
if (!ret)
{
temp=GetLastError();
}最后这个pDiskPartInfo这个变量里面应该保存了硬盘的分区信息,
debug的情况如下:这个PartitionStyle的值为0,按照MSDN的说法,为0的话是磁盘分区不可用,这个是我笔记本的硬盘,分了3个区,怎么回事,下面的PartitionCount的值也不对,有了解的么?谢了
磁盘disklayout
解决方案 »
- 请问下如何得到图片控件中的图像pixel,实现反转或辉度功能
- 高分求救,cformview 中添加ocx控件异常
- Windows下"system idle process"内存使用的一个想法
- 生僻问题,如何在Windows任务栏中添加工具栏,达到如下效果
- 在Oracal和SQL sever2000中存储图片之类的二进制文件性能如何?
- 函数名后的const是什么意思?
- 请问大虾,vc的程序的入口是什么。能否详细一点讲解,或者提供一个相关网址
- 我想学习isapi,有这方面的好书或资料吗?
- 怎么样注册系统热键,使这个热键能够打开和关闭全拼输入法。
- 那位仁兄有ICON的文件格式,可否mail一份给我?([email protected])
- 新手求推荐的书看看,谢谢。
- 请教一个directshow IMediaDet获取视频帧的问题
这句代码有错哦!
而且,PartitionStyle为0也不是不可用哦,原话:
PartitionCount值原文:
PDRIVE_LAYOUT_INFORMATION pDiskPartInfo
=(PDRIVE_LAYOUT_INFORMATION_EX)malloc(DiskBufferSize);到底是PDRIVE_LAYOUT_INFORMATION pDiskPartInfo还是PDRIVE_LAYOUT_INFORMATION_EX pDiskPartInfo能否仔细点儿?
1.PartitionCount倒是是不是表示整个硬盘的分区数目,在我这这个数字一直是4。
2.在PartitionEntry里面的PartitionStyle一直是PARTITION_STYTL_MBR,这个值是代表这个分区可以引导的意思么?不好意思,麻烦你了,对这个API不是很熟悉
2.PARTITION_STYTL_MBR表示主启动分区。
我只能这么解释,MSDN说的也不明白。
我电脑上刚好4个分区,测试出来的PartitionCount刚好是4。
你可以打开windows的磁盘管理来对照看看测试结果。